Pkg Primer
Contents
Switching to pkgng
Please see Using pkgng for Binary Package Management in the FreeBSD Handbook for information about changing a system to use pkgng.
Charter and Roadmap
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.