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 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
Note: you need to set the uuid in the grub config according to the uuid produced by the mke2fs
command.
Then boot it, and proceed like for the chroot case.
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/
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 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