====== Pkg Primer ======
===== Switching to pkgng =====
Please see [[http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/pkgng-intro.html|Using pkgng for Binary Package Management]]
in the %%FreeBSD%% Handbook for information about changing a system to use pkgng.
===== Charter and Roadmap =====
see: [[pkgng/CharterAndRoadMap]]
===== Rosetta Stone =====
^ Function ^ legacy pkg_* ^ pkgng ^
| get list of installed packages | //pkg_info// | //pkg info// |
| get basic information about a package | //pkg_info pkgname-pkgversion// | //pkg info pkgname// OR //pkg info category/name// OR //pkg info pkgname-pkgversion// |
| get detailed information about a package | N/A | //pkg info -f pkgname// OR //pkg info -f category/name// OR //pkg info -f pkgname-pkgversion// |
| list all files contained in an installed package | //pkg_info -L pkgname-pkgversion// | //pkg info -l pkgname// OR //pkg info -l category/name// OR //pkg info -l pkgname-pkgversion// |
| find which package provide an installed file | //pkg_info -W /path/to/my/file// | //pkg which /path/to/my/file// |
| install a local package | //pkg_add ./localpkg.tbz// | //pkg add ./localpkg.txz// |
| install a remote package | //pkg_add -r mypackage// | //pkg install mypackage// OR //pkg install category/name// OR //pkg install pkgname-pkgversion// |
| search for a remote package | N/A | //pkg search mypackage// OR //pkg search category/name// OR //pkg search pkgname-pkgversion// |
| search for detailed informations about a remote package | N/A | //pkg search -f mypackage// OR //pkg search -f category/name// OR //pkg search -f pkgname-pkgversion// |
| show reverse dependencies of an installed package | //pkg_info -R pkgname-pkgversion// | //pkg info -r mypackage// OR //pkg info -r category/name// OR //pkg info -r pkgname-pkgversion// |
| show dependencies of an installed package | //pkg_info -r pkgname-pkgversion// | //pkg info -d mypackage// OR //pkg info -d category/name// OR //pkg info -d pkgname-pkgversion// |
| remove unused packages install as a dependency | N/A | //pkg autoremove// |
| binary upgrade the installed packages | N/A | //pkg upgrade// |
| create a remote repository | N/A | //pkg repo /path/to/a/directory/containing/packages// |
| manipulate packages in a jail | N/A | //pkg -j %%<%%name_or_id_of_a_jail> %%<%%command>// |
| manipulate packages in a chroot | //pkg_add -C %%<%%path_to_chroot>// (not all commands are chroot aware) | //pkg -c %%<%%path_to_chroot> %%<%%command>// |
| show information about installed packages using regular expression | //pkg_info -x %%<%%regex>// | //pkg info -x %%<%%regex>// |
| show information about installed packages using extended regular expression | //pkg_info -X %%<%%regex>// | //pkg info -X %%<%%regex>// |
| show information about installed packages using globbing | //pkg_info %%<%%globbing>// | //pkg info -g %%<%%globbing>// |
| check for known vulnerability | //portaudit// (third party tool) | //pkg audit// |
| show out of date packages (determine out of the ports tree) | //pkg_version -l / | //pkg version -l / |
| show out of date packages (determine out of the ports tree index) | //pkg_version -Il / | //pkg version -Il / |
| show out of date packages compared to a remote repository | N/A | //pkg upgrade -n// |
| show statistic about installed packages | N/A | //pkg stat// |
| checking for missing dependency (and try to fix them) | N/A | //pkg check -d// |
| port origin | pkg_info -o | //pkg info -o// |
===== Details =====
==== Marking all packages but vim-lite and pkg as automatic ====
pkg set -yA 1 `pkg query -e "%n != pkg && %n != vim-lite" %o`
Now you can cleanup all the left crufts
pkg autoremove
===== Building custom repositories =====
==== Using poudriere ====
Install poudriere and pkgng on the host (please note that the host do not need to be converted to pkgng)
make -C /usr/ports/ports-mgmt/poudriere install clean
make -C /usr/ports/ports-mgmt/pkg install clean
Create a default configuration in the ${LOCALBASE}/etc/poudriere.conf configuration file:
BASEFS=/poudriere
ZPOOL=myzpool
FREEBSD_HOST=ftp://ftp.freebsd.org
POUDRIERE_DATA=/poudriere_data
RESOLV_CONF=/etc/resolv.conf
DISTFILES_CACHE=/usr/ports/distfiles
poudriere is now ready to be used.
First create a ports tree to be used by poudriere
poudriere ports -c
Create the jail in version you want to build packages for:
poudriere jail -c -j 90amd64 -v 9.0-RELEASE -a amd64
poudriere jail -c -j 10i386 -v head -a i386 -m svn
The first will create a 9.0-RELEASE amd64 jail from the official sets (fetched on FREEBSD_HOST)
The second will create a current jail using svn and build for i386
As poudriere works for both legacy pkg_* and pkgng you need to make it pkgng aware:
mkdir /usr/local/etc/poudriere.d
echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/90amd64-make.conf
echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/10i386-make.conf
Create the list of packages you want to see built by poudriere:
cat ~/mylist1
editors/vim-lite
www/nginx
cat ~/mylist2
www/firefox
editors/libreoffice
Just run poudriere:
poudriere bulk -f ~/mylist1 -j 90amd64
poudriere bulk -f ~/mylist2 -j 10i386
This will built 2 pkgng repositories:
* ${POUDRIERE_DATA}/packages/10i386-default
* ${POUDRIERE_DATA}/packages/90amd64-default
Configure your http server to those directories to be able to serve them.
On your user boxes: (if you use the automatic bootstrap it will take care of creating this file)
echo "packagesite: http://yoururl/10i386-default" >> /usr/local/etc/pkg.conf
echo "packagesite: http://yoururl/90amd64-default" >> /usr/local/etc/pkg.conf
From 9.1 you can directly bootstrap from the base:
Before 9.1 you will need to bootstrap by hand:
fetch http://yoururl/90amd64-default/Latest/pkg.txz
tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static"
./pkg-static add ./pkg.txz
To update your repositories just rerun poudriere:
poudriere ports -u # this updates your default ports tree
poudriere bulk -f ~/mylist1 -j 90amd64
poudriere bulk -f ~/mylist2 -j 10i386
==== Using portbuilder inside a jail ====
When building 9-stable ports in a 9-stable jail under -current you might want to set the UNAME_r environment variable to fake the %%FreeBSD%% version in /path_to_my_jail/root/.cshrc . Some examples:
* setenv UNAME_r 9-STABLE
* setenv UNAME_r 8-STABLE
* setenv UNAME_r 7-STABLE
Else some ports won't build properly.
----
{{tag>HowTo}}