--------------------------------------------------------------------------------------------------------
EDIT 2007-02-15
So ein unnötiger Beitrag,

habe vorhin apt-move gefunden, welches meinen Klüngelkram auf ein breiteres Fundament stellt:
Code: Alles auswählen
# alle Pakete in den Cache schieben, dann:
apt-move update # erstellt einen ganzen Baum in $LOCALDIR (standardmässig /mirrors/debian/...)
( 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: Alles auswählen
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!
(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: Alles auswählen
dpkg-scanpackages archives /dev/null > Packages
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: Alles auswählen
gpg --gen-key --homedir [beliebig]
# wird dabei kein Passwort gewählt, eignet sich der Key für eine Skript-basierte Lösung.
(er ist im "gpg-Format"; und apt-key kann damit umgehen):
Code: Alles auswählen
apt-key add pubring.gpg
Paketliste:
Jetzt geht es ans Erstellen des Repos in etch-Form.
Erster Schritt ist dpkg-scanpackages:
Code: Alles auswählen
dpkg-scanpackages archives /dev/null > Packages
Ich gehe aus von einem Release_template:
Code: Alles auswählen
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:
Code: Alles auswählen
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: Alles auswählen
gpg --homedir [Verzeichnis_mit_secring.gpg] -a --yes --output Release.gpg -b Release
(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: Alles auswählen
#!/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,

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
