https://xkcd.com/293/ Table of content **************** * Preparing execution with KVM * Pre-installed image * Installer CD images * Small Examples on Using Translators Preparing execution with KVM **************************** If you are already used to run KVM at full speed, you can skip this section. Install kvm: $ sudo apt install qemu-kvm Make sure that you can access /dev/kvm to get full KVM speed (otherwise KVM will be terribly slow). You can easily check with $ file -s /dev/kvm that you properly get "ERROR: cannot read `/dev/kvm' (Invalid argument)", which means that "file" was properly able to open kvm, just not smart enough to use it :) If you get "cannot open `/dev/kvm' (No such file or directory)", check in your BIOS setup to make sure that accelerated virtualization is activated, and make sure that the kvm_intel module is loaded. If you get "no read permission", make sure you give your user permissions to use kvm: $ sudo adduser $USER kvm and log-out and log-in again. Pre-installed image ******************* To give Debian GNU/Hurd a try, it is probably easier to simply run the preinstalled image, which is provided here: $ wget http://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/debian-hurd.img.tar.xz $ tar xJf debian-hurd.img.tar.xz All the debian-hurd.img* files are the same, they are just in various format, because it has been reported that some tools are not able to cope with the sparse tar format. The .tar.xz is still the preferred, as it will produce a sparse file on your disk. You can compare the resulting .img file with the MD5SUMS file It can be run directly in qemu/kvm. Execution with KVM ================== $ kvm -M q35 -m 2G -drive file=$(echo debian-hurd*.img),cache=writeback If you don't have the kvm alias, use qemu-system-x86_64 -enable-kvm You can then just log in as demo or root user without a password. It is often convenient to connect through ssh to the box, instead of logging on the console, this can be done by forwarding the ssh port: $ kvm -M q35 -m 2G -drive file=$(echo debian-hurd*.img),cache=writeback -net user,hostfwd=tcp:127.0.0.1:2222-:22 -net nic,model=e1000 then setting a password to the demo user with passwd demo and then you can connect through ssh: ssh demo@localhost -p 2222 One can increase the size of the image with e.g.: $ qemu-img resize debian-hurd*.img +5G $ parted debian-hurd*.img (parted) resizepart 2 100% (parted) quit $ sudo losetup -o $((512*1953792)) /dev/loop0 debian-hurd*.img $ sudo resize2fs /dev/loop0 $ sudo losetup -d /dev/loop0 (1953792 is the start sector shown in fdisk -l debian-hurd*.img) If you want to give access to a CD image, you can add -cdrom /path/to/image.iso or -cdrom /dev/cdrom Execution with VirtualBox ========================= The image can also be run in virtualbox (though it is much less tested), by first converting to VDI format : $ VBoxManage convertfromraw debian-hurd.img debian-hurd.vdi --format vdi and then load it into VirtualBox. You can then just log in as demo or root user without a password. Using the system ================ Here are just a couple hints, be sure to read http://www.debian.org/ports/hurd/hurd-install for more information. One can reconfigure the layout by running $ sudo dpkg-reconfigure keyboard-configuration One can choose the timezone by setting its name in /etc/timezone Don't forget to call $ sudo apt update to get the repositories information before trying to install packages. One can safely shut down the system with $ sudo poweroff Installer CD images =================== ISO installer images are available on http://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/current/ * Download: $ wget http://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/dvd-1.iso # apt install qemu-kvm * Create a hard disk image: $ qemu-img create hurd-install.qemu 3G * Start the installation: Since we haven't yet optimized the installer initrd mechanism for memory usage at all you will need at least 2G of memory even for the text installer (about 4G for the graphical installer), or the installer will likely crash due to missing memory. $ kvm -M q35 -m 2G -drive file=hurd-install.qemu,cache=writeback -cdrom dvd-1.iso -boot d We recommend not to use a network mirror during installation, since that would use the sid distribution, which is often not installable. One can instead install just the base system when using NETINST, and the standard task when using CD-1 or DVD-1). Enabling the use of a mirror and installing packages can be done after rebooting into the newly installed system. If you don't have a CDROM driver, or it is not supported (the installer doesn't find the iso image), you can use mini.iso, which can even boot from a USB stick, and everything will be downloaded from the network. Note the gnome and kde desktop are not yet completely installable and working. The LXDE desktop is preferred, or even just icewm (by default) etc. On real hardware: * Note that in addition to support for IDE, GNU Mach has drivers for SATA devices, but only in AHCI mode, not in RAID mode. * Installation CDs include the 2.6.32 Linux network drivers, and should thus cover a wide range of network boards. There is however no support for firmware loading. * There is no support for wireless network devices, nor for sound yet. * There are no USB stick drivers, so images can be used only on real CD/DVD media. When going through the installation: * Reminder for qemu: with the user network stack default configuration, use the following values: IP address: 10.0.2.15 Netmask: 255.255.0.0 Gateway: 10.0.2.2 Nameserver: 10.0.2.3 Remarks: * /usr or /usr/local on separate filesystem is not supported yet. Note: daily/weekly/monthly installer snapshots are additionally available on https://people.debian.org/~sthibault/hurd-amd64/installer/cdimage/ to get the latest versions of everything. They are however NOT ACTUALLY TESTED, it might happen that they just do not even work at all. Really better use the images mentioned above. Configuring the installed system ================================ Please make sure to read http://www.debian.org/ports/hurd/hurd-install for other configuration information (network / filesystems / X) as well as the FAQ: http://www.gnu.org/software/hurd/faq.html or its latest version on http://darnassus.sceen.net/~hurd-web/faq/ and known open issues http://www.gnu.org/software/hurd/open_issues.html Email us to for debian-specific things or for non-debian-specific things if you have questions or comments, We are also available on #hurd on Freenet, #debian-hurd on OFTC. Small Examples on Using Translators =================================== The concept of user-space servers, Translators, is a very powerful one. Here is an introductionary text. Intro The Hurd has some unique capabilities, and we created this simple image to enable you to easily try three of them: • The simplest of translators: Hello World! • Transparent FTP • Mount a remote ISO file Hello World To try out the simplest of translators, you can go the following simple steps: $ touch hello $ cat hello $ settrans hello /hurd/hello $ cat hello "Hello World!" $ fsysopts hello /hurd/hello --contents='Hello World! ' $ fsysopts hello --contents='Hello GNU! > ' $ cat hello Hello GNU! $ settrans -g hello $ cat hello What you do with these steps is first creating the file "hello" and verifying that it is empty. Then you setup the translator /hurd/hello in the file/node hello. After that, you check the contents of the file, and the translator returns "Hello World!". Because you are a curious hacker, you wonder what filesystem options this node has. It turns out that the hello translator uses a "contents" option. We can change what the hello translator returns with another call to fsysopts. To finish it, you remove the translator from the file "hello" (and tell any active running instances to go away) via "settrans --g hello", which is shorthand for "settrans --goaway hello" Having done that, verify that now the file is empty again. Transparent FTP We already setup a a transparent FTP translator for you at /ftp: With it you can easily access public FTP via the file system, for example the one from the GNU project: $ ls /ftp://ftp.gnu.org/ But you can also do this very easily yourself: $ # Setup the translator on the node ftp: $ settrans -c ftp: /hurd/hostmux /hurd/ftpfs / and you can access FTP sites via the pseudo-directory ftp:, for example with $ ls ftp://ftp.gnu.org/ What you do here is setting up the translator /hurd/hostmux on ftp: and passing it the translator /hurd/ftpfs to use for resolving accesses as well as / as additional path component. ISO file mount Now that we can access ftp.gnu.org transparently, let's mount a remote ISO file: $ settrans -c mnt /hurd/iso9660fs ftp://ftp.gnu.org/old-gnu/gnu-f2/hurd-F2-main.iso $ ls mnt/ It is interesting to note that since the ISO9660 format is indexed, ftpfs does not have to download the whole ISO file, it merely fetches what iso9660fs requests. These were only three basic usages of translators on the Hurd. We're sure you'll quickly see many other ways to use this. As a last comment: You can setup a translator on any node you have access to, so you can for example mount any filesystems as normal user. You might currently be logged in as root, but you could just as well do the same as normal user. Why don't you try it out? Links: documentation faq/still useful news/2013-05-debian gnu hurd 2013 translator Copyright © 2011 Free Software Foundation, Inc. License: GFDL 1.2+ 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. Last edited 2019-03-27 18:45:55 CET