BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Gespeicherte Optionen nach OptionsNG konvertieren

Mit OptionsNG werden die ausgewählten Ports-Optionen in einem anderen Format gespeichert. Möchte man die ausgewählten und gespeicherten Optionen in das neue Format konvertieren kann dazu das Skript /usr/ports/Tools/scripts/options2ng.sh verwendet werden. Dabei wird ein Backup mit den alten Dateien unter /tmp gespeichert:

# cat /var/db/ports/apache22/options
_OPTIONS_READ=apache-2.2.19
WITHOUT_THREADS=true
WITHOUT_MYSQL=true
WITHOUT_PGSQL=true
[...]
# /usr/ports/Tools/scripts/options2ng.sh -p
tar: Removing leading '/' from member names
Converting /var/db/ports/apache22/options
Converting /var/db/ports/apr/options
[...]
# cat /var/db/ports/apache22/options 
_OPTIONS_READ=apache-2.2.19
OPTIONS_FILE_SET+=AUTH_BASIC
OPTIONS_FILE_SET+=AUTHN_FILE
OPTIONS_FILE_SET+=AUTHZ_HOST
[...]
#  ls -l /tmp/optionsbackup.tar.gz.*
-rw-------  1 root  wheel  14062 11 Aug 20:08 /tmp/optionsbackup.tar.gz.PUB
Related Entries:
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

Ports-Subversion-Repository spiegeln

Letztes Wochenende gab es das erste Mal seit dem chruetertee.ch existiert keinen Befehl der Woche. Grund war die Umstellung des FreeBSD-Portbaumes von CVS auf Subversion was mich das letzte Wochenende und die Woche davor ziemlich ausgelastet hat so das keine Zeit für einen Befehl der Woche da war.

Für Benutzer ändert sich nach der Umstellung nichts, falls man aber cvsup(1) oder csup(1) zum aktualisieren des Portbaumes verwendet sollte man allerdings in Betracht ziehen langsam auf portsnap(8) zu wechseln. CVS und CVSup ist zwar im Moment noch unterstützt, wird aber irgendwann in der Zukunft abgeschaltet, natürlich erst nachdem dies vorgängig angekündigt wurde.

Verwendete man bis anhin CVS um Patches gegen den Portbaum zu erstellen so kann dies nun gegen Subversion gemacht werden. Dazu muss zuerst Subversion in installiert werden:

# cd /usr/ports/devel/subversion && make install clean

Das Ports-Subversion-Repository kann nun wie folgt ausgecheckt werden:

# svn co svn://svn.FreeBSD.org/ports/head ports

Möchte man das ganze Ports-Repository spiegeln, zum Beispiel man einen eigenen Repository-Server anbieten will, so kann das initiale Repository von dem nächsten FTP-Server heruntergelanden werden:

# mkdir svnsync
# cd svnsync
# fetch ftp://ftp.ch.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-ports-r300897.tar.xz
# tar xf svnmirror-ports-r300897.tar.xz

Ist das Repository entpackt (Achtung ca. 16 GB) kann es aufsynchronisiert werden:

# svnsync sync file:///pfad/zu/svnsync/ports
Übertrage Daten .
Revision 300898 übertragen.
Eigenschaften für Revision 300898 kopiert.
Übertrage Daten .
Revision 300899 übertragen.
Eigenschaften für Revision 300899 kopiert.
Übertrage Daten .
Revision 300900 übertragen.
Eigenschaften für Revision 300900 kopiert.
Übertrage Daten ..
Revision 300901 übertragen.
Eigenschaften für Revision 300901 kopiert.
Übertrage Daten .
Revision 300902 übertragen.
[...]
Übertrage Daten ..
Revision 301267 übertragen.
Eigenschaften für Revision 301267 kopiert.

Anschliessend kann man seine Arbeitskopieren vom lokalen Repositroy holen:

# svn co file:///pfad/zu/svnsync/ports/head ports

Auch ist es möglich das Repository via svnserve(8) übers Netzwerk zugänglich zu machen. Mehr Informationen zu Subversion und den FreeBSD-Ports findet man im Ports Subversion Primer im FreeBSD Wiki. Mehr Informationen zu Subversion findet man in den Manpages svn(1), svnync(1) und svnserve(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

sysinstall-Ersatz für neuere FreeBSD-Versionen

Seit FreeBSD 9.0 ist sysinstall nicht mehr im Basissystem vorhanden. Möchte man trotzdem nicht auf ein dialog-basiertes Konfigurationsprogramm verzichten so befindet sich seit kurzem bsdconfig unter sysutils/bsdconfig im FreeBSD-Portsbaum:

# /usr/ports/sysutils/bsdconfig && make install clean

Benutzer von pkgng können bsdconfig wie folgt installieren:

# pkg install bsdconfig

Nun kann bsdconfig als root gestartet werden:

# bsdconfig

Nun startet ein dialog-basiertes Konfigurationsmenü in dem man die Dokumentation nachträglich installieren, ein neues root-Passwort setzten, Disks, Maus, Benutzer und Gruppen verwalten, Konsolen und Netzwerk-Einstellungen vornehmen, die Zeitzone und Sicherheitseinstellungen setzen, und rc.conf-Einstellungen ändern kann.

Weiter ist es möglich direkt von der Kommandozeile ein Untermenü aufzurufen. Alle verfügbaren Untermenüs können mit der -h Option ausgegeben werden:

# bsdconfig -h
Usage:
	bsdconfig [-h]
	bsdconfig command [-h]
	bsdconfig [OPTIONS] [command [OPTIONS]]

OPTIONS:
	-h         Print usage statement and exit.
	-S         Secure X11 mode (implies `-X'). As root, always prompt-for
	           and validate sudo(8) username/password before starting.
	-X         Use Xdialog(1) in place of dialog(1).

COMMANDS:
	console             defaultrouter       diskmgmt            docsinstall         dot              
	groupadd            groupdel            groupedit           groupmgmt           hostname         
	kern_securelevel    mouse               mouse_disable       mouse_enable        mouse_flags      
	mouse_port          mouse_type          nameservers         netdev              networking       
	password            security            startup             startup_misc        startup_rcadd    
	startup_rcconf      startup_rcdelete    startup_rcvar       syscons_font        syscons_keymap   
	syscons_repeat      syscons_saver       syscons_screenmap   syscons_ttys        timezone         
	ttys                useradd             userdel             useredit            usermgmt
# bsdconfig startup

Mehr Informationen zu bsdconfig findet man in der Manpage bsdconfig(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
Comments (1)  Permalink

Status eines cvsup-Checkouts überprüfen

Mit Hilfe von cvsupchk kann ein cvsup-Checkout nach fehlenden oder zusätzlichen Dateien durchsucht werden. Im FreeBSD-Portbaum findet man cvsupchk unter net/cvsupchk:

# cd /usr/ports/net/cvsupchk && make install clean

Benutzer von pkgng können cvsupchk wie folgt installieren:

# pkg install cvsupchk

Mit der -d Option wird das CVS-Rootverzeichnis angegeben und die -c Option gibt an, dass der checkout-Mode von cvsup verwendet wurde. Danach muss noch die Sup-Datei von cvsup angegeben werden. Im folgenden Beispiel wird ein FreeBSD-Portbaum, welcher von einer Tinderbox verwendet wird, überprüft:

# cvsupchk -d /usr/local/tinderbox/portstrees/FreeBSD -c /usr/local/tinderbox/portstrees/FreeBSD/sup/ports-all/checkouts.cvs:.
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/deskutils/qorganizer/qorganizer-3.1.tbz
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/devel/libpthread-stubs/.#Makefile.1.5
MISSING: /usr/local/tinderbox/portstrees/FreeBSD/ports/devel/subversion/files/patch-build--ltmain.sh
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/devel/subversion/files/patch-build-outputs.mk
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/devel/subversion/files/patch-build-outputs.mk,v
MISSING: /usr/local/tinderbox/portstrees/FreeBSD/ports/devel/subversion/files/patch-build--ltmain.sh,v
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/editors/code-browser/files
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/editors/p5-Padre/files/CVS
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/editors/p5-Padre/CVS
EXTRA: /usr/local/tinderbox/portstrees/FreeBSD/ports/ftp/curl/.#Makefile
[...]

Mehr Informationen zu cvsupchk findet man im FreeBSD-Handbuch.

 Permalink

Alte FreeBSD-Port Patchdateien aufsplitten

Alte Patchdateien im FreeBSD-Portbaum enthalten nicht den Dateinamen der zur patchenden Datei in der Patchbezeichnung sondern einen Namen im Stile von patch-aa, patch-ab usw. Auch ist es möglich dass eine solche Datei mehrere Dateien patcht. Mit Hilfe des ports/Tools/scripts/splitpatch.pl Skriptes lassen sich solche Patches in einzelne Dateien aufsplitten und richtig benennen:

# pwd
/usr/ports/www/mod_ruby/files
# ls -l
total 10
-rw-r--r--  1 root  wheel  5494 18 Feb  2010 patch-aa-git
-rw-r--r--  1 root  wheel   631 18 Feb  2010 patch-connection.c
-rw-r--r--  1 root  wheel   473 22 Apr  2002 patch-httpd.conf
# /usr/ports/Tools/scripts/splitpatch.pl patch-aa-git
Wrote patch-Makefile.in
Wrote patch-autoconf.rb
Wrote patch-configure.rb
Wrote patch-lib__apache__erb-run.rb
Wrote patch-lib__apache__eruby-run.rb
Wrote patch-lib__apache__ruby-run.rb
Wrote patch-mod_ruby.c
Wrote patch-request.c
# rm patch-aa-git 
# ls -l
total 20
-rw-r--r--  1 root  wheel   568 26 Mai 00:24 patch-Makefile.in
-rw-r--r--  1 root  wheel  1011 26 Mai 00:24 patch-autoconf.rb
-rw-r--r--  1 root  wheel  1031 26 Mai 00:24 patch-configure.rb
-rw-r--r--  1 root  wheel   631 18 Feb  2010 patch-connection.c
-rw-r--r--  1 root  wheel   473 22 Apr  2002 patch-httpd.conf
-rw-r--r--  1 root  wheel   400 26 Mai 00:24 patch-lib__apache__erb-run.rb
-rw-r--r--  1 root  wheel   417 26 Mai 00:24 patch-lib__apache__eruby-run.rb
-rw-r--r--  1 root  wheel   639 26 Mai 00:24 patch-lib__apache__ruby-run.rb
-rw-r--r--  1 root  wheel   463 26 Mai 00:24 patch-mod_ruby.c
-rw-r--r--  1 root  wheel   908 26 Mai 00:24 patch-request.c
Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

pkgng-Pakete mit poudriere bauen

Mit Hilfe von poudriere lassen sich ähnlich wie bei Tinderbox Ports testen und Pakete erstellen. Im Gegensatz zu Tinderbox benötigt poudriere keine zusätzliche Software wie eine Datenbank usw. sondern verwendet nur Funktionen des Basissystems (z.B. ZFS und Jails). Im FreeBSD-Portsbaum findet man poudriere unter ports-mgmt/poudriere:

# cd /usr/ports/ports-mgmt/poudriere && make install clean

Für poudriere benötigt man einen zpool welcher in folgendem Beispiel den Namen tank hat:

# zpool list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
tank  19.9G  1.23G  18.6G     6%  1.00x  ONLINE  -

Nun kan die poudriere-Konfiguration angelegt werden. Dabei muss der Name des zpool's den man verwenden möchte und ein FTP-Server angegeben werden. Weiter wird noch der Ort angegeben wo sich die resolv.conf der Jails befindet:

# vi /usr/local/etc/poudriere.conf
ZPOOL=tank
FTPHOST=ftp.ch.freebsd.org
RESOLV_CONF="/usr/local/etc/poudriere.d/resolv.conf"

Anschliessend erstellt man die entsprechende resolv.conf:

# mkdir /usr/local/etc/poudriere.d/
# vi /usr/local/etc/poudriere.d/resolv.conf

Als nächstes muss eine Jail erstellt werden. Im folgenden Beispiel wird eine FreeBSD 8.2 Jail für amd64 erstellt welche den Namen 82amd64 erhält. Die entsprechenden Daten werden danach vom FTP-Server heruntergeladen:

# poudriere jail -c -v 8.2-RELEASE -a amd64 -j 82amd64

Als nächstes wird der Portsbaum erstellt welcher mit portsnap angelegt wird:

# poudriere ports -c

Standardmässig baut poudriere normale FreeBSD-Pakete. Möchte man Pakete für pkgng erstellen, wird dies in der make.conf für die entsprechende Jail eingetragen:

# echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/82amd64-make.conf

Nun werden alle Ports für die man Pakete bauen möchte in einer Datei eingetragen:

# echo "www/firefox" > ~/pkglist
# echo "mail/thunderbird" >> ~/pkglist

Anschliessend werden diese Ports gebaut:

# poudriere bulk -f ~/pkglist -j 82amd64

Die fertigen Pakete werden danach unter /usr/local/poudriere_data/packages und dem entsprechenden Jail-Namen in einer Verzeichnisstruktur angelegt welche mit den offiziellen FTP-Servern übereinstimmt, so dass man diese auf einem Web- oder FTP-Server freigeben kann und diese danach zum Beispiel mit pkg_add oder portmaster verwenden kann. Hat man pkgng-Pakete gebaut wird zugleich noch eine Repository-Datei erstellt, so dass diese die Verzeichnisstruktur auch als pkgng-Repository verwendet werden kann:

# cd /usr/local/poudriere_data/packages/82amd64-default
# ls -l repo.txz 
-rw-r--r--  1 root  wheel  1580 May  5 13:28 repo.txz

Poudriere enthält noch viele weitere Funktionalitäten und Möglichkeiten welche in der Manpage poudriere(8) beschrieben sind.

 Permalink

FreeBSD-Portbaum auf Fehler überprüfen

Mit Hilfe von pchecker lässt sich der FreeBSD-Portbaum auf bekannte Fehler überprüfen. Im FreeBSD-Portbaum findet man pchecker unter ports-mgmt/pchecker:

# cd /usr/ports/ports-mgmt/pchecker && make install clean

Führt man nun pchecker aus wird der aktuell installierte Portbaum nach bekannten Fehlern durchsucht:

# pchecker
zero size files:

nonstandard directories:
/usr/ports/distfiles/xorg/proto
/usr/ports/distfiles/xorg/util
[...]
/usr/ports/packages/portmaster-backup/hidesvn-1.0.tbz

nonstandard pkg-*:
whitelist: databases/squirrel-sql/pkg-messages don't exists
/usr/ports/distfiles/gnome2/pkg-config-0.23.tar.gz
/usr/ports/distfiles/gnome2/pkg-config-0.25.tar.gz
/usr/ports/distfiles/rubygem/pkg-config-1.1.1.gem

missing/nonstandard/duplicate lines in distinfo:
/usr/ports/devel/avrdude/distinfo: missing SIZE for avrdude-5.11.tar.gz
/usr/ports/devel/py-configobj/distinfo:  ???
/usr/ports/devel/py-asn1/distinfo: missing SIZE for pyasn1-0.1.2.tar.gz
/usr/ports/devel/py-DateTime/distinfo: missing SIZE for zope/DateTime-3.0b3.zip
/usr/ports/devel/yasm/distinfo: missing SIZE for yasm-1.2.0.tar.gz
/usr/ports/games/openarena-oax/distinfo: missing SIZE for oaxB50.zip
/usr/ports/graphics/inkscape/distinfo: missing SIZE for inkscape-0.48.2.tar.bz2
/usr/ports/graphics/gmt/distinfo: missing SHA256 for gmt/GMT_full.tar.bz2
/usr/ports/graphics/gmt/distinfo: missing SHA256 for gmt/GMT_high.tar.bz2
/usr/ports/graphics/gmt/distinfo: missing SHA256 for gmt/triangle.tar.bz2
/usr/ports/mail/qmail/distinfo: missing SIZE for qmail/qmail-ldap-1.03-20060201-SRS.patch
/usr/ports/net-mgmt/zenpack-macreport/distinfo: missing SIZE for zenoss-ZenPacks.sodonnell.MACReport-b345f53.zip
/usr/ports/security/fprint_demo/distinfo:  ???
/usr/ports/security/fprint_demo/distinfo:  ???
/usr/ports/security/ssl-admin/distinfo: missing SIZE for ssl-admin-1.0.4.tar.gz
/usr/ports/www/yii/distinfo: missing SHA256 for yii-1.1.9.r3135.tar.gz
/usr/ports/www/yii/distinfo: missing SIZE for yii-1.1.9.r3527.tar.gz

BROKEN/IGNORE quoted:
/usr/ports/databases/linux-oracle-instantclient-basic/Makefile:IGNORE+=         \"${DISTFILES}\".  \n
/usr/ports/databases/linux-oracle-instantclient-sdk/Makefile:IGNORE+=           \"${DISTFILES}\".  \n
/usr/ports/databases/linux-oracle-instantclient-sqlplus/Makefile:IGNORE+=               \"${DISTFILES}\".  \n
/usr/ports/databases/postgresql-docs/Makefile:BROKEN=           "not implemented yet"
/usr/ports/databases/sqldeveloper/Makefile:IGNORE+=             \"${DISTFILES}\".  \n
/usr/ports/editors/mode-info/Makefile:IGNORE=   cannot install: MI_ELISP_LANG should be "en"
/usr/ports/emulators/stonx/Makefile:IGNORE="Please get a ROM dump from your AtariST and save it as"\
/usr/ports/emulators/xmame/Makefile:IGNORE=             cannot install: MAMEMESS must be set to one of "mame" or "mess".
/usr/ports/games/darkplaces/Makefile:BROKEN=            Does not compile on ia64, powerpc, or sparc64: unrecognized command line option "-msse2"
/usr/ports/java/jai-imageio/Makefile:IGNORE=            you must manually fetch the "Linux Install" distribution (${DISTNAME}${EXTRACT_SUFX}) from ${DOWNLOAD_URL}, place it in ${DISTDIR} and then run make again
/usr/ports/java/jai/Makefile:IGNORE=            You must manually fetch from the \"Java Advanced Imaging API 1.1.3 Download Page\", the \"Java (no native acceleration)\" distribution \(${DISTNAME}${EXTRACT_SUFX}\) from ${DOWNLOAD_URL}, place it in ${DISTDIR} and then run make again
/usr/ports/java/jdk16-doc/Makefile:IGNORE=You must manually fetch ${DISTNAME}${EXTRACT_SUFX} from ${DOWNLOAD_URL} by selecting the \"Download\" link for the \"Java SE 6 Documentation\", place it in ${DISTDIR} and then run make again
/usr/ports/lang/python-doc-html/Makefile:IGNORE=                invalid value for DOCFORMAT: "${DOCFORMAT}", possible values are: text, html, pdf-a4, pdf-letter
/usr/ports/lang/python-doc-html/Makefile:IGNORE=                invalid value for DOCFORMAT: "${DOCFORMAT}", possible values are: html, pdf-a4, pdf-letter, postscript-a4, postscript-letter
/usr/ports/mail/dbmail22/Makefile:IGNORE="requires at least one database backend selected. Run 'make config'"
/usr/ports/math/unixstat/Makefile:IGNORE="Gary Perlman requires that users agree to his license"\
/usr/ports/ports-mgmt/vulnerability-test-port/Makefile:IGNORE=          ": \`\`${INSTALLATION_DATE}\'\' is not a legal date. INSTALLATION_DATE must be in the form YYYY.MM.DD"
/usr/ports/science/gamess/Makefile:IGNORE=you must manually get the source distribution from master site. http://www.msg.ameslab.gov/GAMESS/download.html. Please selsect "Source code distribution", and check on "running on Intel compatible PC running Linux". You must have license, and freely obtainable
/usr/ports/science/afni/Makefile:BROKEN=        Does not compile on sparc64: "undefined reference to '_mcount'"
/usr/ports/security/pam_krb5/Makefile:IGNORE=                   you must define KRB5_IMPL to be \"mit\" or \"heimdal\"
/usr/ports/www/apache20/Makefile.modules:IGNORE=                "Unknown MPM: ${WITH_MPM}"
/usr/ports/www/apache20/Makefile.modules:IGNORE=                "Unknown DBM"
/usr/ports/www/apache22/Makefile.modules:IGNORE=                "Unknown MPM: ${WITH_MPM}"
/usr/ports/www/apache22/Makefile.modules:IGNORE=                "Unknown DBM"

misspelled(wrong) USE_* vars in Makefile:
/usr/ports/editors/xemacs-devel/Makefile:#USE_XPM=      no
/usr/ports/ftp/proftpd/Makefile:USE_CLAMAV=     yes
/usr/ports/mail/dovecot2-antispam-plugin/Makefile:USE_CONFIGURE=        yes
/usr/ports/devel/d-feet/Makefile:USE_GTK=       yes
/usr/ports/audio/wildmidi/Makefile:USE_GZIP=    yes
/usr/ports/devel/ocaml-cppo/Makefile:USE_GZIP=  yes
/usr/ports/net-mgmt/collectd/Makefile:USE_PDNS= yes
/usr/ports/net-mgmt/collectd5/Makefile:USE_PDNS=        yes
/usr/ports/chinese/fcitx/Makefile:USE_QT=       yes
/usr/ports/textproc/ruby-htree/Makefile:USE_RUBY_RD2=           yes
/usr/ports/databases/xapian-bindings10/Makefile:USE_RUBY_RDOCS= no
/usr/ports/net/opal3/Makefile:USE_SLD=  yes
/usr/ports/mail/squirrelmail-user_special_mailboxes-plugin/Makefile:USE_SQ_COMPAT=      yes
/usr/ports/lang/ocaml/Makefile:USE_TK_THREADS = yes

lines after '.include <bsd.port.mk>|<bsd.port.post.mk>' in Makefile:
/usr/ports/emulators/virtualbox-ose-legacy/Makefile:

Mit der -a Option lassen sich zusätzliche Tests durchführen, diese dauern aber länger und sind zum Teil sehr CPU-Intensiv. Da pchecker noch nicht so lange existiert werden zum Teil noch Falschmeldungen ausgeben und daher sollte man den Ergebnissen nicht blind vertrauen, man kann aber davon ausgehen, dass pchecker in der Zukunft weiter ausgebaut und verbessert wird.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

FreeBSD-Dokumentation auf bekannte Fehler prüfen

Mit Hilfe von Igor lassen sich FreeBSD-Manpages oder die FreeBSD-Dokumentation auf bekannte Fehler prüfen. Im FreeBSD-Portbaum findet man Igor unter textproc/igor:

# cd /usr/ports/textproc/igor && make install clean

Danach kann mit Igor eine Manpage auf bekannte Fehler überprüft werden. Dabei spielt es keine Rolle ob die Manpage komprimiert oder nicht ist:

# igor pkg-updating.1.gz 
pkg-updating.1.gz:18:date not today:[February 12, 2012]
pkg-updating.1.gz:34:sentence not on new line:of the installed ports. [Alternative a list of pkg-names could be passed.]
pkg-updating.1.gz:44:sentence not on new line:are shown. [Use a YYYYMMDD date format.]
pkg-updating.1.gz:45:trailing whitespace:.It Fl f Ar file[ ]

Soll das Datum in der Manpage nicht überprüft werden, verwendet man die -D Option:

# igor -D pkg-updating.1.gz
pkg-updating.1.gz:34:sentence not on new line:of the installed ports. [Alternative a list of pkg-names could be passed.]
pkg-updating.1.gz:44:sentence not on new line:are shown. [Use a YYYYMMDD date format.]
pkg-updating.1.gz:45:trailing whitespace:.It Fl f Ar file[ ]

Weiter lässt sich mit Igor auch die FreeBSD-Dokumentation auf Probleme prüfen:

# igor en_US.ISO8859-1/books/porters-handbook/book.sgml 
book.sgml:2851:repeated:	      <programlisting>MASTER_SITES=	[alpha alpha]:SOME_SITE</programlisting>
book.sgml:9179:repeated:GROUPS=	[pulse pulse]-access pulse-rt</programlisting>
book.sgml:13960:use "aka":		table support ([a.k.a.] setfib(1), setfib(2)).</entry>

Mehr Informationen zu Igor erhält man durch die -h Option oder in der Manpage igor(1).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Paketmanagement mit pkgng

Seit ein paar Wochen ist das neue Paketmanagement-Werkzeug pkgng im FreeBSD-Portbaum welches das angestaubte pkg_install ersetzen wird. Möchte man schon jetzt pkgng verwenden, so kann man dieses über den Portbaum installieren. Man findet pkgng im FreeBSD-Portbaum unter ports-mgmt/pkg. Wichtig ist, dass man vorher den Portbaum aktualisiert hat, da pkgng einige Ports-Infrastruktur-Änderungen benötigt:

# cd /usr/ports/ports-mgmt/pkg && make install clean

Ist pkgng installiert, können die Informationen über die bereits installierten Ports in die Datenbank von pkgng eingelesen werden:

# pkg2ng 
Registering apache-2.2.22... pkg: duplicate directory listing: /usr/local/share/doc/apache22/, ignoring
done.
Registering apache-solr-3.5.0... done.
Registering apr-devrandom-gdbm-db42-1.4.5.1.3.12_1... done.
Registering autoconf-2.68... done.
Registering autoconf-wrapper-20101119... done.
Registering automake-1.11.1... done.
Registering automake-wrapper-20101119... done.
Registering bigreqsproto-1.1.1... done.
Registering ca_root_nss-3.13.1... done.
Registering ccache-3.1.7... done.
Registering cciss_vol_status-1.09... done.
Registering compat7x-i386-7.3.703000.201008_1... done.
[...]
Registering xmlcatmgr-2.2... done.
Registering xmlcharent-0.3_2... done.
Registering xorg-macros-1.16.1... done.
Registering xproto-7.0.22... done.
Registering xtrans-1.2.6... done.

Damit der Portbaum nun auch pkgng verwendet muss die WITH_PKGNG Variable in der /etc/make.conf gesetzt werden:

# echo "WITH_PKGNG=yes" >> /etc/make.conf

Die einzelnen Funktionen von pkgng werden über Subkommandos von pkg aufgerufen:

# pkg
usage: pkg [-v] [-d] [-j <jail name or id>|-c <chroot path>] <command> [<args>]

Global options supported:
	-d             Increment debug level
	-j             Execute pkg(1) inside a jail(8)
	-c             Execute pkg(1) inside a chroot(8)
	-v             Display pkg(1) version

Commands supported:
	add            Registers a package and installs it on the system
	audit          Reports vulnerable packages
	autoremove     Removes orphan packages
	backup         Backup and restore the local package database
	check          Check for missing dependencies and database consistency
	clean          Cleans old packages from the cache
	create         Creates software package distributions
	delete         Deletes packages from the database and the system
	help           Displays help information
	info           Displays information for installed packages
	install        Installs packages from remote package repositories
	query          Query information for installed packages
	search         Performs a search in remote package repositories
	register       Registers a package into the local package database
	repo           Creates a package database repository
	update         Updates remote package repository databases
	updating       Displays UPDATING information for a package
	upgrade        Performs upgrades of package software distributions
	version        Summarize installed versions of packages
	which          Displays which package installed a specific file

For more information on the different commands see 'pkg help <command>'.

Da alle Informationen von pkgng in einer Datenbank gespeichert werden, kann diese auch gesichert und allenfalls zurückgeschrieben werden:

# pkg backup -d /tmp/pkg.db
Dumping database...done
# pkg backup -r /tmp/pkg.db.txz 
Restoring database...done

Wie bei pkg_info(1) können Informationen über installierte Ports mit pkg info abgerufen werden:

# pkg info ii
ii-1.6: A minimalist FIFO and filesystem-based IRC client
# pkg info -f ii
Name           : ii
Version        : 1.6
Origin         : irc/ii
Prefix         : /usr/local
Categories     : irc
Licenses       : MIT 
Maintainer     : jlaffaye@FreeBSD.org
WWW            : http://tools.suckless.org/ii/
Comment        : A minimalist FIFO and filesystem-based IRC client
Flat size      : 0 B
Description    : 
ii is a minimalist FIFO and filesystem-based IRC client. It creates an
irc directory tree with server, channel and nick name directories.
In every directory a FIFO in file and a normal out file is created.
The in file is used to communicate with the servers and the out files
contain the server messages. For every channel and every nick name there
are related in and out files created. This allows IRC communication from
command line and adheres to the Unix philosophy.

WWW:    http://tools.suckless.org/ii/

Mit Hilfe von pkg version findet man heraus ob für einen installierten Port eine neuere Version zur Verfügung steht:

# pkg version -v
apache                             <   needs updating (port has 2.2.22_4)
apache-solr                        =   up-to-date with port
apr-devrandom-gdbm-db42            =   up-to-date with port
[...]

Möchte man herausfinden von welchen Port eine Datei installiert wurde so kann dazu pkg which verwendet werden:

# pkg which /usr/local/bin/initdb 
/usr/local/bin/initdb was installed by package postgresql-server-8.3.16_5

Alle Eintäge von ports/UPDATING welche das aktuelle System betreffen findet man mit pkg updating:

# pkg updating
20111219:
  AFFECTS: users of lang/perl5.14
  AUTHOR: skv@FreeBSD.org

  lang/perl5.14 has been updated to 5.14.2.  You should update everything
  that depends on perl.  The easiest way to do that is to use
  "perl-after-upgrade" script supplied with lang/perl5.14.
  Please see its manual page for details.

  If you want to switch to lang/perl5.14 from lang/perl5.{8,10,12} please
  follow instructions in the entry 20110517 in this file.
[...]

Durch pkg delete kann ein installierter Port deinstalliert werden: 

# pkg delete ioping
The following packages will be deinstalled:
	ioping-0.6

Proceed with deinstalling packages [y/N]: y
Deinstalling ioping-0.6... done

Möchte man Skripts mit Hilfe von pkgng erstellen so lohnt es sich einen Blick in die Manpage von pkg query pkg-query(1) zu werfen.

Ein grosser Vorteil von pkgng ist, dass es besser mit Paketen umgehen und diese auch aktualisieren kann. Da es zur Zeit aber noch kein offizielles Paket-Repository für pkgng gibt, werden diese Befehle zu einem späteren Zeitpunkt vorgestellt.

Mehr Informationen zu pkgng findet man in der Manpage pkg(1) und allen anderen Manpages auf die darin verwiesen wird.

Comments (1)  Permalink

Systemdateien nach Update aktualisieren

Führt man ein Systemupdate aus, so können nach dem Update die Systemdateien mit mergemaster(8) aktualisiert werden. Alternativ dazu gibt es seit einiger Zeit etcupdate in den Ports. Im FreeBSD-Portsbaum findet man etcupdate unter sysutils/etcupdate:

# cd /usr/ports/sysutils/etcupdate && make install clean

Zuerst muss ein aktueller Stand der Systemdateien gesichert werden, dazu müssen die Source-Dateien mit den aktuellen Stand des Systemen übereinstimmen:

# etcupdate extract

Danach können die Sourcen aktualisiert werden und das System gebaut und installiert werden:

# cd /usr/src && svn up
# make buildworld && make buildkernel
# make installkernel
# shutdown -r now

Nach dem Neustart kann das Update fertig gestellt werden und danach wird etcupdate ausgeführt und die Systemdateien werden aktualisiert:

# make installworld
# etcupdate
  D /etc/rc.d/ipxrouted
  U /COPYRIGHT
  U /etc/defaults/devfs.rules
  U /etc/defaults/periodic.conf
  U /etc/defaults/rc.conf   
  U /etc/devd.conf
  U /etc/devd/usb.conf
  U /etc/devfs.conf
  U /etc/mac.conf
  C /etc/mail/freebsd.cf
  C /etc/mail/freebsd.submit.cf
  C /etc/mail/sendmail.cf   
  C /etc/mail/submit.cf
  C /etc/motd
[...]
  U /etc/rc.subr
  U /etc/services
  U /etc/ssh/ssh_config
  M /etc/ssh/sshd_config
  A /etc/rc.d/static_ndp

Während des Aktualisieren sind in diesem Beispiel einige Konflikte aufgetreten. Diese können auch mit etcupdate status abgerufen werden:

# etcupdate status
  C /etc/mail/freebsd.cf
  C /etc/mail/freebsd.submit.cf
  C /etc/mail/sendmail.cf
  C /etc/mail/submit.cf
  C /etc/motd

Nun können die Konflikte von Hand gelöst werden. Zuerst wird die Datei mit e bearbeitet:

# etcupdate resolve
Resolving conflict in '/etc/mail/freebsd.cf':
Select: (p) postpone, (df) diff-full, (e) edit,
        (h) help for more options: e

Nun wird ein Editor gestartet und man kann die Datei entsprechend anpassen. Anschliessend kann man die Änderung mit df nochmals überprüfen und anschliessend den Konflikt mit r beheben:

Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (h) help for more options: df
--- /etc/mail/freebsd.cf        2011-08-10 11:28:07.000000000 +0200
+++ /var/db/etcupdate/conflicts/etc/mail/freebsd.cf     2012-02-05 11:15:15.000000000 +0100
@@ -18,7 +18,7 @@
 #####          SENDMAIL CONFIGURATION FILE
 #####
 ##### built by root@tinderbox.chruetertee.ch
-##### in /var/tmp/temproot/usr/obj/usr/home/beat/dev/src/head/etc/sendmail
+##### in /var/db/etcupdate/current/usr/obj/usr/home/beat/dev/src/head/etc/sendmail
 ##### using /usr/home/beat/dev/src/head/etc/sendmail/../../contrib/sendmail/cf/ as configuration include directory
 #####
 ######################################################################
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (h) help for more options: r

Hat man so alle Konflikte gelöst, ist das Update abgeschlossen. Mehr Informationen zu etcupdate findet man in der Manpage etcupdate(8).

 Permalink
Next1-10/305