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

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

私はハッキングされたChromebookを持っていて、そこでGentooを実行しています。コンパイルしようとすると何もない、CPU使用量が100%に急増し、温度が摂氏10度程度上がり、バッテリー使用量が急増(4.XW -> 10W)するのが遅いプロセスです。ただし、SSH経由で接続できる実行中のArch Linuxシステムもあります。どちらもx86_64 CPUです。 SSHを使用してコンテンツ編集(Linuxカーネル、毎日のパッケージなど)をArch Linuxシステムにオフロードする方法はありますか?私は前にこのようなことをしたことがありません。たぶんクロスコンパイルが必要かもしれません。

答え1

いいえ、クロスコンパイルする必要はありません。 (他のアーキテクチャを対象とする場合は必要です。)これを行うためにシステムを設定する2つの方法を考えることができます。

  1. 使用distcc。これルート図そしてアーチスウィキプログラムをインストールして構成する方法はよく説明されているので、ここに内容全体をコピーしないでください。つまり、機能するには以下を設定する必要があります。

    • あなたCFLAGS/etc/portage/make.conf 必然ではないまたは、リモートコンピュータはローカルコンピュータで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インストール、構成、および実行する必要があります。
  2. chrootArchシステムの環境とChromebookファイルシステムのコピーを使用します(Gentooをインストールするのと同じように、resolv.confArchインストールからコピーし、それぞれに適切なファイルシステムをマウントします)。Gentooインストールマニュアル/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のバイナリパッケージングガイドより多くの情報を知りたいです。

私は以前この2つの方法をすべて試したことがあり、うまくいきました。 2つのアプローチの私の観察は次のとおりです。

  1. distcc両側に同じ設定があっても作業が難しいです。gccバージョンをbinutils同じに保つことが最大の課題になります。ただし、一度起動するとかなり高速で、十分に高速な追加のコンピュータがあれば追加できます。

  2. 環境はchrootそれほど難しくありませんが、Portage環境の一部(CFLAGSUSEフラグ、マスク、構成ファイルなど)を変更する場合は、両方が一貫していることを確認する必要があります。それ以外の場合はパッケージで終わることがあります。間違った依存関係があります。 GentooはUSEフラグが一致していることを確認することをうまく実行しますが、バイナリパッケージのコンパイラオプションを追跡しません。 1つの利点は、コンパイルのためにChromebookのディスク容量とメモリ(不足)によって制限されないことです。

そのアプローチを使用するには、chroot設定に必要なすべての面倒な作業を実行するスクリプトを作成します(/mnt/gentoochrootの場所を置き換えます)。

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

答え2

許可された回答に触発されましたが、コメントが多すぎます。

優秀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)

優秀アーチ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正しいサービスが開始されていることを確認してください。リモートファイルシステムが正常にマウントされたことを確認します。

resolv.confErikFからエレガントに盗まれました(実行中のシステムに既にあるのでコピーしないでください):

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設定が正しいことを確認してください。-marchいいえnative

emergeすぐ好きなように実行すると、すべてがChromebookのrootfsに直接インストールされます。

重要なヒント:この回答を興味深く見える可能性として追加しました。まだテストされていません。また、ルートファイルシステム(rw、no_root_squash)をエクスポートすると、ITセキュリティを尊重する人なら誰でも気味が悪くなります。したがって、非常に信頼できるネットワークでのみこれを実行してください。

関連情報