Gentooを実行しているChromebookをハッキングしました。コンパイルしようとするとanything、CPU使用率が最大100%急上昇し、温度が約10℃上昇し、バッテリー使用率が急上昇し(4.X W-> 10 W)、プロセスが遅くなります。しかし、私はArch Linuxコンピューターも実行しており、SSH経由で接続できます。どちらもx86_64CPUです。 SSH経由でArchLinuxマシンにコンパイルされたもの(Linuxカーネル、日常のパッケージなど)をオフロードする方法はありますか?私はこれまでこのようなことをしたことがありません。クロスコンパイルが必要かもしれませんか?
いいえ、クロスコンパイルする必要はありません(別のアーキテクチャをターゲットにしている場合に必要になります)。これを行うようにシステムを設定できると私が考える方法は2つあります。
distcc
を使用します。 Gentoo および Arch wikis は、プログラムのインストールと構成の方法をうまく説明しているので、ここですべてをコピーすることはしません。簡単に言うと、それが機能するためには、以下を設定する必要があります。
/etc/portage/make.conf
のCFLAGS
はmarch=native
またはmtune=native
を使用してはいけませんリモートコンピュータのためローカルコンピュータではなく、「ネイティブ」CPUのアイデアを使用します。 「ネイティブ」を使用している場合は、使用するフラグを見つけてください 実行:
$ gcc -v -E -x c -march=native -mtune=native - < /dev/null 2>&1 | grep cc1 | Perl -pe 's/^.* - //g;'
両方のコンピューターに同じコンパイラーとbinutilsバージョンが必要です。
distcc
をインストール、構成、および実行する必要があります。Chromebookファイルシステムのコピーを使用してArchシステムでchroot
環境を使用します(これはGentooのインストールを行っているように扱うため、Archインストールからresolv.conf
をコピーし、適切なファイルシステムをマウントしますinside per Gentooインストールマニュアル 、Archのバージョンがシンボリックリンクの場合は/dev/shm
に関する警告に注意してください。)Chromebook環境にできるだけ近い必要があります。バイナリが正しくない可能性があります。コピーを行う場合は、再構築する必要のあるパッケージが少なくなります。この環境の内部:
FEATURES="buildpkg"
を/etc/portage/make.conf
に追加します。/usr/portage/packages
になります。この方法でカーネルをコンパイルし、生成されたカーネルと適切な/lib/modules
ディレクトリをChromebookにコピーすることもできます。 (これらのディレクトリの場所はchrootを基準にしていることに注意してください!)ファイルを手動でコピーする必要がないように、ウィキでは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のバイナリパッケージガイド を参照してください。
私は過去にこれらの方法の両方を実行しましたが、どちらもかなりうまく機能します。 2つの方法に関する私の観察:
distcc
は、両側で同じ設定をしている場合でも、動作させるのが面倒です。 gcc
バージョンとbinutils
バージョンを同じに保つことが最大の課題になります。ただし、いったん実行すると、かなり高速になります。十分に高速な追加のコンピューターがある場合は、それらを追加できます。
chroot
環境はそれほど厄介ではありませんが、Portage環境のいずれかの部分(CFLAGS
、USE
フラグ、マスク、プロファイルなど)に変更を加える場合は、双方の一貫性が保たれていることを確認してください。そうしないと、誤った依存関係を持つパッケージになってしまう可能性があります。 Gentooは、USEフラグが一致することを確認するのに非常に優れていますが、バイナリパッケージのコンパイラオプションを追跡しません。 1つの利点は、コンパイル用の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
受け入れられた答えに触発されましたが、コメントするには多すぎます:
chromebookで、ルートファイルシステムをシステムマウントポイント/dev
、/sys
、/run
などから分離します。
mount -o bind / /mnt/gentoo
# If neccesary
mount -o bind /boot /mnt/gentoo/boot
mount -o bind /usr /mnt/gentoo/usr
/etc/exports
:/ mnt/gentoo 192.168.0.2(rw、sync、nohide、no_root_squash)
NFS経由でエクスポートするためのカーネルサポートがあることを確認してください。そして、関連するサービスを開始します。 (nfsd
)
Arch Linuxボックスで、/etc/fstab
:
# You might need to tune mount options for performance.
192.168.0.3:/mnt/gentoo /mnt/gentoo nfs defaults 0 0
Arch側(netmount
またはnfs
)で正しいサービスが開始されていることを確認してください。リモートファイルシステムが正常にマウントされているかどうかを確認します。
ErikFから優雅に盗まれました(実行中のシステムにはすでに含まれているはずなので、resolv.conf
をコピーしないでください):
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
/etc/portage/make.conf
の設定がnative
ではなく、正しい-march
であることを確認してください。
emerge
を好みに合わせて実行すると、すべてがChromebookのrootfsに直接インストールされます。
重要な注意:私はこの答えを面白そうな可能性として追加しました。テストされていません。また、ルートファイルシステム(rw、no_root_squash)をエクスポートすると、ITセキュリティを尊重するすべての人に忍び寄ります。したがって、これは非常に信頼できるネットワークでのみ実行してください。