============== Gentoo + \*BSD ============== I would really like to be able to play with OpenBSD's `PF`_, or FreeBSD's `jail`_, but I'm rather fond of Gentoo and portage. Right now anybody wanting to play with portage on a bsd has a **lot** of work to do before getting started, since we don't have stage-1 tarballs. I still don't have a stage-1, but this text and attendent files comprises a small start along the road to generating one. .. _PF: http://www.openbsd.com/faq/pf/index.html .. _jail: http://www.freebsd.org/cgi/man.cgi?query=jail&apropos=0&sektion=0&manpath=FreeBSD+4.8-RELEASE&format=html This guide has sections for `Gentoo OpenBSD`_ and `Gentoo FreeBSD`_. Gentoo OpenBSD -------------- Install OpenBSD ............... The first step is to install `OpenBSD`_. .. _OpenBSD: http://www.openbsd.com I downloaded their tiny little boot iso, burned it onto a cd, and booted from it to do an ftp install onto a spare hard drive. (A spare partition would suffice, as well, and grub will boot an OpenBSD partition just fine.) OpenBSD has two separate sources of information about how to perform an installation: the `FAQ`_ and the i386 `install`_ directory. .. _FAQ: http://www.openbsd.com/faq/index.html .. _install: ftp://ftp.openbsd.org/pub/OpenBSD/3.3/i386/INSTALL.i386 If you've never installed a \*BSD before, you might find the partitioning/slicing to be a bit confusing. I wouldn't recommend using a production hard drive! If you need to repartition a drive using OpenBSD's fdisk, you'll really want to do so using Cylindar/Head/Sector mode. My suggestion is, if you can't devote an entire drive to the installation and you *must* repartition, that you first take a look at a linux system using OpenBSD's fdisk so that you can see the pattern. In general you want a partition to end on a cylindar boundary (meaning that H and S should be their respective maximums), and you have to be careful to ensure that the partitions don't overlap (which is why it's simplest to work in C/H/S mode). Once you successfully reboot into your new OpenBSD system, you need to add a portage user and group:: # groupadd -g 250 portage # useradd -g 250 -u 250 -s /sbin/nologin -d /var/empty portage Portage ....... Since we didn't start from a stage-x tarball, we need a way to get portage onto the system. I've assembled a tarball that contains portage and necessary dependencies: python, bash, bzip2, rsync, and GNU versions of make, patch, sed, and tar (all of which have a "g" prepended so that they don't conflict with the BSD versions):: # cd / # ftp http://dev.gentoo.org/~g2boojum/obsd/gentoo-obsd.tgz # tar xvzf gentoo-obsd.tgz At this point you should have a modestly functional portage. Let's see if it works:: # emerge info # emerge sync (If "emerge sync" suggests that you need to upgrade portage, you probably don't want to do it right now. Some custom tweaks to portage were necessary, and you'll have to recreate them if you update.) You'll also want to satisfy the glibc dependency:: # echo virtual/glibc sys-libs/glibc >> /var/cache/edb/virtuals # emerge inject sys-libs/glibc-2.3.2 Now you can play! Dependencies are a mess, since the OpenBSD base system provides quite a bit that needs to be properly enumerated. Portage does work, however:: # ebuild /usr/portage/app-editors/nano/nano-1.2.1.ebuild merge # nano -w /etc/make.conf Some files can be found in my obsd_ directory. .. _obsd: http://dev.gentoo.org/~g2boojum/obsd Gentoo FreeBSD -------------- Installing FreeBSD .................. The first step is to install `FreeBSD`_. .. _FreeBSD: http://www.freebsd.com I downloaded their 5.1 disk 1 iso, burned it onto a cd, and booted from it to do a "minimal" cd install onto a spare hard drive. (A spare partition would suffice, as well, and grub will boot an FreeBSD partition just fine.) FreeBSD has adequate installation instructions in the FreeBSD Handbook_. .. _Handbook: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html If you've never installed a \*BSD before, you might find the partitioning/slicing to be a bit confusing. I wouldn't recommend using a production hard drive! Fortunately, the FreeBSD fdisk and bsdlabel tools are fairly intuitive. I just used fdisk's and bsdlabel's defaults. Once you successfully reboot into your new FreeBSD system, you need to add a portage user and group:: # echo 'portage:*:250:root' >> /etc/group # vipw (<-- add portage:*:250:250::0:0:Portage:/nonexistent:/sbin/nologin) (Note, editing /etc/password will *not* work! See "man 5 passwd".) Portage ....... Since we didn't start from a stage-x tarball, we need a way to get portage onto the system. I've assembled a tarball that contains portage and necessary dependencies: python, bash, rsync, and GNU versions of make, patch, sed, and tar (all of which have a "g" prepended so that they don't conflict with the BSD versions):: # cd / # ftp http://dev.gentoo.org/~g2boojum/fbsd/gentoo-fbsd.tgz # tar xvzf gentoo-fbsd.tgz At this point you should have a modestly functional portage. Let's see if it works:: # emerge info # emerge sync (If "emerge sync" suggests that you need to upgrade portage, you probably don't want to do it right now. Some custom tweaks to portage were necessary, and you'll have to recreate them if you update.) You'll also want to satisfy the glibc dependency:: # echo virtual/glibc sys-libs/glibc >> /var/cache/edb/virtuals # emerge inject sys-libs/glibc-2.3.2 Now you can play! Dependencies are a mess, since the FreeBSD base system provides quite a bit that needs to be properly enumerated. Portage does work, however:: # ebuild /usr/portage/app-editors/nano/nano-1.2.1.ebuild merge # nano -w /etc/make.conf Some files can be found in my fbsd_ directory. The "profiles", and various portage directories come from the Gentoo-BSD team. .. _fbsd: http://dev.gentoo.org/~g2boojum/fbsd Notes ----- 1. There's a great deal that needs to be done before portage is fully functional on the BSDs. I modified portage.py so that it accepts {Open,Free}BSD as a supported ostype (I just copied the relevant stanza for Darwin). I also edited ebuild.sh to use some GNU tools; after the "unalias -a" line I added aliases for tar=gtar, patch=gpatch, make=gmake, and sed=gsed. These changes need to be added to portage in a much more sane way than I have done so far. 2. For the moment, we need an openbsd-sources ebuild that downloads the OpenBSD sources and provides a boatload of dependencies. (The long-term fix is to break the bsd-sources package into smaller and better controlled pieces so that users can pick-and-choose what parts of BSD and GNU userland tools and kernels that one wants to use, but one thing at a time!) There is currently a [free]bsd-sources ebuild which can be found in my fbsd_ directory. 3. Using GNU tools for portage is really a hack; we should be able to support BSD tools, too. Also, I've disabled sandbox because it doesn't compile on a BSD system. It shouldn't be hard to port, but the work needs to be done. For more information on proposed portage changes to better facilitate the BSDs, see the resources of the `gentoo alt`_ page. .. _`gentoo alt`: http://www.gentoo.org/proj/en/gentoo-alt/ 4. We need a version of baselayout for the BSD systems. It should be possible to use the BSD init with our scripts, but I don't believe that anybody has had the time to work it out just yet. 5. A great many of our ebuilds will have to be patched to build on the BSDs. (In fact, although the portage dependencies for OpenBSD built without difficulty, both gsed and gmake required patches, liberally stolen from the FreeBSD ports tree, to compile on FreeBSD.) Have fun! -g2boojum-