Programme installieren

Sloop

Well-Known Member
Moin,

ich habe mir FreeBSD 9 installiert, um es zu erlernen und auszuprobieren. Ich halte mich dabei an das deutsche Handbuch. Momentan häng ich an einem Verständnisproblem was di e Installation von Programmen betrifft. Laut Handbuch kann man entweder durch Ports installieren, oder durch fertige Pakete. Meine Ports habe ich mit csup aktualisiert gehabt, aber testweise anschließend noch mit portsnap fetch && portsnap extract && portsnap update.

Wenn ich nun etwas bestimmtes suche, dann führe ich ein "whereis programmname" aus und wechsle in das entsprechende Verzeichnis in den Ports. Dort führe ich ein "make install clean" aus, das dauert dann natürlich entsprechend des Programmes da ja alles konfiguriert und kompiliert werden muss. Anschliessend mach ich noch ein "rehash", damit das neu installierte Programm in meiner shell auch auffindbar ist (wegen dem Pfad). Ich hoffe soweit habe ich alles richtig gemacht.

Mein Wunsch: ich würde gerne Pakete installieren, ohne auf den langen Kompilierprozess waren zu müssen. Ich möchte pkg_cutleaves als Beispiel installieren. Ich habs mit "pkg_add -r pkg_cutleaves" versucht, aber das klappt wohl so nicht, denn ich krieg die Fehlermeldung:
[quote
Fetchinf ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/Latest/pkg_cutleaves.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/All/perl-5.12.4_3.tbz... Done.
pkg_add: package 'perl-5.12.4_3' conflicts with perl-5.14.2_2
pkg_add: please use pkg_delete first to remove conflicting package(s) or -f to force installation
pkg_add: pkg_add of dependency 'perl-5.12.4_3' failed!
[/quote]

Ich versteh was er mir sagt, aber ich versteh nich wieso es dazu kommt. Sollte er mich nicht fragen, ob er das abhängige Paket auch updaten sollte, um so das Programm pkg_cutleaves vollständig installieren zu können? Ist das Verhalten normal?

Bitte nicht hauen, ich komm aus der Debian-Ecke (dpkg und apt-get) und daher bin ich noch etwas verwirrt :)

Danke im Voraus.
 
Du vermischst mit dem pkg_add Pakete und Ports. Das kann gut gehen, das kann aber auch in die Hosen gehen. Die Ports installieren automatisch Abhängigkeiten, bei dir ist so zB perl bereits in einer aktuelleren Fassung installiert als pkg_cutleaves braucht.

Mein Vorschlag: Verwende NUR ports. pkg_cutleaves liegt iirc in ports-mgmt. Ans Herz legen möchte ich dir noch "portmaster", was ebenfalls dort liegt. Damit kannst du bequem deine installierten Ports aktuell halten.

Die Pakete sind imho (!) einfach zu alt (ok, bei Debian stable auch) weshalb du dir die Zeit nehmen solltest. Irgendwann in absehbarer Zeit soll woll ein neues Paketsystem für FreeBSD kommen, damit "wird dann alles besser" :)

HTH!
Gruß
 
Also du meinst, ich sollte alle Programme die ich installiere mit "make install clena" aus den Ports installieren? Das würde bedeuten, dass wirklich jedes einzelne Programm erst kompiliert werden müsste, richtig? Das dauert ja ewig und vor allem bei GNOME, KDE oder Firefox und so würde das ja ewig dauern. Gibts keine Alternative? Auf Debian kompilier ich ja auch nicht, sondern ich nutze dessen Paketmanager 'dpkg' und installiere mir das Paket. Er erkennt welche Abhängigkeiten von Nöten sind, warnt mich und fragt mich wenn es wichtig ist.

Hmm...

EDIT: Ah ich verstehe. Ich hab mir erstmal mit "make install clean" den portmanager installiert. Ich sag jetzt einfachhalber mal frech, dass der portmanager quasi eine Art Frontend für die Ports sei. Mit folgendem Befehl kann ich also das Programm "pkg_cutleaves" installieren. Der Portmanager erkennt dabei automatisch die Abhängigkeiten und installiert die notwendigen Pakete, die für pkg_cutleaves von Nöten wären. Ich setze also ab:

Code:
portmanager ports-mgmt/pkg_cutleaves

Dann arbeitet der durch, bis er mir schließlich diese Probs zeigt...
[...]
===> Cleaning for /ports-mgmt/pkg_cutleaves
reverting bsd.port.mk patch -=>cd /usr/ports/Mk; patch -R < /usr/local/share/portmanager/patch-bsd.port.mk-0.3.6;
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------------
|--- /usr/ports/Mk/bsd.port.mk Tue Nov 8 01:02:51 2005
|+++ bsd.port.mk Wed Nov 16 02:16:57 2005
--------------------------------
Patching file bsd.port.mk using Plan A...
Hunk #1 failed at 2049.
1 out of 1 hunks failed--saving rejects to bsd.port.mk.rej
done
------------------------------
Port Status Report
------------------------------
00001 have:perl-5.14.2_2 /lang/perl5.14
CURRENT
00002 have:pkg_cutleaves-20090810 /ports-mgmt/pkg_cutleaves
CURRENT
===============
portmanager 0.4.1_9 INFO: all ports are up to date

Was ist da passiert? Ich hab den Befehl nochmal laufen lassen, dann erschien dieser Fehler am Ende nicht mehr. Anschließend noch ein "rehash" und pkg_cutleaves ist nun vorhanden. Was ist aber schiefgelaufen?? Muss ich mir Sorgen machen?
 
Zuletzt bearbeitet:
Meinst du mit "FreeBSD 9" Stable, oder FreeBSD 9.0? Mit Stable, oder mit FreeBSD 9.1 RC-1 kannst du schon das "neue" package system tool "pkg" benutzen bzw. das bootstraping tool ist schon im Basissystem vorhanden. Andernfalls muesstes du es erst aus den ports installieren. Dir als Debian Nutzer wird das sicher eher liegen, da es repositories verwendet und im Prinzip die selben Faehigkeiten zur Aufloesung von komplexen Abhaengigkeiten und Updates der Pakete wie die klassischen Linux package manager bietet. Bedenke aber das es inkompatibel zu den klassischen pkg_* tools ist, weil es voellig neuentwicklung wurde, um auf die komplexer gewordenen Probleme der Paketverwaltung einzugehen. Ausserdem befindet es sich im Moment immernoch in der Testphase. Die offiziell erste Version wird wohl erst mit FreeBSD 1.0 erscheinen, aber nach meinen Erfahrungen ist es schon ziemlich ausgereift. pkg_cutleaves wird damit, nebenbei gesagt auch ueberfluessig. ;)

Dein Problem oben, ist wohl das du schon eine aktuellere Perl Version installiert hast als die gegen die die Pakete gebaut wurden. Deshalb versuchte er auch diese Version zu installieren, was natuerlich scheitert, da sie schon installiert ist.
Das Phaenomen, das Ports beim zweiten mal erst "durchbauen" kann viele Ursachen haben. Manchmal kommt halt da was durcheinandern, besonders wenn man neu in dem System ist. Ein make clean loescht alle work Verzeichnisse und die evtl. falsch gebaut, oder gelinkt wurden. Deshalb kann es dann nach einem zweiten Lauf funktionieren.
 
öööhm, gute Frage nächste Frage :) also
Code:
uname -a

mein dazu:
FreeBSD 9.0-RELEASE

Danke für deine ausführliche Erklärung. pkg scheint also in dem Falle wirklich all diese Probleme zu lösen, ich bin gespannt.
 
@s-tlk: kannst du mir vllt. noch den Unterschied zwischen FreeBSD9 Stable und 9.0 erklären. Wie verhält sich das nun? und wie überprüfe ich, ob ich den von dir genannten neuen Paketnamanger nutzen kann oder nicht?
 
FreeBSD-STABLE bezeichnet immer die letzte "Spitze" des 9er Zweiges von FreeBSD. Daraus wird dann jeweils zu einem bestimmten Zeitpunkt ein RELEASE erzeugt.

FreBSD 9.0-RELEASE ist dann die offiziell freigegebene Version 9.0.

Hier einmal grafisch:
freebsd-branches.png
 
Hab ich jetzt noch nicht wirklich begriffen wenn ich ganz ehrlich bin. Also ist FreeBSD 9.0-RELEASE undgleich FreeBSD-STABLE (aus heutiger und aktueller Sicht) ? Mein uname -a hat mir FreeBSD 9.0-RELEASE ausgespuckt. Was ist dann FreeBSD-Stable ? Ist es nicht dasselbe?
 
Also: Die eigentliche Entwicklung und alle Neuerungen werden in CURRENT gemacht, der waagerechte Pfeil oben in der Grafik.
Von CURRENT wird dann zu einem Zeitpunkt X ein neuer Zweig erstellt, oben z.B. der 4er Zweig wird dann zum 4.0-RELEASE. An einem RELEASE wird nichts mehr geändert, von Patches für kritische Sicherheitslücken abgesehen.
Neuigkeiten, die in CURRENT eingehen, werden dann, sofern möglich, auf die Zweige zurück portiert, ein sog. MFC = Merge From Current, jedoch _nicht_ mehr in ein RELEASE, sondern in STABLE.
STABLE bezeichnet den neuesten Stand eines Zweiges, du hast in STABLE also i.d.R. neuere Treiber und Features als im vorherigen RELEASE.
Zu einem Zeitpunkt y wird dann aus einem STABLE, nachdem es sich als stabil genug erwiesen hat, ein weiteres RELEASE, also dann z.B. 4.1.

Die Grafik ist allerdings schon einige Jahre alt, heute sind wir bei 10-CURRENT und haben noch einen unterstützten 8er und 9er Zweig.
 
es hat aber niemand bisher pkg_upgrade erwähnt.

portupgrade (portinstall) und portmaster sind sicher die klassischen Tools um Anwendungen aus den Ports zu installieren, aber wenigstens bei portinstall kann man sich auch ausschließlich auf Pakete beschränken. Sie den Auszug aus der man
Code:
     -P
     --use-packages         Use packages instead of ports whenever available.
                            portupgrade searches the local directories listed
                            in PKG_PATH for each package to install or upgrade
                            the current installation with, and if none is
                            found, pkg_fetch(1) is invoked to fetch one from a
                            remote site.  If it doesn't work either, the port
                            is used.

                            However, the source will still be used if the port
                            is listed in USE_PORTS_ONLY variable in
                            pkgtools.conf.

     -PP
     --use-packages-only    Never use the port even if a package is not avail-
                            able either locally or remotely, although you
                            still have to keep your ports tree up-to-date so
                            that portupgrade can check out what the latest
                            version of each port is
Das bleibt dann natürlich eher theoretisch, wenn durch Versionsmismatches schließlich doch alles aus den Ports gebaut wird, etwa, weil manche Anwendungen ja keine Pakete im offiziellen "Repositry" haben.

pkg_add und das neuere und elegantere pkg_upgrade sind ja für den Umgang mit Paketen geschaffen worden und meine eigenen Erfahrungen mit pkg_upgrade sind sehr gut. Es gibt nur eines, das mir gelegentlich Kopfzerbrechen bereitet: es fehlt die Option --keep going um trotzdem weiter zu machen, wenn etwas mal misslingt. Manche Pakete können schon mal Fehlerhaft sein oder werden falsch heruntergeladen und funktionieren erst im nächsten Versuch, wieso auch immer.
Weil ich bereits mehrere FreeBSD Systeme habe, kenne ich meine Auswahl an installierten und gewünschten Paketen relativ gut und kann diese als ein Textfile ausgeben und dann über xargs an pkg_upgrade oder auch pkg_add weiterleiten und so mehr oder weniger das komplette System in einem Rutsch fix und fertig bekommen.

Es geht also durchaus auch heute bereits, Systeme nahezu komplett aus Paketen zu installieren. Das hörte sich meiner Ansicht nach bisher leicht anders an.
Das Problem, das du nun hast, kommt dadurch, dass du einiges aus den Ports genommen hast und dazu gibt es nicht die passenden Versionen in den Pakten.
Du kannst das ignorieren (was niemand ernsthaft empfehlen wird) und einfach die Versionen kreuz und quer betreiben. Vieles wird trotzdem gut und richtig laufen und bei manchem kann oft einfach repariert werden. Gelegentlich kann das sogar der Ausweg der Wahl sein, wenn plötzlich ein Paket fehlt, das in einer älteren Version noch vorhanden war und nun nicht alles gleich aus Ports gebaut werden soll. Meiner Meinung nach lohnt sich ein solcher Versuch, aber man nennt das nicht umsonst ein unsauberes System.
Willst du ein sauberes System, brauchst du entweder alles aus den Ports, oder alles aus den Paketen, damit deine Versionen stimmen. Du könntest also einfach deinstallieren, was du nun aus den Ports genommen hast und die Pakete dafür verwenden.

Eine gute Wahl ist make config vor einem make install clean aus den Ports. Wenn es Optionen gibt, müssen die gesetzt werden.
portmaster kann eine Art Kontroll-Lauf machen (habe ich mir notiert: portmaster -n -D --no-confirm) und mehr oder weniger alle aufgelösten Ports nach deren Optionen fragen. Damit kannst du vor dem eigentlichen Loslegen, diese schon mal bestimmen. Du kannst auch (durch einen Eintrag in der make.conf) alles auf YES stellen, was ich nicht sinnvoll finde, denn dafür will ich ja gerade die Optionen haben, um darüber bestimmen zu können.
 
Zurück
Oben