pkgsrc on Linux - Quickstart Guide

Do you want to try out pkgsrc on Linux? Here’s a quickstart guide (tested on Ubuntu 14.04). Of course, always refer to the pkgsrc guide for accurate information.

Get pkgsrc

Install prerequisities.

[user@host ~]$ sudo aptitude install build-essential libncurses-dev git

Create directory structure in your home directory.

[user@host ~]$ mkdir ~/opt

[user@host ~]$ cd ~/opt

You have two options for getting pkgsrc: (1) the official ways: by downloading a tar file and extracting it, or by using CVS; (2) by using git. The first way, by using a tar file, is described in the pkgsrc guide.

The second way, to use git, is also easy. Jörg Sonnenberger has created a GitHub repo that syncs with pkgsrc source.

Here we're using the master (trunk) branch. You can choose to use the latest stable branch instead. Refer to pkgsrc for more information.

[user@host ~/opt]$ git clone https://github.com/jsonn/pkgsrc.git

I think I would prefer using git.

Install pkgsrc

Install pkgsrc to your home directory under ~/pkg. By default it installs system-wide but I don't want to do that in this guide.

[user@host ~/opt]$ cd ~/opt/pkgsrc/bootstrap/

[user@host ~/opt/pkgsrc/bootstrap]$ export SH=/bin/bash

[user@host ~/opt/pkgsrc/bootstrap]$ ./bootstrap --unprivileged

Install pkg_* tools

Let's install some tools to manage packages.

[user@host ~/opt/pkgsrc/bootstrap] cd ~/opt/pkgsrc/pkgtools/pkg_install

[user@host ~/opt/pkgsrc/pkgtools/pkg_install] ~/pkg/bin/bmake install clean clean-depends

[user@host ~/opt/pkgsrc/pkgtools/pkg_install] cd ~/opt/pkgsrc/pkgtools/pkg_rolling-replace

[user@host ~/opt/pkgsrc/pkgtools/pkg_rolling-replace] ~/pkg/bin/bmake install clean clean-depends

[user@host ~/opt/pkgsrc/pkgtools/pkg_install] cd ~/opt/pkgsrc/pkgtools/pkg_chk

[user@host ~/opt/pkgsrc/pkgtools/pkg_chk] ~/pkg/bin/bmake install clean clean-depends

Add ~/pkg to PATH

You may want to add ~/pkg/bin and ~/pkg/sbin to your PATH.

[user@host ~]$ echo "export PATH=\$PATH:\$HOME/pkg/bin:\$HOME/pkg/sbin" >> ~/.bashrc

[user@host ~]$ source ~/.bashrc

Check for package vulnerabilities

[user@host ~] pkg_admin -K ~/pkg/var/db/pkg fetch-pkg-vulnerabilities

[user@host ~] pkg_admin audit

Search Package

Change to ~/opt/pksrc directory and use pkglocate to search for packages. For example, let's look for Bottle, a WSGI framework.

[user@host ~]$ cd ~/opt/pksrc

[user@host ~/opt/pksrc]$ ./pkglocate -i bottle

Install Package

Let’s install Bottle. Be prepared to wait a while because it'll pull in lots of dependencies that also need to be fetched, built, and installed.

Change to the directory containing the Bottle package and install it.

[user@host ~]$ cd ~/opt/pkgsrc/www/py-bottle

To install you have two options:

  • Compile from source and install directly
  • Create a package after compiling from source and install package

The first option is:

[user@host ~/opt/pkgsrc/www/py-bottle]$ bmake install clean clean-depends

The second option is:

[user@host ~/opt/pkgsrc/www/py-bottle]$ env USE_DESTDIR=yes bmake package clean clean-depends

[user@host ~/opt/pkgsrc/www/py-bottle]$ cd ~/opt/pkgsrc/packages/All

[user@host ~/opt/pkgsrc/packages/All]$ pkg_add bottle-0.12.7.tgz

Update Packages

Follow these steps when you want to update a single package, say Bottle.

[user@host ~]$ cd ~/opt/pkgsrc

Pull in latest changes to pkgsrc.

[user@host ~/opt/pkgsrc]$ git pull

Update All Outdated Packages

There are two ways: pkg_rolling-replace or pkg_chk. pkg_chk first uninstalls all packages that need to be updated so may be more unsafe. pkg_rolling-replace on the other hand also removes packages before installing them but is a safer version. Read more on how to upgrade packages.

pkg_rolling-replace

Add PKGSRC environment variable to ~/pkg/etc/mk.conf file. In the example below change /home/user/... to match your user.

PKGSRCDIR=              /home/user/opt/pkgsrc

List updates:

[user@host ~/opt/pkgsrc/]$ pkg_rolling-replace -u -n -v

Update packages:

[user@host ~/opt/pkgsrc/]$ pkg_rolling-replace -u -v

pkg_chk

List packages that need to be updated.

[user@host ~]$ pkg_chk -u -q

Update all outdated packages.

[user@host ~]$ pkg_chk -u -s

Update Single Package

Follow these steps when you want to update a single package, say Bottle.

Change to the directory containing the Bottle package and update it.

[user@host ~/opt/pkgsrc]$ cd ~/opt/pkgsrc/www/py-bottle

As with install you have two options: install directly or create a package first.

To install directly:

[user@host ~/opt/pkgsrc/www/py-bottle]$ bmake update clean clean-depends

To create a package first:

[user@host ~/opt/pkgsrc/www/py-bottle]$ env USE_DESTDIR=yes bmake package clean clean-depends

[user@host ~/opt/pkgsrc/www/py-bottle]$ cd ~/opt/pkgsrc/packages/All

[user@host ~/opt/pkgsrc/packages/All]$ pkg_add -u bottle-0.12.7.tgz

List Installed Packages

To get a list of all installed packages:

[user@host ~]$ pkg_info -Q PKGPATH -a

Delete Package

Use pkg_delete to remove a package.

[user@host ~]$ pkg_delete bottle

You can uninstall a package and all its dependencies that are not needed by any other package.

[user@host ~]$ pkg_delete -R bottle