Script für Installation eines *.deb-Paketes mit Abhängigkeiten

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche

Neue Methode

apt (Version 1.0 wurde released am 1.4.2014) kann lokal gespeicherte Pakete (also nicht aus einem Repo stammende Pakete) inzwischen direkt installieren:

apt install /pfad/zum/paket.deb

Anfänglich gab es jedoch Speicherorte wie ~/Downloads, die gewisse Meldungen auslösten. Als Abhilfe kann man eine Kopie des Pakets in /var/cache/apt/archives speichern und von dort installieren. Wichtige Originale bitte nicht dort aufbewahren, weil der Cache gern mal gelöscht wird, wenn der Festplattenplatz knapp wird.

Vorbemerkung

Da hat mein ein Paket aufgetrieben, und will es mit
dpkg -i PAKET.deb
installieren, geht das nicht, weil etliche Abhängigkeiten nicht befriedigt werden können. Das folgende Script erledigt das automatisch, indem ein temporäres lokales Repository erstellt wird und dann
 apt-get install PAKET 
die Arbeit erledigt.

Beschreibung

Es wird

  • ein lokales Verzeichnis /tmp/debian angelegt und das zu installierende Paket dorthin kopiert und in ein Repository gewandelt
  • das Repository in /etc/apt/sources.list.d eingetragen
  • das lokale Repository registriert (apt-get update)
  • das Paket installiert (apt-get install)
  • das Repository aus /etc/apt/sources.list.d wieder entfernt

Installation

cat <<'EOF' >/usr/local/bin/apt_deb.sh
#! /bin/bash
LIST=/etc/apt/sources.list.d/temp.list
BASE=/tmp

if [ ! -f "$1" ] ; then
        echo "Aufruf: apt_deb.sh ARCHIV"
        echo "Bsp: apt_deb.sh doodle.deb"
        exit 1
fi
NODE=$(basename $1)
FN=$(basename $NODE .deb)
if [ "$NODE" == "$FN" ] ; then
        echo "Dateityp nicht .deb"
        exit 2
fi
PACKAGE=$(dpkg --info $1 | grep Package | awk 'END { print $2}')
echo "Package: $PACKAGE"
mkdir $BASE/debian
cp $1 $BASE/debian
pushd $BASE
dpkg-scanpackages debian/ /dev/null | gzip -9 > debian/Packages.gz
echo "deb file:/tmp debian/" >$LIST
popd
apt-get update
apt-get install $PACKAGE
rm $LIST
EOF
chmod uog+rwx /usr/local/bin/apt_deb.sh

Aufruf

apt_deb.sh PAKET.deb

Beispiel

apt_deb.sh googleearth_5.1.3533.1731-0medibuntu1_amd64.deb