summaryrefslogtreecommitdiff
path: root/open_issues/64-bit_port.mdwn
blob: b85d95dec9cb23657625ab9edcc6b28d25e7141e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
[[!meta copyright="Copyright © 2011, 2012, 2013, 2014, 2016, 2017 Free Software
Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!tag open_issue_gnumach open_issue_mig]]

[[!inline pages="title(Is there a 64-bit version?)" feeds="no" raw="yes"]]

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

  * Fixing bugs :)

**For pure 64bit support, we need to**

  * bootstrap a distribution. Debian is done. Alpine-Hurd is mostly
    bootstrapped.  Reach out to Sergey if you are interested in an
    Alpine-Hurd distribution with bleeding-edge software.  Reach out
    to Guix, if you want to help them bootstrap a 64bit Hurd.
  * port gdb
  * Fix bugs :)
    * Notably it seems to be requiring at least 2G memory to boot.

**Installing via the installer image**

The installer appears to work in qemu.  Give it a shot!  Let us know
how it works in real hardware!

[[http://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/current/]]

**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
    /sbin/mke2fs -E root_owner=$UID:0 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