
私は独自のPOSIXクライアントを使用してネットワークディレクトリをマウントしています。ベンダーが提供するパッケージが不都合なので(インストール後にこれが起こりますかln -sf /usr/bin/fusermount
?!)、LXCコンテナに分離しようとしています。コンテナが実行中で、インストールが正常に動作します。
これで、ホストコンピュータで利用可能なコンテナのインストールを作成する必要があります。
ホストからコンテナとしてsshfsを使用してこれを実行できることを知っていますが、これは複雑すぎるようです。 SSHを使用せずにこのインストールを可能にすることができれば良いでしょう。
どんな提案がありますか?
答え1
使用を検討してください名前空間時には、次のことが含まれることがあります。その他のマウントそして、mount名前空間に入ると、すべてのコマンドはもはやホストコマンドではありません。マウントネームスペース他人ほど扱いにくい。代わりに、次から直接アクセスできます。/proc
:
/proc/[pid]/root
UNIXとLinuxは、chroot(2)システムコールで設定されたファイルシステムのプロセス固有のルート概念をサポートします。このファイルはプロセスのルートディレクトリを指すシンボリックリンクであり、exeとfd / *と同じように動作します。しかし、参考にしてくださいファイルは単純なシンボリックリンク以上です。これは、プロセス自体(名前空間とプロセス固有のマウントセットを含む)と同じファイルシステムビューを提供します。
以下はマウントネームスペースの例です。
したがって、コンテナに属するプロセス(より正確にはマウントネームスペースコンポーネント)を調べる必要があります。名前のある人の場合コンテナ、LXCはコンテナ(より正確にはpidネームスペース)のinit(pid 1)プロセスビュー(管理ネームスペース内)を提供しますlxc-info -H -p -n container
。
PID1=$(lxc-info -H -p -n container)
CONTAINERMOUNT=/proc/$PID1/root
コンテナの実行中にこのディレクトリを使用してマウント名前空間にアクセスできます。たとえば、動的部分なしでコンテナをバックアップするには、次の手順を実行します。
cd $CONTAINERMOUNT
tar -cf /root/backup.tar --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./sys/*' .
いくつかのテストの後の3つのコメント:
- このディレクトリをバインドマウントしようとすると機能しません。
- 上記のバックアップなどのファイルにアクセスする前に、アクティビティを行わずにコンテナを停止できます。その後、
cd "$CONTAINERMOUNT"
マウントネームスペースリソースは実際には保持されません。コンテナが消えると(存在する場合でもkill -KILL $PID1
)、マウントネームスペースは消え続けます。 何する専用インストーラで動作nsfs擬似ファイルシステムコンテナを終了する前に名前空間参照をマウントします(コンテナの終了時に段階的マウント解除を有効または無効にします
lxc-stop -k -n container
)kill -KILL $PID1
。cd $CONTAINERMOUNT mkdir /root/ns touch /root/ns/mnt mount --bind /proc/$PID1/ns/mnt /root/ns/mnt lxc-stop -k -n container
コンテナのマウントネームスペースは
umount /root/ns/mnt
ディレクトリを離れてマウントネームスペースに再びアクセスできますが、nsenter --mount=/root/ns/mnt ...
コマンドはコンテナから提供されます。sleep
ここで実行できる場合は、次のように動作します。nsenter --mount=/root/ns/mnt sleep 10 & sleep 1; cd /proc/$!/root