だから私は見ている:
https://help.ubuntu.com/community/LiveCDCustomizationFromScratch
そして、bashスクリプト内で次のことを試みます。
Sudo chroot chroot
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts
スクリプトを実行すると、Sudo chroot chroot
のシェルにドロップされます。 exit
になったとき、rootが必要なマウントについて予想される警告が表示されます。これらすべてを1つのシェルスクリプト内に保持する方法はありますか?
編集:これを繰り返し可能なプロセスにしたいので、何度も何度も入力するのではなく、全体をスクリプト化したいのです。
2番目のスクリプト(たとえば、chroot.sh
)を作成し、chroot/
フォルダーに配置します。
元のスクリプトのコマンドを次のように編集します。
chroot chroot/ ./chroot.sh
これで、スクリプトchroot.sh
がchroot
内で実行されます。
こんにちは、パイプのような簡単なソリューションを使用する必要があります。
cat << EOF | chroot chroot
rm -rf /
EOF
PS。 rm -rfについて冗談を言う;)、EOF-EOF内で実行するものはすべて、chrootedディレクトリ内で実行されます。必要に応じてSudoを使用することもできます。
cat << EOF | Sudo chroot chroot
ls /
EOF
chroot
sおよび/proc
、/sys
および/dev/pts
についてのことは、これら3つのファイルシステムがカーネルによって提供されるため、chroot内でマウントしても、なし。確かに、前の手順で見るでしょう:
Sudo mount --bind /dev chroot/dev
/dev
はカーネルによって生成されますが、カーネルが提供するファイルシステムではないため、バインドマウントする必要がありました。したがって、実際には、chrootに入る前にバインドマウント(またはそれ以外)を使用してマウントすると、同様に機能することがわかります(Sudo
と仮定):
for i in dev proc sys dev/pts
do
mount -o bind /$i chroot/$i
done
chroot chroot
for i in dev/pts proc sys dev
do
umount -chroot/$i
done
# or
mount -o bind /dev chroot/dev
mount -t sysfs none chroot/sys
mount -t proc none chroot/proc
mount -t devpts none chroot/dev/pts
chroot chroot
for i in dev/pts proc sys dev
do
umount -chroot/$i
done
関連する読書:
.bashrcスクリプトなどを作成して、chroot envの/root/.bashrcに追加し、すべてのマウントなどを行います。その後、バックアップした.bashrcを/ rootに復元し、chrootを終了します。
メインスクリプト:
#!/usr/bin/env bash
cp bashrcscript chroot/root/
if [ -a chroot/root/.bashrc ]; then
cp chroot/root/.bashrc chroot/root/.bashrc.bak
fi
echo "./bashrcscript" >> chroot/root/.bashrc
chroot chroot/
rm chroot/root/.bashrc
rm chroot/root/bashrcscript
if [ -a chroot/root/.bashrc.bak ]; then
mv chroot/root/.bashrc.bak chroot/root/.bashrc
fi
bashrcscript:
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts
# Anything else you like to do
ルートコンソールが起動すると、bashrcscriptが実行されます。実行可能であることを確認してください。
Resolv.confのコピーをメインスクリプトなどにコピーすることもできます。