Ssh
通過 SSH 解除安裝編譯?
我有一台執行 Gentoo 的 Chromebook。當我嘗試編譯任何東西時,CPU 使用率飆升至 100%,溫度升高約 10 攝氏度,電池使用率飆升 (4.XW -> 10 W),這是一個緩慢的過程。但我也有一台 Arch Linux 電腦正在執行,我可以通過 SSH 連接到它。它們都是 x86_64 CPU。有什麼方法可以通過 SSH 將東西(Linux 核心、日常軟體包等)的編譯解除安裝到 Arch Linux 機器上?我以前沒有做過這樣的事情。可能需要交叉編譯嗎?
不,您不必交叉編譯(如果您針對其他架構,這將是必要的。)我可以想到有兩種方法可以設置您的系統來執行此操作:
- 您不能使用or
CFLAGS
,因為遠端電腦將使用其“本機”CPU 的概念,而不是本地電腦的。如果您使用的是“本機”,請通過執行找出要使用的標誌:/etc/portage/make.conf
march=native``mtune=native
$ gcc -v -E -x c -march=native -mtune=native - < /dev/null 2>&1 | grep cc1 | perl -pe 's/^.* - //g;'
兩台電腦都需要相同的編譯器和 binutils 版本。 兩台電腦都需要`distcc`安裝、配置和執行。 2. 在您的 Arch 系統上使用`chroot`帶有 Chromebook 文件系統副本的環境(將其視為您正在安裝 Gentoo,因此`resolv.conf`請從您的 Arch 安裝中複製,並根據[Gentoo 安裝手冊](https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base)在其中安裝適當的文件系統,請記住警告`/dev/shm`Arch 的版本是否是符號連結。)它需要盡可能接近您的 Chromebook 環境,否則您最終會得到可能不正確的二進製文件;如果你做一個副本,你將不得不重建更少的包。在這個環境裡面: 添加`FEATURES="buildpkg"`到`/etc/portage/make.conf`. 然後生成的包將位於`/usr/portage/packages`. 您也可以通過這種方式編譯核心,只需將生成的核心和相應`/lib/modules`的目錄複製到 Chromebook 即可。(請記住,這些目錄位置是相對於 chroot 的!) wiki 建議使用 NFS 掛載或其他伺服器,這樣您就不必手動複製文件:這可以在 Arch 系統上正確設置。`rsyncd`我喜歡為此目的進行設置,但使用您喜歡的任何方法進行文件訪問。在您的 Chromebook 上: 如果您想阻止它在本地編譯,請確保添加`FEATURES="getbinpkg"`到。`/etc/portage/make.conf` 如果您使用遠端文件訪問,請添加`PORTAGE_BINHOST="protocol://path/to/your/chroot/usr/portage/packages"`到`/etc/portage/make.conf`.有關更多資訊,請參閱[Gentoo wiki 中的二進制包指南。](https://wiki.gentoo.org/wiki/Binary_package_guide) 這兩種方法我過去都做過,而且效果都很好。我對這兩種方法的觀察: 1. `distcc`即使您在雙方都有相同的設置,也很難開始工作。保持`gcc`和`binutils`版本相同將是您最大的挑戰。然而,一旦你開始使用它,它就會非常快,如果你有足夠快的額外電腦,你可以添加它們。 2. `chroot`環境不那麼挑剔,但是如果您對 portage 環境的任何部分(、標誌、遮罩、配置文件等)進行更改,您`CFLAGS`必須`USE`確保雙方保持一致,否則您最終可能會得到包含錯誤的依賴關係。Gentoo 非常擅長確保 USE 標誌匹配,但它不跟踪二進制包中的編譯器選項。一個優點是您不受 Chromebook 上用於編譯的(缺少)磁碟空間和記憶體的限制。 如果您要使用該`chroot`方法,我會製作一個腳本來完成設置它所需的所有無趣工作(替換`/mnt/gentoo`為您的 chroot 位置):
cp -L /etc/resolv.conf /mnt/gentoo/etc mount -t proc proc /mnt/gentoo/proc mount –rbind /sys /mnt/gentoo/sys mount –make-rslave /mnt/gentoo/sys mount –rbind /dev /mnt/gentoo/dev mount –make-rslave /mnt/gentoo/dev chroot /mnt/gentoo /bin/bash umount -R /mnt/gentoo/dev umount -R /mnt/gentoo/sys umount /mnt/gentoo/proc