前回に続き、今回は schroot を使って、ssh server や cron service を動かしていきます。
ssh でログインすることで、隔離されたサーバ環境で作業しているような状況をつくれます。
前回の記事:
schroot 環境構築(前回と同じ)
インストール
# apt install schroot debootstrap
Debian bullseye の root filesystem を取得
# mkdir -p /srv/chroot/bullseye
# debootstrap bullseye /srv/chroot/bullseye
schroot 設定ファイルの編集
filename: /etc/schroot/schroot.conf
[bullseye]
type=directory
description=Debian bullseye
directory=/srv/chroot/bullseye
ホスト側に ssh server インストール
openssh-server をインストールすると sshd ユーザが追加されますが、session をつくりなおすたびに、ホストの /etc/passwd が上書きコピーされて sshd ユーザが消えてしまうため、ホスト側にも openssh-server をインストールしておきます。
# apt install openssh-server
なお、/etc/schroot/default/nssdatabases を修正すれば、/etc/passwd がコピーされないようにすることもできます。
schroot 側に ssh server をインストールして動作確認
schroot 側にも ssh server をインストールして、動作確認を行っていきます。
# schroot -c bullseye
(bullseye)root@ubuntu:~# apt update
(bullseye)root@ubuntu:~# apt install -y openssh-server
port はホスト側とかぶらないように、10022 に変更します。
filename: /etc/ssh/sshd_config
(bullseye)root@ubuntu:/etc/ssh# diff -u sshd_config.orig sshd_config
--- sshd_config.orig 2024-12-31 08:17:43.630675897 +0000
+++ sshd_config 2024-12-31 08:17:53.690792311 +0000
@@ -12,7 +12,7 @@
Include /etc/ssh/sshd_config.d/*.conf
-#Port 22
+Port 10022
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
ssh ログイン用のユーザを追加します。(optional)
# adduser test1
ssh server を起動します。
このとき、schroot のコンソールを抜けないようにします。
background session 化していないため、コンソールを抜けると ssh server のプロセスが終了しまうため。
# schroot -c bullseye
(bullseye)root@ubuntu:~# /etc/init.d/ssh start
Starting OpenBSD Secure Shell server: sshd.
10022 番ポートが開いていれば、サービス起動成功です。
# ss -natpu | grep 10022
tcp LISTEN 0 128 0.0.0.0:10022 0.0.0.0:* users:(("sshd",pid=141367,fd=3))
tcp LISTEN 0 128 [::]:10022 [::]:* users:(("sshd",pid=141367,fd=4))
ホスト側から ssh でログインします。
$ ssh localhost -p 10022 -l test1
test1@localhost's password:
Linux ubuntu 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jan 1 14:10:56 2025 from 127.0.0.1
(bullseye)test1@ubuntu:~$
これで、automatic session で ssh server 起動の確認ができました。
schroot の backgroud session 構築
続いて、ssh server を background session として動作させていきます。
(ここでは automatic session ではないものを、便宜的に background session と呼んでいます。)
最初に bullseye-session という名前で session を開始します。
-b で session 開始を指示し、-n で session name を指定します。
# schroot -c bullseye -b -n bullseye-session
session を作成した後は、-c で session name を指定し、-r で ssh server を起動します。
# schroot -c bullseye-session -r -- /etc/init.d/ssh start
Starting OpenBSD Secure Shell server: sshd.
これで、ssh server の backgroud session 起動完了です。
再起動後も bullseye-session は残り、startup 時に session の bind mount や file copy が行われます。
一方で、ssh server プロセスは、自動では開始されないため、ここは systemd に startup 登録するなど、ひと工夫必要です。
session を破棄する場合は、-e で終了します。
# schroot -c bullseye-session -e
cron の開始
bullseye-session で cron service を開始します。
# schroot -c bullseye-session -r -- /etc/init.d/cron start
pstree -aps
で確認すると、ホスト側の systemd –user 配下にぶらさがる形でプロセスが作成されていました。
# cat /run/schroot/mount/bullseye-session/run/crond.pid
4352
# pstree -aps 4352
systemd,1 splash
└─systemd,1490 --user
└─cron,4352
動作確認
1分間隔で適当なテキストを書き込むタスクを登録して動作確認します。
# schroot -c bullseye
# crontab -e
*/1 * * * * date >> /root/log.txt
少しして、ログが書き込まれていたら、cron 動作確認完了です。
(bullseye)root@ubuntu:~# cat log.txt
Thu Jan 2 05:34:01 UTC 2025
Thu Jan 2 05:35:01 UTC 2025
Thu Jan 2 05:36:01 UTC 2025
ホストの /etc/passwd が schroot 環境側にコピーされるため、ホスト側にユーザを追加しています。