There are plans for 64-bit kernelland with 32-bit userland, which will notably permit to efficiently make use of more than 2 GiB memory and provide 4 GiB userland addressing space.

A 64-bit GNU/Hurd is also coming soon, progress is tracked on 64-bit port! Hurd developers ported GNUMach to 64-bit some time ago. Then they started making significant progress on the x86_64 userland port in Feb 2023. As of May 2023, the 64-bit port works well enough to start all the essential Hurd servers, run /bin/sh, establish TCP/IP connections, and compile C. We are currently building 64-bit packages. We plan on supporting both a 32-bit and 64-bit Debian GNU/Hurd, only not both at the same time. However, there is no plan to fix the year 2038 concern on a 32-bit system.

That being said, you can always run a 32-bit version on a 64-bit machine, it just works, processes are just limited to a couple GiB available memory.

What is left for initial support (32-on-64) is

  • Fixing bugs :)

For pure 64bit support, we need to

  • bootstrap a distrib
  • port gdb
  • Fix bugs :)
    • Notably it seems to be requiring at least 2G memory to boot.

Installing a 64bit chroot

You can use the pre-built image from https://people.debian.org/~sthibault/hurd-i386/initrd-amd64.img.gz and boot that.

Make sure to have debootstrap >= 1.0.128+nmu2+hurd.1

debootstrap --foreign --verbose --arch hurd-amd64 --include=debian-keyring,wget,curl,inetutils-ping,openssh-server,openssh-client,nano,less --keyring=/usr/share/keyrings/debian-keyring.gpg sid chroot-hurd-amd64 https://people.debian.org/~sthibault/tmp/hurd-amd64
mkdir chroot-hurd-amd64/etc/apt/trusted.gpg.d
ln -s /usr/share/keyrings/debian-keyring.gpg chroot-hurd-amd64/etc/apt/trusted.gpg.d/

Then boot it, it will drop you into a shell. You'll probably want to use a nicer shell:

bash

You need to make / writable:

fsysopts / --writable

and then run the second stage of the deboostrap (and clear debs):

/debootstrap/debootstrap --second-stage
apt clean

set a root password:

passwd

Avoid core dumpings for now (not supported and hangs):

rm -f /servers/crash
ln -s crash-kill /servers/crash

Disable the Hurd console, buggy for now:

export TERM=mach
nano /etc/default/hurd
# set ENABLE to 'false'

And reboot:

reboot-hurd

After reboot, you'll probably want to setup network:

vi /etc/network/interfaces
# put there this:
auto /dev/eth0
iface /dev/eth0 inet static
    address 10.0.2.15/16
    gateway 10.0.2.2

Creating a 64bit disk image

You can use the pre-built image from https://people.debian.org/~sthibault/hurd-i386/disk-amd64.img.gz and boot that.

To make a bootable system we really better make the disk image partitioned, and mount the partition:

dd < /dev/zero > disk.img bs=1M count=1 seek=1000
fdisk disk.img
# create a new primary partition spanning the whole disk: n p and just accept the defaults, and finish with w
settrans -ca disk /hurd/storeio -T typed file:disk.img
settrans -ca disk1 /hurd/storeio -T typed part:1:file:disk.img
mke2fs disk1
settrans -ca chroot-hurd-amd64 /hurd/ext2fs disk1

(here we assume that fdisk puts the partition at sector 2048, that's indeed the current default behavior)

Then run the same debootstrap command as above.

You can then make the disk bootable:

mkdir chroot-hurd-amd64/boot/grub
tee chroot-hurd-amd64/boot/grub/grub.cfg << 'EOF'
set default="0"
set timeout=5
menuentry "Debian GNU/Hurd amd64" {
        insmod ext2
        set root=(hd0,1)
        multiboot       /boot/gnumach-1.8-486.gz root=part:1:device:wd0
        module /hurd/pci-arbiter.static pci-arbiter \
                        --host-priv-port='${host-port}' --device-master-port='${device-port}' \
                        --next-task='${disk-task}' \
                        '$(pci-task=task-create)' '$(task-resume)'
        module /hurd/rumpdisk.static rumpdisk \
                        --next-task='${fs-task}' \
                        '$(disk-task=task-create)'
        module /hurd/ext2fs.static ext2fs --readonly \
                        --multiboot-command-line='${kernel-command-line}' \
                        --exec-server-task='${exec-task}' -T typed '${root}' \
                        '$(fs-task=task-create)'
        module /lib/ld-x86-64.so.1 exec /hurd/exec '$(exec-task=task-create)'
}
EOF
grub-install --modules="part_msdos ext2" --boot-directory chroot-hurd-amd64/boot disk
settrans -ga chroot-hurd-amd64
settrans -ga disk
settrans -ga disk1

Then boot it, and proceed like for the chroot case.

Creating a pbuilder chroot

Here is a sample /etc/pbuilderrc:

MIRRORSITE=https://people.debian.org/~sthibault/tmp/hurd-amd64
AUTOCLEANAPTCACHE=yes
EXTRAPACKAGES="eatmydata"
if [ -z "$LD_PRELOAD" ]; then
        LD_PRELOAD=libeatmydata.so
else
        LD_PRELOAD="$LD_PRELOAD":libeatmydata.so
fi
export LD_PRELOAD
DEBOOTSTRAPOPTS=(
        '--variant=buildd'
        '--force-check-gpg'
        '--keyring=/usr/share/keyrings/debian-keyring.gpg'
)
APTKEYRINGS=(/usr/share/keyrings/debian-keyring.gpg)

And this is needed until we get the aptitude package built:

sudo ln -sf pbuilder-satisfydepends-apt /usr/lib/pbuilder/pbuilder-satisfydepends

And then you can run sudo pbuilder create , sudo pbuilder login , pdebuild

Installing from the debian-ports archive

For now it's quite empty (not even gcc), but it can be debootstrapped. That will be used to build packages on the buildds.

debootstrap --foreign --verbose --arch hurd-amd64 --extra-suites=unreleased --include=debian-ports-archive-keyring --keyring=/usr/share/keyrings/debian-ports-archive-keyring.gpg sid chroot-hurd-amd64 https://deb.debian.org/debian-ports/

Installing proper & more packages

The people.debian.org repository is only for bootstraping the distribution. Proper packages are getting uploaded on the usual mirror:

deb http://deb.debian.org/debian-ports sid main deb http://deb.debian.org/debian-ports unreleased main

Installing a 64bit system

In principle crosshurd should be working, one however should add this source to get more packages for now:

deb http://people.debian.org/~sthibault/tmp/hurd-amd64 unstable

into /etc/crosshurd/sources.list/gnu