The NetBSD Experience

pmts

Sushi
Hallo BSD-Forum,
da ich mein Wochenende mit dem Aufsetzen meiner ersten BSD-Box (NetBSD 2.0.2) zugebracht habe, dachte ich, teile ich fuer weitere interessierte BSD-Neueinsteiger mal meine ersten Erfahrungen mit dem System.

Nach gut 4 Jahren intensiver Debian GNU/Linux und Gentoo Nutzung konnte ich bereits mit ein wenig Erfahung auf dem Gebiet der Unix-Derivate auffahren, was mir bei der Installation des Betriebssystems natuerlich von Nutzen war; doch Dank guter Dokumentation sollte es auch einem voelligen Neuling moeglich sein, ein Basissystem auf seinem Heim-PC zum Tun zu bewegen.

Doch zunaechst einmal zur Auflistung der Komponenten meines Testsystems, das Dank

Intel Pentium 3 Prozessor / 450MHz
ASUS P3B-F Mainboard
256MBytes PC100 SDRAM
15GBytes EIDE IBM HardDrive
WinTek GeForce3 Ti500
Creative SB Live!
3Com 100Mbit Ethernet Device
und einem Toshiba 24x ATAPI Drive

zwar ein wenig konservativ, aber doch zu Testzwecken weitestgehend ausreichend konfiguriert ist, ausserdem recht gaengige Hardware zur Verfuegung stellt, die wenig Probleme in Sachen Treibersupport schaffen sollte.




Installiert habe ich Anhand der sehr gut verstaendlichen und uebersichtlichen Anleitung von Newbie-Net, als Quelle fuer mein Basissystem wurde allerdings nicht die zur Installation verwendete CD Benutzt, sondern nach kurzer und problemloser DHCP-Konfigurierung ueber FTP eingespielt.

Die nach Basis-Installation noetige Shell-Auswahl fiel auf ksh (immer schoen langsam mit den jungen Pferden), da kein weiteres Betriebsststem installiert ist, landete die Einrichtung eines Bootmanagers unter den Tisch.

Nach dem Reboot sollte man sich nun erstmal eine halbe Stunde Zeit fuer eine neue Kanne Kaffee, ein paar Zigaretten und man afterboot nehmen, in der so ziemlich alles zunaechst Nennenswerte in Sachen Standart-Konfiguration (Systemzeit, Keyboard encoding, Hostname, Netzwerk-Einstellungen, ssh-server, disk mounts, Drucker, weitere Benutzer etc) und Informationen bezueglich weiteren "Finetunings" in /etc/foobar respektive der Benutzung von Sushi (ein Konfigurations-Frontend) erwaehnt wird.

Waehrend der gesamten Installation trat eigentlich nur ein einziges nennenswertes Problem auf, das in einer selbstverschuldeten Fehlverlinkung zu /bin/bash fuer die rootshell bestand. Ein Login als root war daraufhin nicht mehr moeglich, auch superuser-Betrieb konnte nicht gefahren werden, da sich zu diesem Zeitpunkt kein angemeldeter Nutzer in der dafuer notwendigen Gruppe 'wheels' befand.
Die Loesung brachte ein Recovery-Boot von der Installations-CD und chroot.
Ausserdem stellt NetBSD fuer solche Faelle einen weiteren User 'toor' mit root-Rechten zu Verfuegung; haette ich mir /etc/passwd vorher einmal angesehen, haette dieser Benutzer auch ueber ein Passwort verfuegt, mit dem er sich haette anmelden und das Schlamassel loesen koennen.
Hinterher ist man eben immer schlauer.

Als naechstes ging's ans Eingemachte, den Paket-Manager.
Eine gute deutsche Dokumentation hierzu findet sich auf der offiziellen NetBSD Seite, beim Kompilieren der pkgsrc-Quellen fiel mir auf, wie langsam das System zu arbeiten schien. Ein Blick in process status zeigte aber, dass sich der Prozessor zu Tode langweilt, mag also am DMA-Modus der Festplatte liegen, der aber laut dmesg bereits optimal eingestellt war... Koennte an den verwendeten, alten DMA-Kabeln liegen.

Die (natuerlich sehr zeitaufwaendige) Kompilierung der wichtigsten Komponenten, wie dem Xserver, einem xfce-Metapackage (wir Linuxer moegen's gerne bunt), Firefox und Thunderbird, Gimp, der NetBSD Doc und einigem anderen Kram sollte nun ueber Nacht laufen. Da ich mich mit dem Paket-Manager noch nicht sonderlich gut auskenne, hab ich mir als Workaround einfach ein kleines Shellscript gebastelt, das aus einer manuell angelegten Textdatei, die alle zu kompilierenden Sourcen aus /usr/pkgsrc/ enthaelt, ausliest, um dann schlicht und einfach ein make && make install fuer jede auszufuehren:

Code:
#!/bin/sh

for f in 'cat ~/install-list'
do cd /usr/pkgsrc/$f
make && make install
done

Nicht grade die feine englische Art, aber selbst mit dieser Holzhammer-Methode befand sich heute Morgen bei der Fruehstuecks-Tasse Vierfachespresso schon so manch dickes Paket frisch kompiliert auf meiner Box.

So, damit duerften die ersten Huerden ueberstanden sein, nun werd ich mich mal ans Einrichten der etwas hartnaeckigeren Fraktionen wie Mail-Konfiguration und diversen Prozess-Automatisierungen machen, sowie an ein besseres Verstaendnis der Paket-Werkzeuge.

Ich hoffe ich konnte damit den ein oder anderen Neueinsteiger anregen, sich auch einmal mit einem BSD-System auseinanderzusetzen; ist naemlich alles halb so wild.

Ich fuer meinen Teil freu mich schon sehr auf die Arbeit mit dem neuen Sproessling und auf die Erfahrungen, die ich mit ihm machen werde.
Ich glaube (sofern ich das nun ueberhaupt schon beurteilen kann), wer zuvor mit Linux gearbeitet hat (v.A. mit der Gentoo-Distri), wird sich bei BSD auf eine gewisse Art und Weise "zu Hause fuehlen", aber dennoch jede Menge neue, andere Erfahrungen damit einfahren.

In diesem Sinne bis die Tage,
P
 
Ooops, wieder einer der am Haken hängt. =) Ich bin mir sicher, wenn Du ein bisschen mit NetBSD gearbeitet hast, wirst Du die Gentoo-Krämpfe bald vergessen haben. Willkommen im Club.
 
pmts schrieb:
Waehrend der gesamten Installation trat eigentlich nur ein einziges nennenswertes Problem auf, das in einer selbstverschuldeten Fehlverlinkung zu /bin/bash fuer die rootshell bestand. Ein Login als root war daraufhin nicht mehr moeglich, auch superuser-Betrieb konnte nicht gefahren werden, da sich zu diesem Zeitpunkt kein angemeldeter Nutzer in der dafuer notwendigen Gruppe 'wheels' befand.
Die Loesung brachte ein Recovery-Boot von der Installations-CD und chroot.
Ausserdem stellt NetBSD fuer solche Faelle einen weiteren User 'toor' mit root-Rechten zu Verfuegung; haette ich mir /etc/passwd vorher einmal angesehen, haette dieser Benutzer auch ueber ein Passwort verfuegt, mit dem er sich haette anmelden und das Schlamassel loesen koennen.

Ich kennen NetBSD nicht, aber aber bei OpenBSD kommt man mit `-s' am Bootprompt in so ziemlich jeder Situation in den single user mode (in dem man dann auch die Shell auswaehlen kann). Und irgendeinen Bootstrapper wird es ja vermutlich auch bei NetBSD geben.
 
kili schrieb:
Ich kennen NetBSD nicht, aber aber bei OpenBSD kommt man mit `-s' am Bootprompt in so ziemlich jeder Situation in den single user mode (in dem man dann auch die Shell auswaehlen kann). Und irgendeinen Bootstrapper wird es ja vermutlich auch bei NetBSD geben.
Ist das selbe. In den Singleusermode gehen und dann bei Bedarf die Shell angeben, sonst wird /bin/sh geladen.

An der root-shell schraubt man aber auch nicht rum, und wenn, dann höchstens mit chsh, das warnt bei Fehlern ;-)
 
kili schrieb:
(,,,) aber aber bei OpenBSD kommt man mit `-s' am Bootprompt in so ziemlich jeder Situation in den single user mode (in dem man dann auch die Shell auswaehlen kann). (,,,)

Ah, sehr schoen. Damit haette ich mir das Leben natuerlich um einiges leichter machen koennen. Hinterher ist man eben immer schlauer.

Zum weiteren Verlauf meiner Installation laesst sich noch nicht viel sagen, da die letzten beiden Tage fast ausschliesslich kompiliert wurde, doch wundert mich der enorme Platzverschleiss in /usr/pkgsrc/.

Das bereits oben erwaehnte Installationsskript wuerde ich daher gerne mit einem make clean fuer /usr/pkgsrc/ erweitern, um die Verzeichnisse stets sauber zu halten und den ohnehin schon sehr knapp bemessenen Platz der Partition nicht unnoetig zu belegen, bin aber nicht sicher, ob dadurch nicht manche Sachen mehrfach uebersetzt werden muessten. Hat hier jemand eine Idee?
 
pmts schrieb:
Das bereits oben erwaehnte Installationsskript wuerde ich daher gerne mit einem make clean fuer /usr/pkgsrc/ erweitern, um die Verzeichnisse stets sauber zu halten und den ohnehin schon sehr knapp bemessenen Platz der Partition nicht unnoetig zu belegen, bin aber nicht sicher, ob dadurch nicht manche Sachen mehrfach uebersetzt werden muessten. Hat hier jemand eine Idee?


clean ist ein normales Target für genau jedes pkgsrc Paket.
Wie baust du denn? make install clean ist der Normalfall, so das nach dem Bauen gereinigt wird. Ein make clean in /usr/pkgsrc ist machbar, aber viel zu aufwändig.

Wenn ein make clean das Paketverzeichnis reinigen soll, ist das Paket entweder installiert oder b0rked, wenn es b0rked ist, ist das reinigen eh egal, wenn es installiert ist muss es nicht nocheinmal gebaut werden, ausser zu einem update.


pkgsrc/distfiles/ enthält die Quellen, kann dann auch bereinigt werden.
 
Mit make install clean werden aber keine anderen Pakete aufgrund von Abhaengigkeiten zuerst uebersetzt. Dort wird kein make clean gemacht.

Das script sieht nun aus wie folgt:

Code:
#!/usr/pgk/bin/bash

for f in 'cat ~/install-list'
do cd /usr/pkgsrc/$f
make && make install || echo $f >> ~/install-todo.log
cd /usr/pkgsrc
test 'df /usr | grep /usr | awk ' /\/usr/ {print $4}'' -gt 1000000 && make clean
done

make clean wird in diesem Fall nur ausgefuehrt, wenn /usr weniger als 500mb Kapazitaet hat.
Als gimmick gibt's ein log in /root/install-todo.log
 
pmts schrieb:
Mit make install clean werden aber keine anderen Pakete aufgrund von Abhaengigkeiten zuerst uebersetzt.

Bitte? Hast du überhaupt mal in die Doku zu pkgsrc geguckt?

Bei einem make oder make install werden alle benötigten Abhängigkeiten aufgelöst bzw. installiert, sofern es keine Konflikte gibt. Danach kann man mit "make clean-depends" alle Abhängigkeiten bereinigen und mit "make distclean" auch noch die Distfiles entfernen.

Dein Skript ist also, höflich ausgedrückt, redundant ;-)

Wenn du KDE+GNOME+GIMP haben willst, reicht ein


Code:
cd /usr/pkgsrc/meta-pkgs/kde3/  && make install clean-depends distclean;
cd /usr/pkgsrc/meta-pkgs/gnome/ && make install clean-depends distclean;
cd /usr/pkgsrc/graphics/gimp/ && make install clean-depends distclean;

vollkommen aus. Wenn es keine Probleme gibt, wird alles gebaut und installiert, danach wird der Arbeitsplatz aufgeräumt und sauber hinterlassen. :)
 
Paket a braucht Paket b. Bevor a gebaut werden kann, ist b zu bauen um die Abhängigkeit zu erfüllen.
Bei einem make clean im /user/pkgsrc/paket/a wird auch b gebaut, aber nur im Verzeichnis a aufgeräumt.
 
Maledictus schrieb:
Eine Frage zu make clean-depends: Was bedeutet Abhängigkeiten bereinigen?

Code:
# cd /usr/pkgsrc/mail/spamass-milter/  
# make clean ===> Cleaning for spamass-milter-0.3.0nb1


Code:
# cd /usr/pkgsrc/mail/spamass-milter/  
# make clean-depends
===> Cleaning for p5-HTML-Tagset-3.04
===> Cleaning for p5-Net-SSLeay-1.26
===> Cleaning for p5-Digest-1.10nb1
===> Cleaning for p5-Digest-MD5-2.33nb1
===> Cleaning for p5-Digest-HMAC-1.01nb1
===> Cleaning for p5-Test-Simple-0.54
===> Cleaning for p5-HTML-Parser-3.45
===> Cleaning for p5-IO-Socket-SSL-0.96
===> Cleaning for p5-Digest-SHA1-2.10nb1
===> Cleaning for p5-Net-DNS-0.49
===> Cleaning for perl-5.8.6nb4
===> Cleaning for p5-Storable-2.13
===> Cleaning for p5-MIME-Base64-3.05nb1
===> Cleaning for spamassassin-3.0.4
#

Alles klar?
 
kaishakunin schrieb:
Wenn du KDE+GNOME+GIMP haben willst, reicht ein

Code:
cd /usr/pkgsrc/meta-pkgs/kde3/  && make install clean-depends distclean;
cd /usr/pkgsrc/meta-pkgs/gnome/ && make install clean-depends distclean;
cd /usr/pkgsrc/graphics/gimp/ && make install clean-depends distclean;

vollkommen aus. Wenn es keine Probleme gibt, wird alles gebaut und installiert, danach wird der Arbeitsplatz aufgeräumt und sauber hinterlassen. :)

Ah, ja das ist die weitaus oekonomischere Loesung. Hab mein Script dementsprechen angepasst. Funktioniert sehr viel schneller auf diese Weise, der zuvor stattgefunden habende komplette make clean Lauf durch /usr/pkgsrc/ war ein wenig sehr verschwenderisch.

Kommen wir aber nun zum naechsten Problem: Einige der zu uebersetzenden Pakete haben wohl unterwegs ihre herunterzuladenen .zip-Archive verloren, und ein einfaches make oder make clean bringen sie nicht dazu, diese nochmal zu beziehen.

Also Frage generell: Wo beziehe ich verlorengegangene Dateien, die sich nicht mehr aus dem CVS holen lassen?
 
pkgclean

Statt
Code:
make install clean
verwende ich
Code:
pkgsrc/pkgtools/pkgclean

Warum? Keine Ahnung. Wahrscheinlich bin ich zu faul, ein "clean" an "make install" anzuhängen... :o
 
Leider ist make clean / clean-depends auch nicht wirklich schnell. Schneller sollte es mit rm -rf /usr/pkgsrc/*/*/work gehen (knallt aber eigentlich immer wegen dem args-limit von exec.

Bleibt noch WRKDIRPREFIX (gibts bei FreeBSD Ports, k.a. wie die Variable bei pkgsrc heisst). Einfach WRKDIRPREFIX=/usr/obj setzen und nach dem bauen rm -rf /usr/obj/usr/pkgsrc. Das erspart laestiges raussuchen der Abhaengigkeiten.
 
Zurück
Oben