Seit ein paar Wochen ist das neue Paketmanagement-Werkzeug pkgng im FreeBSD-Portbaum welches das angestaubte pkg_install ersetzen wird. Möchte man schon jetzt pkgng verwenden, so kann man dieses über den Portbaum installieren. Man findet pkgng im FreeBSD-Portbaum unter ports-mgmt/pkg. Wichtig ist, dass man vorher den Portbaum aktualisiert hat, da pkgng einige Ports-Infrastruktur-Änderungen benötigt:
# cd /usr/ports/ports-mgmt/pkg && make install clean
Ist pkgng installiert, können die Informationen über die bereits installierten Ports in die Datenbank von pkgng eingelesen werden:
# pkg2ng
Registering apache-2.2.22... pkg: duplicate directory listing: /usr/local/share/doc/apache22/, ignoring
done.
Registering apache-solr-3.5.0... done.
Registering apr-devrandom-gdbm-db42-1.4.5.1.3.12_1... done.
Registering autoconf-2.68... done.
Registering autoconf-wrapper-20101119... done.
Registering automake-1.11.1... done.
Registering automake-wrapper-20101119... done.
Registering bigreqsproto-1.1.1... done.
Registering ca_root_nss-3.13.1... done.
Registering ccache-3.1.7... done.
Registering cciss_vol_status-1.09... done.
Registering compat7x-i386-7.3.703000.201008_1... done.
[...]
Registering xmlcatmgr-2.2... done.
Registering xmlcharent-0.3_2... done.
Registering xorg-macros-1.16.1... done.
Registering xproto-7.0.22... done.
Registering xtrans-1.2.6... done.
Damit der Portbaum nun auch pkgng verwendet muss die WITH_PKGNG Variable in der /etc/make.conf gesetzt werden:
# echo "WITH_PKGNG=yes" >> /etc/make.conf
Die einzelnen Funktionen von pkgng werden über Subkommandos von pkg aufgerufen:
# pkg
usage: pkg [-v] [-d] [-j <jail name or id>|-c <chroot path>] <command> [<args>]
Global options supported:
-d Increment debug level
-j Execute pkg(1) inside a jail(8)
-c Execute pkg(1) inside a chroot(8)
-v Display pkg(1) version
Commands supported:
add Registers a package and installs it on the system
audit Reports vulnerable packages
autoremove Removes orphan packages
backup Backup and restore the local package database
check Check for missing dependencies and database consistency
clean Cleans old packages from the cache
create Creates software package distributions
delete Deletes packages from the database and the system
help Displays help information
info Displays information for installed packages
install Installs packages from remote package repositories
query Query information for installed packages
search Performs a search in remote package repositories
register Registers a package into the local package database
repo Creates a package database repository
update Updates remote package repository databases
updating Displays UPDATING information for a package
upgrade Performs upgrades of package software distributions
version Summarize installed versions of packages
which Displays which package installed a specific file
For more information on the different commands see 'pkg help <command>'.
Da alle Informationen von pkgng in einer Datenbank gespeichert werden, kann diese auch gesichert und allenfalls zurückgeschrieben werden:
# pkg backup -d /tmp/pkg.db
Dumping database...done
# pkg backup -r /tmp/pkg.db.txz
Restoring database...done
Wie bei pkg_info(1) können Informationen über installierte Ports mit pkg info abgerufen werden:
# pkg info ii
ii-1.6: A minimalist FIFO and filesystem-based IRC client
# pkg info -f ii
Name : ii
Version : 1.6
Origin : irc/ii
Prefix : /usr/local
Categories : irc
Licenses : MIT
Maintainer : jlaffaye@FreeBSD.org
WWW : http://tools.suckless.org/ii/
Comment : A minimalist FIFO and filesystem-based IRC client
Flat size : 0 B
Description :
ii is a minimalist FIFO and filesystem-based IRC client. It creates an
irc directory tree with server, channel and nick name directories.
In every directory a FIFO in file and a normal out file is created.
The in file is used to communicate with the servers and the out files
contain the server messages. For every channel and every nick name there
are related in and out files created. This allows IRC communication from
command line and adheres to the Unix philosophy.
WWW: http://tools.suckless.org/ii/
Mit Hilfe von pkg version findet man heraus ob für einen installierten Port eine neuere Version zur Verfügung steht:
# pkg version -v
apache < needs updating (port has 2.2.22_4)
apache-solr = up-to-date with port
apr-devrandom-gdbm-db42 = up-to-date with port
[...]
Möchte man herausfinden von welchen Port eine Datei installiert wurde so kann dazu pkg which verwendet werden:
# pkg which /usr/local/bin/initdb
/usr/local/bin/initdb was installed by package postgresql-server-8.3.16_5
Alle Eintäge von ports/UPDATING welche das aktuelle System betreffen findet man mit pkg updating:
# pkg updating
20111219:
AFFECTS: users of lang/perl5.14
AUTHOR: skv@FreeBSD.org
lang/perl5.14 has been updated to 5.14.2. You should update everything
that depends on perl. The easiest way to do that is to use
"perl-after-upgrade" script supplied with lang/perl5.14.
Please see its manual page for details.
If you want to switch to lang/perl5.14 from lang/perl5.{8,10,12} please
follow instructions in the entry 20110517 in this file.
[...]
Durch pkg delete kann ein installierter Port deinstalliert werden:
# pkg delete ioping
The following packages will be deinstalled:
ioping-0.6
Proceed with deinstalling packages [y/N]: y
Deinstalling ioping-0.6... done
Möchte man Skripts mit Hilfe von pkgng erstellen so lohnt es sich einen Blick in die Manpage von pkg query pkg-query(1) zu werfen.
Ein grosser Vorteil von pkgng ist, dass es besser mit Paketen umgehen und diese auch aktualisieren kann. Da es zur Zeit aber noch kein offizielles Paket-Repository für pkgng gibt, werden diese Befehle zu einem späteren Zeitpunkt vorgestellt.
Mehr Informationen zu pkgng findet man in der Manpage pkg(1) und allen anderen Manpages auf die darin verwiesen wird.