パッケージをビルドするために、ubuntuでchroot- "virtual"を上げる

ご挨拶。

先日、パッケージを作成するために別のマシンにsshするのにうんざりしていて、家でカップルを迎えに行くことにしました。 道路で集めた熊手と私が作った松葉杖についてお話します。

すべてのアクションはArch Linuxで実行されましたが、chroot仮想マシンとschrootのセットアップ手順は非常に似ているはずです。

以下で説明するものはすべて、もちろんネットワーク全体に散在しています。 しかし、途中で多くの試行錯誤があります。

ブートストラップ


だから、それはすべて始まります、1つはコニーと言うかもしれません、 この記事にはブートストラッププロセスの説明があります
私自身のために、正確で信頼できる2つの仮想マシンを配置しました。
yaourt -S --nocnofirm --asdeps ubuntu-keyring gnupg1 #  ,   yaourt -S --nocnofirm debootstrap schroot for distr in trusty precise do sudo debootstrap --include=vim,language-pack-ru,language-pack-ru-base,devscripts,subversion,git --arch amd64 $distr /home/ubuntu_$distr http://mirror.yandex.ru/ubuntu/ done 


しばらくして、バッグが到着したとき

未構成の並べ替え、未構成のロケール、タイムゾーン...色の全範囲があります。
並べ替えを設定します。
 for distr in trusty precise do sudo sh -c "cat > /home/ubuntu_$distr/etc/apt/sources.list <<EOF deb http://mirror.yandex.ru/ubuntu $distr main restricted universe multiverse deb http://mirror.yandex.ru/ubuntu $distr-updates main restricted universe multiverse deb http://mirror.yandex.ru/ubuntu $distr-security main restricted universe multiverse EOF" done 

ロケールとタイムゾーンに少し後で戻ります。

次の熊手...

脚の付け根レベルで慎重に提出:schroot構成
要するに、このことにより、スーパーユーザー権限のないディレクトリにchrootを作成し、構成で指定されたものを(予約付きで)自動的にマウントして子OSにコピーすることができます。 私のサンプル構成/etc/schroot/chroot.d/ubuntu.conf
 [ubuntu-trusty] description=Ubuntu 14.04 type=directory directory=/home/ubuntu_trusty users=clown,monkey,mrsam root-users=clown aliases=trusty,default profile=ubuntu [ubuntu-precise] description=Ubuntu 12.04 type=directory directory=/home/ubuntu_precise users=clown,monkey,mrsam root-users=clown aliases=precise profile=ubuntu 

man schroot.confで注意すべきこと:「プレーンおよびディレクトリchroots」アイテム(長い間ひざを撃ちました。
「type = directory」を選択すると、ファイルから自動マウントが実行されます($プロファイル-configのパラメーター「profile = ubuntu」)/ etc / schroot / $ profile / fstab、/ etc / schroot / $ profile / copyfilesのすべてのファイルがコピーされます、また/ etc / schroot / $ profile / nssdatabasesからすべての「データベース」を更新します。 ランチャーのこの状況について不満を言いました。
デフォルトでは、「profile = default」、および/ etc / schroot / default / nssdatabasesにはこれらの行が含まれます
 # System databases to copy into the chroot from the host system. # # <database name> passwd shadow group gshadow services protocols networks hosts 

このたび、このろくでなしはグループとユーザーをこすりました。これはcrontabグループを必要とするvimでさえchrootにインストールしようとする試みに非常に悪い影響を及ぼしました。 また、networks項目はネットワークを殺します (私のディストリビューションでは、特に親OSもubuntuである場合、それがどこにでもあるということは決してありません)。
念のため、私のファイル/ etc / schroot / ubuntu / *
 $ cat copyfiles # Files to copy into the chroot from the host system. # # <source and destination> /etc/resolv.conf $ cat fstab # fstab: static file system information for chroots. # Note that the mount point will be prefixed by the chroot path # (CHROOT_PATH) # # <file system> <mount point> <type> <options> <dump> <pass> /proc /proc none rw,bind 0 0 /sys /sys none rw,bind 0 0 /dev /dev none rw,bind 0 0 /dev/pts /dev/pts none rw,bind 0 0 /home /home none rw,bind 0 0 /tmp /tmp none rw,bind 0 0 # It may be desirable to have access to /run, especially if you wish # to run additional services in the chroot. However, note that this # may potentially cause undesirable behaviour on upgrades, such as # killing services on the host. #/run /run none rw,bind 0 0 #/run/lock /run/lock none rw,bind 0 0 #/dev/shm /dev/shm none rw,bind 0 0 #/run/shm /run/shm none rw,bind 0 0 $ cat nssdatabases # System databases to copy into the chroot from the host system. # # <database name> protocols hosts 


ちょっとしたトリック


どこでも同じエンコーディングを使用するには、以下を行う必要があります。
 for distr in trusty precise do sudo cp /etc/locale.gen /home/ubuntu_$distr/var/lib/locales/supported.d/local #  etc  home   ,  ln -f done 


常に同じ形式で保持したいいくつかの構成ファイルを相互リンクすることができます。例えば:
 sudo ln -f /home/ubuntu_trusty/etc/bash.bashrc /home/ubuntu_precise/etc/bash.bashrc 

また、パッケージを更新する際の問題を回避するために、 一部のパッケージがこれ行うことを禁止する必要があります
 apt-mark hold initscripts udev plymouth mountall 

はい、chrootのそれぞれで...

最後に、エンコーディングとtzdataを再生成します。
 sudo locale-gen sudo dpkg-reconfigure tzdata 


ご清聴ありがとうございました。 これにより、アセンブリの環境を整えるのにかかる時間が短縮されることを願っています。

Source: https://habr.com/ru/post/J244373/


All Articles