私はDebianシステムを修理する必要があるときにschrootを使用しようとしています。複数のパーティションをマウントしてバインドする必要がないため、非常に便利です。しかし、私の期待とは異なり、schrootは私のpasswdファイルとは異なる設定ファイル(/etc
私のホームディレクトリにあります)を上書きすることにしました。奇妙なニュース)。この動作を防ぐ方法はありますか?
schroot型がdirectory
私に必要な型であるようで、使用しました。マニュアルページを確認して1つの--preserve-environment
オプションしか見つけませんでしたが、説明でchrootシステム環境を維持するのか、それとも私のユーザー環境をクリーンな状態(デフォルト)ではなくchrootセッションにコピーするのかわかりません。
ベストアンサー1
Schrootは、chrootシステムを使用可能にするために多くの作業を行います。この作品は協賛を受けて制作されましたスクリプトは/etc/schroot/setup.d/
。これらのアクションは、profile
schrootのキーとして表示されるschrootのプロファイルディレクトリにあるファイルで構成されています。ルート構成デフォルト値は次のとおりです/etc/schroot/default/
(schroot 構成では、別のファイルの場所を指定することもできます。詳細については、マニュアルを参照してください)。起動操作には以下が含まれます。
fstab
プロファイルディレクトリにあるファイルの指示に従って、一部のファイルシステムをマウントします。- ホストシステムのファイルをchrootにコピーします。コピーするファイルのリストは、
copyfiles
構成ファイルディレクトリのファイルから読み取られます。 - chrootでNSSデータベースを上書きし、ホストから読み取ります。上書きするデータベースのリストは、
nssdatabases
構成ファイルディレクトリのファイルから読み取られます。これはファイルのコピーと似ていますが、単に/etc/passwd
chrootにコピーするのではなく、NISやLDAPなどの他のソースからもエントリを検索します。
chroot内部プログラムがchroot外部プログラムと同じDNSアクセス権を持つようにデフォルトでcopyfiles
含まれています。/etc/resolv.conf
デフォルトのchroot設定は、chrootの内部と外部の両方で同じユーザーが必要であると仮定するため、を含むすべての一般的なnssdatabases
データベースが含まれ、デフォルトのpasswd
構成ファイルfstab
には。/proc
/dev
/home
chrootの何も上書きしたくない場合は、なしでschroot設定ファイルを宣言してくださいcopyfiles
。基本をマウントするがマウントしない構成ファイルをnssdatabases
使用したい場合があります。fstab
/home
より便利な schroot 構成は、人間のユーザーアカウントとそのホームディレクトリを再現しますが、システムアカウントは再現しません。システムアカウントを複製するのは残念です。これは、chrootの内部と外部に異なるアカウントが存在する可能性があるためです。たとえば、Debianとその派生製品のほとんどは、システムソフトウェアが動的に割り当てられたアカウントを使用しているため、ほとんどのシステムアカウントに対するユーザー名と数字の対応は、プログラムがインストールされている順序によって異なります。これを行うには、ファイルから削除しpasswd
てコピーする必要があるアカウントのみを追加するスクリプトを作成します。shadow
group
gshadow
nssdatabases
/etc/schroot/setup.d/20appendaccounts
実際のユーザー範囲内のアカウントのみをコピーするには、次のスクリプトを作成できます。
#!/bin/sh
## Append users and groups from the host.
set -e
. "$SETUP_DATA_DIR/common-data"
. "$SETUP_DATA_DIR/common-functions"
. "$SETUP_DATA_DIR/common-config"
if [ -z "$SETUP_NSSDATABASES" ] || ! [ -f "$SETUP_NSSDATABASES" ]; then
exit 0
fi
DATABASES='group gshadow passwd shadow'
want () {
grep -qx "#>>$1" "$SETUP_NSSDATABASES"
}
start () {
sed -i -e '/^#begin added by schroot$/,/^#end added by schroot$/d' "$tmpfile"
{
echo '#begin added by schroot'
getent "$db" | case $db in
## passwd, group: copy the range for local human accounts
passwd) awk -F : "$FIRST_UID <= \$3 && \$3 <= $LAST_UID";;
group) awk -F : "$FIRST_GID <= \$3 && \$3 <= $LAST_GID";;
## shadow, gshadow: copy only entries with a password hash
shadow|gshadow) awk -F : '$2 ~ /^\$/';;
esac
echo '#end added by schroot'
} >>"$tmpfile"
}
iterate () {
for db in $DATABASES; do
want "$db" || continue
dbfile=$CHROOT_PATH/etc/$db
tmpfile=$dbfile.$$
[ -f "$dbfile" ] || continue
cp -f -- "$dbfile" "$tmpfile"
"$@"
if ! [ -s "$tmpfile" ] || cmp -s -- "$dbfile" "$tmpfile"; then
rm -f -- "$tmpfile"
else
mv -- "$tmpfile" "$dbfile"
fi
done
}
case $STAGE in
setup-start|setup-recover)
FIRST_UID=1000
LAST_UID=29999
FIRST_GID=1000
LAST_GID=29999
if [ -e /etc/adduser.conf ]; then . /etc/adduser.conf; fi
umask 600
iterate start;;
esac
nssdatabases
次の行を含むように設定ファイルを編集するか、setup.nssdatabases=default/nssdatabases-append
schroot設定ファイルに入れて次の行を作成しますdefault/nssdatabases
。
#>>passwd
#>>shadow
#>>group
#>>gshadow
services
protocols
networks
hosts
デフォルト設定のSchrootは、ホームディレクトリ内のどのファイルも上書きしません。--preserve-environment
環境変数に関するもので、これには関係ありません。