Eigenes Raspian Basis-Image erzeugen

Warum ein eigenes Docker Raspian Basis-Image erstellen?

Ganz einfach: weil es geht!

Nebenbei kann ich genau das in das Raspian Basis-Image packen was ich immer brauche und kann - für mich - uninteressante Teile weglassen.

Das folgende Howto habe ich mir durch lesen von Dokumentationen, suche im Internet und ausprobieren zusammen gesucht. Es spiegelt meinen Wissentstand wieder und hat keinen Anspruch auf Vollständigkeit und Richtigkeit!

Die Veröffentlichung dieses Howtos erfolgt in der Hoffnung, dass es dem Ein oder Anderen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.

Ablauf

  1. Installation benötigter Software
  2. Raspian herunter laden und Minimalinstallation in ein Verzeichnis
  3. Mounten der wichtigsten Verzeichnisse in der neuen Installation
  4. Das root Verzeichnis auf das Verzeichnis der neuen Installation setzen
  5. Pakte installieren, nicht benötigte Pakete deinstallieren und apt bereinigen
  6. Unmounten der neuen Installation
  7. Neue Installation in ein TAR-Archiv verpacken
  8. TAR-Archiv als Image in Docker importieren

1. Installation benötigter Software

Um Raspian in ein beliebiges Verzeichnis installieren zu können wird "debootstrap" benötigt.

apt-get update
apt-get install debootstrap

2. Raspian herunter laden und Minimalinstallation in ein Verzeichnis

Hier wird Raspian Buster verwendet. Für andere/neue Versionen hilft ein Blick auf <http://archive.raspbian.org/raspbian> weiter.

Als <Verzeichnis-Name> kann ein beliebiges Verzeichnis angegeben werden. Es muss zuvor nicht angelegt werden denn es wird automatisch im aktuellen Arbeitsverzeichnis angelegt.

debootstrap --variant=minbase --components=main,contrib,non-free --include=dirmngr,apt-transport-https --arch=armhf buster <Verzeichnis-Name> http://archive.raspbian.org/raspbian

3. Mounten der wichtigsten Verzeichnisse in der neuen Installation

Um Raspian in ein beliebiges Verzeichnis installieren zu können wird "debootstrap" benötigt.

mount --bind /dev     <Verzeichnis-Name>/dev
mount --bind /dev/pts <Verzeichnis-Name>/dev/pts
mount --bind /proc    <Verzeichnis-Name>/proc
mount --bind /sys     <Verzeichnis-Name>/sys

4. Das root Verzeichnis auf das Verzeichnis der neuen Installation setzen

chroot <Verzeichnis-Name>

5. Pakte installieren, nicht benötigte Pakete deinstallieren und apt bereinigen

Nun wird es Zeit die Pakete zu Installieren die gebraucht werden. Zuvor teilen wir apt-get aber mit, dass es nicht immer rückfragen soll.

echo "APT::Get::Assume-Yes \"true\";" | tee /etc/apt/apt.conf.d/10-assume_yes

Jetzt können mittels "apt-get" zusätzliche Pakete installiert werden. Hier ist Zurückhaltung angesagt da ja ein Basis-Image - ohne unnötigen Ballast - erzeugt werden soll.

Danach können unnötige Pakete entfernt und "apt-get" aufgeräumt werden. Die Liste hier kann nach eigenen Vorstellungen erweitert werden.

apt-get remove --allow-remove-essential e2fsprogs e2fslibs nano pinentry-curses whiptail kmod iptables iproute2 dmidecode
apt-get clean
find /var/lib/apt/lists/ -maxdepth 2 -type f -delete
exit

6. Unmounten der neuen Installation

umount /dev
umount /dev/pts
umount /proc
umount /sys

Sollte es nicht gelingen -> ein Reboot tut gut!

7. Neue Installation in ein TAR-Archiv verpacken

tar --verbose --create --file <Verzeichnis-Name>.tar --directory <Verzeichnis-Name> .

Achtung: Den Punkt am Ende nicht vergessen!

8. TAR-Archiv als Image in Docker importieren

cat <Verzeichnis-Name>.tar | docker import - <Image-Name>

Das war es dann auch schon! Ab jetzt steht ein eigenes Docker Basis-Image zur Verfügung.

Im HowTo "Eigenes Apache2/Perl-Image erzeugen" wird dieses als Basis verwendet.