Building GNU Mach from Source
If you want to build the GNU Mach kernel yourself instead of just using a pre-built binary, follow these instructions.
The unpacked source tree is around 20 MiB, and the build tree (with all drivers enabled) is around 50 MiB.
Getting the Source Code
You can either use the git repository (see http://git.savannah.gnu.org/cgit/hurd/),
$ git clone http://git.savannah.gnu.org/cgit/hurd/gnumach.git/
... or get the Debian sources, if you're using Debian. (See here.)
$ apt-get source gnumach
On Debian Systems:
Preparing for the Build
Building GNU Mach requires the build-essential and fakeroot packages, and some additional dependencies specified by the gnumach source package:
# apt-get install build-essential fakeroot # apt-get build-dep gnumach
Building and Installing ... Debian
Change into the directory with the downloaded / unpacked GNU Mach sources,
$ cd gnumach-XXXXXXXX
Start the build process with
$ dpkg-buildpackage -us -uc -b -rfakeroot
GNU Mach is now building. To use the new kernel, you must install the
.deb package which is located one directory above the build
directory and has a similar name as the build directory:
# dpkg -i ../gnumach_XXXXXXXX-X_hurd-i386.deb
You can now reboot your computer and enjoy the new kernel.
On non-Debian Systems:
Preparing for the Build
Building GNU Mach requires a C compiler, a static 32 bit standard C library, your favourite flavor of awk (gawk) and GNU make.
First, create the configuartion files:
$ cd gnumach $ autoreconf --install
GNU Mach (and the associated headers) need be built in a separate build directory:
$ mkdir build $ cd build
$ ../configure --prefix=
If building on a 64 bit host system, you need a number of additional settings to force a 32 bit build:
$ CPP='gcc -m32 -E -x c -undef -ansi' CC='gcc -m32' LD='ld -melf_i386' ../configure --prefix= --host=i686-unknown-linux-gnu
Installing the Header Files First
In order to build GNU Mach, you will need a working MIG.
Building MIG in turn requires the GNU Mach header files to be already present.
So for bootstrapping MIG, you have to install the Mach headers first,
for example into
$ make DESTDIR=~/gnu install-data
Now you can build MIG. Once you are done with that, come back here to finish the Mach build.
Building and Installing
With MIG present, now build the kernel image:
$ make gnumach.gz
Optionally run the (tiny) test suite:
$ make check
It's a good idea to make a backup of the previously installed kernel, in case you can't boot using the new one. That way, you can restore it after booting from a rescue media (or mounting the disk image used by your vm).
# cp /boot/gnumach.gz /boot/gnumach.gz.bak
GNU Mach can now be moved into place, typically
/boot/gnumach.gz, so that you
can boot your system with the new kernel.
# cp gnumach.gz /boot