OpenBSD Journal

proot: dpb meets chroot

Contributed by tj on from the chroot-everything dept.

With the p2k16 hackathon just coming to a close, Marc Espie has revealed one of the new things he worked on.

I've been using dpb(1) chroot'd for a long time, using my own methods. This is a first try at making things "simple." Basically,

proot -B /build

should more or less do something sane, and then you can build ports in that chroot.

If you don't pass any more options, it will copy enough files from your current working system, and... that's more or less it!

Well, it doesn't deal with copying the ports tree, because most often you will want to check it out, or copy it manually.

proot invokes a series of actions, you get to decide what you want... see the manpage. The nitty-gritty options (makedev, ldconfig) you very often won't touch.

What you want to do is:

- figure out if you want to get release copied over based on the system locate databases, or based on a snapshot.
- figure out whether you want to copy ports over, check it out thru cvs, or do your own thing.
- provide specific variables if some of your ports tree lives in a funny place.

For cluster-based builds, you have to figure out your nfs and file system options first, then use proot. It will try as much as possible not to perturb mounts within the chroot.

For performance reasons, it does hardlinks to files when it can, so that it's cheap to clone chroot (this will integrate with dpb later).

It will also give files to proper users. If you deal with an actual ports tree, you want to give PORT_USER to you (proot wants to be run as root, duh). The other stuff will automatically belong to _pfetch or _pbuild accordingly.

Right now, I have a config file that just says:

chroot=/home/build
PORT_USER=espie
WRKOBJDIR=/pobj

and my local dpb host file is very short

PORT_USER=espie
DEFAULT chroot=/home/build
localhost

and this works.

On a slightly more complex setup, I have:

chroot=/build
preserve=/usr/ports
PORT_USER=espie
PORTSDIR=/source/ports
WRKOBJDIR=/tmp/pobj
LOCKDIR=/tmp/locks
PLIST_DB=/data/p/plist
DISTDIR=/distfiles
actions=unpopulate

with a dpb hosts file:

STARTUP=%p/cleanup
LOG_USER=espie
DEFAULT chroot=/build
localhost
openbsd-2
openbsd-3

(that setup has /build/source, /build/data/p, /build/distfiles as separate filesystems that get exported thru NFS, and /build/tmp is an async fs on every machine)

Note that you need to be fairly current. I did commit stuff to dpb(1) to make sure it uses _pfetch/_pbuild by default, and there are more tweaks to come yet...

Though still a fast moving target in terms of development, you can get your hands on proot with a -current ports tree now and start testing.

(Comments are closed)


Comments
  1. By Just Another OpenBSD User (77.85.130.233) on

    Thanks!

Latest Articles

Credits

Copyright © - Daniel Hartmeier. All rights reserved. Articles and comments are copyright their respective authors, submission implies license to publish on this web site. Contents of the archive prior to as well as images and HTML templates were copied from the fabulous original deadly.org with Jose's and Jim's kind permission. This journal runs as CGI with httpd(8) on OpenBSD, the source code is BSD licensed. undeadly \Un*dead"ly\, a. Not subject to death; immortal. [Obs.]