Scripting Chroot, wie geht das?

7

Also schaue ich mir an:

https://help.ubuntu.com/community/LiveCDCustomizationFromScratch

und versuchen Sie Folgendes in einem Bash-Skript:

sudo chroot chroot

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts

Das Ausführen des Skripts wird in einer Shell unter gelöscht sudo chroot chroot. Wenn ich exitdas bekomme, bekomme ich die erwarteten Warnungen über Mount, der root benötigt. Gibt es eine Möglichkeit, all dies in einem Shell-Skript zu speichern?

Bearbeiten: Ich möchte, dass dies ein wiederholbarer Prozess ist, weshalb ich das Ganze skripten möchte, anstatt es immer wieder einzugeben.

Dr.Avalanche
quelle
Es ist ziemlich verwirrend für jemanden, der Informationen sucht, ein Verzeichnis namens "chroot" zu verwenden. Schlagen Sie "chroot-dir" vor?
MikeW

Antworten:

14

Erstellen Sie ein zweites Skript (z. B. chroot.sh) und legen Sie es in Ihrem chroot/Ordner ab.

Bearbeiten Sie nun den Befehl in Ihrem ursprünglichen Skript folgendermaßen:

chroot chroot/ ./chroot.sh

Jetzt wird das Skript chroot.shin Ihrem ausgeführt chroot.

Sternenbruch
quelle
11

Hallo du solltest mit einer einfachen Lösung wie Pipe gehen:

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

PS. Scherz über rm -rf;), alles, was Sie in EOF ausführen - EOF wird in Ihrem chrooted-Verzeichnis ausgeführt. Sie können auch sudo verwenden, wenn Sie möchten

cat << EOF | sudo chroot chroot
ls /
EOF
Filvarga
quelle
Sehr praktisch, schön!
Joril
Dies ist eine großartige Lösung, wenn Sie nicht mehr als ein Skript erstellen möchten
musicin3d
4

Die Sache mit chroots und /proc, /sysund /dev/ptsist, dass diese drei Dateisysteme vom Kernel bereitgestellt werden, sodass sie gleich bleiben, unabhängig davon, ob Sie innerhalb oder außerhalb von chroot mounten. In der Tat werden Sie früher in der Anleitung sehen:

sudo mount --bind /dev chroot/dev

/devwird vom Kernel gefüllt, ist jedoch kein vom Kernel bereitgestelltes Dateisystem, daher musste es gebunden werden. In der Praxis werden Sie daher feststellen, dass das Mounten mit Bindemontagen (oder auf andere Weise) vor dem Betreten der Chroot genauso gut funktioniert (vorausgesetzt 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

Relevante Lektüre:

muru
quelle
1

Sie können ein .bashrc-Skript oder ähnliches erstellen, das an die /root/.bashrc der chroot-Umgebung angehängt wird, die die gesamte Bereitstellung usw. ausführt. Anschließend stellen Sie die gesicherte .bashrc-Datei in / root wieder her und beenden die chroot:

Hauptskript:

#!/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

Das bashrcscript wird dann ausgeführt, wenn die Root-Konsole gestartet wird. Stellen Sie sicher, dass es ausführbar ist.

Sie können sogar die resolv.conf-Kopie in das Hauptskript usw. einfügen.

s3lph
quelle
Das sieht vielversprechend aus. Ich habe die Frage ein wenig bearbeitet, um zu verdeutlichen, dass ich eine Skriptlösung wollte. Lassen Sie mich dies testen und einen Bericht zurückerhalten.
Dr.Avalanche
-1

Ich denke, es heißt nicht, dass Sie diese Befehle in ein Skript einfügen sollten, sondern dass Sie sie eingeben sollten . Geben Sie die mountBefehle in die sudoShell ein.

G-Man sagt "Reinstate Monica"
quelle
Ja, ich
möchte dies skripten,