Intro to pkgsrc
pkgsrc
is a
package management system for Unix-like operating systems. It
supports OS X. Therefore, it's an viable alternative to Homebrew
and Macports, which are the most widely used package management
systems on Mac computers. I originally became interested in trying
pkgsrc because some softwares I would like to install are not
available via Homebrew.
Install, configure, manage pkgsrc and software packages in it
Installing and configuring pkgsrc on macOS (64-bit, version 10.9 or later)
The following is based on https://pkgsrc.joyent.com/install-on-osx/.
-
Copy and paste the lines below to install the 64-bit 10.9+ set.
BOOTSTRAP_TAR="bootstrap-trunk-x86_64-20170205.tar.gz" BOOTSTRAP_SHA="177e0be390b57ef9d7f61511a8169268000693df"
-
Download the bootstrap kit to the current directory.
curl -O https://pkgsrc.joyent.com/packages/Darwin/bootstrap/${BOOTSTRAP_TAR}
-
Verify the SHA1 checksum.
echo "${BOOTSTRAP_SHA} ${BOOTSTRAP_TAR}" >check-shasum shasum -c check-shasum
-
Verify PGP signature. This step is optional, and requires gpg.
curl -O https://pkgsrc.joyent.com/packages/Darwin/bootstrap/${BOOTSTRAP_TAR}.asc gpg --recv-keys 0x1F32A9AD gpg --verify ${BOOTSTRAP_TAR}{.asc,}
-
Install bootstrap kit to
/opt/pkg
sudo tar -zxpf ${BOOTSTRAP_TAR} -C /
-
Reload
PATH/MANPATH
(pkgsrc installs/etc/paths.d/10-pkgsrc
for new sessions)eval $(/usr/libexec/path_helper)
Installing pkgsrc on Ubuntu Linux
TODO
Installing softwares
There are three ways of installing softwares using pkgsrc:
- The most typical method is to build a software from source files, a.k.a. "bootstrapping";
- Another possibly easier method is to install and uninstall
pre-built softwares using commands
pkg_add
andpkg_delete
, respectively; - Install softwares using the high-level tool
pkgin
. It's the facsimile of Ubuntu and Debian Linux'sapt-get
in pkgsrc.
Use pkgsrc to install softwares
Use pkgsrc to install some softwares that Homebrew can't.
-
Refresh the pkgin database with the latest version
$ sudo pkgin -y update
-
Search for a package. Regular expressions are supported.
$ pkgin search "^ffmpeg[0-9]$" ffmpeg3-3.0.1 Decoding, encoding and streaming software (v3.x) ffmpeg2-2.8.6 Decoding, encoding and streaming software (v2.x) ffmpeg1-1.2.12 Decoding, encoding and streaming software (v1.x)
-
Install a package without prompting
$ sudo pkgin -y install ffmpeg3
-
List all available packages
$ pkgin avail
-
Upgrade all out-of-date packages
$ sudo pkgin -y full-upgrade
-
Remove a package
$ sudo pkgin -y remove ffmpeg2
-
Automatically remove orphaned dependencies
$ sudo pkgin -y autoremove
Use pkg_* tools to manage packages
-
See what packages are installed.
$ pkg_info
-
See what package a file belongs to.
$ pkg_info -Fe /opt/pkg/bin/node nodejs-4.4.3
-
List the contents of a package.
$ pkg_info -qL nodejs /opt/pkg/bin/node /opt/pkg/bin/npm [...]
-
Perform an audit of all currently installed packages.
$ sudo pkg_admin fetch-pkg-vulnerabilities $ pkg_admin audit Package jasper-1.900.1nb11 has a integer-overflow vulnerability, see http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-3520 Package samba-3.6.25nb3 has a privilege-escalation vulnerability, see https://www.samba.org/samba/security/CVE-2015-5299.html Package tiff-4.0.6 has a arbitrary-memory-access vulnerability, see http://www.securityfocus.com/archive/1/537205 [...]
-
Create a binary package from some metadata files and package directory.
$ pkg_create -B build-info -c comment -d description -f packlist -I /opt/pkg -p files/ -U foo-1.0.tgz
Configuration file mk.conf
for
"bootstrapping"
After running
pkgsrc/bootstrap
it creates a example configuration file
../pkgsrc/bootstrap/work/mk.conf.example
:
# Example /usr/pkg/etc/mk.conf file produced by bootstrap-pkgsrc
# Sat Feb 7 20:20:18 PST 2015
.ifdef BSD_PKG_MK # begin pkgsrc settings
PKGSRC_COMPILER= clang
CC= clang
CXX= clang++
CPP= ${CC} -E
CLANGBASE= /usr
PKG_DBDIR= /var/db/pkg
LOCALBASE= /usr/pkg
VARBASE= /var
PKG_TOOLS_BIN= /usr/pkg/sbin
PKGINFODIR= info
PKGMANDIR= man
TOOLS_PLATFORM.awk?= /usr/pkg/bin/nawk
TOOLS_PLATFORM.sed?= /usr/pkg/bin/nbsed
.endif # end pkgsrc settings
Here is a version that is customized and installed at
/usr/pkg/etc/mk.conf
:
.ifdef BSD_PKG_MK # begin pkgsrc settings
ABI= 64
PKGSRC_COMPILER= clang
CC= clang
CXX= clang++
CPP= ${CC} -E
CLANGBASE= /usr
PKG_DBDIR= /usr/pkg/.pkgdb
LOCALBASE= /usr/pkg
VARBASE= /var
PKG_TOOLS_BIN= /usr/pkg/sbin
PKGINFODIR= info
PKGMANDIR= man
TOOLS_PLATFORM.awk?= /usr/pkg/bin/nawk
TOOLS_PLATFORM.sed?= /usr/pkg/bin/nbsed
MULTILIB_SUPPORTED= no
PREFER.openssl= pkgsrc
X11_TYPE= native
X11BASE= /opt/X11
.if !empty(PKGPATH:Mmail/mutt-devel)
PKG_OPTIONS.mutt+= mutt-hcache mutt-smtp ncursesw sasl
.endif
.endif # end pkgsrc settings
Uninstalling pkgsrc and softwares installed by it
Delete the following directories:
sudo rm -rf /usr/pkg
sudo rm -rf /var/db/pkg*
and possibly also the source files if you used the first method:
sudo rm -rf /path/to/pkgsrc
References
-
Wikipedia, Pkgsrc.
-
Tony Fischetti, The state of package management on macOS, Oct. 14, 2013
-
pkgsrc: http://pkgsrc.org/
-
pkgsrc.se: http://pkgsrc.se/
-
pkgin: http://pkgin.net/
-
http://www.perkin.org.uk/pages/pkgsrc-binary-packages-for-osx.html
-
http://www.onthelambda.com/2013/10/14/the-state-of-package-management-on-mac-os-x/