web-dev-qa-db-ja.com

chrootスクリプトの作成方法

だから私は見ている:

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つのシェルスクリプト内に保持する方法はありますか?

編集:これを繰り返し可能なプロセスにしたいので、何度も何度も入力するのではなく、全体をスクリプト化したいのです。

7
Dr.Avalanche

2番目のスクリプト(たとえば、chroot.sh)を作成し、chroot/フォルダーに配置します。

元のスクリプトのコマンドを次のように編集します。

chroot chroot/ ./chroot.sh

これで、スクリプトchroot.shchroot内で実行されます。

13
starbroken

こんにちは、パイプのような簡単なソリューションを使用する必要があります。

cat << EOF | chroot chroot
rm -rf /
EOF

PS。 rm -rfについて冗談を言う;)、EOF-EOF内で実行するものはすべて、chrootedディレクトリ内で実行されます。必要に応じてSudoを使用することもできます。

cat << EOF | Sudo chroot chroot
ls /
EOF
10
flipvarga

chrootsおよび/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

関連する読書:

3
muru

.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のコピーをメインスクリプトなどにコピーすることもできます。

1
s3lph