pkgsrc on Linux - Quickstart Guide [DEPRECATED]

WARNING This is an old and unmaintained post. It has been superseded by Essential pkgsrc - The Missing Mini Handbook. I highly encourage you to read the updated post. This post has not been removed so links from other sites don't break.

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