GästebuchIhr Eintrag in unser Gästebuch KontaktNehmen Sie Kontakt mit den Autoren auf ArchivAlle Unixwerk- Artikel seit 2003
10. Januar 2014

Erweiterung der Paketverwaltung...

Inhalt

  1. listpkg
  2. archivepkg
  3. /etc/bash_completion erweitern
  4. Alles schon fertig: Das Slackware-Paket «pkgaddons»

 

I. listpkg

Die Informationen über installierte Pakete befinden sich bei Slackware im Verzeichnis /var/adm/packages. Die Skripts, die bei der Installation ausgeführt wurden, im Verzeichnis /var/adm/scripts. Unter Slackware greifen die Befehle

 installpkg
 upgradepkg
 removepkg
 pkgtool

auf diese Verzeichnisse (sowie /var/adm/removed_packages und /var/adm/removed_scripts) zu. Um einen Überblick über installierte Pakete und deren Version zu bekommen, muss man aber mit normalen Shell-Kommandos arbeiten. Beispiele:

  1. Welche KDE-Version ist installiert?

    darkstar# ls /var/adm/packages | grep kdebase
    
    kdebase-3.1-i386-4

    Antwort: Version 3.1

  2. Ist "libgd.so" installiert?

    darkstar# cd /var/adm/packages 
    
    darkstar# grep -w libgd.so *
    libgd-1.8.4-i386-1:usr/lib/libgd.so.1.8.4

    Antwort: ja

  3. Zu welchem Paket gehört die Bibliothek "libstdc++.so.2.8.0"?

    darkstar# cd /var/adm/packages 
    darkstar# grep -w libstdc++.so.2.8.0 *
    cxxlibs-5.0.2-i386-1:usr/i386-slackware-linux/lib/libstdc++.so.2.8.0
    libc5-5.4.46-i386-1:usr/i386-slackware-linux-gnulibc1/lib/libstdc++.so.2.8.0

    Antwort: Zwei Pakete enthalten eine solche Bibliothek: cxxlibs-5.0.2-i386-1 und libc5-5.4.46-i386-1

  4. Welche Dateien gehören zum Paket "xfree86-xnest-4.3.0-i386-1"?

    darkstar# cd /var/adm/packages 
    darkstar# cat  xfree86-xnest-4.3.0-i386-1
    PACKAGE NAME:     xfree86-xnest-4.3.0-i386-1
    COMPRESSED PACKAGE SIZE:     1249 K
    UNCOMPRESSED PACKAGE SIZE:     3340 K
    PACKAGE LOCATION: /packages/slackware/x/xfree86-xnest-4.3.0-i386-1.tgz
    PACKAGE DESCRIPTION:
    xfree86-xnest: xfree86-xnest (a nested X server)
    xfree86-xnest:
    xfree86-xnest: Xnest is an experimental nested server for X that acts as both a 
    xfree86-xnest: client and a server.  Xnest is a client of the real server which
    xfree86-xnest: manages windows and graphics requests on its behalf.  Xnest is a
    xfree86-xnest: server to its own clients.  Xnest manages windows and graphics 
    xfree86-xnest: requests on their behalf.  To these clients Xnest appears to be a 
    xfree86-xnest: conventional server.
    xfree86-xnest:
    xfree86-xnest:
    xfree86-xnest:
    FILE LIST:
    ./
    usr/
    usr/X11R6/
    usr/X11R6/bin/
    usr/X11R6/bin/Xnest
    install/
    install/slack-desc

    Antwort: /usr/X11R6/bin/Xnest

Mit einem kleinen Shellskript lassen sich diese Aufgaben vereinfachen, so dass man die Slackware-Paketbasis ebenso komfortabel durchsuchen kann wie die Debian- oder RPM-Paketbasis: listpkg

Dies Skript sollte dann an eine passende Stelle im Dateibaum kopiert und ausführbar gemacht werden:

darkstar# cp listpkg /usr/sbin

darkstar# chmod a+x /usr/sbin/listpkg 

So kommt man nun an die Antworten von oben:

  1. Welche KDE-Version ist installiert?

    darkstar# listpkg -s kdebase
    
    Path: /var/adm/packages
    
    Package                  Version           Size
    =========================================================
    kdebase                  3.1              37590 kB

    Antwort: Version 3.1

  2. Ist "libgd.so" installiert?

    darkstar# listpkg -f libgd.so
    
    Path: /var/adm/packages
    
    libgd-1.8.4-i386-1:usr/lib/libgd.so.1.8.4

    Antwort: ja

  3. Zu welchem Paket gehört die Bibliothek "libstdc++.so.2.8.0"?

    darkstar# listpkg -f libstdc++.so.2.8.0
    
    Path: /var/adm/packages
    
    cxxlibs-5.0.2-i386-1:usr/i386-slackware-linux/lib/libstdc++.so.2.8.0
    libc5-5.4.46-i386-1:usr/i386-slackware-linux-gnulibc1/lib/libstdc++.so.2.8.0

    Antwort: Zwei Pakete enthalten eine solche Bibliothek: cxxlibs-5.0.2-i386-1 und libc5-5.4.46-i386-1

  4. Welche Dateien gehören zum Paket "xfree86-xnest-4.3.0-i386-1"?

    darkstar# listpkg xfree86-xnest
    
    Path: /var/adm/packages
    
    Contents of package xfree86-xnest:
    =========================================================
    PACKAGE NAME:     xfree86-xnest-4.3.0-i386-1
    COMPRESSED PACKAGE SIZE:     1249 K
    UNCOMPRESSED PACKAGE SIZE:     3340 K
    PACKAGE LOCATION: /packages/slackware/x/xfree86-xnest-4.3.0-i386-1.tgz
    PACKAGE DESCRIPTION:
    xfree86-xnest: xfree86-xnest (a nested X server)
    xfree86-xnest:
    xfree86-xnest: Xnest is an experimental nested server for X that acts as both a 
    xfree86-xnest: client and a server.  Xnest is a client of the real server which
    xfree86-xnest: manages windows and graphics requests on its behalf.  Xnest is a
    xfree86-xnest: server to its own clients.  Xnest manages windows and graphics 
    xfree86-xnest: requests on their behalf.  To these clients Xnest appears to be a 
    xfree86-xnest: conventional server.
    xfree86-xnest:
    xfree86-xnest:
    xfree86-xnest:
    FILE LIST:
    ./
    usr/
    usr/X11R6/
    usr/X11R6/bin/
    usr/X11R6/bin/Xnest
    install/
    install/slack-desc
    
    Path: /var/adm/scripts
    
    Installscript xfree86-xnest (/install/doinst.sh)

Und hier gibt's das Skript:

d listpkg

 

II. archivepkg

Mit archivepkg lässt sich ein installiertes Paket wieder zusammenpacken, um es beispielsweise woanders zu installieren:

darkstar# archivepkg xcalendar-4.0-i386-1 

Path: /var/adm/packages

== Packing files:
./usr/X11R6/lib/X11/app-defaults/XCalendar
./usr/X11R6/lib/X11/xcalendar/larrow.xbm
./usr/X11R6/lib/X11/xcalendar/qmark.xbm
./usr/X11R6/lib/X11/xcalendar/quit.xbm
./usr/X11R6/lib/X11/xcalendar/rarrow.xbm
./usr/X11R6/lib/X11/xcalendar/xcalendar.hlp
./usr/X11R6/bin/xcalendar

== Updating //package_descriptions:

Im aktuellen Verzeichnis befindet sich dann das Paket gepackt als xcalendar-4.0-i386-1.tgz und eine Datei package_descriptions, die die Paketbeschreibung enthält.

Im Gegensatz zu listpkg benötigt archivepkg als Argument den kompletten Paketnamen (inclusive Version, Architektur und Zähler). Um sich die ganze Tipperei zu ersparen (außerdem hat man die Versionsnummer etc. auch nicht gerade im Kopf) empfiehlt es sich die unter III. beschriebene bash_completion zu nutzen.

Und hier gibt's das Skript:

d archivepkg

 

III. /etc/bash_completion erweitern

Damit die neuen Befehle komfortabel genutzt werden können, sollte bash_completion installiert werden. Dazu muss die Slackware-CD mit den Extra-Paketen eingelegt bzw. die Extra-Pakete in irgendein Verzeichnis kopiert werden:

darkstar# installpkg extra/bash-completion-20030209/bash-completion-20030209-noarch-1.tgz
Installing package bash-completion-20030209-noarch-1 ([optional])... 
bash-completion: bash-completion
bash-completion:
bash-completion: Adds programmable completion to the bash shell.  A new file called
bash-completion: /etc/bash_completion will be sourced for interactive bash shells
bash-completion: adding all sorts of enhanced command completion features.  Once
bash-completion: installed, you may get a list of all commands that have associated
bash-completion: completions with 'complete -p', and examine the code for the shell
bash-completion: functions with 'declare -f'.
bash-completion:
bash-completion: bash-completion was written by Ian Macdonald .
bash-completion:

In der entsprechenden Sektion müssen dann die neuen Befehle archivepkg und listpkg verankert werden (rot dargestellt):

/etc/bash_completion (Ausschnitt)
# Slackware Linux removepkg completion
#
have removepkg && [ -f /etc/slackware-version ] &&
_removepkg()
{

        local packages cur

        COMPREPLY=()
        cur=${COMP_WORDS[COMP_CWORD]}

        COMPREPLY=( $( (cd /var/log/packages; compgen -f -- "$cur") ) )
}
[ -n "${have:-}" ] && complete -F _removepkg $filenames removepkg archivepkg listpkg &&

        complete $dirnames -f -X '!*.tgz' installpkg upgradepkg explodepkg

Hier ist die bereits gepatchte Datei /etc/bash_completion:

d bash_completion

 

IV. Alles schon fertig: Das Slackware-Paket «sysaddons»

Die hier beschriebenen Erweiterungen hat  unixwerk  für Sie zusammengepackt. Das Paket enthält neben den neuen Befehlen auch Manual-Seiten und ein Installationsskript, das die Datei /etc/bash_completion wie unter III. beschrieben, anpasst.

d sysaddons-14.1_78-noarch-1ux.txz (txz)