Ucs @ lxc

virtualization
german

#1

hallo,
ich würde gern einen Master & Slave in je einen LXC-Container installieren.
Da UCS ja auch in Docker-Containern läuft, sollte dies ja eigentlich möglich sein.

Bisher habe ich einen minimalen Wheezy-LXC mit den entsprechenden sources.list Einträgen versehen und dann
univention-docker-container-mode und anschließend univention-server-master installiert.
Im EinrichtungsAssi. ist er dann bei der Konfiguration von Configure 05univention-bind hängen geblieben.

im setup.log wiederholt sich:

/usr/share/univention-admin-tools/univention-dnsedit: timeout while trying to contact LDAP server ucslxc.example.com
obwohl slapd läuft & slapcat funktioniert.

Da ich nirgends ein Dockerfile für UCS-Master o.a. gefunden habe, würde mich interessieren, wie dies aussieht, respektive welche Schritte notwendig sind, um UCS in einem Container zu installieren.

Kann mir da bitte jemand etwas Licht ins Dunkel bringen?

Vielen Dank im Voraus
günter
setup.log (179 KB)


#2

Moin,

da die Dockerfiles von extern in der Tat nicht zugänglich zu sein scheinen — warum setzen Sie nicht einfach den Master kurz in einer echten VM auf und kopieren anschließend die Dateien z.B. via rsync in den LXC-Container? Da müssen Sie dann auch nicht raten und nachvollziehen, was der Univention-Installer alles in welcher Reihenfolge macht…

Gruß,
mosu


#3

@mosu
danke für die antwort.

dies hatte ich schon mal durchexerziert. der gewonnene container läuft zwar, doch schmeißt er einige fehler beim starten, so dass ein etwas ungutes gefühl zurück bleibt… so wäre mir eine saubere container-installation natürlich lieber.
hintergedanke ist, dass in einem Container ja hardware-nahe services evtl nicht nur nicht von nöten sind, teilweise die installation/betrieb sogar behindern könnten.
und ist das debian wheezy in der VM das gleiche, welches in einen container per lxc-create installiert wird, oder ändert letzteres etwas an der konfiguration (früher war initd & systemd, etc. ein thema)?

und, der master lies sich nicht installieren, wer kann mir sagen, ob ein einmal grund-konfigurierter master dann später nicht wieder probleme macht?

danke & ich bin noch für vorschläge offen.
günter


#4

Um dann gleich mal blöd zurück zu fragen: und wer garantiert Ihnen, dass eine manuelle LXC-Installation, die von Univention so nicht supportet wird, nicht in Zukunft Probleme machen wird? Wenn Sie eine von Univention unterstützte (und damit zukunftssichere) Installation wollen, dann nutzen Sie das Docker-Image.

BTW, wenn Sie das Dockerfile haben wollen, so fragen Sie doch mal bei Univention nach. Wenn ich das Wiki richtig lese, so vermute ich, dass sie damit keinerlei Probleme hätten — die Docker-Sachen aber momentan auf nur von intern erreichbaren Servern lagern. Dieser Bug hier ist vermutlich auch obsolet; eine Nachfrage dort nach dem Dockerfile wäre aber vermutlich auch nicht verkehrt.


#5

Bei mir das gleiche.

Deshalb habe auch ich unter dem “Bug” 39870 entsprechende Informationen erfragt.

Ich versuche mal, eines der offiziellen Docker-Images zu konvertieren.


#6

Arvid Requate hat uns ein paar hilfreiche Informationen zur Verfügung gestellt, wie die Docker-Images erstellt werden. Das Exportieren der Docker-Container funktioniert jedoch auch. Es folgt eine kurze Zusammenfassung der dafür nötigen Schritte.

[ul]

  1. UCS als regulären Docker-Container einrichten; einschließlich UCS-Aktualisierung und -Installation.
  2. docker export
  3. Resultierende tar-Datei an den gewünschten Ort entpacken
  4. chroot

ucr set interfaces/eth0/address=192.168.1.254 ucr set interfaces/eth0/netmask=255.255.255.0 ucr set interfaces/eth0/broadcast=192.168.1.255 ucr set interfaces/eth0/network=192.168.1.0 ucr set interfaces/eth0/type: static ucr set interfaces/primary: eth0 ucr set gateway=192.168.1.1 ucr set nameserver1=192.168.1.254 ucr set nameserver2=192.168.1.253 (falls hier ein ucs-backup läuft) ucr set nameserver3= ucr set nameserver4= ucr set hostname=ucs ucr set domainname=domain.tld ucr set appcenter/docker=false
5. lxc-Container konfigurieren und starten
6. UCS-Konfiguration per Univention Management Console prüfen und ggf. anpassen. Auch die Konfiguration im UCS-Directory anpassen.
7. ggf. Apps aus dem App Center installieren, die nicht auf Docker basieren.[/ul]

Auf diesem Weg habe ich (einen nach dem anderen) erfolgreich einen UCS-Master und dann einen UCS-Backup (ucs-generic-amd64) eingerichtet sowie mit der Domäne des UCS-Masters verbunden. Die resultierenden LXC-Container funktionieren sowohl mit Proxmox VE (also unter Debian Jessie), als auch mit dem Virt-Manager (Ubuntu 16.04).

Hinweis: Dass Proxmox VE direkt in die Netzwerkkonfiguration der LXC-Container eingreift, bringt leider UCS ein wenig durcheinander. Die UCR-Variablen address, netmask, broadcast, network und gateway sind nach dem Start des Containers nicht gesetzt. Abhilfe verschafft, die entsprechenden Variablen per /etc/rc.local beim Start des Containers neu setzen zu lassen.

Einer der nächsten Testschritte wird sein, ob sich UCS-Docker-Apps in einem UCS-basierten LXC-Container betreiben lassen.


#7

Mit den vorhanden Infos ist es gelungen, ein generic 4.1 docker image auf 4.2 upzugraden, ohne es vorher zu konfigurieren -> universal install-tar-ball für docker und LXC ohne Rollenzuweisung

#Vorgehensweise:

Vorbereitung:

  1. start eines ucs-generic-4.1 dockercontainers (auf dem host)
    wie hier beschrieben: docker image
  2. aktualisierung des containers: (betreten des Containers)
    univention-upgrade --noninteractive```
3. reinstallation des setup-wizards
``apt-get install --no-install-recommends univention-system-setup-boot
apt-get clean``
4. zurücksetzen der Konfiguration, aufruf des SetupWizards beim nächsten boot und verlassen des Containers
``univention-system-setup-boot start
exit``
5. container anhalten & exportieren als tar-ball. (auf dem Host)
``docker stop dockertest_container
docker export -o ucs-generic-4.2-0.tar dockertest_container``


## LX-Container einrichten:

* LXC erstellen
``mkdir -p /var/lib/lxc/ucs42/
btrfs sub cr /var/lib/lxc/ucs42/rootfs``
(mit BTRFS als FS des Hostes, ansonsten ```mkdir /var/lib/lxc/ucs42/rootfs``` und die entsprechende Zeile aus der config nehmen)
* Config erstellen 

cat << EOF>> /var/lib/lxc/ucs42/config

configuration - br0 - internal

lxc.network.type = veth
lxc.network.hwaddr = 00:16:3e:27:42:b0
lxc.network.link = br0
lxc.network.flags = up

configuration - br1 - external

#lxc.network.type = veth
#lxc.network.hwaddr = 00:16:3e:27:42:b1
#lxc.network.link = br1
#lxc.network.flags = up

lxc.rootfs = /var/lib/lxc/mab42/rootfs

Only with BTRFS as Host-FS

lxc.rootfs.backend = btrfs

Common configuration

lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.include = /usr/share/lxc/config/debian.jessie.conf

Container specific configuration

lxc.tty = 4
lxc.utsname = ucs42
lxc.arch = amd64
lxc.start.auto = 0
EOF


* tarball ins rootfs entpacken
``tar xf ucs-generic-4.2-0.tar -C /var/lib/lxc/ucs42/rootfs``
* minimale konfiguration der UCR

HOST=ucs42
DOMAIN=privat.domain

ucr set interfaces/eth0/address=192.168.33.22
ucr set interfaces/eth0/netmask=255.255.255.0
ucr set interfaces/eth0/broadcast=192.168.33.255
ucr set interfaces/eth0/network=192.168.33.0
ucr set interfaces/eth0/type=static
ucr set interfaces/primary=eth0
ucr set gateway=192.168.33.1
ucr set nameserver1=192.168.33.22
ucr set dns/forwarder1=192.168.33.1
ucr set hostname=$HOST
ucr set domainname=$DOMAIN
ucr set appcenter/docker=false
ucr set system/setup/boot/force/fqdn=$HOST.$DOMAIN

rm -rf /etc/univention/ssl/dockertest_container*
a2dissite default-ssl
service apache2 restart

* Per WebWizard konfigurieren

#8

@proojekte

Was hast Du dies bezüglich rausgefunden?


#9

Super Anleitung!

Ich habe in configs der LXC hosts, die ich für Bahnfahrten auf meinem Notebook vorhalte, folgendes drin:

lxc.environment = domainname=privat.domain
lxc.environment = hostname=ucs42
lxc.environment = interfaces/eth0/address=192.168.33.22
lxc.environment = interfaces/eth0/broadcast=192.168.33.255
lxc.environment = interfaces/eth0/netmask=255.255.255.0
lxc.environment = interfaces/eth0/type=static
lxc.environment = interfaces/primary=eth0
lxc.environment = gateway=192.168.33.1
lxc.environment = dns/forwarder1=192.168.33.1
lxc.environment = nameserver1=192.168.33.22
lxc.environment = rootpwd=univention
lxc.environment = appcenter/docker=false

Das /sbin/init das in den univention-Docker-hosts steck wertet das beim Starten aus :yum:

nameserver/external is übrigens bool, ich vermute nameserver1 ist gemeint.

Gruß
Daniel


#10

Hallo Daniel,
Sehr elegante Ergänzung!

Den nameserver/external hab ich geändert.
Gemeint war dns/forwarding…

Wie ist das mit system/setup/boot/force/fqdn
Ohne diesen zu setzen, war der hostname nicht im Wizard zu sehen/editierbar und es gab einen Fehler (FQDN not set)
Des weiteren war in diesem Eintrag noch der ursprüngliche Container-name gesetzt.

Gruß
günter