もともとはしたかったけど私のNASで使用されているLinuxディストリビューションを完全に置き換えます。同時に、既存のシステムをできるだけ変更せずに、基本的にGentoo(またはArch)Linuxで補完する方が良いという結論に達しました。以前の質問に対する提案された回答。したがって、現在のソースシステムに対する唯一の修正には、次のスクリプトで入力した/gentoo
ディレクトリが含まれます。chroot
#!/bin/bash
set -e
cp -L /etc/resolv.conf etc/ # for internet access
cp -P /etc/localtime etc/ # to keep the timezones consistent
cp -d /etc/mtab etc/ # to check mounted systems
# cp /etc/{mdadm.conf,hosts,fstab} etc # Maybe?
mount --rbind /mnt mnt # use host's mounts
mkdir host; mount --bind / host
mount --bind /var/log var/log # or run own syslogd?
mount --bind /dev dev
mount -t devpts devpts dev/pts
mount --bind /proc proc # or mount -t procfs proc proc?
mount --bind /sys sys # or mount -t sysfs sysfs sys?
chroot . /usr/sbin/sshd -p 22222
# chroot . /bin/env -i TERM=$TERM /bin/bash
これで、ssh
ポート22222を介して単にホストに入り、デフォルトでchroot
Gentoo Linuxのように動作する環境に入ることができます/etc/init.d/rcS
。
しかし、もちろん、私はこの方法で手動で使用したいすべてのGentooサービスを起動したくありません。結局、これはOpenRC(または好むならsystemd)の利点です。だから私の主な質問は
chroot
可能な限り中断を最小限に抑えながら、ホストLinuxでGentoo Linuxを正しく「起動」するには、どのGentooコマンドを実行する必要がありますか?
可能な限り妨害を最小限に抑えることは、ファイルシステムを再マウントしようとしないことを意味します(ただし、同時にmount
Gentooが動作する場合は良いでしょう)。そのため、単に実行するのがinit
間違っている可能性があり、OpenRC設定にいくつかの変更が必要になることがあります。必要ですが、何ですか?
また、ホストデーモンの問題もあります。これを使用する必要がありますか、Gentooに独自のインスタンスを実行させる必要がありますか(ホストインスタンスを邪魔しないように設定するにはどうすればよいですか?)、それとも一歩進んでくださいcrond
。syslogd
Gentooを完全に仮想化しますか?上記のように他の質問にGentooインスタンスは独自のIPを持ち、ある程度スタンドアロンシステムのように動作することをお勧めしますが、一方でシステムリソースが制限されているので、オーバーヘッドができるだけ少ないと思います。ホストシステムは、次のデーモンとこれまでの私の考えを実行しています。
Daemon | Use Gentoo's own?
-----------------+---------------------------------------------------------------
udevd | N bind-mount /dev
klogd, k* | N using host kernel (although UML might be interesting...)
dhcpd, inetd | ? depends on using own IP or not
syslogd | ? bind-mount /var/log or use Gentoo's more versatile settings?
mdadm --monitor | ? should Gentoo bother with the RAID configuration?
smbd, nmbd | ? disable host's samba in favour of Gentoo's one? maybe with a
| maintenance-only share on the host
crond | Y to minimize interference with host's maintenance scripts
sshd | Y to directly SSH into the chrooted Gentoo system
daemonwatch | ? maybe use host instance to watch Gentoo instance?
logchkd, errormon| ? unknown
最後に、終了/再起動時に何を考慮する必要があるのか疑問に思います。単にホストの終了スクリプトをchroot /gentoo /bin/init shutdown
独自のシーケンスの前に実行させることはできますか?それともこれでGentooの電源が切れますか?今後ホストの実際の終了順序は何ですか?
答え1
chrootでサービスを実行したい場合:実際にはchrootの目的ではありません。
Gentooシステムを1か所に分離することをお勧めします。ルーストアバウトコンテナ。
新しいchrootを作成してDockerイメージを簡単に作成できます。基本イメージから:
tar --numeric-owner -cf- /gentoo | docker import - gentoo:base
それから適切なDockerイメージの構築その上にこれを書いてくださいドッカーファイル:
FROM gentoo:base
EXPOSE 22 # make SSH accessible, repeat for any port you're running a service on in this container
ENTRYPOINT ["/usr/lib/systemd/systemd"]
このコマンドを使用して、以下に基づいて適切なコンテナを構築します。ドッカーファイル(これドッカーファイルこのコマンドが実行されるディレクトリと同じディレクトリに存在し、名前を付ける必要があります。ドッカーファイル):
docker build -t gentoo:latest .
これで、次のコマンドを使用してこのコンテナを起動できます。
GENTOO_CONTAINER=$(docker run -d gentoo:base)
これで、docker inspect ${GENTOO_CONTAINER}
コンテナの詳細(IP、コンテナ内で実行されているサービスを外部に公開するために使用されるポートなど)を表示できます。
を使用すると、docker ps
現在実行中のコンテナを表示できます。
docker ps -a
現在実行中のコンテナを含む、これまで実行されていたすべてのコンテナを表示できます。
また、次の操作を行います。ドッカーチュートリアル理解するのに本当に役立ちます。ルーストアバウト基本的な。