Der große pkg (ehemals pkgng) Thread

Yamagi

Possessed With Psi Powers
Teammitglied
FreeBSD 9.1 steht vor der Tür und sehr wahrscheinlich wird damit "pkg" für einen großen Nutzerkreis das Licht der Welt erblicken. Dieser Thread soll alle Diskussionen um "pkg" sammeln, damit sie sich nicht über etliche einzelne Threads verteilen. Zudem können hier Fragen gestellt und Hinweise gepostet werden.

----

Was ist "pkg"?
"pkg" ist ein neuer Binärpaketmanager für FreeBSD. Er ersetzt die alten pkg_*-Tools wie zum Beispiel pkg_add und pkg_info. Bei der Entwicklung wurden die Erfahrungen diverser Paketmanager aus der Linuxwelt mit einbezogen, unter anderem dpkg / apt, pacman und yum. Das Interface orientiert sich grob an den alten pkg_*-Tools, wurde aber in großen Teilen neugestalltet.

Was ist "poudriere"?
"poudriere" ist ein System, um automatisiert ein pkg-Repository zu bauen. Es kann genutzt werden, um einen eigenen Paket-Cluster zu implementieren.

Was passiert mit den alten pkg_*-Tools?
Die Tools werden in 9.1 noch vorhanden sein und sehr wahrscheinlich wird es auch weiterhin ein Paket-Repository geben. Sie werden allerdings irgendwann in der Zukunft entfernt werden.

Kann ich "pkg" und die alten pkg_* Tools mischen?
Nein, es geht nicht. Entweder, oder!

Was passiert mit den Ports?
Nichts! Die Ports bleiben von der Umstellung weitgehend unberührt, profitieren jedoch von einigen "pkg"-Features. Dazu gehört u.A. besseren Dependency-Tracking.

Was ändert sich unter der Haube?
Alles! Die wichtigsten Punkte sind:
- Ein deutlich effizienteres Repository-Format
- Ein neues Paketformat (Endung ist .txz)
- Die Paketdatenbank in /var/db/pkg ist durch eine einzige Datei ersetzt
- Diverse Sicherheitschecks, darunter u.a. das Port A Dateien von Port B nicht länger überschreiben kann.

Lebt "pkg" im Basisystem?
Nein. Im Basissystem befindet sich lediglich ein Bootstrap-Tool, was das eigentliche "pkg" installiert. Hierdurch kann "pkg" jederzeit aktualisiert werden, die Porter sind bei der Implementierung neuer Funktionen nicht mehr an die sehr langen Release- und Support-Zyklen des Basissystems gebunden.

----

Eine Liste hilfreicher Links:
- http://wiki.freebsd.org/PkgPrimer
- http://wiki.freebsd.org/pkgng
- http://fossil.etoilebsd.net/poudriere/doc/trunk/doc/index.wiki
 
Zuletzt bearbeitet:
- Diverse Sicherheitschecks, darunter u.a. das Port A Dateien von Port B nicht länger überschreiben kann.
Das klingt sehr gut. Aber heißt das, dass damit Port A nicht mehr gebaut wird (einfach nur eine defensive Massnahme gegegen ungewolltes Überschreiben) oder dass verschiedene Versionen der scheinbar gleichen Datei auf dem System nebeneinander existieren können?
 
moin

wie upgrade ich den auf das neue system .... habe hier ein 9 stable laufen welches
ich dann auch upgrade auf 9.1 , ergoi wuerde ich gerne dort auch das neue pkg system
haben wollen.

holger
 
SolarCatcher schrieb:
Das klingt sehr gut. Aber heißt das, dass damit Port A nicht mehr gebaut wird (einfach nur eine defensive Massnahme gegegen ungewolltes Überschreiben) oder dass verschiedene Versionen der scheinbar gleichen Datei auf dem System nebeneinander existieren können?
Ersteres. Der Port baut durch, kann aber nicht installiert werden, da er vorhandene Dateien überschreibt. Ein Klassiker ist da zum Beispiel x11/nvidia-driver, der mehrere Dateien anderer Ports ersetzt: https://github.com/pkgng/pkgng/issues/253 Die betroffenen Ports werden noch angepasst werden müssen, sodass sie sich nicht mehr gegenseitig überschreiben. Das Verhindern des Überschreibens dürfte die Ports teilweise wesentlich robuster machen und einige seit Ewigkeiten vorhandenen, obskuren Probleme lösen.

mark05 schrieb:
wie upgrade ich den auf das neue system .... habe hier ein 9 stable laufen welches
ich dann auch upgrade auf 9.1 , ergoi wuerde ich gerne dort auch das neue pkg system
haben wollen.
Nachdem pkg installierst ist - sei es über die Ports aus ports-mgmt/pkg oder per /usr/sbin/pkg - führst du "pkg2ng" aus. Damit wird die Datenbank in /var/db/pkg konvertiert. Außerdem kommt noch ein "WITH_PKGNG=yes" in die /etc/make.conf. Aber Achtung! Wenn die Datenbank einmal konvertiert wurde, gibt es keinen Weg mehr zurück! Um portmaster mit pkg nutzen zu können, ist nach wie vor ein Patch notwendig: https://github.com/pkgng/pkgng/tree/master/ports Einfach in das files/ Unterverzeichnis des Portmaster-Ports und diesen neubauen. Portupgrade-Nutzer müssen port-mgmt/ portupgrade-devel installieren.
 
- Ein neues Paketformat (Endung ist weiterhin .tbz)

Klugscheiß: Das letzte mal als ich mit pkgng arbeitete war es .txz. Und das wäre ja auch gut so.

Ich habe jetzt aber immernoch nicht verstanden, ob es nun mit 9.1 default ist oder nicht. Und welchen Sinn macht es beide Tools standardmäßig auszuliefern? Das verwirrt doch nur. Warum versteckt man die alten tools nicht und setzt standardmäßig die Flag fürs Port-System?

edit: oder besser noch wrapper um PKGNG machen, die wie pkg_* aussehen. Im Idealfall merkt man garnichts ;)
 
Zuletzt bearbeitet:
Oh, ja. Natürlich .txz, ich habe mich verschrieben. :)

Wie es mit 9.1 nun genau aussehen wird, weiß ich ehrlich gesagt noch nicht. Es wäre schön, dort von aktueller Seite mal ein Statement zu bekommen. Fakt ist zumindest, dass mir erst letzten noch einmal gesagt wurde, dass pkg nun mit 9.1 kommt. Das Bootstrap-Tool ist im Basissystem, die alten Tools aber auch. Derzeit zeigt pkg noch auf http://pkgbeta.freebsd.org/ aber vielleicht ändert es sich ja noch.
 
wie ändert man den eigentlich am besten Optionen für ein Paket?
Also als Beispiel, ich möchte php + php-apache module Installieren

pkg install php5
...

wenn ich mir dann die optionen anschaue sehe ich:
pkg info -f php5
...
Options :
CLI: on
CGI: on
FPM: off
APACHE: off
...

sehr nett aber wie schalte ich das nun ein? Oder muss ich dafür ein anderes Paket installieren?

Gruß
 
Für Binärpakete wird man wahrscheinlich - auch da gibt es noch keine klare Aussage - zu Beginn nur die Standardoptionen des zugehörigen Ports haben. Wer andere Optionen möchte, wird den Port bauen müssen. Ich hoffe, dass sich das später zumindest für einige, oft angepasste Pakete wie PHP ändern wird...
 
Kriegt man das nicht so hin, wie man das unter Linux auch macht? Also PHP einfach modularisieren, und neben php auch php-mod-apache usw.
 
Jepp, hier noch mal in Kopie:
Code:
Hi,

On behalf of the pkgng team I'm really pleased to announce pkg 1.0 RC1 (aka pkgng)

Only bug fixes will be accepted in the RC phase.

What is pkg
-----------
pkg is a new package manager for FreeBSD. It is designed as a replacement for
the pkg_* tools, and as a full featured binary package manager.

It provides a library that does all the work, and a frontend to be used by users

The ports tree is already able to transparently switch to pkgng by default by
adding WITH_PKGNG=yes to your make.conf

It provides a pkg2ng tool to help converting from an old installation to a new
one.

Test repositories are available on http://pkgbeta.freebsd.org/ (I try to update
them as fast as I can)

It will live forever in the ports tree (with a binary bootstrap in 9 and 10)

Why pkg?
--------
pkg_* tools have become hardly maintainable over the time, it lacks lots of
features most of people are expecting from a package manager:
  - binary upgrade
  - ability to search information about remote packages
  - real reverse dependency tracking
  - tracking leaves
  - many more.

Third party tools
-----------------

Tools supporting natively pkgng
  - ports-mgmt/portupgrade-devel (soon the main portupgrade will support)
  - ports-mgmt/pkg_cutleaves
  - ports-mgmt/poudriere
  - ports-mgmt/portdowngrade
  - ports-mgmt/tinderbox-devel (support can be improved)

Tools supporting pkgng via a patch (I hope it will be reviewed/integrated soon)
  - ports-mgmt/portmaster (https://github.com/pkgng/pkgng/blob/master/ports/patch-portmaster-pkgng)

Tools being worked on (or I heard people are interested) :
  - salt support (in version 0.10) http://salt.readthedocs.org/en/v0.10.0/ref/modules/all/salt.modules.freebsdpkg.html
  - cfengine support
  - puppet support: (https://github.com/xaque208/puppet-pkgng)
  - ruby bindings: (https://github.com/baloo/libpkg-ruby/)
  - PackageKit

Links
-----
  - http://wiki.freebsd.org/PkgPrimer
  - http://wiki.freebsd.org/pkgng

Please report bugs in the github issue tracker:
  - http://github.com/pkgng/pkgng

Schedule
--------

The plan is to switch the ports tree to pkgng on CURRENT by default on July 25th
No dates are planned yet for other branches.

Note that there will be a NO_PKGNG knob for some time (undefined yet) for people
not will to switch on July 25th

Please also note that some ports won't work with pkgng right now, because pkgng
is more strict than pkg_install on purpose.
The major one is: nvidia drivers, because pkgng does not allow to overwrite a file
owned by another package, and we will not accept any hacks for that in pkgng.

Road to next version
--------------------

The road to the next version is already open and lots of work will happen, list
of ideas:
  - remote repositories will be able to display update messages
  - optionnal remote files repository to be able to search which packages to
    install if you want a known binary
  - real solver,
  - better support for multi repository
  - provides/requires support
  - stabilisation of the library API
  - reduce as much as possible scripting in packages to allow cross installation
  - many more :D

regards,
Bapt

Damit sind nun zumindest einige Fragen geklärt. :)
 
Paketkonflikte / Pakete ersetzen mit pkg ...?

Also ich habe hier einen Haufen Pakete, die lang/perl5.12 wollen und ein paar, die lang/perl5.14 wollen.

Ich habe beherzt das erste mit -f gelöscht und das neue installiert. Geht auch alles soweit, nur meckert es jetzt immer rum, das was inkonsitent ist und möchte andauernd wieder das alte Perl installieren. Voll der Murks, wo ist die "-o" Optione, die portmaster, porupgrade und pkg_upgrade alle haben?
 
Hast du die neue Perl-Version in die make.conf eingetragen?
Jo, ging anscheinend automatisch.
... und perl-after-upgrade ausgeführt?
Nö, bringt aber anscheinend auch nichts:
Code:
# perl-after-upgrade
-
---
Fixed 0 packages (0 files moved, 0 files modified)
Skipped 883 packages

Wie gesagt, die Programme machen ja auch alle was sie sollen. Nur pkgng vermisst das alte Perl.
 
Ist die repository "pkgbeta.FreeBSD.org" noch aktiv oder gibt es da einen anderen Server... bekomme hier "Operation timed out"

PS: Grml, jetzt geht es wieder :|
 
Zuletzt bearbeitet:
Es ist für mich nicht nachvollziehbar, weshalb im GITHUB ein Patch für ports-mgmt/portmaster existiert, aber kein Port ports-mgmt/portmaster-devel, um auch für Leute, die portmaster portupgrade vorziehen, nicht diesen unsinnigen Umweg über "selberpatchen" gehen müssen.

Schade. Wieder etwas mehr Lack ab ...

@Yamagi: Danke für Deine ausführlichen Ausführungen.
 
Zuletzt bearbeitet:
Der portmaster Entwickler steht wie es mir scheint nicht ganz hinter pkgng. Wie ich von Diskussionen auf der Mailingliste ableite scheint er mit der Dokumentation / Umsetzung von pkgng nicht zufrieden zu sein.
Deswegen hat er den Patch wohl noch nicht in portmaster einfließen lassen. Sehr schade das da so gegeneinander gearbeitet wird. Schauen wir mal was passiert wenn die letzten pkgng Probleme gelöst sind.
 
Der Maintainer ist eine etwas "schwierige" Person. Leider ist sowas unter Geeks nicht unüblich.
 
Der "patch" funktioniert bei mir nicht so, wie ich es erwarten würde. Nachdem ich mit pkg2ng das komplette /var/db/pkg-Verzeichnis konvertiert habe (es wird ja nur die SQLite3 DB erzeugt und dann der originäre Inhalt pkg nach pkg.bak verschoben), war ich geneigt ein Update mit dem gepatchten portmaster zu machen.

Erfreulich, daß portmaster nach dem Patch die pkgng-DB nutzt. Weniger erfreulich, daß ich dann in /var/db/pkg/ die "alten" Verzeichnisse für installierte Ports wiedergefunden habe - und zwar all jene, die portmaster ab der Konvertierung erneuert/revidiert hat.

Auch nicht sonderlich erfreulich (aber bereits angesprochen): der Port x11/nvidia-driver wird bei mir auf Version 304.32 gehalten, der root-Exploit ist dabei weniger das Problem (ist FreeBSD überhaupt dafür anfällig?). Leider installieren xorg-server und nvidia-driver bekanntermaßen libglx.so an gleicher Stelle und so kann ich den nvidia-Treiber leider nicht (mehr) installieren oder erneuern. Eine brachiale Methode wäre bis zur Lösung des Problems sicher ganz angebracht gewesen.:mad:

Prinzipiell habe ich keine Probleme damit, auf portupgrade auszuweichen - das Werkzeug war seinerzeit meine erste Wahl - bis dann in den Mailinglisten ob einiger Probleme Empfeglungen der "Gurus" ausgesprochen wurden, doch besser portmaster zu verwenden. Zwar ist portmaster weniger "brachial" oder "radikal" als portupgrade, ich kam allerdings besser mit der Logik klar. Aber, das muß ich auch gestehen, es gab/gibt Fälle, wo portmaster während eines abgebrochenen Updates, das in einer gewaltigen Kette von Erneuerungen endet, mal den einen oder anderen Port "vergißt", wenn etwas unvorhergesehenes passiert. Insofern, denke ich, ist es gerade mit Hinblick auf pkgng gar nicht so schlecht, mal über einen Wechsel nachzudenken ...
 
Zuletzt bearbeitet:
Außerdem kommt noch ein "WITH_PKGNG=yes" in die /etc/make.conf. Aber Achtung! Wenn die Datenbank einmal konvertiert wurde, gibt es keinen Weg mehr zurück! Um portmaster mit pkg nutzen zu können, ist nach wie vor ein Patch notwendig: https://github.com/pkgng/pkgng/tree/master/ports Einfach in das files/ Unterverzeichnis des Portmaster-Ports und diesen neubauen.

Mit dieser Anleitung hatte ich ein wenig Schwierigkeiten, weil ich mir nicht sicher war, ob ich das files/ Verzeichnis einfach anlegen "darf". Ich habe mich nun an folgende Anleitung von Michael W. Lucas gehalten.
Now build portmaster with the patch.

# cd /usr/ports/ports-mgmt/portmaster/
# make patch
# cd work/portmaster-3.13.13
# patch < $HOME/patch-portmaster-pkgng
# cd ..
# cd ..
# make all install

I keep the patch in my home directory, because any time I want to rebuild portmaster I must reapply the patch. And if the patch fails, I must check for a new patch.

Try the new portmaster:

# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> pkg-1.0.r4
===>>> New version available: pkg-1.0.r5_1
===>>> portmaster-3.13.13
...

Much better.

I’ll start by upgrading pkgng itself, then my other ports. I use:

# portmaster -d --no-confirm pkg

Use whatever portmaster options you prefer, of course. With the pkgng patch, portmaster seems to behave exactly as you expect. But the only way we’ll know for sure is if you test pkgng in your environment and file bug reports with the appropriate maintainer.

Das klappt nun alles sehr schön!

Allerdings scheint portmaster immer noch etwas in die alte pkg-db zu schreiben. Jeden Port findet man mit pkg_info als "corrupted" Eintrag. In der neuen pkg-Datenbank ist dagegen alles schick und schön und man kann das wohl getrost ignorieren.
 
Zurück
Oben