web-dev-qa-db-ja.com

SSHを介してコンパイルをオフロードしますか?

Gentooを実行しているChromebookをハッキングしました。コンパイルしようとするとanything、CPU使用率が最大100%急上昇し、温度が約10℃上昇し、バッテリー使用率が急上昇し(4.X W-> 10 W)、プロセスが遅くなります。しかし、私はArch Linuxコンピューターも実行しており、SSH経由で接続できます。どちらもx86_64CPUです。 SSH経由でArchLinuxマシンにコンパイルされたもの(Linuxカーネル、日常のパッケージなど)をオフロードする方法はありますか?私はこれまでこのようなことをしたことがありません。クロスコンパイルが必要かもしれませんか?

3
Arav K.

いいえ、クロスコンパイルする必要はありません(別のアーキテクチャをターゲットにしている場合に必要になります)。これを行うようにシステムを設定できると私が考える方法は2つあります。

  1. distccを使用します。 Gentoo および Arch wikis は、プログラムのインストールと構成の方法をうまく説明しているので、ここですべてをコピーすることはしません。簡単に言うと、それが機能するためには、以下を設定する必要があります。

    • /etc/portage/make.confCFLAGSmarch=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をインストール、構成、および実行する必要があります。
  2. 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つの方法に関する私の観察:

  1. distccは、両側で同じ設定をしている場合でも、動作させるのが面倒です。 gccバージョンとbinutilsバージョンを同じに保つことが最大の課題になります。ただし、いったん実行すると、かなり高速になります。十分に高速な追加のコンピューターがある場合は、それらを追加できます。

  2. chroot環境はそれほど厄介ではありませんが、Portage環境のいずれかの部分(CFLAGSUSEフラグ、マスク、プロファイルなど)に変更を加える場合は、双方の一貫性が保たれていることを確認してください。そうしないと、誤った依存関係を持つパッケージになってしまう可能性があります。 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
5
ErikF

受け入れられた答えに触発されましたが、コメントするには多すぎます:

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セキュリティを尊重するすべての人に忍び寄ります。したがって、これは非常に信頼できるネットワークでのみ実行してください。

0
Tim