DæmonNews: News and views for the BSD community

Daemon News Ezine BSD News BSD Mall BSD Support Forum BSD Advocacy BSD Updates

Test driving -current

Hubert Feyrer <hubert@feyrer.de>

September 2001

Often the latest and greatest (and most unstable :-) features of our favourite BSD release are only available in the -current (development) branch. But how when running a release version, how can you upgrade the system to -current to get a feature that is only present there? Depending on the feature you want, there is a way to get it without upgrading the whole machine to the latest development snapshot.

The idea is to run the -current system in a chroot cage. Of course this comes with some restrictions. You can't try new kernel features (new drivers, changes to the IP stack, new kernel subsystems or APIs for accessing them), because it's impossible to boot the new kernel inside a chroot environment. If you just want to test some new userland features, library changes (libc, ...) etc., that will work from chroot.

The motivation for me to set this up was to try out the "sushi" administration tool that comes with NetBSD-current, and that requires a bunch of library updates that aren't easy to do with the latest release. The following description takes NetBSD as an example, showing how to get -current going under the latest release. The steps for FreeBSD/OpenBSD should be similar.

  1. Get the latest snapshot. They can usually be found on ftp.netbsd.org in the /pub/NetBSD/arch/<arch>/snapshot directory. Get as much of the "binary/sets" dir as you need, at least base.tgz and etc.tgz are required, comp.tgz is recommended if you want to compile programs.

  2. Decide where to install the -current system. This needs to be a directory where the new system can be installed, it should definitely NOT be the system's root (/) dir. I'll use /usr/sandbox in this example, and there needs to be enough space to extract the mentioned .tgz files.

  3. Unpack the .tgz files:

     # tar pvxCf /usr/sandbox base.tgz
     # tar pvxCf /usr/sandbox etc.tgz
     # tar pvxCf /usr/sandbox comp.tgz
     # ...
    

    This step populates the new chroot sandbox that will contain the new -current system.

  4. There are a few post-install configurations that one might want to do:

    • Adjust timezone:

       # ln -sf /usr/share/zoneinfo/MET /etc/localtime
      

    • Create /dev entries for programs that need them:

       # cd /usr/sandbox
       # cd dev
       # sh MAKEDEV all
      

    • Drop a kernel in the new system's root dir. It's a good idea to use a copy of the currently-running kernel so symbols match:

       # cp /netbd /usr/sandbox
      

    • Configure daemons and services that you want to run as needed. E.g. if you want to use the -current system's new DHCP, setup /usr/sandbox/etc/dhcpd.conf, for running sendmail check /usr/sandbox/etc/mail. There are many other places to tune, please use your system's documentation.

    • Maybe setup a "fstab" that matches your disk config. This can be as simple as:

       # cp /etc/fstab /usr/sandbox/etc
      

    • Services can be disabled and enabled using the usual method, i.e. rc.conf. Be sure to understand that you still have to start the service scripts from the chroot system's /etc/rc.d by hand later. Running all of the chroot system's /etc/rc is not a good idea, as it might lead to disk corruption, and clashing services that want to access the same ports etc.

  5. Starting up -current! What we really do here is starting a new process that has its root (/) directory changed to be our sandbox root directory (/usr/sandbox). Accessing any absolute path will then be within /usr/sandbox, thus accessing the -current system installed there.

    The command to startup our -current system is:

     # chroot /usr/sandbox
    

    Consulting the chroot(8) manpage tells us that the process started here is /bin/sh, and if we want a different process started, we can do so by specifying it explicitly:

     # chroot /usr/sandbox /bin/csh 
    

    Another important point to note that you need to be root to use chroot(8). This can be changed by using the -u switch to chroot:

     # chroot -u joe /usr/sandbox
     $ id
     uid=1000 gid=0(wheel) groups=0(wheel),31(guest)
    

The steps above should do to get things going for trying a newer version of your operating system. If you want to try a different OS, this won't work, e.g. I wouldn't expect a unpacked FreeBSD or OpenBSD tree to really work well when running a NetBSD tree, but of course it might work to some extent, using compat features.

For running a different operating system at all, maybe even for a CPU you don't have, there are several emulators out there, with VMware probably the most popular one. Others are Bochs and Plex86 all emulating Intel i386 and upward compatible CPUs. If you need to test drive your code on a IA64 check out ia64sim and Hercules if you want to get a S370 port going.

Google
Web daemonnews.org

More Articles
  • Interview with Jan Schaumann
  • Interview with Theo de Raadt
  • Book Review: Virtualization with VMware ESX Server
  • Editorial: Not Quite Dead Yet
  • The Design of OpenBGPd
  • Interview with der Mouse
  • Letter to Steve Jobs
  • Interview with Manuel Bouyer on Xen
  • Apple and Open Source
  • BSDCan 2006
  • BSD Certification Survey Results
  • Lab in a Box
  • Ike Notes on BSDCan 2005
  • BSDCan 2005 Photos
  • FreeBSD Developer Summit Pictures

  • Advertisements




    Author maintains all copyrights on this article.
    Images and layout Copyright © 1998-2006 Dæmon News. All Rights Reserved.