Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

Ubuntu-Debian-Pakete mit LXC erzeugen

Installation von LXC

Installation von LXC
1
sudo apt-get install lxc

Container-Partition /lxc

Dieser Abschnitt kann optional ausgeführt werden. Voraussetzung ist, dass es eine Volume Group namens “datavg” gibt und dass diese über mindestens 10 GB freien Speicherplatz verfügt.

Partition anlegen

1
2
sudo lvcreate -n lxclv -L10G datavg
sudo mkfs.btrfs /dev/datavg/lxclv

Partition einbinden

1
2
3
4
5
6
7
8
sudo -s
mkdir /lxc
echo "/dev/datavg/lxclv /lxc btrfs defaults 0 3" >>/etc/fstab
mount /lxc
rmdir /var/lib/lxc
ln -s /lxc/lib /var/lib/lxc
rm -rf /var/cache/lxc
ln -s /lxc/cache /var/cache/lxc

Rechner aktualisieren

Zunächst sollte der Rechner aktualisiert werden.

Rechner aktualisieren
1
2
sudo apt-get update
sudo apt-get dist-upgrade

LDAP-Pakete installieren

LDAP-Pakete installieren
1
2
sudo apt-get install slapd ldap-utils cpu whois
# LDAP-Administrator-Passwort: uli

LDAP-Schemas definieren

Standard-Schemas:

LDAP-Schemas definieren
1
2
3
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

Zusatz-Schema:

LDAP-Zusatzschema definieren
1
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/backend_dp.ldif

Das Zusatzschema gibt’s hier

LDAP-Daten importieren

Es müssen entweder die Grunddaten importiert werden oder aber der Datenbestand eines anderen LDAP-Servers.

Grunddaten importieren

Grunddaten importieren
1
2
3
sudo service slapd stop
sudo slapadd -c -l /root/base.ldif
sudo service slapd start

Datenbestand importieren

Dieser Schritt ist optional. Er dient primär der Übernahme eines Datenbestandes von einem bestehenden LDAP-Server.

LDAP-Daten importieren
1
2
3
sudo service slapd stop
sudo slapadd -c -l 94.out.ldif  # 94.out.ldif ist eine ältere LDAP-Sicherung
sudo service slapd start

Hilfsskripte installieren

Wir haben einige Hilfsskripte, die die Arbeit mit dem LDAP-Verzeichnis erleichtern:

  • /usr/local/bin/ldap-create-user.sh … legt einen LDAP-Benutzer an (basiert auf “cpu”)
  • /usr/local/bin/ldap-delete-user.sh … löscht einen LDAP-Benutzer (basiert auf “cpu”)
  • /usr/local/bin/ldap-modify-slapcat.sh … setzt die LDAP-Kennworte aller Benutzer in einem LDAP-Export auf “keines”
  • /etc/cpu/cpu.conf … Konfigurationsdatei für “cpu”, enthält u.a. das Admin-Kennwort von LDAP

Web-Anwendung für Kennwort-Änderung installieren

Unsere Web-Anwendung soll mit dem Apache2 betrieben werden, also spielen wir den Apache2 ein und konfigurieren ihn auch gleich.

Apache2 installieren und konfigurieren
1
2
3
4
5
6
7
8
sudo apt-get install apache2 # Web-Server Apache-2.2.22 einspielen
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/changepass
sudo jmacs  /etc/apache2/sites-available/changepass
# Einige Anpassungen vornehmen...
# - CGI: ldap/cgi-bin -> cgi-bin/ldap
sudo a2dissite default
sudo a2ensite changepass
sudo service apache2 restart

Die Web-Anwendung benötigt noch einige Perl-Module.

Perl-Module installieren
1
2
sudo apt-get install libconfig-tiny-perl
sudo apt-get install libnet-ldap-perl

Zuletzt: Web-Anwendung einspielen. Folgende Dateien werden dabei benötigt:

  • /etc/changepass.conf
  • /etc/apache2/sites-available/changepass
  • /usr/lib/cgi-bin/ldap/changepass
  • /var/www/index.html
  • /var/www/ldap/changepass.css

LDAP in Firewall freischalten

Sofern die UFW-Firewall installiert und aktiviert ist, muß der LDAP-Port freigeschaltet werden.

LDAP in Firewall freischalten
1
2
3
sudo ufw allow 389/tcp
sudo ufw allow 80/tcp
sudo ufw status

Tipps und Tricks

LDAP-Daten sichern und zurückspielen

Sichern

LDAP-Daten sichern
1
sudo slapcat -l /tmp/slapcat.ldif

Zurückspielen

LDAP-Daten zur
1
2
3
4
5
sudo service slapd stop
sudo rm -rf /var/lib/ldap/*
sudo slapadd -c -l /tmp/slapcat.ldif
sudo chown -R openldap.openldap /var/lib/ldap/*
sudo service slapd start

Neustart mit einem leeren LDAP-Bestand

Neustart mit leerem LDAP-Bestand
1
2
3
sudo service slapd stop
sudo rm -rf /var/lib/ldap/*
sudo service slapd start

Herunterladen des HTTPS-Server-Zertifikats

Herunterladen des HTTPS-Server-Zertifikats über die Kommandozeile

Den Trick habe ich von einem EclipseSource-Blog:

Herunterladen eines Server-Zertifikats
1
2
3
4
echo -n \
| openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
> my-custom-cert.cert

Prima, das erspart mir künftig einiges an Rumklickerei im Browser.

Dovecot: Aktualisierung mit Pigeonhole

Dovecot: Aktualisierung des Debian-Paketes mit Pigeonhole

Gestern oder heute wurde die Version 2.2.1 von Dovecot veröffentlicht. Natürlich habe ich gleich versucht, mein Debian-Paket zu aktualisieren:

  • cd .../dovecot-2.2.0
  • uupdate -u ../dovecot-2.2.1.tar.gz
  • cd ../dovecot-2.2.1
  • dpkg-buildpackage

Dummerweise klappt das nicht! Pigeonhole scheint zu fehlen, so dass schon die Anwendung der Quilt-Patches scheitert.

Pigeonhole für für mein Debian-Paket von Dovecot

Dovecot: Einbinden von Pigeonhole

Mein Dovecot-Debian-Paket beinhaltet u.a. auch Pigeonhole. Pigeonhole wird separat zum Herunterladen angeboten, im Debian-Paket erscheint es aber als Patch unterhalb von debian/patches. Das ist ein gewisses Problem, weil man das heruntergeladene Paket dann immer erst in einen Patch umwandeln muß.

Deshalb mein Ziel: Ich würde das Pigeonhole-Paket gerne möglichst unverändert in’s Dovecot-Debian-Paket einbinden!

Quilt für mein Debian-Paket von Git

Quilt: Umstellung der Patchverwaltung meines Git-Debian-Paketes auf Quilt

Mein Git-Debian-Paket verwendet bislang keine vernünftige Patchverwaltung. Stattdessen werden bei der Erzeugung des Paketes einfach alle Patches unterhalb von debian/diff der Reihe nach angewandt. Blöderweise fallen so gescheiterte Patchanwendungen nicht auf, außerdem werden im Source-Paket teilweise Original-Dateien modifiziert – vermutlich weil einige Patches nicht sauber zurückgerollt werden.

Also: Ich will Quilt haben!

Git Subtree (1/2)

Git Subtree – Neues DEB-Paket bereitstellen

Einleitung

Kurze Erklärung: Warum will ich’s verwenden? Warum kann ich’s nicht direkt verwenden?

Leider ist git subtree in den von mir verwendeten Pakete standardmässig nicht aktiv:

git-subtree fehlt
1
2
$ git subtree
git: 'subtree' is not a git command. See 'git --help'.

Entweder wir aktivieren es manuell oder wir bauen neue Pakete, bei denen git subtree aktiviert ist.

Manuelles Aktivieren von Git Subtree

git-subtree manuell installieren
1
2
3
4
5
6
7
8
9
$ git subtree
git: 'subtree' is not a git command. See 'git --help'.
$ sudo cp /usr/share/doc/git/contrib/subtree/git-subtree.sh /usr/lib/git-core/git-subtree
$ sudo chmod +x  /usr/lib/git-core/git-subtree
$ git subtree
usage: git subtree add   --prefix=<prefix> <commit>
   or: git subtree add   --prefix=<prefix> <repository> <commit>
   or: git subtree merge --prefix=<prefix> <commit>
...

Nachteil beim manuellen Aktivieren: Es gibt keine Online-Dokumentation, d.h. git help subtree läuft in’s Leere.

Erzeugung neuer DEB-Pakete

  • Ausgangspunkt: Build-Verzeichnis für Git-1.8.2.1 liegt vor, d.h. ich kann mit dpkg-buildpackage neue DEB-Pakete erzeugen
  • Sichtung: Wie funktioniert die Einbindung von “subtree”?
    • Die Implementierung liegt unter contrib/subtree
    • Eine Einspielanleitung gibt’s dort auch
    • Diese müssen wir “eigentlich” nur noch in debian/rules einbauen und fertig!
  • Also: Änderungen an debian/changelog und debian/rules durchführen und los geht’s mit dpkg-buildpackage (… das dauert)
  • Sichtung: Ist git-subtree in den erstellten Paketen enthalten?
    • dpkg-deb -c git_1.8.2.1*deb|grep git-core/git-subtree

Probleme

Falscher Installationspfad

  • Verwendet wird: /build/git/git-1.8.2.1/debian/git/usr/libexec/git-core
  • Richtig wäre: /build/git/git-1.8.2.1/debian/git/usr/lib/git-core
  • Korrektur durch: Setzen von libexecdir in debian/rules