Warum überhaupt eine lokale Paketquelle?
Um hier mal meine eigene Erfahrung einzubringen:
Ab und zu lohnt es sich eine aktuellere Version eines Programms von Hand zu übersetzen und daraus ein Paket zu bauen. So habe ich vor ein paar Wochen den Quellcode des Ubuntu 10.10-Paketes von Firefox 3.6.6 genommen und mir daraus selbst aktuelle Pakete kompiliert, da die Version für Ubuntu 10.04 tagelang nicht in Sicht war.
Leider wurden in diesem Fall nicht ein einzelnes Paket, sondern zig Einzelpakete erstellt. Da man nicht alle Pakete benötigt, muss man erst umständlich herausfinden, welche Pakete man überhaupt installieren muss um die vorhandenen Firefox-Pakete zu aktualisieren.
Richtet man dagegen eine lokale Paketquelle ein und kopiert die selbsterstellten Pakete in das passende Verzeichnis, kann man diese Pakete ganz normal und wesentlich komfortabler per Paketmanager aktualisieren bzw. installieren oder deinstallieren.
Eine lokale Paketquelle erstellen
Im Prinzip ist das Einrichten einer lokalen Paketquelle sehr einfach. Alles was man dazu benötigt ist das Paket “dpkg-dev” und ein paar Minuten Zeit.
Zuerst muss man das Paket “dpkg-dev” installieren
sudo apt-get install dpkg-dev
Das Paket stellt das Programm “dpkg-scanpackages” bereit, welches man zwingend benötigt.
Danach muss man ein Verzeichnis anlegen, in welches man die lokalen Pakete (Die DEB-Dateien) ablegt. In meinem Fall habe ich einfach unter “/home” ein Verzeichnis angelegt :
sudo mkdir /home/debs
Natürlich kann jeder das Verzeichnis an eine beliebige andere Stelle legen (z.B. “/usr/local/debs”). Zusätzlich kann man das Verzeichnis noch als normalen Beschreibbar machen um das spätere Aktualisieren der Paketquelle etwas bequemer zu gestalten :
sudo chown Benutzername:Benutzername /home/debs
Als nächstes muss man das angelegte Verzeichnis als Quelle in den Paketmanager einbinden. Um die Sache übersichtlicher zu machen, legt man die zusätzliche Quelle nicht in der Datei “/etc/apt/sources.list”, sondern in einer eigenen Quell-Datei unter “/etc/apt/sources.list.d” ab :
echo "deb file:/home/debs ./" | sudo tee /etc/apt/sources.list.d/local.list
Alles was man jetzt noch tun muss, ist die gewünschten DEB-Dateien in das angelegte Verzeichnis zu legen und danach den folgenden Befehl im Paket-Verzeichnis auszuführen :
cd /home/debs
dpkg-scanpackages ./ > Packages
gzip Packages
Danach reicht es die Paketquellen normal per Paketmanager zu aktualisieren (z.B. per “sudo apt-get update”) um die Pakete in die Datenbank aufzunehmen. Will man zusätzliche Pakete in die lokale Paketquelle aufnehmen oder will diese daraus entfernen, kopiert oder löscht man die DEB-Dateien ins bzw. aus dem Verzeichnis und ruft danach die obige Befehlsreihe nochmals auf um die lokale Paketdatei “Packages.gz” neu zu erstellen.
Um die Sache komfortabler zu machen, kann man ein kleines Skript benutzen, welches die obige Befehlsreihe automatisiert ausführt :
#!/bin/bash
pushd /home/debs > /dev/null
rm Packages.gz
dpkg-scanpackages ./ > Packages
gzip Packages
popd /dev/null
Ich habe mir das Skript unter dem Namen “scan-debs” unter /usr/local/bin” angelegt und ausführbar gemacht :
sudo chmod +x /usr/local/bin/scan-debs