Re: Port mit allen Abhängigkeiten löschen?

From: Lars Engels <lars.engels(at)0x20.net>
Date: Sat, 11 Jan 2014 22:42:31 +0100

On Sat, Jan 11, 2014 at 04:08:06PM +0100, Oliver Fromme wrote:
> Lars Engels wrote:
> > On Fri, Jan 10, 2014 at 09:44:17PM +0100, Oliver Fromme wrote:
> > > Wie man es mit dem "neuen" pkg macht, weiß ich nicht, da
> > > ich den Fall dort noch nicht hatte.
> >
> > Da reicht ein einfaches "pkg autoremove".
> >
> > Das deinstalliert alle Pakete, die das "auto" flag gesetzt haben und die
> > nicht in der Abhängigkeitsliste eines anderen Pakets stehen.
>
> Da ich mich früher oder später leider mit dem neuen pkg
> auseinandersetzen muss, hätte ich da mal zwei Fragen ...

Warum leider? Es läuft super und endlich hat man eine vernünftige und
einfach zu bedienende Binärpaketverwaltung samt Upgrademöglichkeiten.

 
> Kann man das "auto"-Flag nachträglich manuell bei einem
> installierten Port setzen oder löschen?

Ja, mit "pkg -A 1", bzw. 0.
>
> Und kann man beim "autoremove" ein Datum bzw. ein Range
> (von-bis) angeben, so dass nur Packages entfernt werden,
> die in diesem Zeitraum installiert wurden? Und kann
> man sich die Liste der zu entfernenden Dateien ansehen
> und prüfen, bevor sie tatsächlich entfernt werden?

Ein Datum kann man nicht angeben, aber wenn man verhindern möchte, dass
bestimmte Pakete deinstalliert werden, lässt man sich mit
"pkg autoremove -n" anzeigen, welche Pakete deinstalliert würden und
sperrt mit "pkg lock $paketname" einfach die, die man behalten möchte.

 
> Und kann man die Version eines installierten Packages
> "faken", d.h. manuell ändern? (Bisher ging das einfach
> durch Umbenennen des Verzeichnisses /var/db/pkg/foo-a.b.c
> und Anpassen der entsprechenden Zeilen in +CONTENTS und
> in den +REQUIRED_BY der Dependencies.)

Ja, auch das geht. pkg(8) speichert ja alles in einer SQLite3 Datenbank,
also ruft man "pkg shell" auf und führt das hier aus:

sqlite> UPDATE packages
   ...> SET version = '23.42'
   ...> WHERE name = 'chromium';
sqlite> ^D

# pkg info chromium
chromium-23.42
Name : chromium
Version : 23.42
[...]

> Ok, das waren jetzt drei bis vier Fragen. :-)
>
> Dummerweise habe ich online keine Manpage zu pkg gefunden,
> so dass ich selbst nachschlagen könnte. Und ich will es
> nicht installieren, bevor ich nicht tatsächlich bereit zum
> Umstellen bin, um mir nichts zu "zerschießen". Ich habe
> leider einiges an Skripten, was auf die alte Infrastruktur
> (/var/db/pkg) angewiesen ist und sich nicht trivial
> anpassen lässt.

Bisher ist in 9.2 und 10.0 nur das Bootstrap pkg in /usr/sbin vorhanden.
Wird das einmal aufgerufen, wird das richtige pkg(8) heruntergeladen und
nach /usr/local/sbin/pkg installiert.
Somit werden dann auch die Manpages für pkg(8) und die jeweiligen
Unterbefehle installiert.
Aufzurufen entweder in der Art von "man pkg-shell" oder "pkg help
shell", was ebenfalls die Manpage öffnet.

>
> > Sehr praktisch ist das auch im folgenden Fall:
> >
> > Port_X ist nur mit den Default-Optionen im Repository vorhanden, man
> > benötigt aber eine spezielle Option, also ist Selbstbauen angesagt.
> > Ein "make missing" im Verzeichnis des Ports zeigt an, welche Ports als
> > BUILD_, RUN_ und LIB_DEPENDS mitgebaut werden, was u.U. sehr lange
> > dauern kann.
>
> Das kommt bei mir eher nicht vor. Ich habe dagegen öfters
> den Fall, dass ich eine Software installieren muss, die
> es in der Ports-Collection gar nicht gibt (und bei der es
> sich nicht rentiert, einen richtigen Port zu erstellen).
> Da "fake" ich dann ein Package, indem ich manuell eine Datei
> /var/db/pkg/foo-a.b.c/+CONTENTS anlege und die entsprechenden
> +REQUIRED_BY, damit Dependencies nicht versehentlich einmal
> deinstalliert werden (genauer gesagt habe ich ein Skript, das
> das für mich tut). Das wird dann zukünftig mit pkgNG wohl
> auch deutlich schwieriger, fürchte ich.

Das dürfte aber auch gehen. Du kannst relativ einfach ein Paket ohne
einen Port erstellen. Dazu musst du nur ein Verzeichnis mit der
gewünschten Verzeichnisstruktur der Software anlegen und dann die plist
sowie ein +MANIFEST mit Metainformationen über das Paket schreiben
(lassen).
Details, wie das geht, stehen in der Manpage von pkg-create(8), die
man, etwas umständlich, auch ohne installiertes pkg(8) ansehen kann:
fetch --no-verify-peer -o /tmp/ \
https://raw2.github.com/freebsd/pkg/master/pkg/pkg-create.8 && man \
/tmp/pkg-create.8

Dass das Umschreiben der vielen historischen gewachsenen Skripten eine
Menge Arbeit macht, kann ich glauben, aber pkg(8) lohnt sich wirklich,
und durch viele neue Funktionalitäten wird vielleicht das eine oder
andere Skript überflüssig.

Gruß
Lars


To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sat 11 Jan 2014 - 22:42:38 CET

search this site