# Building [[GNUMach]] from Source
If you want to build the [[GNUMach]] kernel yourself instead of just using a pre-built binary, follow these instructions.
## Getting the Source Code
You can chose between getting the [sources from the developers's RCS](http://www.gnu.org/software/hurd/gnumach-download.html#cvs):
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co -r gnumach-1-branch gnumach
(Most probably you want to get hold of the _GNU Mach 1 branch_ and not the trunk, which is also what we've done above.)
... or (if you are working on a Debian system) the ones that are used for the [current Debian gnumach package](http://packages.debian.net/source/unstable/gnumach):
$ apt-get source gnumach
Please see [[Distrib/DebianFAQ]] before using _apt-get source_.
The unpacked source tree is around 20 MiB, and the build tree (with all drivers enabled) is around 50 MiB.
## Preparing for the Build
### ... on Debian systems
Building GNU Mach requires the _build-essential_ and _fakeroot_ packages, their dependencies and additional packages that are specified by the source gnumach package:
# apt-get install build-essential fakeroot
# apt-get build-dep gnumach
### ... on non-Debian systems
Apart from the case that you only want to install GNU Mach's header files (see below), building GNU Mach requires you to have the Mach Interface Generator installed. See [[Mig/BuildingMIG]] about how to do that, then come back here.
Additionally, building GNU Mach requires a C compiler, a standard C library (with corresponding header files) and your favourite flavor of awk (gawk) and make.
## Building and Installing
### ... _.deb_ files
Change into the directory with the downloaded / unpacked gnumach sources, e.g.
$ cd gnumach-20050801
Start the build process with
$ dpkg-buildpackage -us -uc -b -rfakeroot
[TODO]
[[GNUMach]] is now building. To use the new kernel, you must install the resulting _.deb_ package which is located one directory above the build directory and has a similar name as the build directory, e.g.
# dpkg -i ../gnumach_20050801-4_hurd-i386.deb
You can now reboot your computer and enjoy the new kernel.
### [TODO]
GNU Mach has to be built in a separate directory:
$ mkdir gnumach-build
$ cd gnumach-build
Find the path to your GNU Mach sources (_[...]/gnumach-1-branch_) and configure it:
$ [...]/gnumach-1-branch/configure [TODO]
Build the kernel image:
$ make kernel.gz
[TODO]
You can then install and use _kernel.gz_.
### Installing only the Header Files
GNU Mach has to be built in a separate directory:
$ mkdir gnumach-build
$ cd gnumach-build
Find the path to your GNU Mach sources (_[...]/gnumach-1-branch_) and configure it:
$ [...]/gnumach-1-branch/configure
Install the header files into e.g. _~/gnu/include/_:
$ make no_deps=t prefix=~/gnu install-headers