2019年7月1日 星期一

Gentoo Cross Build Package

方法,以下file system為arm板子用的file system
  1. 在host PC Gentoo,用emerge cross build package再安裝到file system
  2. 先用方法1安裝arm模擬器,進到file system直接emerge package
  3. 在arm板子直接用emerge安裝package
  4. 先用方法1或2安裝dpkg到file system,再進入file system或者在arm板子用apt指令下載package 
  5. arm板子連到指定binary server下載package

參考來源:

方法1.

在host PC Gentoo,用emerge cross build package再安裝到file system
#build 最新版的binary
armv7a-hardfloat-linux-gnueabihf-emerge --buildpkg --oneshot <package_name>
 
 
#build特定版本的binary,請到以下路徑查你目前擁有的版本ebuild檔案
#/usr/portage/<package_dir>/<package_name_version>.ebuild
armv7a-hardfloat-linux-gnueabihf-emerge --buildpkg --oneshot =<package_name_version>
#前面如果加 USE=xxxxx , 是用來啟動package特定的功能選項 , 可以到package網站查詢flag
USE=autoipd armv7a-hardfloat-linux-gnueabihf-emerge --buildpkg --oneshot net-dns/avahi
 
 
#安裝package到file system
#進到arm file system
cd /home/bbb/deploy
ROOT=$PWD/ armv7a-hardfloat-linux-gnueabihf-emerge --usepkgonly --oneshot <package_name>
優點:
方便管理binary
缺點:
某些package目前我build不過,因為一些link沒有連到正確的arm所需的位置,尤其跟python有關的套件,目前找不到解法,所以用方法2

方法2.

先用方法1安裝arm模擬器,進到file system直接emerge package
#先用方法1在host與file system安裝qemu (arm模擬器)
#install qemu host side
emerge --ask app-emulation/qemu
#build qemu arm package
QEMU_USER_TARGETS="arm" QEMU_SOFTMMU_TARGETS="arm" USE="static-user static-libs" emerge --ask --buildpkg --oneshot qemu
#install qemu arm filesystem side
cd /home/bbb/deploy && ROOT=$PWD/ emerge --ask --usepkgonly --oneshot --nodeps qemu
 
 
#啟動qemu
/etc/init.d/qemu-binfmt start
#mount特定資料夾
cd /home/bbb/deploy
mkdir -p usr/portage
mount --bind /usr/portage usr/portage
mount --bind /proc proc
mount --bind /sys sys
#chroot 進入filesystem
chroot . /bin/bash --login
 
 
#安裝package
emerge <package_name>
#安裝特定版本,請到以下路徑查你目前擁有的版本ebuild檔案
#/usr/portage/<package_dir>/<package_name_version>.ebuild
emerge =<package_name_version>
#官方最新版的ebuild檔案可以用一下指令下載 , 然後解壓縮到/usr路徑下
wget http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2
 
 
#離開filesystem
exit
umount usr/portage
umount sys
umount proc
優點:
目前這樣安裝package沒有失敗過
缺點:
binary不好管理,變成直接管理整個filesystem
filesystem內會有多餘的tmp檔案

方法3.

在arm板子直接用emerge安裝package
這個方法目前認為可行,但是失敗 (我認為問題是有些參數要設置 , 但我目前不會設置)

優點:
缺點:
arm CPU較慢,增加費時
binary不好管理,變成直接管理整個filesystem
filesystem內會有多餘的tmp檔案

方法4.

先用方法1或2安裝dpkg到file system,再進入file system或者在arm板子用apt指令下載package
Gentoo有提供dpkg的安裝包,可以使用指令安裝debian的package
這個方法我目前只是認為可行,但未嘗試
先用方法1或2安裝app-arch/dkpg 到file system 
接著進入file system或用arm板子使用dpkg 指令下載debian的package

優點:
缺點:
package之間的相依性不保證正常
package安裝路徑不一定正確 (gentoo的路徑跟debian系列不同)

方法5.

arm板子連到指定binary server下載package
在arm上設定server的連結,然後emerge下載binary 直接安裝
我主要是想解決每次新增package就要重新搬移micro sd卡的問題 ..(ESXI又不能讀取micro SD卡,等於我local還要準備一台linux電腦去搬SD卡)
想自己用方法1 build成功後,開啟一個http server,讓arm板子直接透過網路下載安裝package
目前arm端下載失敗..(還要爬個文研究)

優點:
網路直接更新少量的package節省copy sd卡的時間
缺點:
沒有公共的server提供arm的package

沒有留言:

張貼留言

NoSQL Redis intro

Redis是一個使用ANSI C編寫的開源、支援網路、基於記憶體、可選永續性的鍵值對儲存資料庫。 支援rdb 及aof 兩種儲存方式 From  https://zh.wikipedia.org/wiki/Redis Redis 目前擁有兩種資料...