This page discusses things for Unix systems, there is a separate page for Microsoft Windows systems.

See the discussion about writeback caching.

Readily Available Images

You can use the following images to give the Hurd a try.

Debian GNU/Hurd

pre-installed available at


  • Install qemu-kvm via your distribution's package manager (it might just be named qemu)
  • Download the image, unpack it, and run it:
$ wget
$ tar -xz < debian-hurd.img.tar.gz
$ kvm -m 1G -drive cache=writeback,file=$(echo debian-hurd-*.img) -no-reboot -net user,hostfwd=tcp: -net nic,model=e1000
  • Log in as root (the root password is empty)
  • Set up a root password with passwd

  • update the system with apt update && apt upgrade

  • Log in as demo (the demo password is empty)

  • Set up a demo password with passwd

  • You can also create another non-root user with adduser <username>

  • and set the non-root user password with passwd <username>
  • and add the non-root user to the sudo group via gpasswd -a <user> sudo

  • logout via logout

Optionally you may use --curses to keep your keyboard layout. If need be modprobe kvm_amd, kvm intel and kvm to get kvm support (which is much, much faster).

Note that if you do not have a command named kvm, you can try something across the lines of:

$ qemu-system-i386 --enable-kvm -drive cche=writeback,file=$(echo debian-hurd-*.img) -net user,hostfwd=tcp: -net nic,model=e1000

Or, if your machine does not allow for KVM acceleration, omit --enable-kvm from the command.

Please also read the README file:

If you have troubles extracting the image, you can use the gz version, the zip version, or even the plain version (5GiB!)

See the discussion about writeback caching.

Trying out rumpdisk

Rump kernels provide new modern drivers for the Hurd. We refer to rumpdisk as a rump kernel that provides drivers for modern hard drives, SSDs, etc. The Rump kernels' integration into the Hurd are still somewhat experimental, but they seem to work fairly well on bleeding edge Debian.

Once you have your latest qemu Debian GNU/Hurd image running, then you can try the rumpdisk (be sure to pass "-m 2GB" or more). First, add these sources to your /etc/apt/sources.list

deb unstable main
deb-src unstable main
deb unreleased main

Then, upgrade to the bleeding edge Debian GNU/Hurd:

 # apt update
 # apt upgrade --without-new-pkgs
 # apt dist-upgrade

Now test to see if the rump kernel works before you make the change permanent. Manually tweak your /boot/grub/grub.cfg like so:

#   multiboot   /boot/gnumach-1.8-486.gz root=part:2:device:hd0 console=com0
multiboot   /boot/gnumach-1.8-486.gz root=part:2:device:wd0 console=com0 noide

and your /etc/fstab

#/dev/hd0s2      /               ext2    defaults        0       1
/dev/wd0s2      /               ext2    defaults        0       1
#/dev/hd0s1      none            swap    sw              0       0
/dev/wd0s1      none            swap    sw              0       0
#/dev/hd2        /media/cdrom0   iso9660 noauto          0       0
/dev/wd2        /media/cdrom0   iso9660 noauto          0       0

Now you can poweroff your machine, reboot, and start using the rumpdisk! You can make these changes permanent by tweaking /etc/default/grub and telling it to use rumpdisk:


Then update your grub:

 # update-grub

Check that "noide" does appear in your /boot/grub/grub.cfg.

Arch Hurd Live CD

Arch Hurd offers Hurd LiveCDs at

A less recent Live CD can be found at

Arch Hurd also offers a QEMU image. It can be run with QEMU via

$ wget
$ xz -d archhurd-2018.09.28.img.xz
$ kvm -m 1G -drive cache=writeback,file=archhurd-2018.09.28.img

The .img file is useful for running Arch Hurd in a virtual machine. For hardware installations, use the Live CD. When using Arch Hurd in QEMU, the command 'hurd-halt' safely stops the emulation (removing the need for '-no-reboot')

To install the Live CD ISO file in QEMU (instead of using the .img file):

$ wget
$ xz -d hurd-live-install-1273300101.iso.xz
$ qemu -m 512 -cdrom hurd-live-install-1273300101.iso

The LiveCD should be useful for those who want to try out the Hurd before they commit to installing it on their hard disks. In addition to that, the bootable Hurd CDs should enable us to have a native installer instead of relying on Linux.

  • ?RequirementsForLiveCD
  • ?BuildingHurdLiveCD

NixOS and GuixSD

Unofficial Images

Note that the following images are unofficial ones: they have been prepared by volunteers and may not have been tested extensively.

  • Disk image with a short intro on translators. Just start it with qemu -m 1G -drive cache=writeback,file=disk_image.img. It should work without any of the configuration below. If you want to know what you can do with it, please have a look at its wikipage. And when you use it, please tell me your experience with it! - ArneBab

What is Needed to create a QEMU image

Debian Installer

Instructions for creating a qemu image from the install CDs from debian installer can be found in the README alongside the d-i Hurd images:

KVM acceleration

Check if your CPU supports kvm:

$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

If you don't have hardware support (slow):

$ apt install qemu

Do not enable kernel-kqemu, as that assumes some particular behavior from the guest kernel, which we are reluctant to artificially add to gnumach.

If QEMU with KVM is not available, Virtualbox reportedly has better performance.

If you have hardware support (recommended):

$ apt install qemu-kvm
$ modprobe kvm

Intel VTx/VTd: Enable Intel kvm in the BIOS

On a HP xw4600 Workstation: F10, Security->System Security; Enable VTx and VTd

Check that the kvm module is loaded:

$ lsmod|grep kvm
kvm_intel              38050  0
kvm                   213800  1 kvm_intel

$ ls -l /dev/kvm
crw-rw----+ 1 root kvm 10, 232 Mar 14 15:02 /dev/kvm

Add yourself to the kvm group:

$ adduser your_user kvm; logout; login

AMD SVM (AMD-V): Enable AMD-V in the BIOS if not enabled.

Check that the kvm module is loaded:

$ lsmod|grep kvm
kvm_amd               31862  0
kvm                   214088  1 kvm_amd

More info on kvm at:

If your machine supports hardware acceleration, you should really use the kvm variant of qemu, as it speeds things quite a lot.

HAP/EPT/NPT acceleration

Performance will be yet better if HAP (EPT or NPT) is available:

$ grep ept /proc/cpuinfo
$ grep npt /proc/cpuinfo

Installing Debian/Hurd with QEMU using the Debian installer

Note: If you have hardware support, replace the qemu commands below with kvm, e.g. qemu-ing -> kvm-img.

First off you will need to create a disk image using qemu-img. I have set mine to 4 GiB, although you should be able to get away with less.

$ qemu-img create hd0.img 4G

Next you will want to start up QEMU and begin the installation process.

$ qemu -m 1G -drive cache=writeback,file=hd0.img -cdrom debian-7.0-hurd-i386-NETINST-1.iso -net nic,model=e1000 -net user

Now at his point do the regular install using hd0 as your harddrive. Partition it and install the base system.

In the installer make your choice of install option: Default install (or your choice)

Language: English
Country, territory or area: your_choice
Locale: your_choice

Note that even if you can set the country and locale, your local keyboard is not yet supported.

In case of problems with timezone or locale settings do the following after the installation is completed

To get the correct timezone:
$ dpkg-reconfigure tzdata
To get your locale setting: 
$ nano /etc/locale.gen
$ locale-gen

Network: Now configured automatically with dhcp

IP address:

Qemu network setup:
QEMU VLAN     <------>  Firewall/DHCP server <-----> Internet
                  |          (
                  ---->  DNS server (
                  ---->  SMB server (

Partitioning method: Guided (or your choice)

Partitioning /dev/hd0: All files in one partition.

Important: Since partman does not yet mount other partitions than / automatically at reboot, it is crucial that you choose this option for now.

Once you have finished installing the base system (might take some time) the system is rebooted and next boot will be from the hard disk. Now you are able to log in to your newly installed GNU/Hurd system.

Running the installed system

Starting qemu/qemu-kvm:

$ kvm -m 1G -net nic,model=e1000 -net user,hostfwd=tcp::5555-:22 -drive cache=writeback,file=hd0.img -vga vmware
vmsvga_value_write: guest runs Linux.

Note: See below on port forwarding in the networking section.

Note: Using the vmware vga driver is useful for setting up X windows, see Debian GNU/Hurd

If you have problems with grub hanging during boot with the vmware vga driver: Disable the graphic boot

$ nano /etc/default/grub
uncomment GRUB_TERMINAL=console
$ /usr/sbin/update-grub

qemu: fatal: Trying to execute code outside RAM or ROM at 0x000000010010001e

This is due to a bug in QEMU, where the x86_64 QEMU binary fails to properly truncate addresses in 32-bit mode. Waiting for id:"" to be applied and become generally available, just use the qemu-system-i386 binary instead. See Debian bug #719633

A few words about the qemu console

During the graphical emulation, you can use the following keys:

<Ctrl><Alt>-f Toggle full screen
<Ctrl><Alt>-u Restore the screen's un-scaled dimensions
<Ctrl><Alt>-n Switch to virtual console 'n'. Standard console mappings are:
1 Target system display
2 Monitor
3 Serial port
<Ctrl><Alt> Toggle mouse and keyboard grab.

Transferring Files

Mounting Disk Image on Host

You may wish to mount your disk image on your host system to transfer files. To do this you will first need to find the offset of the partition you wish to mount.

# fdisk -ul hd0.img
128 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
hd0.img1   *          63     3515903     1757920+  83  Linux
hd0.img2         3515904     4193279      338688   82  Linux swap / Solaris

Now take the number of sectors for the beginning of the partition and multiply it by the sector size. My partition starts at sector 63 and I have a sector size of 512 therefore my offset is 32256. For a start at 2048 the ofsset is 1048576.

# mount -o loop,offset=32256 hd0.img /mnt/diskimage

Having QEMU create virtual FAT disk images

Link to the manual.

QEMU has a facility to create FAT file systems on-the-fly:

qemu [...] -hdc fat:[somewhere]

The Hurd fatfs translator currently is read-only, but for testing executables (etc.) that is enough. And it is much easier than loop-mounting the file systems images. (Also you don't need `root' rights.)

However, note that there is a bug in fatfs: GNU Savannah bug #25961.

Networking in QEMU

Some further notes about networking and home hints about sharing files.

Internet Access

If you just want to access the internet from within QEMU, you can setup pfinet for QEMU's user-networking:

# settrans -afgp /servers/socket/2 /hurd/pfinet -i /dev/eth0 -a -g -m
# echo "nameserver" > /etc/resolv.conf

If you are on Debian GNU/Hurd, you can even use DHCP.

To get ssh working:

# apt install openssh-server (Similarly for telnet if preferred)

(See also

Outgoing internet connections should just work then. Testing it can be difficult with a minimal installation, but apt update should work after you have filled out /etc/apt/sources.list. After that you should be able to install other network packages, but note that ping doesn't work with QEMU's user-networking stack.

If you want to connect from the host system to the Hurd system running in QEMU, you can use port forwarding in QEMU or to setup something more advanced, like bridged networking.

IRC, freenode, #hurd, 2014-02-12

<braunr> youpi: also, the problems i had with regard to accessing the debian repository were caused by a qemu bug where, in nat mode, qemu is unable to handle dns requests if the host dns servers are ipv6 ones
<youpi> yes, we've noticed that with a student of mine
<youpi> you may be interested by a patch we submitted to qemu-devel, that adds ipv6 support to -net user :)
<braunr> :)
<braunr> for now i directly change resolv.conf
<youpi> braunr: the issue is that you have only ipv6 nameservers, right?
<braunr> yes
<youpi> there's not much better to do than that
<youpi> (patching resolv.conf inside the guest, or apply the ipv6 patch)

This is fixed in qemu 2.6

Port Forwarding in QEMU/KVM

(In the following we assume we use kvm!)

Logging in to Hurd from a terminal in your host system

This is the recommended way to work with a Command Line Interface (CLI) since all your keyboard and locale settings are preserved.

a) with ssh (assuming you have installed openssh-server)

$ kvm -m 1G -net nic,model=e1000 -net user,hostfwd=tcp::5555-:22 -drive cache=writeback,file=hd0.img &

Logging in to the running Hurd:

$ ssh -p5555 localhost

Copying files:

1) On your host
To Hurd:   scp -p -P5555 file localhost:
From Hurd: scp -p -P5555 localhost:file .
2) On Hurd
To host:   scp -p file {,your_host_ip}: .
From host: scp -p {,your_host_ip}:file .

b) with telnet (assuming you have installed a telnet server, like telnetd)

$ kvm -m 1G -net nic,model=e1000 -net user,hostfwd=tcp::5556-:23 -drive cache=writeback,file=hurd-install.qemu &

Logging in to the running Hurd:

$ telnet localhost 5556

c) With the tap interface, see below.

Bridged Networking

What is Needed

  1. Your Linux kernel will need 802.1d Ethernet Bridging support and TUN/TAP device driver support.
  2. You will need to install bridge-utils.

Setting Up the Host Bridge

You need to setup a bridge on the host first. This assumes eth0 is down. I have modified my hosts network startup scripts to automatically setup a bridge, you may want to do this also.

# brctl addbr br0
# ifconfig eth0 promisc up
# brctl addif br0 eth0

At this point you will need to setup br0 as you would normally eth0 (dhcpcd br0 for example).

The qemu-ifup Script

This script gets called when QEMU starts and will attach the tun device to the bridge. QEMU will look for this file at /etc/qemu-ifup and that is where I keep mine.

sudo ifconfig $1 promisc up
sudo brctl addif br0 $1

Setting up the Network in the Hurd

Now it is time to start-up your QEMU Hurd system and get networking going in there.

Important: Remember you may need to use the -M isapc or -isa flag if using an older version of the gnumach package.

$ qemu -m 1G -drive cache=writeback,file=hd0.img -cdrom debian-K9-hurd-i386-CD1.iso -fda floppy.img -boot a -net nic,model=e1000 -net tap

Once you have logged in as root run the pfinet translator with values that apply to your network. Think of your QEMU client as another computer in your network.

# settrans -fgap /servers/socket/2 /hurd/pfinet -i /dev/eth0 -a -g -m

That should do it! Do not forget to edit/update /etc/resolv.conf to get DNS working.

Booting Hurd without grub, using qemu's multiboot support

See "Linux/Multiboot boot specific" section on QEMU manpage.

Get the multiboot modules. Either extract them from the disk image, or, download:

$ wget
$ wget
$ wget

Generally, these files need to correspond to the ones in the disk image, so don't forget to keep them up to date.

The kernel image needs to be uncompressed (gunzip gnumach.gz), as otherwise you'll get told: qemu: linux kernel too old to load a ram disk.

$ qemu [...] \
> --kernel gnumach \
> --append 'root=device:hd0s1' \
> --initrd \
> 'ext2fs.static --multiboot-command-line=${kernel-command-line} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T typed ${root} $(task-create) $(task-resume)',\
> 'exec.static $(exec-task=task-create)'

Note that, contrary to GRUB's configuration file, you don't specify "argv[0]" here, and it's fortunate that neither ext2fs nor exec need a comma on their command line...

Related Links

These are links that users may find helpful.

Debian after install -- good source of information pertaining to your system after installation.

Image for L4 -- a QEMU image for the Hurd/L4 project.

Hurd Installation Guide from