Entwicklerhandbuch/Paketbau

Aus Delixs
Version vom 18. Mai 2008, 16:48 Uhr von Schoffer (Diskussion | Beiträge) (Preseeding von Paketen)
Zur Navigation springen Zur Suche springen
Uberarbeiten Diese Seite sollte nochmals überarbeitet werden. Eine Begründung befindet sich in der Regel unter Diskussion (oben).


Leben mit Debian: Die Entwickler Richtlinien

Alles was programmiert wird, soll sich an diese Richtlinien halten. Einige Dinge wie die Paketerstellung & -verwaltung, sowie die Konfiguration des Installers müssen sich auch an die "Debian Policy" halten.


Preseeding von Paketen

Das Einstiegsdokument um das Thema anzugehen, sollte

 man 7 debconf

sein. Diese Manual-Seite ist verfügbar, wenn das Paket "debconf-doc" installiert ist.

 man debconf-devel

beschreibt ausführlich (ca. 13 DIN-A4 Seiten), wie man mit Debconf programmiert. Natürlich in einer shell. Perl Programmierer sollten das Paket "debaux-debconf" nach installieren.

In Debian wird fast alles in Manual-Seiten erklärt. Daher ist das Lesen dieser Seiten für einen Entwickler unerlässlich. Manchmal will man aber eine man-Seite nicht auf dem Schirm lesen, sondern als Papier-Ausdruck neben sich liegen haben. Das geht mit diesem Kommando:

 man -t debconf-devel | lpr -Plp0

Vorausgesetzt, man will die man Seite "debconf-devel" auf den lokalen Drucker (Warteschlange) lp0 drucken. Zwischen dem großen P und dem Drucker-Namen darf kein Leerzeichen sein. Der Drucker muss Postscript können. Aber welcher Druckertreiber unter Linux kann das nicht?

Was ist "Debconf"?

Debconf ist ein Framework das dazu dient, Pakete bzw Programme zu konfigurieren.

Es ist limitiert! Es ist keine Registry wie unter Windows. Debconf soll nur dazu benutzt werden eine sinnvolle Grundkonfiguration der Pakete einzustellen.

Woraus besteht Debconf?

Zunächst mal aus 2 Datenbanken. Eine enthält Fragen, die andere Antworten. Wenn Fragen gestellt werden sollen, muss es auch eine Möglichkeit geben, diese dem Benutzer zu präsentieren, dafür sind die Frontends zuständig. Es gibt diverse Frontends. Bekannt dürfte das "Dialog-Frontend" sein. Mein Favorit ist Gnome, KDE ist auch sehr hübsch.

Jede Frage kann in jedem Frontend dargestellt werden! Für die Frontends Gnome bzw KDE muss nicht zwingend Gnome und KDE installiert sein, eine simple VGA-Grafik mit VESA ist ausreichend.

praktisches Beispiel: Du hast ein installiertes Debian mit X-Window (die ADE reicht aus, auch wenn sie weder Gnome noch KDE hat). Knoppix oder Suse tuts auch. Selbst Windows, wenn denn cygwin installiert ist.

In einem X-Terminal Fenster ( Du bist ein normaler User, nicht root) gibst Du ein:

 xhost +

Das ermöglicht allen lokalen Usern (dies gilt nur für Debian, nicht für andere Linuxe) X-Windows Anwendungen auf Deinem X-Server zu starten.

Um die verschiedenen Frontends zu Testen, gibt man folgendes sein

 su -
 export DISPLAY=:0.0

Das aktuelle Frontend:

 dpkg-reconfigure debconf

Das Dialog Interface. Nennt sich "dialog" ist aber "whiptail" und damit also nicht Aufruf-kompatibel zu "dialog".

 DEBIAN_FRONTEND=dialog dpkg-reconfigure debconf

Die beiden grafischen Frontends

 DEBIAN_FRONTEND=gnome dpkg-reconfigure debconf
 DEBIAN_FRONTEND=kde dpkg-reconfigure debconf

Das Editor Interface mit dem allseits beliebten Editor mcedit:

 DEBIAN_FRONTEND=editor EDITOR=mcedit dpkg-reconfigure debconf

Der mcedit ist im Paket mc enthalten. Im Zweifel also ein

 apt-get install mc

durchführen.


Die Debconf Fragen sind multi-lingual. Wenn man eine Sprache wählen will, muss die Variable LANG angepasst werden, z.B.:

 LANG=C dpkg-reconfigure debconf

oder für russisch, sofern installiert

 LANG=ru dpkg-reconfigure debconf

Verfügbare Sprachen, eigentlich verfügbare Schriften, kann man erfragen mit:

 locale -a

Zurück zu Debconf, ein wichtiges Kommando ist:

 debconf-show

Ohne Parameter gibt es die Aufruf-Syntax auf. Mit

 debconf-show debconf

kann man sich anzeigen lassen, wie das Paket "debconf" konfiguriert ist. Bei mir sieht das so aus:

 debconf-show debconf
 debconf-apt-progress/preparing:
 debconf-apt-progress/title:
 debconf-apt-progress/info:
 debconf-apt-progress/media-change:
 * debconf/frontend: Gnome
 * debconf/priority: medium

In der Antwort-DB von Debconf steht also zu dem Paket "debconf" folgendes drin:

 frontend: Gnome
 priority: medium

In der obigen Ausgabe von debconf-show haben nur zwei von sechs Fragen eine Antwort hinterlegt (die beiden mit dem '*' am Anfang.

Die Debconf Datenbanken sind ASCII DBs und liegen unter /var/cache/debconf. Eine Anfrage an die Antwort-DB mit grep, ergibt dies:

 grep 'debconf/frontend' /var/cache/debconf/config.dat
 Name: debconf/frontend
 Template: debconf/frontend

Wo ist der Wert "Gnome" geblieben? Hier:

 grep -A 1 'debconf/frontend' /var/cache/debconf/config.dat
 Name: debconf/frontend
 Template: debconf/frontend
 Value: Gnome

Er steht im Feld "Value" eine Zeile tiefer.

Dafür gibt es natürlich auch ein Tool,

 debconf-get-selections |grep debconf/frontend
 debconf debconf/frontend        select  Gnome

Die Ausgabe sieht hier etwas anders aus, aber das Resultat ist dasselbe. Die Ausgabe von "debconf-get-selections" ist geeignet, um sie in einer preseed-Datei weiter zu benutzen.

Nicht immer werden alle Fragen, die hinterlegt sind, auch angezeigt. Das wird primär mit dem Schalter "DEBIAN_PRIORITY" gesteuert:

Installieren wir zunächst mal ein Paket, bei dem sich das gut demonstrieren lässt: samba

 apt-get install samba

Nun die Prioritäten testen:

DEBIAN_PRIORITY=high dpkg-reconfigure samba
DEBIAN_PRIORITY=medium dpkg-reconfigure samba
DEBIAN_PRIORITY=low dpkg-reconfigure samba

Um das Samba Paket vollständig zu entfernen muss der --purge Schalter beim "apt-get remove samba" gesetzt werden. Sonst bleiben die Antworten in der Debconf-DB erhalten. Also

apt-get --purge remove samba samba-common

Kann mit

debconf-show samba 

bzw mit

debconf-show samba-common

überprüft werden.

Das "purgen" also das Entfernen der Einträge in der Debconf-DB ist sehr wichtig, wenn man das "preseeding" Testen will.

debconf-show --listowners

zeigt alle installierten Pakete an, die Einträge in der Debconf-DB haben, debconf-show <Paketname> zeigt die Einträge für das Paket an. Hier einige Beispiele:

Die Einstellungen des Installers:

 debconf-show d-i
 debian-installer/language: de
 debian-installer/country: DE
 debian-installer/keymap: de-latin1-nodeadkeys

Die installierten Profiles von simple-cdd:

 debconf-show simple-cdd
 simple-cdd/profiles: ARK45, ARK45_devel, ARK45_CD_build

Die installierten Sprachen:

 debconf-show locales
 * locales/default_environment_locale: de_DE.UTF-8
 * locales/locales_to_be_generated: de_DE ISO-8859-1, de_DE.UTF-8 UTF-8, 
 de_DE@euro ISO-8859-15, en_US ISO-8859-1, en_US.ISO-8859-15 
 ISO-8859-15, en_US.UTF-8 UTF-8

Und um jetzt das vorher genannte Beispiel mit einer russischen GUI zu ermöglichen, muss man hier "ru_RU.UTF-8" zusätzlich auswählen und dann:

 LANG=ru_RU.UTF-8 dpkg-reconfigure debconf

Und schon kann der PC und die Anwendung (Schul-Server) russisch. Bei mir geht das leider nicht so schnell. Das klappt dann, wenn das Template dieser Frage auch russisch enthält.

Die Anworten in der Config.dat, werden immer mit LANG=C abgespeichert, also amerikanisch mit einem 7-bit Zeichensatz.

 debconf-get-selections |grep debconf/frontend
 debconf debconf/frontend        select  Gnome

Wenn diese Ausgabe in einer preseed Datei benutzt wird, wird die dazugehörige Frage nicht mehr angezeigt. Um ein Preseeding zu setzen, aber dem Benutzer trotzdem die Möglichkeit zu geben sich anders zu entscheiden, muss das "seen-Flag" für diese Frage auf false gesetzt werden:

 debconf debconf/frontend        select  Gnome
 debconf debconf/frontend        seen	false


Gruss Harry Jede



zurück | Hauptseite