Ist es möglich, ein LTS 10.04 oder 12.04 oder früher auszuführen, das unter LXC oder Docker on Trusty containerisiert ist?

7

Ist es möglich, eine Vanilla-Installation von Ubuntu 14.04 (Trusty) zu haben und darin containerisierte ältere Ubuntu-Versionen auszuführen, die ursprünglich mit älteren Kerneln geliefert wurden?

Zum Beispiel für 12.04 würde ich annehmen, dass die Antwort ja ist, da es linux-imagePakete für nachfolgende Ubuntu-Versionen wie linux-image-generic-lts-saucyund enthält linux-image-generic-lts-quantal. Für 10.04 ist dies jedoch nicht der Fall, daher bin ich mir nicht sicher. Aber gibt es eine Dokumentation, anhand derer ich ableiten kann, was in Ordnung ist?

Der Grund, den ich frage, ist, dass die Kernel-Oberfläche von Zeit zu Zeit aktualisiert wird. Manchmal ist es jedoch vorteilhaft, neuere Versionen der Distribution auszuführen und gleichzeitig eine Build-Umgebung beizubehalten, die auf einem Vorgänger basiert.

0xC0000022L
quelle
Ich würde es einfach ausprobieren. Wenn Sie Zugriff auf die älteren 10.04 + 12.04-Installationsmedien haben, würde ich Docker-Images für diese einrichten und ausprobieren.
slm
Installationsmedien müssen nicht verwendet werden . In der Registrierung befinden sich mehrere Docker-Container älterer Ubuntu-Versionen .
sr_
Dieser Mailinglisten-Thread (und die verknüpfte Antwort von jpetazzo ) könnte einen Einblick geben.
sr_

Antworten:

7

Sie können ältere Linux-Programme auf neueren Kerneln ausführen. Linux behält die Abwärtskompatibilität bei (zumindest für alle dokumentierten Schnittstellen), zum Nutzen von Personen, die aus dem einen oder anderen Grund alte Binärdateien ausführen (weil sie sich nicht um das Neukompilieren kümmern möchten, weil sie die Quelle verloren haben, weil dies der Fall ist kommerzielle Software, für die sie keine Quelle haben usw.).

Wenn Sie eine Build-Umgebung mit älteren Entwicklungstools oder sogar eine Testumgebung für alles haben möchten, was nicht tief in die Kernel-Schnittstellen eintaucht, müssen Sie keinen älteren Kernel ausführen, sondern nur eine ältere Userland-Umgebung. Dafür brauchen Sie nichts Komplexes: Eine Chroot reicht aus . Etwas Fortgeschritteneres wie LXC, Docker usw. kann nützlich sein, wenn die ältere (oder neuere) Distribution eine eigene Netzwerkkonfiguration haben soll. Wenn Sie das nicht möchten, können Sie das verwenden, was Debian genau verwendet, um Software in einer bekannten Umgebung zu erstellen (z. B. Software für Debian Stable auf einem Computer mit einer Testinstallation erstellen ): schroot . Siehe Wie führe ich 32-Bit-Programme auf einem 64-Bit-Debian / Ubuntu aus? Hier finden Sie eine Anleitung zum Einrichten einer alternativen Installation von Debian oder eines Derivats in einer Chroot.

Wenn Sie den Kernel der älteren Distribution ausführen möchten, benötigen Sie dafür eine tatsächliche virtuelle Maschine, z. B. KVM oder VirtualBox. Bei der Linux-on-Linux-Virtualisierung mit LXC oder ähnlichem wird durchgehend derselbe Kernel ausgeführt.

Gilles 'SO - hör auf böse zu sein'
quelle
Ich weiß, dass es eine Abwärtskompatibilität gibt. Aber es ist nicht so trivial, oder? Warum sonst würde die Verknüpfung mit GLIBC einen Annotation-Header in ELF-Dateien hinterlassen, der einen bestimmten Kernel-ABI angibt? Denken Sie an die Umstellung von 32- time_tBit auf 64-Bit, time_tdie eine inkompatible Änderung darstellt. Was ist der Grenzwert?
0xC0000022L
@ 0xC0000022L Linux unterstützt weiterhin a.out Binärdateien. Die seit etwa 1998 von ELF überholt sind. Neuere Linux-Kernel unterstützen das ältere ABI. Die Kernel-ABI-Anzeige ist vorhanden, da neuere Anwendungen möglicherweise nicht auf anderen Kerneln ausgeführt werden.
Gilles 'SO - hör auf böse zu sein'
andere == neuere? Mit GLIBC sind die Dinge leider noch komplizierter, aber das ist eine andere Geschichte. Vielen Dank.
0xC0000022L
Ich habe die verwandte Frage: Wie kann eine Basisinstallation, auf der beispielsweise 3.10 des Kernels ausgeführt wird, ein Docker-Image von beispielsweise Ubuntu unterstützen, das auf Version 4 des Kernels basiert?
Otheus
2

➜ codetv_static# docker run ubuntu:10.04 /bin/echo 'Howdy!' Unable to find image 'ubuntu:10.04' locally 10.04: Pulling from library/ubuntu a3ed95caeb02: Pull complete 86b54f4b6a4e: Pull complete Digest: sha256:f6695b2d24dd2e1da0a79fa72459e33505da79939c13ce50e90675c32988ab64 Status: Downloaded newer image for ubuntu:10.04 Howdy!

kwerle
quelle