PEGU Consulting

Webdesign | Hosting | Support | Consulting

Weblog von PEGU Consulting

Sonntag, 14. September 2014 / 11:00

Einrichten einer CHROOT-Umgebung unter Debian Wheezy

Abgelegt unter System, Linux — von P. Arentzen

Im Folgenden beschreibe ich, wie man unter Debian Wheezy eine CHROOT-Umgebung einrichten kann, die man z.B. zum Compilieren von Quellpaketen nutzt.

Wir schaffen die Voraussetzungen

Verwendetes System

System: Debian Wheezy Stand 12. September 2014 (amd64)

Shell: bash

Verwenden von 'sudo'

Aus Sicherheitsgründen arbeiten wir als normaler Benutzer und verschaffen uns Superuser-Rechte über 'sudo'.

Ob sudo für den aktuellen User eingerichtet ist, kann man so testen (die Passwortabfrage erfolgt in Abhängigkeit von den Systemeinstellungen):

$ sudo echo "Hallo"
[sudo] password for beispielbenutzer:
Hallo

So etwa sieht es aus, wenn es funktioniert, ansonsten wird hier eine Fehlermeldung angezeigt.
Wenn es nicht funktioniert, dann empfehle ich z.B. diesen Link.

Mitglied von der Gruppe 'staff' werden

Wir richten unsere CHROOT-Umgebung unter '/usr/local' ein. Dort hat die Gruppe 'staff' Schreibrechte.

Wir fügen daher unseren Benutzer dieser Gruppe hinzu:

sudo gpasswd -a $USER staff
Installieren der benötigten Tools
sudo apt-get install binutils debootstrap screen
Sonstiges

Damit wir diese Arbeiten auch auf entfernten Maschinen und/oder System ohne grafische Oberfläche durchführen können, erledigen wir alle Arbeiten auschließlich an der Konsole.

Nun fangen wir an

Umgebungsvariablen setzen

Um uns Tipparbeit zu ersparen und mögliche Fehlerquellen auszuschließen, sorgen wir dafür, dass uns die Umgebungsvariablen auch nach dem Wiedereinloggen zur Verfügung stehen.

mkdir -p ~/.bashrc.d # Verzeichnis anlegen
touch ~/.bashrc.d/placeholder.sh # Platzhalter
editor ~/.bashrc.d/setchrootenv.sh #Datei anlegen

In den nun geöffneten Editor kopieren wir folgenden Text und passen ihn nach unseren Wünschen an:

MYCHROOT_DIST="wheezy"
MYCHROOT_VARIANT=amd64
MYCHROOT_NAME="example2"
MYCHROOT_DEBOOTSTRAP_VARIANT="buildd"
MYCHROOT_BASE="/usr/local/src/build-chroot"
MYCHROOT_SECTIONS="main contrib non-free"
MYCHROOT_REPOS="http://ftp.de.debian.org/debian"
MYCHROOT_TARBALL="${MYCHROOT_BASE}/${MYCHROOT_DIST}-${MYCHROOT_VARIANT}-${MYCHROOT_DEBOOTSTRAP_VARIANT}.tgz"
MYCHROOT_PATH="${MYCHROOT_BASE}/${MYCHROOT_NAME}/${MYCHROOT_DIST}/${MYCHROOT_VARIANT}"

Getestest habe ich das Ganze allerdings nur mit den hier angezeigten Werten.

Dann speichern wir die Datei und beenden den Editor.

Das Folgende sorgt dafür, dass Dateien mit dem Muster ~/.bashrc.d/*.sh beim Einloggen in das System verarbeitet werden (wenn wir keine abweichende Shell nutzen).

echo -e "\
\n\
# Einlesen lokale Einstellungen\n\
if [ -d ~/.bashrc.d ]; then\n\
  for i in ~/.bashrc.d/*.sh; do\n\
    if [ -r \$i ]; then\n\
      . \$i\n\
    fi\n\
  done\n\
  unset i\n\
fi\n\
" >> ~/.bashrc

Dannach loggen wir uns aus und wieder ein.

Einrichten der CHROOT-Umgebung

Umgebungsvariablen gesetzt?

Wir testen zunächst, ob unsere Umgebungsvariablen korrekt gesetzt sind:

set | grep MYCHROOT

Nun sollten unsere gesetzen Werte ausgeben werden:

 

MYCHROOT_BASE=/usr/local/src/build-chroot
MYCHROOT_DEBOOTSTRAP_VARIANT=buildd
MYCHROOT_DIST=wheezy
MYCHROOT_NAME=example2
MYCHROOT_PATH=/usr/local/src/build-chroot/example2/wheezy/amd64
MYCHROOT_REPOS=http://ftp.de.debian.org/debian
MYCHROOT_SECTIONS='main contrib non-free'
MYCHROOT_TARBALL=/usr/local/src/build-chroot/wheezy-amd64-buildd.tgz
MYCHROOT_VARIANT=amd64

 

Nur wenn alles OK ist, machen wir weiter, ansonsten heißt es Fehlersuche!

 

Zur Sache - wir legen die CHROOT-Umgebung an!
# Basis-Verzeichnis anlegen, wenn noch nicht vorhanden
sudo mkdir -p ${MYCHROOT_PATH}

# verwenden von 'tarball', um bei Wiederholung nicht nochmals alle Pakete laden zu muessen
# - Die folgende Zeile setzt die Variable MYCHROOT_TARBALL_PARAM, die wir in der nächsten Zeile verwenden
test -f ${MYCHROOT_TARBALL} && tar tfz ${MYCHROOT_TARBALL} 2> /dev/null > /dev/null && MYCHROOT_TARBALL_PARAM="--unpack-tarball=${MYCHROOT_TARBALL}" || MYCHROOT_TARBALL_PARAM="--make-tarball=${MYCHROOT_TARBALL}"

# chroot installieren
sudo debootstrap ${MYCHROOT_TARBALL_PARAM} --variant=${MYCHROOT_DEBOOTSTRAP_VARIANT} --arch ${MYCHROOT_VARIANT} ${MYCHROOT_DIST} ${MYCHROOT_PATH} ${MYCHROOT_REPOS}

Nun werden die Pakete installiert. Wenn vorhanden, wird der in einem vorherigen Lauf angelegte Tarball verwendet, ansonsten wird einer angelegt. Diese Zeilen müssen zwei Mal ausgeführt werden, damit der zuerst erstelle Tarbal beim nächsten Mal entpackt werden kann.

'fstab' des Echtsystems bearbeiten:

Damit die CHROOT-Umgebung korrekt funktioniert, müssen wir Subsysteme/Verzeichnisse des Echtsystems verwenden. Wir fügen hierfür ein paar Einträge in der 'fstab' des Echtsystems hinzu.

# Im Echtsystem Sicherheitskopie von fstab anlegen
sudo cp -a /etc/fstab /etc/fstab.sav

# Mount-Einstellungen fuer fstab festlegen
myfstab_settings="\
/dev ${MYCHROOT_PATH}/dev auto bind 0 0 #entry for ${MYCHROOT_NAME}\n\
/dev/pts ${MYCHROOT_PATH}/dev/pts auto bind 0 0 #entry for ${MYCHROOT_NAME}\n\
/proc ${MYCHROOT_PATH}/proc auto bind 0 0 #entry for ${MYCHROOT_NAME}\n\
"

# - ggfs noch Installationsverzeichnis in die Testumgebung haengen, um Kopierarbeit zu sparen
#   In diesem Beispiel gehen wir davon aus, dass dies '/opt' ist.
#   Achtung: in diesem Verzeichnis vorhandene Dateien im ECHTSYSTEM werden in diesem Fall ueberschrieben!
myfstab_settings="${myfstab_settings}/opt ${MYCHROOT_PATH}/opt auto bind 0 0 #entry for ${MYCHROOT_NAME}\n"

# - in die fstab schreiben
echo -e ${myfstab_settings} | sudo tee -a /etc/fstab > /dev/null

# anwenden
sudo mount -a
Fertigstellen der CHROOT-Umgebung
# Paketquellen festlegen
echo -e "#\n#  /etc/apt/sources.list\n#\n\n\n#\n# ${MYCHROOT_DIST}\ndeb ${MYCHROOT_REPOS}/ ${MYCHROOT_DIST} ${MYCHROOT_SECTIONS}\ndeb-src ${MYCHROOT_REPOS}/ ${MYCHROOT_DIST} ${MYCHROOT_SECTIONS}\n\n#\n# Security updates\n#\ndeb security.debian.org ${MYCHROOT_DIST}/updates ${MYCHROOT_SECTIONS}\ndeb-src security.debian.org ${MYCHROOT_DIST}/updates ${MYCHROOT_SECTIONS}" | sudo tee ${MYCHROOT_PATH}/etc/apt/sources.list > /dev/null

# Das Folgende soll verhindern, dass vom System versucht wird, Daemon-Prozesse innerhalb der CHROOT-Umgebung neu zu starten:
echo -e "##/bin/sh\nexit 101" | sed 's/^##/#!/g' | sudo tee ${MYCHROOT_PATH}/usr/sbin/policy-rc.d > /dev/null

# Paketquellen einlesen
sudo chroot ${MYCHROOT_PATH} apt-get update

# System aktualisieren
sudo chroot ${MYCHROOT_PATH} apt-get upgrade

# Wo sind wir? - Ausgabe '/'
sudo chroot ${MYCHROOT_PATH} pwd

# Wer sind wir? - Ausgabe 'root'
sudo chroot ${MYCHROOT_PATH} whoami

# Workarround für Bug #685034 [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=685034]
sudo chroot ${MYCHROOT_PATH} dpkg-divert --divert /usr/bin/ischroot.debianutils --rename /usr/bin/ischroot
sudo chroot ${MYCHROOT_PATH} ln -s /bin/true /usr/bin/ischroot

# Einige Tools installieren
sudo chroot ${MYCHROOT_PATH} apt-get install vim-nox mc less wget

# aufraeumen
sudo chroot ${MYCHROOT_PATH} apt-get clean

Arbeiten mit der CHROOT-Umgebung

# Wechseln in die CHROOT-Umgebung
sudo chroot ${MYCHROOT_PATH} /bin/bash

 

 

# Ausgabe: '/': '/'
pwd

# Ausgabe: 'root'
whoami

Aufräumen

Wenn wir die CHROOT-Umgebung irgendwann nicht mehr brauchen, sollte sie sauber entfernt werden. Bloß nicht einfach löschen, denn dann löschen wir unter Umständen Teile unseres Echtsystems!

Aushängen in umgekehrter Reihenfolge
grep "#entry for ${MYCHROOT_NAME}" /etc/fstab | cut -f2 -d' ' | tac | while read x; do sudo umount "${x}"; done
Entfernen der fstab-Einträge
# Noch eine Sicherheitskopie
sudo cp -a /etc/fstab /etc/fstab.sav2

# Testlauf
sed "/#entry for ${MYCHROOT_NAME}$/d" /etc/fstab

# Echtlauf
sudo sed -i "/#entry for ${MYCHROOT_NAME}$/d" /etc/fstab
Löschen der CHROOT-Umgebung
# Testlauf - Alles richtig, stimmt der Pfad?
echo sudo rm -rf "${MYCHROOT_PATH}"

# Echtlauf - Vorsicht
sudo rm -rf "${MYCHROOT_PATH}"
Skript zum Setzen der Umgebungsvariablen deaktivieren
mv ~/.bashrc.d/setchrootenv.sh ~/.bashrc.d/setchrootenv.sh.disabled

Nun loggen wir uns neu ein und prüfen, ob die Umgebungsvariablen noch gesetzt sind.

set | grep MYCHROOT

Diesmal sollte das Ergebnis leer sein.

Links
  • Verwendete Quelle: https://wiki.debian.org/chroot
Zurück
Seiten
  • Home
  • Impressum
  • Nutzungsbedingungen
  • Datenschutzerklärung
  • Kontakt
  • Webseite
Kategorien
  • Allgemein (65)
  • PEGU intern (25)
  • Computer-News (49)
    • Hardware (8)
    • Software (61)
    • Spiele (34)
    • Internet (39)
    • Diverses (5)
  • Shortcuts (8)
  • Subjektives (72)
  • System (23)
  • Mac-Welten (26)
  • Mobiles Leben (62)
  • TypoScript-Schnipsel (4)
  • Games (19)
  • Linux (32)
  • Satire (4)
  • Im Test (51)
  • Entwicklung (1)
    • Tipps und Tricks (0)
    • JavaScript / Vue Schnipsel (5)
Archiv
  • Mai 2023 (5)
  • Dezember 2022 (1)
  • November 2021 (2)
  • September 2021 (1)
  • August 2021 (2)
  • Juli 2021 (1)
  • Juni 2021 (4)
  • Mai 2021 (9)
  • April 2021 (3)
  • März 2021 (2)
  • Februar 2021 (4)
  • Januar 2021 (5)
  • Dezember 2020 (8)
  • November 2020 (7)
  • September 2020 (1)
  • Juli 2020 (5)
  • Juni 2020 (6)
  • Mai 2020 (8)
  • Dezember 2018 (1)
  • Juli 2018 (1)
  • Mai 2018 (1)
  • April 2018 (1)
  • Februar 2018 (1)
  • Januar 2018 (2)
  • Dezember 2017 (2)
  • November 2017 (3)
  • Oktober 2017 (1)
  • März 2017 (2)
  • Februar 2017 (3)
  • Januar 2017 (2)
  • Dezember 2016 (2)
  • November 2016 (1)
  • Oktober 2016 (1)
  • September 2016 (2)
  • August 2016 (2)
  • Juli 2016 (2)
  • Mai 2016 (3)
  • April 2016 (4)
  • März 2016 (2)
  • Februar 2016 (4)
  • Januar 2016 (5)
  • Dezember 2015 (3)
  • November 2015 (2)
  • Oktober 2015 (1)
  • September 2015 (1)
  • August 2015 (2)
  • Juli 2015 (2)
  • Juni 2015 (2)
  • Mai 2015 (4)
  • April 2015 (11)
  • März 2015 (6)
  • Februar 2015 (2)
  • Januar 2015 (9)
  • Dezember 2014 (7)
  • November 2014 (4)
  • Oktober 2014 (7)
  • September 2014 (9)
  • August 2014 (10)
  • Juli 2014 (2)
  • Mai 2014 (2)
  • April 2014 (15)
  • März 2014 (8)
  • Februar 2014 (12)
  • Januar 2014 (3)
  • Dezember 2013 (3)
  • November 2013 (8)
  • Oktober 2013 (4)
  • September 2013 (7)
  • August 2013 (3)
  • Juli 2013 (6)
  • Juni 2013 (7)
  • Mai 2013 (6)
  • April 2013 (6)
  • März 2013 (13)
  • Februar 2013 (10)
  • Januar 2013 (7)
  • Dezember 2012 (5)
  • November 2012 (5)
  • Oktober 2012 (5)
  • September 2012 (2)
  • August 2012 (5)
  • Juli 2012 (10)
  • Juni 2012 (3)
  • April 2012 (1)
  • März 2012 (3)
  • Februar 2012 (3)
  • Januar 2012 (1)
  • Dezember 2011 (2)
  • November 2011 (2)
  • Oktober 2011 (5)
  • September 2011 (5)
  • August 2011 (4)
  • Juli 2011 (2)
  • Juni 2011 (2)
  • Mai 2011 (7)
  • April 2011 (12)
  • März 2011 (9)
  • Februar 2011 (2)
  • Dezember 2010 (1)
  • September 2010 (3)
  • Juni 2010 (1)
  • Mai 2010 (2)
  • Februar 2010 (3)
  • Januar 2010 (3)
  • Dezember 2009 (5)
  • November 2009 (1)
  • Juli 2009 (1)
  • Mai 2009 (2)
  • April 2009 (1)
  • März 2009 (2)
  • Februar 2009 (3)
  • Dezember 2008 (1)
  • Oktober 2008 (1)
  • August 2008 (1)
  • Juni 2008 (1)
  • Mai 2008 (2)
  • April 2008 (6)
  • März 2008 (3)
  • Februar 2008 (2)
  • Januar 2008 (4)
  • Dezember 2007 (6)
  • November 2007 (1)
  • Oktober 2007 (2)
  • September 2007 (1)
  • August 2007 (3)
  • Juli 2007 (5)
  • Mai 2007 (1)
  • April 2007 (6)
  • März 2007 (5)
  • Februar 2007 (4)
  • Januar 2007 (2)
  • Dezember 2006 (5)
  • November 2006 (2)
  • Oktober 2006 (5)
  • September 2006 (13)
  • März 2004 (1)
  • Oktober 2003 (1)
  • April 2003 (1)
  • Februar 2003 (1)
Blogroll
  • PEGU Webseite
  • Schriftsteller G. Arentzen
Feeds
  • RSS 2
© by PEGU Consulting, P. Arentzen — Design & Realisierung by PEGU Consulting — Powered by TYPO3