changeset 0:18c8c5dd363b

FreeBSD: add initial poudriere.md
author David Demelier <markand@malikania.fr>
date Fri, 25 Aug 2017 15:36:59 +0200
parents
children bbf887728d76
files FreeBSD/poudriere.md
diffstat 1 files changed, 183 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FreeBSD/poudriere.md	Fri Aug 25 15:36:59 2017 +0200
@@ -0,0 +1,183 @@
+FreeBSD poudriere howto
+=======================
+
+What is poudriere?
+------------------
+
+In short, poudriere is a tool for building packages into clean jails to make
+predictible and secure installation/upgrades.
+
+Installation
+------------
+
+### From packages
+
+    pkg install poudriere
+    pkg isntall dialog4ports
+
+### From ports
+
+    make -C /usr/ports/ports-mgmt/poudriere install clean
+    make -C /usr/ports/ports-mgmt/dialog4ports install clean
+
+Initial configuration
+---------------------
+
+This guide assumes that you use ZFS.
+
+### poudriere.conf
+
+The /usr/local/etc/poudriere.conf file does not require much information, the
+following options are required:
+
+    ZPOOL=zroot
+    ZROOTFS=/poudriere  
+    BASEFS=/poudriere
+    POUDRIERE_DATA=${BASEFS}/data
+    DISTFILES_CACHE=/poudriere/distfiles
+    RESOLV_CONF=/etc/resolv.conf
+
+Options:
+  - **ZPOOL**: your zfs pool name,
+  - **ZROOTFS**: zfs dataset to use,
+  - **BASEFS**: base directory for jails and ports,
+  - **POUDRIERE**: directory for packages, logs and such,
+  - **DISTFILES_CACHE**: directory where to store distfiles,
+  - **RESOLV_CONF**: file for DNS resolver.
+
+This means that:
+
+  - any jail created by poudriere will be stored in /poudriere/jails,
+  - result of builds will be kept in dedicated /poudriere/data directories.
+
+Create the zfs datasets for poudriere:
+
+    zfs create zroot/poudriere
+    zfs create zroot/poudriere/distfiles
+
+Jail creation
+-------------
+
+Before building package, you need to create a jail. The easiest way is to use
+the FTP method (default) which simply fetch release tarballs and extract them.
+
+Let's create a poudriere jail named **FreeBSD-11-1**.
+
+### Using FTP
+
+    poudriere jail -c -j FreeBSD-11-1 -v 11.1-RELEASE
+
+Ports fetching
+--------------
+
+You also need to have a ports tree to build ports from, you have several way to
+fetch them such as svn, portsnap and git. The default is portsnap and available
+directly from FreeBSD so use it.
+
+Let's create a default poudriere ports tree.
+
+    poudriere ports -c
+
+Building options
+----------------
+
+What's really interesting in building ports is to customize every options of
+them.
+
+For example, on a server you don't want to have desktop software and all of
+useless things like X.Org, dbus, avahi, pulseaudio and such.
+
+Poudriere uses different files for customizing options in the following order:
+
+  - /usr/local/etc/poudriere.d/make.conf
+  - /usr/local/etc/poudriere.d/<setname>-make.conf
+  - /usr/local/etc/poudriere.d/<tree>-make.conf
+  - /usr/local/etc/poudriere.d/<jailname>-make.conf
+  - /usr/local/etc/poudriere.d/<jailname>-<tree>-make.conf
+  - /usr/local/etc/poudriere.d/<jailname>-<setname>-make.conf
+  - /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-make.conf
+
+For example, in our case we can basically customize our options by creating the
+file **/usr/local/etc/poudriere.d/freebsd-11-1-make.conf**.
+
+### Disabling desktop options
+
+On a server, we may disable the following options using the `OPTIONS_UNSET`
+variable.
+
+Note: we use the `+=` assignment to avoid resetting it.
+
+    # /usr/local/etc/poudriere.d/freebsd-11-1-make.conf
+    OPTIONS_UNSET+= DBUS NLS X11
+
+Configuring per-port options
+----------------------------
+
+It's also possible to edit port options in individual manner, for that purpose,
+we use the `poudriere options` command.
+
+Let's configure vim to remove options we don't care:
+
+    poudriere options -j FreeBSD-11-1 -c editors/vim
+
+If you defined the **OPTIONS_UNSET** described above, the **NLS** option should
+be disabled by default, now select **CONSOLE** as User interface option.
+
+Note: it's recommended to use `-c` option because it forces the edition of
+options.
+
+Building ports
+--------------
+
+Now that we have prepared our poudriere environment, let's build a port using
+the `poudriere bulk` command.
+
+    poudriere bulk -j FreeBSD-11-1 editors/vim
+
+Since we will probably build a high number of ports, we can use a file instead
+using the `-f` option.
+
+    # /etc/packages.conf
+    editors/vim
+    shells/zsh
+
+    poudriere bulk -j FreeBSD-11-1 -f /etc/packages.conf
+
+Using your repository
+---------------------
+
+Once you have built some packages, you may use it directly from `pkg` command
+because poudriere build a custom repository.
+
+In our case, the package repository is located into
+**/poudriere/data/packages/FreeBSD-11-1-default**
+
+### Disable FreeBSD official repository
+
+If you want to completely disable the official FreeBSD repository, create the
+following file:
+
+    # /etc/pkg/no-FreeBSD.conf
+    FreeBSD: {
+      enabled: no
+    }
+
+### Enable our own package repository
+
+Create the following file:
+
+    # /etc/pkg/local.conf
+    local: {
+      url: "/poudriere/data/packages/FreeBSD-11-1-default"
+    }
+
+Note: the **local** name can be replaced with anything.
+
+Update pkg repository and upgrade:
+
+    pkg update -f
+    pkg upgrade
+
+Then install our own packages:
+
+    pkg install vim zsh