mecker. mecker. mecker.

pkgsrc: eine lokale, unabhängige Paketverwaltung

Da ich in den letzten Tagen sehr viele neue externe Module für meine Blog­soft­ware im­ple­men­tiert habe, bin ich immer häufiger auf das Problem gestoßen, dass Bi­blio­the­ken, wenn sie lokal in­stal­liert sind, nicht unbedingt fehlerfrei im­ple­men­tiert sind und deshalb die Pfad-Variable wei­ter­ge­sucht wird, bis der In­ter­pre­ter bei meiner globalen In­stal­la­ti­on unter /usr angelangt ist und dann dieses Paket nimmt.

Da auf dem FTP-Server aber nicht jene Module global in­stal­liert sind, gibt es häufiger Über­ra­schun­gen, dass mal wieder ein Modul nicht funk­tio­niert. Das ganze zu debuggen wird immer zeit­auf­wen­di­ger…

pkgsrc

Meine Idee ist, dass man ja Software an ein bestimmten Pfad gebunden kom­pi­lie­ren kann (per –prefix=/usr) und es vielleicht ganz nützlich ist, sich nochmal innerhalb des eigenen Nut­zer­ver­zeich­nis­ses ein root aka / zu bauen, auf dem ich als normaler Nutzer auch “root”-Rechte habe. pkgsrc ist solch ein nützliches Tool.

pkgsrc ist eine Pa­ket­ver­wal­tung, ur­sprüng­lich von NetBSD, inzwischen aber für zahlreiche andere Platt­for­men portiert, die sowohl als grund­stän­di­ge Pa­ket­ver­wal­tung z.B. in Verbindung mit apt-get oder eben als lokale Pa­ket­ver­wal­tung mit normalen Rechten arbeitet. Dabei werden Ab­hän­gig­kei­ten au­to­ma­tisch aufgelöst und Software fast so kom­for­ta­bel wie bei apt-get oder pacman her­un­ter­ge­la­den und in­stal­liert.

Derzeit umfasst das Repository 9154 Pakete, die hier gelistet sind. Pakete können dabei vor­kom­pi­liert (Bi­när­pa­ke­te) oder von Source in­stal­liert werden.
Die Pakete werden dabei ähnlich wie in einem Rolling-Release-System ständig ak­tua­li­siert, allerdings gibt es die Mög­lich­keit, einen Software-Freeze zu in­stal­lie­ren, ähnlich wie bei Debian oder Ubuntu, wo nur noch Si­cher­heits­ak­tua­li­sie­run­gen nach­ge­lie­fert werden.

Al­ter­na­ti­ven

Auf meiner Recherche bin ich erstmal am englischen Wikipedia-Eintrag zur Pa­ket­ver­wal­tung hängen geblieben, und habe das als Aus­gangs­punkt für meine Recherche genommen.

Viele weitere Al­ter­na­ti­ven zu pkgsrc habe ich aber nicht gefunden:

Beispiel: In­stal­la­ti­on von Python im Home-Ver­zeich­nis

Bei der In­stal­la­ti­on habe ich mich für die Pfade ~/pkgsrc als Wur­zel­ver­zeich­nis und ~/net als In­stal­la­ti­ons­ver­zeich­nis für die pkgsrc-Kom­po­nen­ten (Repository usw.) ent­schie­den.

In­stal­la­ti­on von pkgsrc

pkgsrc kann über einen Tar-Ball oder über CVS bezogen werden. Ich habe mich für CVS mit den ak­tu­ells­ten Software-Releases ent­schie­den:

$ cd ~
$ env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout net

#resultiert in ca. 650 MiB Daten

$ ls net/
archivers/   comms/       doc/          geography/    Makefile     net/        README      textproc/
audio/       converters/  editors/      graphics/     math/        news/       regress/    time/
benchmarks/  cross/       emulators/    ham/          mbone/       packages/   security/   wm/
biology/     CVS/         filesystems/  inputmethod/  meta-pkgs/   parallel/   share/      www/
bootstrap/   databases/   finance/      lang/         misc/        pkglocate*  shells/     x11/
cad/         devel/       fonts/        licenses/     mk/          pkgtools/   sysutils/
chat/        distfiles/   games/        mail/         multimedia/  print/      templates/

Als nächstes muss nun unser lokales root ein­ge­rich­tet werden:

$ ./bootstrap --workdir ~/pkgsrc --prefix ~/pkgsrc/usr --pkgdbdir ~/pkgsrc/var/db \
  --sysconfdir ~/pkgsrc/etc --varbase ~/pkgsrc/var --unprivileged

Das dauert eine Weile und richtet unter ~/pkgsrc etwas ähnliches wie unter / ein. Mit dazu wird eine Abwandlung von make in­stal­liert: bmake. Das liegt in ~/pkgsrc/bin/ und dient zum Bauen und In­stal­la­ti­on der Software.

Da sich unser lokales root noch nicht in unseren Pfad-Variablen befindet, es aber auch nicht von Vorteil ist, gleich alles unter ~/pkgsrc/bin hin­zu­zu­fü­gen, habe ich mir einen Alias geschaffen: alias bmake=~/pkgsrc/bin/bmake

Das war’s soweit. Wir haben nun ein lokales root aka / und einen lauf­fä­hi­gen Pa­ket­ma­na­ger.

In­stal­la­ti­on von python

Wenn man sich das Ver­zeich­nis-Listing von ~/net oben anschaut, so kann man gut erkennen, dass es eine ähnliche Struktur wie bsw. das Software-Repository von portage hat. Über find . | grep keyword kann relativ kom­for­ta­bel nach Software gesucht werden.

Python befindet sich in z.B. lang/python26/. Die In­stal­la­ti­ons­rou­ti­ne ist sehr simpel:

$ cd ~/net/lang/python26
$ bmake
#Abhängigkeiten werden aufgelöst, Pakete lokal kompiliert
$ bmake install

#Cleanup der Sources
$ bmake clean
$ bmake clean-depends

Schon ist python in­stal­liert und kann über ~/pkgsrc/usr/bin/python2.6 aufgerufen werden und hat keine externen Module oder Bi­blio­the­ken in­stal­liert - absolut keine!

blog comments powered by Disqus