Erweiterung der Paketverwaltung...
Inhalt
- listpkg
- archivepkg
- /etc/bash_completion erweitern
- 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:
- Welche KDE-Version ist installiert?
darkstar# ls /var/adm/packages | grep kdebase kdebase-3.1-i386-4
Antwort: Version 3.1
- 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
- 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
- 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:
- 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
- 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
- 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
- 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:
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:
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 |
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:
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.