Portupgrade, make.conf, SMP Kernel

alex27

Well-Known Member
Hi,

also ich bin FreeBSD Neuling und habe mal ein paar Fragen. Ich dachte ich packe die in einen Thread und mache nicht gleich mehrer auf.

1. Kann man ifconfig dazu bewegen so wie auch unter Linux mehr Informationen anzuzeigen, insbesondere über fehlerhafte und gedroppte Pakete?`

2. Was empfiehlt sich als HDD und CPU Benchmark Tool ( nur für den Prompt nichtx graphisches bitte.

3. Ich habe mir einen eigenen Kernel gemacht, wobei ich halt nur das unnötige aus der default Konfiguration entfernt habe. Gibt es noch mehr Optionen die nicht in der standard Konfiguration enthalten sind? Ich habe eine Core2Duo CPU, ich bin mir allerdings nicht sicher ob auch beide Kerne genutzt werden. Wenn ich z.B. top starte und dann die 1 drücke zeigt er trotzdem nur eine CPU an.

4.Ist portupgrade eigentlich zuverlässig oder muss man da häufiger mit Problemen rechnen? Und wenn ich Ports mit Portupgrade aktualisiere werden dann die make Paramter vom letzten mal verwendet oder much ich die Parameter erneut angeben? Und wenn ich sie erneut angeben muss geht das überhaupt mit portupgrade? Ich könnte dann höchstens /ect/make.conf dafür nehmen denke ich mal ?

5. Wenn ich ein breits installiertes Port anstatt mit portupgrade direkt mit make und make install aktualisiere, funktioniert das auch? Und wenn ja, werden dann auch die dazugehörigen Ports die eine aktualisierung benötigen aktualisiert? Ich gehe davon aus das portupgrade das tut?

6. Wenn ich folgende Einträge in der /etc/make.conf habe sind die für alle Ports gültig, oder ?

WITHOUT_IPV6=yes
WITHOUT_X11=yes

Und ist die Syntax wie ich es hier gemacht habe richtig?

#php4-extensions
.if${.CURDIR:M*/ports/lang/php4-extensions}
WITH_CURL=true
WITH_GD=true
WITH_GETTEXT=true
WITH_MYSQL=true
WITH_OPENSSL=true
.endif

Das wars erstmal. Vielen Dank schonmal :)

Alex
 
ad 3:
sysctl hw.ncpu

ad 4:
portupgrade ist "relativ" zuverlässig. geht aber auch ohne.
er nimmt normalerweise die flags die in /etc/make.conf und in /var/db/ports stehen. du kannst auch per argument umgebungsvariablen für make setzen.

ad 5:
ne von alleine geht das nicht. wenn ein port schon installiert ist müsste das make && pkg_delete -f paketname-version && make install clean lauten. (geht auch mit make deinstall statt pkg_delete wenn du nicht "gecleant" hast vorher).
neue dependencies werden dabei installiert, alte aber nicht aktualisiert. das geht mit portupgrade wenn du die richtigen optionen setzt einfacher...

ad 6:
sieht richtig aus soweit alles.
 
1. Kann man ifconfig dazu bewegen so wie auch unter Linux mehr Informationen anzuzeigen, insbesondere über fehlerhafte und gedroppte Pakete?`
ifconfig wüsste ich jetzt nicht, aber netstat sollte eigentlich alles wesentliche anzeigen können. Probier z.B. einfach mal ein "netstat -whd"

2. Was empfiehlt sich als HDD und CPU Benchmark Tool ( nur für den Prompt nichtx graphisches bitte.
Schau Dich einfach mal unter /usr/ports/benchmarks um. Oder wenn's online sein darf unter http://www.freebsd.org/ports/benchmarks

3. Ich habe mir einen eigenen Kernel gemacht, wobei ich halt nur das unnötige aus der default Konfiguration entfernt habe. Gibt es noch mehr Optionen die nicht in der standard Konfiguration enthalten sind? Ich habe eine Core2Duo CPU, ich bin mir allerdings nicht sicher ob auch beide Kerne genutzt werden. Wenn ich z.B. top starte und dann die 1 drücke zeigt er trotzdem nur eine CPU an.

Check mal per dmesg bzw. in /var/log/messages ob dort 2 CPUs auftauchen.

4.Ist portupgrade eigentlich zuverlässig oder muss man da häufiger mit Problemen rechnen? Und wenn ich Ports mit Portupgrade aktualisiere werden dann die make Paramter vom letzten mal verwendet oder much ich die Parameter erneut angeben? Und wenn ich sie erneut angeben muss geht das überhaupt mit portupgrade? Ich könnte dann höchstens /ect/make.conf dafür nehmen denke ich mal ?

portupgrade funktioniert recht gut, allerdings muß man schon bisweilen mal sein Hirn verwenden, wenn was nicht gebaut bzw. upgedatet wird. Da muß man schon mal was mit pkg_deinstall bzw. pkg_delete per Hand löschen etc. Aber in den Konsolen-Messages sieht man meistens recht gut was in die Hose geht und kann es fixen.

Die Parameter werden unter /var/db/ports gespeichert und entsprechend ungefragt beim portupgrade wieder verwendet, sofern es noch dieselben sind. Wenn man neue Parameter spezifieren möchte kann man einfach das entsprechende Verzeichnis /var/db/ports/<portname> löschen und wird dann wieder gefragt.

5. Wenn ich ein breits installiertes Port anstatt mit portupgrade direkt mit make und make install aktualisiere, funktioniert das auch? Und wenn ja, werden dann auch die dazugehörigen Ports die eine aktualisierung benötigen aktualisiert? Ich gehe davon aus das portupgrade das tut?

Ich würde empfehlen, portupgrade -rR zu verwenden, dann werden die Abhängigkeiten in beide Richtungen rekursiv mit aktualisiert. Per Hand funktioniert das nicht ohne weiteres.

6. Wenn ich folgende Einträge in der /etc/make.conf habe sind die für alle Ports gültig, oder ?

WITHOUT_IPV6=yes
WITHOUT_X11=yes

Ja.
 
Erstmal Danke für die Antworten.

1. Hatte das hier mit dmesg übersehen. Ich muss mich daran erstmal gewöhnen denn es wurde nur eine CPU angezeigt. Mit Debian habe ich da gleich 4 angezeigt, jeden Core zweimal wenn HT aktiv ist. Auch sysctl hw.ncpu zeigt mir 2 CPU's an.

FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
cpu0 (BSP): APIC ID: 0
cpu1 (AP): APIC ID: 1


2. netstat -whd zeigt mir das an was ich sehen möchte.


3. WITHOUT_IPV6=yes
WITHOUT_X11=yes

Scheint zu funktionieren aber anscheinend muss ich auch noch

WITH_IPV6=no
WITH_X11=no

Mit aufnehmen?


4. Mit den Ports bin ich mir jetzt ein bisschen unsicher wie man die updates am besten durchführt. Entweder mit portupgrade -airR oder aber auf die manuelle Art mit make && pkg_delete -f paketname-version && make install clean , aber ich denke mal besser mit portupgrade ?!
 
3. WITHOUT_IPV6=yes
WITHOUT_X11=yes
Scheint zu funktionieren aber anscheinend muss ich auch noch
WITH_IPV6=no
WITH_X11=no
Mit aufnehmen?
NEIN! Das Problem bei den Ports ist, dass nicht der INHALT der Variablen verglichen wird, sondern meist nur, ob sie definiert ist. Setzt du WITH_X11="no no never!" ist trotzdem defined(WITH_X11) == true und damit kriegst du u.U. X11 mit reingelinkt. Immer nur eine Var setzen (der Inhalt ist dann zu 98% egal).

Ob eine Variable fuer einen Port gesetzt ist, kriegst du am besten mit: make -V WITHOUT_X11 im Portverz. raus. Damit kannst du auch gut die Konstrukte in der /etc/make.conf ueberpruefen.

4. Mit den Ports bin ich mir jetzt ein bisschen unsicher wie man die updates am besten durchführt. Entweder mit portupgrade -airR oder aber auf die manuelle Art mit make && pkg_delete -f paketname-version && make install clean , aber ich denke mal besser mit portupgrade ?!

Portupgrade wird von den meisten bevorzugt. Ich moechte nur noch mal darauf hinweisen, dass der einzige supportete Weg, Pakete zu aktualisieren "portupgrade -rf PAKET" ist. Das baut dann _alles_ neu, was an diesem Paket haengt. Ist zu 98% ueberfluessig, aber 1-2 mal im Jahr muss man das so machen (gettext updates zB).
 
Das eigentliche Problem ist, dass nicht jeder Port auf die Variablen hört. WITHOUT_X11 ist keinerlei Garantie das nicht irgendein Port Xorg als Abhängigkeit installiert. Wenn das passiert kann man bloß den Maintainer bitten das zu ändern.
 
Ok danke dann nehme ich weiterhin nur das WITHOUT_X11=yes in die /etc/make.conf .

Wenn es am besten ist zumindest bei bestimmten Paketen portupgrade -rf zu benutzen, woher weiss man dann welche Pakete das sind bei denen das nötig ist ? Oder sollte man einfach generell ein portupgrade -rfa durchführen ?

Ich habe hier ein Problem mit einem Paket und zwar den php4-extensions-1.0 . Ich habe ein portupgrade -rf gettext durchgeführt und dabei wurden die php4-extensions-1.0 auch neu gebaut. Nun hatte ich zwar in der /etc/make.conf folgendes eingetragen:

#php4-extensions
.if${.CURDIR:M*/ports/lang/php4-extensions}
WITH_CURL=true
WITH_GD=true
WITH_GETTEXT=true
WITH_MYSQL=true
WITH_OPENSSL=true
.endif

aber hatte vergessen ein BATCH=yes hinzuzufügen. Dann kam das Dialogfenster und ich habe einfach nur OK gesagt. War irgendwie noch im halbschlaf und habe da nicht richtig drüber nachgedacht. Anscheinend überschreibt die Dialogbox die in der make.conf angegeben Variablen. Nun bin ich mir ziemlich sicher das die php4-extensions ohne CURL installiert wurden. Leider weiss ich aber auch nicht wie ich das jetzt auf die schnelle überprüfen kann.

Ich habe dann versucht die php4-extensions mit BATCH=yes in der make.conf über portupgrade -f php4-extensions-1.0 neu zu installieren aber die werden anscheinend nur neu installiert aber nicht neu kompiliert. Ich habe dann auch in dem ports verzeichnis ein make clean und make distclean gemacht alle Dateien bis auf das Makefile und die pkg-description sind weg und trotzdem macht er keinen neuen Download von dem Paket. Ich fange an zu verzweifeln :confused:

Was kann ich tun um dieses Paket neu downzuloaden und mit der richtigen Config neu zu installieren? Das BATCH=yes vergesse ich jedenfalls nicht nochmal.
 
Options haben Priorität vor deinen make.conf Einstellungen. Mit
# cd /usr/ports/lang/php4-extensions
# make config

kannst du die Einstellungen ändern.

Danach ist die Fehlende Extension eine Abhängigkeit und wird bei einem:
# portupgrade -f lang/php4-extensions
mit installiert.

Wenn du sysutils/bsdadminscripts installiert hast kannst du auch mit
# portconfig-recursive -a

Alle Konfigurationsdialoge abhandeln, die sonst von portupgrade -a aufgerufen würden. Will heißen, sie erscheinen dann bei einem folgenden portupgrade -a nicht mehr.

Wenn ein portupgrade -rf nötig ist, wird darauf normalerweise in /usr/ports/UPDATING hingeweisen.

Ein portupgrade -rfa ist übrigens das gleiche wie portupgrade -fa, will heißen, alle Ports werden neu gebaut. Das kann etwas länger dauern...
 
Habe mir gerade mal /usr/ports/UPDATING angeguckt, danke für den Hinweis da sollte man ja wirklich immer reingucken.

Ich habe die php4-extensions jetzt mit make config konfiguriert und dann neu installiert und jetzt ist wieder alles ok. Für die Zukunft ist die Konfiguration jetzt unter /var/db/ports/php4-extensions-1.0/options gespeichtert wenn ich das richtig sehe !?

Wie ist das denn jetzt wenn ich die make.conf so habe:

#php4-extensions
.if${.CURDIR:M*/ports/lang/php4-extensions}
BATCH=yes
WITH_CURL=true
WITH_GD=true
WITH_GETTEXT=true
WITH_MYSQL=true
WITH_OPENSSL=true
.endif

Welche Parameter werden dann genommen ? Die unter /var/db/ports/php4-extensions-1.0/options gespeicherten oder die aus der make.conf ?
Und wenn /var/db/ports/php4-extensions-1.0/options nicht existiert dann werden auf jeden Fall die Parameter aus der make.conf genommen oder ?
 
Ich denke trotzdem die aus den options. Nur der Konfigurationsdialog erscheint nicht mehr, selbst wenn neue Optionen hinzukommen.

Das ist aber Spekulation meinerseits.
 
Ueberpruefe es doch einfach direkt!
Code:
cd usr/ports/lang/php4-extensions
make -V BATCH -V WITH_CURL -V WITH_GD -V WITH_GETTEXT -V WITH_MYSQL -V WITH_OPENSSL
make -V _DEPEND_DIRS
Dann siehst du zumindest, _ob_ die Variablen gesetzt sind (das heisst noch nix!) und mit den _DEPEND_DIRS siehst du, welche Abhaengigkeiten schlussendlich hinten rausfallen.
 
Ich würde auch denken das die Parameter aus der options Datei verwendet werden. Demzufolge müsste ich die dann löschen damit die Parameter aus der make.conf verwendet werden.
 
Ueberpruefe es doch einfach direkt!
Code:
cd usr/ports/lang/php4-extensions
make -V BATCH -V WITH_CURL -V WITH_GD -V WITH_GETTEXT -V WITH_MYSQL -V WITH_OPENSSL
make -V _DEPEND_DIRS
Dann siehst du zumindest, _ob_ die Variablen gesetzt sind (das heisst noch nix!) und mit den _DEPEND_DIRS siehst du, welche Abhaengigkeiten schlussendlich hinten rausfallen.

Hmm interessante Idee, wenn ich das mache und dann in der options Datei WITH_CURL in WITHOUT_CURL abändere zeigt er mir trotzdem true für make -V WITH_CURL an. Wenn ich das aber in der make.conf abändere von WITH_CURL in WITHOUT_CURL dann zeigt er beim make -V WITH_CURL kein true mehr an.

Demzufolge wären dann doch die Einträge in der make.conf prioritär.
 
So wie ich die bsd.port.mk verstehe werden Ports bei denen der OPTIONS Dialog aufgerufen würde, gar nicht gebaut, wenn BATCH definiert ist.
 
Ich kann aus eigener Erfahrung sagen das ich Ports mit vorhandenem OPTIONS Dialog per BATCH installiert habe und das ohne jemals zuvor make config für den Port ausgeführt zu haben. Also das geht ohne Probleme.
 
Das Problem mit OPTIONS vs BATCH wurde erst vor ein paar Tagen gefixed, wenn dein Ports-Tree aelter als zwei Wochen ist, solltest du den erstmal aktualisieren.
 
Also ich habe den Portstree gerade erst heute mit portsnap fetch update aktualisiert, ausserdem sind alle installierten Ports in der jeweils aktuellsten Version installiert.

Ich wüsste jetzt auch nicht warum das mit OPTIONS und BATCH unbedingt ein Problem sein sollte? Ich meine, wenn ich den Dialog immer aufgezwungen bekommen würde, wozu solle es dann BATCH überhaupt noch geben?
 
Damit die Ports, bei denen du nicht eingreifen musst automatisch gebaut werden. Du kannst ja vorher mit make config-recursive die Dialoge vorher abarbeiten.
 
Ok aber wenn ich doch eh genau weiss wie ich den Port konfigurieren möchte, dann würde ich es doch als einfacher empfinden, wenn ich das einfach mit BATCH per commandline machen kann also z.B.

make BATCH=yes WITH_CURL=true WITH_GD=true WITH_GETTEXT=true WITH_MYSQL=true WITH_OPENSSL=true install

für die php4-extensions oder aber halt alles in der make.conf speichern kann und dann einfach nur make install mache.

Beides funktioniert übrigens derzeit noch immer so bei mir und ich habe den Tree und alle installierten Ports up to date.
 
kamrikzae schrieb:
So wie ich die bsd.port.mk verstehe werden Ports bei denen der OPTIONS Dialog aufgerufen würde, gar nicht gebaut, wenn BATCH definiert ist.
das ist dumm vormuliert. bei BATCH werden einfach die standardwerte genommen...
 
Zurück
Oben