HOWTO für ein debian-etch-Repository

Post Reply
Message
Author
komsomolze
Posts: 430
Joined: 03. Mar 2006 23:16

HOWTO für ein debian-etch-Repository

#1 Post by komsomolze »

HOWTO für ein debian-etch-Repository/Depot/Archiv
--------------------------------------------------------------------------------------------------------
EDIT 2007-02-15
So ein unnötiger Beitrag, :oops:
habe vorhin apt-move gefunden, welches meinen Klüngelkram auf ein breiteres Fundament stellt:

Code: Select all

# alle Pakete in den Cache schieben, dann:
apt-move update  # erstellt einen ganzen Baum in $LOCALDIR (standardmässig /mirrors/debian/...)
Jetzt müssen die Signierungen durchgeführt werden:
( http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=320827 danach gibt es bald eine Option in der Konf-Datei, zur Behebung für lokale Quellen)

Code: Select all

cd /mirrors/debian/dists/$DIST/
gpg --homedir [Verzeichnis_mit_secring.gpg] -a --yes --output Release.gpg -b Release
# 'gpg' muss jedesmal gemacht werden, da Datum+Zeit in die Release kommt.
# In die sources.list: file:/mirrors/debian $DIST main;  fertig!
Die Signierung für alle entstehenden $DIST-Unterbäume.
(jedoch muss ich die Erstellung einer Packages wählen (PKGCOMP=none), mit einer Packages.gz klappte es nicht.)
EDIT 20070804: Richtiger ist: Mit einer Packages.gz alleine funktioniert es nicht, aber mit PKGCOMP="none gzip", also beiden Versionen.

Außer apt-move gibt es noch debarchiver http://debian.wgdd.de/howto/howto-aptrep.de.html
--------------------------------------------------------------------------------------------------------





Einleitung:
Um in sarge aus lokalen debs ein Repository zu erstellen wird dpkg-scanpackages verwendet.
(siehe im debian-HOWTO: http://www.debian.org/doc/manuals/repository-howto/ )

Code: Select all

dpkg-scanpackages archives /dev/null > Packages
Die debs liegen im Verzeichnis ./archives
Die entsprechende Zeile in der sources.list waere zBsp (/REPO/archives): 'deb file:/REPO ./'

---------------------------
Anlass:
Unter etch funktioniert das (leider?) so nicht, da apt-get dieses Repository erstmal nicht "trusted" einstuft.
( http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=320827 danach gibt es bald eine Option in der Konf-Datei, zur Behebung für lokale Quellen)
Zusätzlich muss in einer signierten Release-Datei die Packages erwähnt werden.



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

Vorbereitung gpg-Schlüssel:
Es wird also ein gpg-Schlüssel gebraucht:

Code: Select all

gpg --gen-key --homedir [beliebig]		
# wird dabei kein Passwort gewählt, eignet sich der Key für eine Skript-basierte Lösung.
Der öffentliche Schlüssel pubring.gpg wird der trusted.db von apt-get hinzugefügt
(er ist im "gpg-Format"; und apt-key kann damit umgehen):

Code: Select all

apt-key add pubring.gpg
Jeder Verwender des Repository muss diesen importieren.



Paketliste:
Jetzt geht es ans Erstellen des Repos in etch-Form.
Erster Schritt ist dpkg-scanpackages:

Code: Select all

dpkg-scanpackages archives /dev/null > Packages
Nun wird eine Release auf diese Packages angepasst.
Ich gehe aus von einem Release_template:

Code: Select all

Origin: Debian-LOKAL-etch
Label: Debian-LOKAL-etch
Suite: testing
Codename: etch
Date:
Architectures: i386
Components: main contrib non-free
Description: Debian LOKAL Repository
MD5Sum:
Danach muss der Eintrag für die Packages folgen, in der Form " MD5-Summe Grösse Name". Das erledigt ein kleines Skript:

Code: Select all

Type=Packages					# Bei Versuchen mit Type=Packages.gz hat 'apt-get update' nicht funktioniert. (warum?)
cp Release_template Release

ADD_DU=`du -Db $Type | awk '{ print $1,$2 }'`	# Format: "Bytes Datei" ('-D', falls $Type ein Link ist)

ADD=`md5sum $Type | awk '{ print $1 }'`		# nur die Summe selbst wird jetzt gebraucht
echo " $ADD $ADD_DU" >> Release			# das wars

#echo SHA1: >> Release
#ADD=`sha1sum $Type | awk '{ print $1 }'`
#echo " $ADD $ADD_DU" >> Release

#echo SHA256: >> Release
#ADD=`sha256sum $Type | awk '{ print $1 }'`
#echo " $ADD $ADD_DU" >> Release

Signierung:
Es ist jetzt vorhanden: eine Packages und eine etch-formal richtige Release.
Die Release muss noch signiert werden, wobei apt-get die Signatur in Release.gpg im Klartext erwartet:

Code: Select all

gpg --homedir [Verzeichnis_mit_secring.gpg] -a --yes --output Release.gpg -b Release
'-a' fuer den Klartext, '--yes' damit ohne Nachfrage eine vorhandene Datei überschrieben wird.
(Ohne '--output' wuerde eine Release.asc erstellt.
Diese müsste in Release.gpg umbenannt oder verlinkt werden: 'ln -s Release.asc Release.gpg')

Die von dpkg-scanpackages erstellte Packages enthält nicht die "Tag:"-Zeilen.
Dazu braucht es die override-Dateien (im Indices-Verzeichnis eines Debian-Servers).



------------------------------------------------------------------------------------------------
Obiges habe ich in einem Skript verpackt, mit dem ich Debian-Pakete von sarge und etch verwalte.
Der Test im Autoclean-Teil "von--bis" sorgt dafuer, dass das Skript gestoppt wird
um nicht zBsp. von etch aus das sarge-Archiv zu leeren.

>> Bei einem Repository mit eigenen oder Nicht-Debian-Paketen muss der Autoclean-Teil "von-bis" ausgelassen werden!

Code: Select all

#!/bin/bash
#Wed Jul 12 20:56:15 CEST 2006
#Tue Jan 30 11:00:26 CET 2007

Type=Packages							# bei mir arbeitet 'update' nicht mit Packages.gz (warum?)
DTE=`date +%F_%H-%M`
DIST=etch; NUM=4.0

# von
[ "$(cat /etc/debian_version)" = "$NUM" ] || { echo Falsche Distribution; exit 1; }
[ `mv /var/cache/apt/archives/*.deb archives/ 2>/dev/null` ] || [ $Type -nt archives/ ] && {
echo Keine Veraenderungen in archives/; exit 0;
}
ohneLOKAL=/LOKAL/$DIST/ohneLOKAL.list
sed 's|^\(deb.*LOKAL.*\)|#\1|' /etc/apt/sources.list > $ohneLOKAL
aptitude	-o Dir::Etc::SourceList="$ohneLOKAL" -o Dir::Cache::Archives="/LOKAL/$DIST/archives" autoclean
echo "---------"
# bis

rm Packages Packages.gz
dpkg-scanpackages archives /dev/null > Packages
gzip -n -c Packages > Packages.$DTE.gz		# fuer Archivierung; und vimdiff arbeitet nur mit *.gz, nicht mit *.gz.$DTE

cp Release_Template Release
#echo MD5Sum: >> Release
ADD_DU=`du -Db $Type | awk '{ print $1,$2 }'`			# Format: "Bytes Datei" ('-D', falls $Type ein Link ist)
ADD=`md5sum $Type | awk '{ print $1 }'`
echo " $ADD $ADD_DU" >> Release


gpg --homedir LOKAL-$DIST-Key -a --yes --output Release.gpg -b Release

dselect update
    # 'dselect', da es die apt.conf-Option fuer '--no-list-cleanup' beachtet, was aptitude nicht macht.
    # Ansonsten kann je nach Geschmack dafuer apt-get, aptitude oder was-weiss-ich verwendet werden.

--------------------------------------------------------------------------------------------------------
EDIT 2007-02-15
So ein unnötiger Beitrag, :oops:
habe vorhin apt-move gefunden, welches den Klüngelkram hier auf ein breiteres Fundament stellt,
Außer apt-move gibt es noch debarchiver http://debian.wgdd.de/howto/howto-aptrep.de.html :wink:
mfg komsomolze

Post Reply