Dokument: LST_Packages_HOWTO
Archive-Server: ftp.uni-erlangen.de
Achive-Name: pub/Linux/LST.Distribution/infos/LST_Packages_HOWTO
Maintainer: ftplinux@rrze.uni-erlangen.de (Ralf Flaxa)
Last-Modified: 11.04.94

Dieses Dokument enthaelt wichtige Informationen und Konventionen (policies)

Uebersicht
----------
A) Allgemeines
B) Wie sind LST Packages aufgebaut
C) Wie werden LST Packages gepackt
D) Automatische Sicherung beim Update
E) Konventionen und neuer Filesystem-Standard

A) Allgemeines
--------------

Neue Pakete/Entwicklungen/Fixes koennen abgelegt werden in

	ftp.uni-erlangen.de:/pub/Linux/incoming

Dazu bitte eine mail an ftplinux@rrze.uni-erlangen.de mit kurzer Beschreibung
senden.


B) Wie sind LST Packages aufgebaut
---------------------------------------
Nun, zunaechst einmal sind die LST Packages ganz gewoehnliche, mit gzip
komprimierte tar Archive, d.h. .tgz als Endung steht fuer .tar.gz.
Verwaltet, d.h. eingepackt, protokolliert und ausgepackt werden diese
Archive von dem Skript /usr/bin/sysinstall. Wichtige Verwaltungsinformationen
ueber die Pakete werden dabei in dem Teilbaum /install bzw. /install/update
abgelegt.
(bei Gelegenheit werde ich da mal genauer darauf eingehen, im Moment sei
ein Blick in das sysinstall-Skript empfohlen).
Im Gegensatz zu gewoehnlichen tar-Archiven, die ohne eine Interpretation des
Inhalts mit "tar xvf ..." ausgepackt werden, untersucht das sysinstall-Skript,
ob es Dateien mit einem bestimmten "magischen" Namen im Archiv findet und
fuehrt dementsprechend zusaetzliche Aktionen durch. 
Sei der Name des Paketes "beispiel.tgz".
Sei das Paket Bestandteil eines Updates auf LST Version 1.8
Im Moment haben folgende Dateinamen, wenn Sie in dem Paket "beispiel.tgz"
gefunden werden, eine "magische Bedeutung" :

install/dobefore.sh	

	Enthaelt ein Shellskript, das VOR dem Auspacken des tar-Archives 
	ausgefuehrt wird. Danach wird das Skript mit 
	mv /install/dobefore.sh /install/update/1.8/scripts/beispiel.dobefore.sh
	gesichert. (bei Update auf 1.8, sonst entsprechend 1.9 etc.)

	Beispiel: 
	typisches Fall von "dobefore.sh" waere eine Ueberpruefung,
	ob ueberhaupt gewisse Voraussetzungen erfuellt sind, damit das Paket
	beispiel.tgz auch funktionieren kann, also ob gewisse library-Versionen
	oder Hilfsprogramme vorhanden sind. Man kann sonst gewisse Fehler-
	meldungen oder Warnungen ausgeben. Wenn der exit-Status von dobefore.sh
	UNGLEICH 0 ist, so wird das Paket "beispiel.tgz" NICHT ausgepackt und 
	installiert. Also koennte man etwa folgendes in dobefore.sh finden:
		if irgendetwas nicht in Ordnung mit den Voraussetzungen then
			echo "Warnung ! Voraussetzung XY nicht erfuellt"
			exit 1
		else
			echo "Voraussetzungen in Ordnung" (optional)
			exit 0
		fi
	
	Ausserdem koennte man von gewissen Dateien, die von dem Paket
	ueberschrieben oder veraendert werden, zusaetzliche Sicherheitskopien
	erzeugen. Beachte allerdings dabei die Standardsicherungen im
	Kapitel "Automatische Sicherung beim Update".

	Beispiel:
	In beispiel.tgz sei ein /etc/rc.local enthalten, also koennte
	man zur Sicherheit in dobefore.sh ein
	cp /etc/rc.local /etc/rc.local.mysave
	ausfuehren.

install/doafter.sh

	Enthaelt ein Shellskript, das NACH dem Auspacken des tar-Archives
	ausgefuehrt wird. Danach wird das Skript mit 
	mv /install/doafter.sh /install/update/1.8/scripts/beispiel.doafter.sh
	gesichert. (bei Update auf 1.8, sonst entsprechend 1.9 etc.)

	Beispiel: 
	Ein typisches Fall von "doafter.sh" waere das Einrichten oder
	Umbiegen symbolischer Links auf die soeben neu installierte Version.
	Zeigt zum Beispiel der aktuelle Link von /lib/libc.so.4 auf 
	/lib/libc.so.4.5.8 und enthaelt beispiel.tgz eine neue Version der libc,
	also /lib/libc.so.4.5.21, so wird diese ausgepackt und in doafter.sh
	kann man dann mit einem Befehl
	ln -sf /lib/libc.so.4.5.21 libc.so.4
	den Link auf die neue Version umbiegen.

install/doinst.sh

	Wird nur noch aus Kompatibilitaetsgruenden mit SLS/Slackware und 
	aelteren LST Versionen unterstuetzt. Enthaelt ebenfalls ein 
	Shellskript, das NACH dem Auspacken des tar-Archives und vor der
	Ausfuehrung von install/doinst.sh ausgefuehrt wird.

 
C) Wie werden LST Packages gepackt
---------------------------------- 

Moeglichkeit 1: mit "sysinstall -extract paketname"

	(Vorsicht ! Die alte Version von sysinstall (v. 14.Dez 93) hat
	noch einen Bug, bei dem das magische Skript install/doinst.sh
	auch beim Packen eines Paketes ausgefuehrt wird ! Also in diesem
	Falle eine aktuellere Version besorgen oder Moeglichkeit 2
	waehlen, es sei denn, man verwendet nicht install/doinst.sh, 
	was mit install/dobefore.sh und install/doafter.sh ja auch nicht
	mehr noetig ist. Die neue sysinstall-version werde ich in Kuerze
	im channel announcen).
	Alle Dateien (incl. vollstaendige Pfade), die in das Paket 
	"beispiel.tgz" sollen, in einer Datei /install/beispiel auflisten.
	Pfade allerdings OHNE fuehrenden Slash, also z.B.

	home/ralf/.emacs
	home/ralf/.xinitrc
	home/ralf/myfile
	install/dobefore.sh

	Danach "sysinstall -extract beispiel" von beliebiger Stelle aus
	aufrufen. Nach einigen Sekunden erscheint im aktuellen Verzeichnis
	ein Paket beispiel.tgz. Fertig !

Moeglichkeit 2:

	Alle gewuenschten Dateien in einen separaten Teilbaum kopieren, 
	z.B. /tmp/packtree
	
	analog zum obigen Beispiel muesste man in diesem Falle (als root):

	cd /tmp/packtree
	mkdir install
	chown ... install
	chgrp ... install
	chmod ... install
	mkdir home
	chown ... home
	chgrp ... home
	chmod ... home
	cd home
	mkdir ralf
	chown ... ralf
	chgrp ... ralf
	chmod ... ralf
	cd ralf
	cp /home/ralf/.emacs .
	cp /home/ralf/.xinitrc .
	cp /home/ralf/myfile .
	cp /install/dobefore.sh /tmp/packtree/install

	und dann einpacken mit
	cd /tmp/packtree
	tar zcvf ../beispiel.tgz .

	und in /tmp/packtree liegt das gewuenschte Paket.


D) Automatische Sicherung beim Update
-------------------------------------
Wie bereits angekuendigt wird das neue sysinstall automatisch ueberpruefen,
ob bei der Installation eines Paketes bestehende Dateien ueberschrieben
werden und diese vorher sichern. Genaueres dazu werde ich bei Gelegenheit
schreiben. Per default gehen also keine Daten verloren, von denen neuere
aus dem tar-Archiv ausgepackt werden. 
Nur mit einer Option -delold werden die alten Dateien geloescht.
Dateien, die dagegen durch die Skripten install/do[before|after|inst].sh 
gemoved oder veraendert werden, werden NICHT automatisch gesichert !
Diese muessen also von den Skripten selbst gesichert werden !

E) Konventionen und neuer Filesystem-Standard
---------------------------------------------

Bitte folgende Konventionen beachten !!! 

1. Die LST Distribution wird ab sofort nur noch Pakete nach dem neuen
   Filesystemstandard herausgeben. 
   Siehe dazu auf ftp.uni-erlangen.de die Datei
	
   /pub/Linux/LST.Distribution/infos/fsstnd-1.0.ps.gz

   Die Quelle ist eigentlich 
   /pub/Linux/MIRROR.tsx-11/docs/linux-standards/fsstnd

   Es ist geplant, alles an dem neuen Filesystemstandard auszurichten. 
   Da dies aber eine Recompilierung vieler Pakete bedarf, werden wir das 
   successive durchfuehren. Deshalb bitte Pakete so packen, dass Sie dem
   neuen Filesystemstandard entsprechen.

2. Paketnamen bitte auf 8 Zeichen (+.tgz) beschraenken, da diese z.B. bei
   Installation von einer DOS-Partition sonst nicht mehr eindeutig waeren.

3. Bitte zu jedem Paket eine Binary UND eine Source Version packen. Source-
   Version sollte mit dem Buchstaben "s" beginnen.

4. Bitte, wenn moeglich, bereits im Paketnamen die Versionsnummer vermerken,
   z.B. libc4521.tgz.

5. Im Zweifelsfalle lieber den Paketnamen als die Versionsnummer abkuerzen,
   also slib4521.tgz statt slibc452.tgz
  
6. In Binarypaketen bitte wichtige READMEs in /usr/doc/paketname-versionsnr
   beigeben. 
   Bsp: /usr/doc/beispiel-1.0/README.Copyright
   und die Manuals vorformattiert und mit gzip komprimiert beigeben 
   Bsp.: /usr/man/cat1/beispiel.1.gz

   In Sourcepaketen bitte die Manuals in der Rohform, also unformattiert
   und unkomrimiert (sofern moeglich) und gemeinsam mit allen READMEs etc. 
   bei den Sourcen belassen
   Bsp.: /usr/src/beispiel-1.0/README.Copyright
	 /usr/src/beispiel-1.0/man/beispiel.1

7. Zur einheitlichen Strukturierung bitte folgenden Konventionen beachten:
   - Sourcen bitte in /usr/src/paketname-versionsnr. 
	Bsp.: /usr/src/libc-4.5.21
   - Dokus und wichtige READMEs bei Binaryversionen bitte 
     in /usr/doc/paketname-versionsnr.
	Bsp.: /usr/doc/beispiel-1.0/HISTORY

8. Neue Pakete koennen in das oben genannte Verzeichnis geladen werden.
   Bitte schreibt uns eine kurze Beschreibung, die wir in den INDEX uebernehmen
   koennen und die dann waehrend der Installation als Infotext ueber das Paket
   erscheint.

Kritik oder Anregungen zu diesem Dokument bitte an

	ftplinux@rrze.uni-erlangen.de

(Beachte ...rrze...  nicht ...informatik...  !!!)

In der Hoffnung, das diese Konventionen auch in Eurem Sinne sind

	Euer Linux Support Team (zu dem Ihr Euch auch zaehlen duerft)

------------------------------------------------------------------------------

