… weil Bananen keine Äpfel sind!

Wir backen uns einen Kernel für Raspbian, der Linux Container unterstützt

Dezember 5th, 2013 Friedemann

Im Rahmen eines FH-Projektes setze ich mich zur Zeit mit Linux Containern (LXC) auseinander. Über die Konfiguration und die notwendigen Einstellungen werde ich demnächst einmal etwas schreiben. Zunächst möchte ich allerdings einen Artikel verfassen, der darauf eingeht wie man sich einen Kernel für die Raspberry-Pi Distribution „Raspbian“ kompiliert, der auch mit diesen Containern umgehen kann.

Dieser Beitrag basiert hauptsächlich, wenn nicht sogar vollständig, auf diesen Blog-Eintrag: http://raspberrypicloud.[…]-for-the-raspberry-pi/

Ich gehe in diesem Beitrag davon aus, dass ihr Raspbian bereits erfolgreich installiert habt.

Die Schritte werden allesamt als root-User ausgeführt. Hierzu gebt einfach in der Konsole

1
sudo -s

ein. Dann müsst ihr nicht vor jeden Befehl ein sudo setzen.

Schritt 1 – Vorbereitungen

Zunächst solltet ihr euer OS auf den neuesten Stand bringen:

1
# apt-get update && apt-get upgrade

Nachdem das OS auf den neuesten Stand gebracht worden ist, installiert ihr euch erst einmal git und die benötigten Kernel Entwicklertools:

1
# apt-get install git-core ncurses-dev

Schritt 2 – Die Firmware updaten

Achtung. Dieser Schritt dauert eine Weile. Ihr könnt in der Zeit ein paar Kaffees trinken :) Alternativ könnt ihr die Daten natürlich auch von einem anderen Rechner aus die Dateien herunterladen und später auf die SD-Karte transferieren

1
2
3
4
5
6
7
# cd /opt
# git clone git://github.com/raspberrypi/firmware.git
# cd firmware/boot
# cp * /boot
# cd ../modules
# cp -r * /lib/modules
# reboot

Schritt 4 – Die Größe des Swaps anpassen

Da es zu Problemen während des Checkouts aufgrund einer zu kleinen Auslagerungsdatei kommen kann, muss die Größe des Swaps angepasst werden:

1
2
3
4
# nano /etc/dphys-swapfile
# den Wert auf 500 setzen
# sudo dphys-swapfile setup
# reboot

Schritt 5 – Den Ofen vorheizen

Der nächste Schritt dauert lange – WIRKLICH lange.

1
2
3
4
5
6
# cd /opt
# mkdir raspberrypi
# cd raspberrypi
# git clone git://github.com/raspberrypi/linux.git
# cd linux
# zcat /proc/config.gz > .config

Schritt 6 – Das Swap-File wieder verringern

Analog zu Schritt 4:

1
2
3
4
# nano /etc/dphys-swapfile
# den Wert auf 100 setzen
# dphys-swapfile setup
# reboot

Schritt 6 – Möge das Backen beginnen

Kernel Optionen

Zunächst müssen einige Einstellungen in für den Kernel getan werden. Dies geht folgendermaßen:

1
2
# cd /opt/raspberrypi/linx
# make menuconfig

Dort wählt ihr die folgenden Punkte an:

  • General -> Control Group Support -> Memory Resource Controller for Control Groups (Und die drei Unterpunkte)
  • General -> Control Group Support -> cpuset support
  • Device Drivers -> Character Devices -> Support multiple instances of devpts
  • Device Drivers -> Network Device Support -> Virtual ethernet pair device

Ab in den Ofen

1
2
3
4
5
6
7
8
9
# make
# make modules_install
# cd /opt/raspberrypi
# git clone git://github.com/raspberrypi/tools.git
# cd tools/mkimage
# python ./imagetool-uncompressed.py /opt/raspberrypi/linux/arch/arm/boot/Image
# cp /boot/kernel.img /boot/kernel-old.img
# cp kernel.img /boot/
# reboot

Die aktuelle Version der LXC – Linux-Container – installieren

Die bei Raspbian mitgelieferte Version der LXC ist ziemlich alt. Daher bauen wir uns unsere eigene Version mit Blackjack und N….:

1
2
3
4
5
6
# mkdir /opt/lxc
# cd /opt/lxc
# git clone https://github.com/lxc/lxc.git
# apt-get install automake libcap-dev
# cd lxc
# ./autogen.sh && ./configure && make && make install

Testen

Nun kann alles getestet werden. Bei dem Aufruf von

1
# lxc-checkconfig

sollte der User-Namespace „missing“ sein (veraltete Kernel Option, die es nicht mehr gibt) und die Cgroup Namespaces required).

Leave a Reply