I created a new user called 'setiathome' and unpacked their tar file into that user's home directory, so my chroot dir is: ~setiathome/setiathome-1.1.i386-unknown-freebsd3.1 aka: /var/home/setiathome/setiathome-1.1.i386-unknown-freebsd3.1 Then I wrote the C program to do the chrooting. I called it 'runseti' and put it in: /var/home/setiathome Then I created 'bin', 'usr/lib', and 'usr/libexec' dirs underneath the chroot dir and copied 'sh' and a few libraries to these dirs. The libraries I needed under FreeBSD 3.1 were: usr/lib/libc.so.3 usr/lib/libm.so.2 usr/libexec/ld-elf.so.1 The libraries you will need may differ, but you can determine them via trial and error. Simply run 'runseti'. It will change userid and do the chrooting and then try to run 'setiathome', and at this point if you're missing a library that is needed the OS's program loader will probably print an error message telling you what library it still needs. Go find this on your disk and copy it to the corresponding place in the chrooted environment. My whole chrooted environment includes the following files: setiathome (their executable) bin/sh usr/lib/libc.so.3 usr/lib/libm.so.2 usr/libexec/ld-elf.so.1 as well as the files that setiathome creates when it runs. Note that all of these files must have their ownership and permissions set so that your setiathome user can access them! THE FIRST RUN IMPORTANT: The first time you run SETIATHOME you'll have to interact with it! The runseti.c code normally redirects output from SETIATHOME to a file called console.log. In order to do the initial SETIATHOME setup, you'll have to: 1) take this redirect out, compile the code, 2) run runseti, 3) go thru the inital (interactive) setup answering the program's questions, 4) kill SETIATHOME with Ctrl+C once it's all setup and running, 5) add the redirect back in to runseti.c, 6) recompile runseti.c, 7) start './runseti &' as usual. Thru all of this process, you *must* be root -- otherwise the chroot() call in runseti will fail. [Yes, there ought to be an option to runseti.c to control output redirection, but it's not worth the time to me to add one. If it bugs you, send me a patch...] SUBSEQUENT RUNS Right now I manually kick off the daemon by typing something like this: su (to become root) cd ~setiathome ./runseti & exit Then I just let it run forever. You could also consider adding '/path/runseti &' to your startup scripts if you reboot your machine often enough to warrant it. Remember, you *must* run 'runseti' as root -- otherwise the chroot() call will fail. Jason.