BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Zurückgewiesener Patch anwenden

Möchte man einen Patch auf eine Datei anwenden, dieser wird allerdings zurückgewiesen, da die Datei bereits Änderungen vor den eigentlich geänderten Zeilen besitzt welche mit dem Patch in Konflikt stehen, so kann mit wiggle versucht werden den Patch doch noch anzuwenden. Im FreeBSD-Portbaum findet man wiegle unter textproc/wiggle:

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

Im folgenden Beispiel schlägt ein Patch fehl, da Zeilen vor der eigentlichen Änderung in der zu patchenden Datei geändert wurden. Dabei wird automatisch eine .rej Datei angelegt, welche den Konflikt beinhaltet:

#  patch < test.patch
Hmm...  Looks like a unified diff to me..
Patching file datei using Plan A...
Hunk #1 failed at 2.
Hunk #2 failed at 4.
2 out of 2 hunks failed--saving rejects to datei.rej
done

Nun kann wiggle die zu patchende Datei und die .rej-Datei angegeben werden und das Ergebnis wird dabei auf der Standardausgabe ausgegeben. Im Gegensatz zu patch(1) versucht nun wiggle die Änderung wortweise an anzuwenden und so führt dies auch zum Erfolg obwohl Zeilen geändert wurden, welche auch in der Patchdatei aufgeführt sind:

# wiggle datei datei.rej

Ist das Ergebnis zufriedenstellend kann mit der --replace Option die Änderung in die Datei geschrieben werden.

# wiggle --replace datei datei.rej

Mehr Informationen zu wiggle findet man in der Manpage wiggle(1).

 Permalink

Bugzilla über die Kommandozeile anfragen

Mit Hilfe von pybugz lässt sich ein Bugzilla-Bugtracker von der Kommandozeile her abfragen und falls man Schreibrechte dafür hat, auch bearbeiten. Im FreeBSD-Portbaum findet man pybugz unter devel/pybugz:

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

Mit der -b Option wird die URL der Bugzilla-Instanz abgegeben und hat man keinen Bugzilla-Benutzer kann mit --skip-auth das Anmelden an Bugzilla übersprungen werden. Mit dem Schlüsselwort search kann nun Bugzilla durchsucht werden. Im folgenden Beispiel wird der Mozilla-Bugzilla nach "freebsd" durchsucht:

# bugz -b https://bugzilla.mozilla.org --skip-auth search freebsd
 * Using https://bugzilla.mozilla.org 
 * Searching for 'freebsd' 
352822 nobody               apps since MOZILLA_1_8_BRANCH don't build anymore on FreeBSD
449373 nobody               firefox3 FreeBSD Alpha build fails -> nsTHashtable.h:368: warning: cast from increases req
455194 wtc                  socket.c hangs in "UDP Client/Server Test - IPv6/Ipv4" on FreeBSD 7.0
512076 wtc                  Review the nspr package in FreeBSD ports
527650 nobody               Add correct FreeBSD Support
529790 nobody               Support NSS on FreeBSD ia64
543241 nobody               FreeBSD NS_IsMainThread() isn't working (TLS broken?)
544377 nobody               Build fails on FreeBSD, with unknown platform, in ipc
645865 nobody               Firefox4 fails to start (exits before GUI launch) / FreeBSD/amd64
683879 nobody               xpcom: no support for FreeBSD ia64 ipc/chromium/src/build/build_config.h
729447 general              [firefox 10 FreeBSD ia64 regression] js/src/vm/RegExpObject-inl.h:380: error: 'ignoreCase'
729511 rjesup               Import SCTP library from FreeBSD
733042 nobody               [404] https://support.mozilla.org/1/firefox/10.0.2/GNU/kFreeBSD/en-US/firefox-help
 * 13 bug(s) found.

Möchte man sich einen Bugreport näher anschauen verwendet man das Schlüsselwort get und die Bugnummer:

# bugz -b https://bugzilla.mozilla.org --skip-auth get 729511
 * Using https://bugzilla.mozilla.org 
 * Getting bug 729511 ..
Title       : Import SCTP library from FreeBSD
Assignee    : rjesup
Reported    : 2012-02-22 06:57:00 -0800
Updated     : 2012-03-23 10:43:51 -0700
Status      : NEW
Severity    : normal
Priority    : --
Reporter    : rjesup
Product     : Core
Component   : Networking
Blocked     : 694808, 729512
Comments    : 9
Attachments : 4

[Attachment] [607459] [SCTP import patch (without SCTP userspace library source files)]
[Attachment] [608436] [build sctp within the Mozilla tree]
[Attachment] [608762] [build sctp within the Mozilla tree updated]
[Attachment] [608763] [import of userland libsctp from BSD, first cut]

[Comment #0] rjesup : 2012-02-22 06:57:30 -0800
---------------------------------------------------------------------------------------------------------------------
Import libsctp from the FreeBSD implementation (already broken out as a user library).
[...]

Auch lassen sich Attachements von Bugzilla mit dem Schlüsselwort attachement und der entsprechenden Nummer herunterladen:

# bugz -b https://bugzilla.mozilla.org --skip-auth attachment 607459
 * Using https://bugzilla.mozilla.org 
 * Getting attachment 607459
 * Saving attachment: "sctp_min.patch"

Mehr Informationen zu pybugz erhält man mit der -h Option.

 Permalink

Ports-README erstellen

Mit make readmes lässt sich zu jedem FreeBSD-Port eine HTML-Datei generieren welche Informationen zu dem Port beinhaltet und in einem Browser dargestellt werden kann. Erstellt man für den ganzen Portbaum die README Dateien, so kann dies eine ganze Weile dauern. Alternativ gibt es seit kurzem mkreadmes welches die Dateien in kürzerer Zeit generiert. Im FreeBSD-Portbaum findet man mkreadmes unter posts-mgmt/mkreadmes:

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

Führt man nun mkreadmes aus, werden die README-Dateien für den gesamten Portbaum unter /usr/ports erstellt:

# mkreadmes 
Making top-level README.html in /usr/ports (62 categories)
Making README.html for category accessibility (30 ports)
Making README.html for category arabic (10 ports)
Making README.html for category archivers (206 ports)
Making README.html for category astro (116 ports)
[...]
Making README.html for category x11-toolkits (306 ports)
Making README.html for category x11-wm (181 ports)

Soll die README nur für einen Port oder eine Kategorie erstellt werden so kann diese an mkreadmes angegeben werden:

# mkreadmes www/firefox
Making README.html for port www/firefox

Mehr Informationen zu mkreadmes findet man in der Manpage mkreadmes(1).

 Permalink

Alte Daten löschen

Möchte man eine Festplatte aufräumen, so lässt sich mit du(1) herausfinden wo wieviel Speicherplatz verbraucht wird. Es ist jedoch nicht gesagt, dass Verzeichnisse welche viel Platz benötigen auch immer gelöscht werden können. Mit Hilfe von agedu findet man heraus welche Verzeichnisse schon länger nicht mehr verwendet worden sind und wie viel Speicherplatz diese verbrauchen. Im FreeBSD-Portbaum findet man agedu unter sysutils/agedu:

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

Zuerst erstellt man einen Index über das Verzeichnis, welches aufgeräumt werden soll:

# agedu -s /usr/home/beat
Built pathname index, 1592357 entries, 133005950 bytes of index                                                                                                                                                                              
Faking directory atimes
Building index
Final index file size = 573847008 bytes

Danach kann abgefragt werden, welche Verzeichnisse schon länger nicht mehr verwendet worden sind und wieviel Speicherplatz diese benötigen. Im folgenden Beispiel werden alle Verzeichnisse angezeigt und den verbrauchten Speicherplatz in Kilobyte, welche innerhalb der letzten 12 Monate nicht benutzt wurden:

# agedu -t /usr/home/beat -a12m
12          /usr/home/beat/.subversion
6730802     /usr/home/beat/backup
2958        /usr/home/beat/bin
252         /usr/home/beat/chruetertee
2138        /usr/home/beat/dev
278         /usr/home/beat/firefox3-devel
8           /usr/home/beat/icedtea6
127428      /usr/home/beat/mod_pagespeed-0.9.11.5.full
2790        /usr/home/beat/vboxtindi

Ist der Index einmal erstellt können beliebig viele Abfragen gemacht werden. Wird der Index nicht mehr benötigt, da man genügend alte Daten gelöscht hat, kann dieser mit der -R Option wieder gelöscht werden:

# agedu -R

Mehr Informationen zu agedu findet man in der Manpage agedu(1).

Comments (1)  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

Rekursiv Hash-Summen erzeugen

Mit Hilfe von md5deep lassen sich MD5, SHA1 oder SHA256 Hash-Summen rekursiv über Unterverzeichnisse hinweg bilden. Im FreeBSD-Portbaum findet man md5deep unter security/md5deep:

# cd /usr/ports/security/md5deep && make install clean

Durch die -r Option können nun die Summen rekursiv gebildet werden. Im folgenden Beispiel werden SHA256-Hashes aller Dateien im Firefox-Port gebildet:

# sha256deep -r firefox
16d62baa2c5421dd1e5b0e69f5463d37d6649f2fcb877eab993a88c6068d4b85  /usr/ports/www/firefox/distinfo
94a0e48f550430c43cb33350a8bc9e4608c188d656248d47919cc53f9b8ecce3  /usr/ports/www/firefox/pkg-descr
442d4dd78c3b7e71de9c1d8eff6bd8c61e61171e8284ab7ab9018ed0587e8a0b  /usr/ports/www/firefox/pkg-message
01f57057a4b751c6eb621c1752f7615298a3e93680f2330202edd974ac9ff221  /usr/ports/www/firefox/Makefile.webplugins
67fcfc4a3a747b4691c827de5b41d3a07bf0271e98c3e664eedd122cf7b01175  /usr/ports/www/firefox/Makefile
47c4535c1dd2a4493d0472d77694796aae9c2f810b7bcba4d6366040b5647bde  /usr/ports/www/firefox/files/mozconfig-profile_guided_optimization.in
80c35a414410ac90aa5b60c99ca40cb6a9505fac5cbadfcc5a9e3384415a0211  /usr/ports/www/firefox/files/firefox.desktop.in
0c1ec3878223dce2363a3aa160ac8f26d9969912ffc53e399fe2c7e2d79528b8  /usr/ports/www/firefox/files/patch-browser-app-Makefile.in
[...]

Weiter lassen sich mit md5deep die Summen mit einer Datei vergleichen. Mit der -m Option wird eine Datei angegeben in der Hashes gespeichert sind und md5deep gibt nun gefundenen Dateien aus, welche mit den Checksummen in der Datei übereinstimmen.

# cat checksum
80c35a414410ac90aa5b60c99ca40cb6a9505fac5cbadfcc5a9e3384415a0211  /usr/ports/www/firefox/files/firefox.desktop.in
# sha256deep -r -m checksum firefox
/usr/ports/www/firefox/files/firefox.desktop.in

Umgekehrt gibt die -x Option die Dateien aus, welche nicht mit den Checksummen der Datei übereinstimmen.

Mehr Informationen zu md5deep findet man in der Manpage md5deep(1).

 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

pkg-plist automatisch generieren

Hat man einen neuen FreeBSD-Port geschrieben oder einen bestehenden aktualisiert und man möchte eine neue pkg-plist generieren, so kann man dies mit Hilfe von pkg-plist(1) machen. Im FreeBSD-Portbaum findet man pkg-plist(1) unter ports-mgmt/pkg-plist:

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

Danach wechselt man in das Verzeichnis des Ports für welchen man eine pkg-plist generieren möchte und installiert diesen nach /var/tmp/ptest. Dabei muss man natürlich im Port sichergestellt haben, dass sich dieser auch unter einem anderen Präfix als /usr/local installieren lässt:

# cd <meinport> && make PREFIX=/var/tmp/ptest install

Nun führt man pkg-plist(1) aus und leitet die Ausgabe in die pkg-plist-Datei um:

# pkg-plist > pkg-plist

Anschliessend kann der Port wieder deinstalliert werden:

# make PREFIX=/var/tmp/ptest deinstall

Mehr Informationen zu pkg-plist(1) findet man in der Manpage pkg-plist(1).

 Permalink
Prev Next21-30/521