Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

15.07.2010, 09:21

chrootskript.sh erstellen

Moin,

im Moment habe ich bisl was zu tun und kann daher hier nur noch selten vorbeischauen. Sehr schade! :|

Jetzt möchte ich die Arbeit etwas erleichtern um in eine meiner vielen chroot Umgebungen zu wechseln. Im Prinzip sollen die Befehle wie follgt ausgeführt werden, und dann nach dem ich in der Chroot Umgebung bin
der "sh /home/update_script" ausgefürt werden jedoch soll dieser auf meiner Konsole sichtbar sein. Wie kann ich diesen aus dem Hintergrund auf die Konsole holen und das Scrip noch verbessern?

So sieht mein skript jetzt aus.

Quellcode

1
2
3
4
5
6
7
8
9
10
#!bin/bash

mount /dev/sdc3 /mnt/gentoo/
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash
env-update && source /etc/profile
export PS1="(chroot_gentoo) $PS1"

##sh /home/update_script


Würde mich auf Hilfe Freuen.

PS: Die Forumssuche ist immer noch nicht so doll.

Im Netzt habe ich noch das hier gefunden chroot_skript aber ich glaube das ist für mich nicht so geeignet.?

Grüße Micha.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Michigen« (15.07.2010, 22:19)


2

15.07.2010, 09:41

Hallo Michigen,

spätestens ab der Zeile

Quellcode

1
chroot /mnt/gentoo /bin/bash
funktioniert Dein Skript nicht. Es wird eine interaktive Bash gestartet. Die nachfolgenden Befehle werden erst ausgeführt, wenn Du das chroot verlässt.

Soll das Skript interaktiv sein? Falls nein, sollte folgendes funktionieren (ungetestet):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!bin/bash

mount /dev/sdc3 /mnt/gentoo/
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash <<EOF
#### Wird im chroot ausgeführt
   env-update && source /etc/profile
  #export PS1="(chroot_gentoo) $PS1"   # braucht Du nicht, weil nicht interaktiv
   emerge -uDN world
   exit
#### Chroot Ende
EOF

umount  /mnt/gentoo/dev
umount  /mnt/gentoo/proc

Beachte, Alles zwischen <<EOF und EOF wird in die chroot als Input übergeben. Daher kannst Du keinen interaktiven Input liefern.

Falls das Skript die Möglichkeit haben soll interaktiv zu sein (ebenfalls ungetestet):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#!bin/bash

mount /dev/sdc3 /mnt/gentoo/
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev

cp /tools/update_script.sh /mnt/gentoo/tmp
chroot /mnt/gentoo /bin/bash /tmp/update_script.sh
rm /mnt/gentoo/tmp/update_script.sh

umount  /mnt/gentoo/dev
umount  /mnt/gentoo/proc
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

3

15.07.2010, 12:31

Danke für Deine schnelle Antwort bell und natürlich auch von mir herzliche Glückwünsche zum Admin hier! :thumbsup:

Ich glaube ich möchte es interaktiv haben es soll Bspw. in der zweiten virtuellen Konsole laufen, nur das ich nicht jeden Befehl einzeln tippeln muß.

Ich werde das nachher mal testen und mich dann wieder melden.

PS:nicht so einfach für mich hier zu posten, konnte mich vorhin nicht einloggen bzw. keine Antworten schreiben, angeblich fehlen mir die Rechte. Na ja fast wie zu Hause. :) :(

Bis später..

4

15.07.2010, 22:19

Also genau umgedreht, das Skript soll nicht interaktiv sein. Das interaktive sieht aber auch sehr interessant aus.
Nach Deinem Beispiel oben läuft es nun perfekt!

Danke! :thumbsup:

5

24.07.2010, 16:12

Ich hatte mal ein kleines Skript für Debian vefasst. Kann man um das gentoospezifische noch erweitern (env-update usw.)

Kleines Script für Chroot
The most wonderful thing in the world is silence. And how noisy thoughts are!
Nanavira Thera

6

25.07.2010, 00:26

Nabend nikaya,

Super Klasse das Script!
Ich lande nach dem ausführen ja am Promt in meiner chroot Umgebung, wie müste ich jetzt Bspw. " env-update && source /etc/profile" an diese Stelle

Quellcode

1
2
3
4
5
6
if [ -d $CHROOTDIR ]; then
mount /dev/$1 $CHROOTDIR
mount -t proc proc $CHROOTDIR/proc
mount -o bind /dev $CHROOTDIR/dev
cp -L /etc/resolv.conf $CHROOTDIR/etc/resolv.conf
chroot $CHROOTDIR /bin/bash
im Script einfügen das diese wie eine Eingabe abgearbeitet werden und in dieser Konsole laufen?
Ich will Sie gleich aus dem Script übergeben und nicht von Hand eingeben.
Dann wäre es Perfekt.
Mit "<<EOF" "env-update" "EOF" klappt das gerade nicht. :sleeping:

Danke! :thumbup:

Grüße Micha.

7

25.07.2010, 00:34

Mit "<<EOF" "env-update" "EOF" klappt das gerade nicht. :sleeping:

Warum klappt es nicht? Welche Fehlermeldung kommt? Eigentlich müsste es genauso klappen.

PS: @Michigen: Das was Du auf "infosecprojects" gefunden hast, macht nichts anderes als die Möglichkeit 2 (interaktiv), nur dass die kopierte Datei im Skript erzeugt wird und nicht vorher statisch vorhanden ist.
Falls Du Fragen dazu hast.... Interaktiv heißt eigentlich nur, dass Du auf "emerge -a " (o.ä.) reagieren kannst.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

8

25.07.2010, 00:55

Zitat von »bell«

Interaktiv heißt eigentlich nur, dass Du auf "emerge -a " (o.ä.) reagieren kannst.
genau so soll es und am Anfang sollen die "env-update" "sh /home/update_script" Befehle gleich übergeben werden.
Ich habe das so editiert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bashsh

######################################################################################
#Hier ein Kleines Script um sich die einzelnen Schritte für Chroot zu ersparen.      #
#                                                                                    #
#Das Script erwartet den Scriptnamen und als Argument das Device in das 'gechrooted' #
#werden soll, ohne ein führendes '/dev/'.                                            #
#Zum Beispiel:                                                                       #
#                                                                                    #
#chroot.sh sda8                                                                      #
#                                                                                    #
#um ein Chroot in die Partition /dev/sda8 durchzuführen. Nachdem die Arbeiten in der #
#Chroot-Umgebung erledigt sind, verlässt man sie wieder mit dem Befehl "exit".       #
#Das Script hängt danach die Mountpunkte wieder aus.                                 #
######################################################################################

CHROOTDIR=/mnt/chroot

# Make sure only root can run our script
if [ $EUID -ne 0 ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

# Make sure that $1 is not empty
if [ ! -n "$1" ]; then
echo -e "\033[1;33mYou must give an argument which device you want to chroot in (without leading '/dev/') "
echo -e "\033[1;33mExample '$0 sda8' will chroot the device /dev/sda8 into /mnt/chroot."
exit 1
fi

# Make sure that directory '/mnt/chroot' exists
if [ ! -d $CHROOTDIR ]; then
 echo Error: No directory $CHROOTDIR existing. Creating it... !! >&2
 mkdir -p $CHROOTDIR
fi
if [ -d $CHROOTDIR ]; then
  echo Created directory $CHROOTDIR successfully... >&2
  echo Now chrooting into /dev/$1 ... >&2
fi

if [ -d $CHROOTDIR ]; then
mount /dev/$1 $CHROOTDIR
mount -t proc proc $CHROOTDIR/proc
mount -o bind /dev $CHROOTDIR/dev
cp -L /etc/resolv.conf $CHROOTDIR/etc/resolv.conf
chroot $CHROOTDIR /bin/bash

<<EOF
env-update && source /etc/profile
sh /home/update_script
EOF

fi

echo unmounting the devices from the chroot directory ... >&2

if [ -d $CHROOTDIR ]; then
umount $CHROOTDIR/proc
umount $CHROOTDIR/dev
umount $CHROOTDIR
fi

echo deleting chroot directory $CHROOTDIR ... >&2
rmdir $CHROOTDIR
if [ ! -d $CHROOTDIR ]; then
echo $CHROOTDIR deleted successfully. Good bye !! >&2


..erst nachdem ich "exit" eingebe scheinen die Befehle abgearbeitet zu werden.

Ist die SYNTAX so richtig? ?(

9

25.07.2010, 01:18

"chroot" und "<<EOF" sollten schon in einer Zeile stehen...
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

10

25.07.2010, 09:18

Moin bell,

Alles Bestens jetzt!
Da hätte ich ja auch selber drauf kommen können, jetzt weiß ich die Bedeutung von Interaktiv. :)

Grüße Micha.