summaryrefslogtreecommitdiff
path: root/hurd
diff options
context:
space:
mode:
Diffstat (limited to 'hurd')
-rw-r--r--hurd/bootstrap.mdwn7
-rw-r--r--hurd/building.mdwn6
-rw-r--r--hurd/documentation.mdwn39
-rw-r--r--hurd/documentation/translators.html2
-rw-r--r--hurd/glibc.mdwn6
-rw-r--r--hurd/porting/guidelines.mdwn6
-rw-r--r--hurd/porting/system_api_limitations.mdwn3
-rw-r--r--hurd/rump.mdwn65
-rw-r--r--hurd/running/debian/after_install.mdwn5
-rw-r--r--hurd/running/debian/patch_submission.mdwn6
-rw-r--r--hurd/running/qemu.mdwn61
-rw-r--r--hurd/running/qemu/image_for_l4.mdwn24
-rw-r--r--hurd/subhurd.mdwn5
-rw-r--r--hurd/terrible-mdns-responder.mdwn52
-rw-r--r--hurd/translator/ext2fs.mdwn15
-rw-r--r--hurd/translator/httpfs.mdwn10
-rw-r--r--hurd/translator/pfinet/ipv6.mdwn2
-rw-r--r--hurd/translator/procfs.mdwn2
-rw-r--r--hurd/translator/tmpfs.mdwn18
-rw-r--r--hurd/translator/tmpfs/discussion.mdwn2
-rw-r--r--hurd/translator/ufs.mdwn2
-rw-r--r--hurd/translator/unionfs.mdwn2
-rw-r--r--hurd/what_is_an_os_bootstrap.mdwn24
-rw-r--r--hurd/what_is_the_gnu_hurd.mdwn9
24 files changed, 320 insertions, 53 deletions
diff --git a/hurd/bootstrap.mdwn b/hurd/bootstrap.mdwn
index fbce3bc1..c77682b9 100644
--- a/hurd/bootstrap.mdwn
+++ b/hurd/bootstrap.mdwn
@@ -15,8 +15,15 @@ this text. -->
[[!toc]]
+[[!inline pagenames=hurd/what_is_an_os_bootstrap raw=yes feeds=no]]
+
# State at the beginning of the bootstrap
+Please note that as of May 2024 this document is out of date. It does
+not explain how rumpdisk or the pci-arbitor is started. Also consider
+reading about [[Serverboot V2|open_issues/serverbootv2]], which
+is a new bootstrap proposal.
+
After initializing itself, GNU Mach sets up tasks for the various bootstrap
translators (which were loader by the GRUB bootloader). It notably makes
variables replacement on their command lines and boot script function calls (see
diff --git a/hurd/building.mdwn b/hurd/building.mdwn
index 7cfc7c7e..63c33498 100644
--- a/hurd/building.mdwn
+++ b/hurd/building.mdwn
@@ -93,6 +93,12 @@ or `/local/`, so your current Hurd servers will be replaced.
To install to a different location, specify `--prefix=PREFIX` as `configure`
parameter, e.g. `--prefix=/usr` (as done when having a real `/usr`).
+To build acpi:
+
+ $ make acpi
+
+You may need to install necessary acpi headers (`libacpica-dev` package in Debian based distro).
+
By default profiling versions of all the libraries and code are generated but
this is useless in most of the cases, so we disable them by specifying
`--disable-profile` on `configure`'s command line.
diff --git a/hurd/documentation.mdwn b/hurd/documentation.mdwn
index f095cf26..b79ddb0a 100644
--- a/hurd/documentation.mdwn
+++ b/hurd/documentation.mdwn
@@ -22,7 +22,9 @@ is included in the section entitled
* [[*Towards_a_New_Strategy_of_OS_Design*|/hurd-paper]], an architectural
overview by Thomas Bushnell, BSG, notably:
* [[The design|/hurd-paper#design]]
- * [[Translators|/hurd-paper#translator]]
+ * [[Introduction to Translators|/hurd-paper#translator]] and
+ [[Existing Translators|hurd/translator]]
+ * [[Subhurds|hurd/subhurd]]
* [[The auth translator|/hurd-paper#auth]]
* [[The proc translator|/hurd-paper#proc]]
* [[The exec translator|/hurd-paper#exec]]
@@ -57,9 +59,42 @@ is included in the section entitled
applied, comparisions to other systems.
-# Development
+# Developer References
+* [[Coding_Style]]
+* [[Rules]]
+* [[Trackers]]
+* [[Building]]
+* [[Toolchain]]
+ * [[glibc]]
+* RPC [[Interface]]s
+* Libraries
+ * [[libpager]]
+ * [[libports]]
+ * [[libstore]]
+ * [[libchannel]]
+ * [[libtrivfs]]
+ * [[libnetfs]] -- short introductory material
+ * [[libdiskfs]]
+ * [[libihash]]
+ * [[libpthread]]
+ * [[libfshelp]]
+ * [[libps]]
+* In-development Libraries
+ * [[libfuse]]
+* [[IO_Path]]
+* [[Porting]]
+* [[Debugging]]
+* [[Networking]]
+* [[Console]]
+* [[System bootstrap|hurd/bootstrap]]
+* Additional references
* [[RPC]]: our usage of *Remote Procedure Call*s.
+ * The [[System Bootstrap|hurd/bootstrap]] explains how the early
+ boot of the Hurd works. There is an alternative [[RFC bootstrap
+ proposal|open_issues/serverbootv2]].
+ * You should read the Hurd's [[IO path|hurd/io_path]] to learn how
+ glibc's `read ()` works on the Hurd.
* *[[The_GNU_Hurd_Reference_Manual|reference_manual]]*.
* [[*The Hurd Hacking Guide|Hurd_Hacking_Guide]]*, an introduction to GNU Hurd and Mach
programming by Wolfgang Jährling.
diff --git a/hurd/documentation/translators.html b/hurd/documentation/translators.html
index 8ae2c180..e455f730 100644
--- a/hurd/documentation/translators.html
+++ b/hurd/documentation/translators.html
@@ -212,7 +212,7 @@ I recommend that you start by reading the <code>/bin/mount</code> command,
it is only a small script. Because setting filesystem translators is
similar to mounting partitions, you can easily grasp the concept this way.
Make a file system image with <code>dd if=/dev/zero of=dummy.fs bs=1024k
-count=8; mke2fs dummy.fs</code> and "mount" it with <code>settrans -c dummy
+count=8; /sbin/mke2fs dummy.fs</code> and "mount" it with <code>settrans -c dummy
/hurd/ext2fs `pwd`/dummy.fs</code>. Note that the translator is not started
yet, no new <code>ext2fs</code> process is running (verify with <code>ps
Aux</code>). Check that everything is correct using <code>showtrans</code></p>
diff --git a/hurd/glibc.mdwn b/hurd/glibc.mdwn
index 6c7080c2..8e330aef 100644
--- a/hurd/glibc.mdwn
+++ b/hurd/glibc.mdwn
@@ -36,11 +36,9 @@ Currently the master branch builds that way without any testsuite issue.
To save some disk space, after the compilers stage you can remove src/mpc, src/mpfr, src/binutils, src/linux.
-# Building
-
-One of the tests really put boxes on its knees:
+Build logs are available in `/tmp/build/logs`
- $ echo "tests-unsupported += test-lfs" >> sysdeps/mach/hurd/i386/Makefile
+# Building
One can build libc this way:
diff --git a/hurd/porting/guidelines.mdwn b/hurd/porting/guidelines.mdwn
index d132f516..624f7fd5 100644
--- a/hurd/porting/guidelines.mdwn
+++ b/hurd/porting/guidelines.mdwn
@@ -132,7 +132,7 @@ If you get Bad File Descriptor error when trying to read from a file (or accessi
<http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html>
-Also see <https://eklitzke.org/path-max-is-tricky>
+Also see <https://eklitzke.org/path-max-is-tricky> and <https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html>
Every unconditionalized use of `PATH_MAX`, `MAX_PATH` or `MAXPATHLEN` is a POSIX incompatibility. If there is no upper limit on the length of a path (as its the case for GNU), this symbol is not defined in any header file. Instead, you need to either use a different implementation that does not rely on the length of a string or use `sysconf()` to query the length at runtime. If `sysconf()` returns -1, you have to use `realloc()` to allocate the needed memory dynamically. Usually it is thus simpler to just use dynamic allocation. Sometimes the amount is actually known. Else, a geometrically growing loop can be used: for instance, see [Pulseaudio patch](http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=patch-pulse;att=1;bug=522100). Note that in some cases there are GNU extensions that just work fine: when the `__GLIBC__` macro is defined, `getcwd()` calls can be just replaced by `get_current_dir_name()` calls.
@@ -142,10 +142,10 @@ for a potential corresponding `PATH_MAX` macro. They are not a replacement for
Note 2: Yes, some POSIX functions such as `realpath()` actually assume that
`PATH_MAX` is defined. This is a bug of the POSIX standard, which got fixed in
-POSIX 2001, in which one can simply pass `NULL` to get a dynamically
+POSIX 2008, in which one can simply pass `NULL` to get a dynamically
allocated buffer. One can thus use:
- #if _POSIX_VERSION >= 200112 || defined(__GLIBC__)
+ #if _POSIX_VERSION >= 200809 || defined(__GLIBC__)
char *path = realpath(orig, NULL);
#else
char path[PATH_MATH];
diff --git a/hurd/porting/system_api_limitations.mdwn b/hurd/porting/system_api_limitations.mdwn
index 1615ccc0..5fe13fdb 100644
--- a/hurd/porting/system_api_limitations.mdwn
+++ b/hurd/porting/system_api_limitations.mdwn
@@ -22,8 +22,5 @@ These are the known system API limits that have porting implications.
**_[\#47998](http://bugs.debian.org/47998): `msgget` IPC not implemented_**
-**_[[nice() doesn't work|open_issues/nice_vs_mach_thread_priorities]]_**.
-
**_[\#187391](http://bugs.debian.org/187391): libc0.3-dev: `sockaddr_un.sun_path` can't be assigned a `const char *` when compiling with g++_**<br />**breaks:** fam, gail<br />**status:** maybe this should be in [[PortingIssues]] (see _long_ bug log)
-**_[\#190367](http://bugs.debian.org/190367): libc0.3-dev: `fcntl` `F_GETLK` not implemented (`ENOSYS`)_**<br />**breaks:** gnome-session (and others) from running<br />**error:** misc lock-related errors
diff --git a/hurd/rump.mdwn b/hurd/rump.mdwn
new file mode 100644
index 00000000..ddde657f
--- /dev/null
+++ b/hurd/rump.mdwn
@@ -0,0 +1,65 @@
+[[!meta copyright="Copyright © 2009, 2010, 2011 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 stable_URL]]
+
+ * [[community/gsoc/project ideas/driver glue code]]
+
+ * [[open issues/user-space device drivers]]
+
+ * [[open issues/device drivers and io systems]]
+
+---
+
+The rump kernels provide existing real world drivers from netbsd.
+Since [[DDE]] no longer seems like a promising approach to get drivers
+for the Hurd, it appears that rump kernels are the best alternative.
+It already does the hard work of providing an environment where the
+foreign drivers can run, and offers the additional benefit of being
+externally maintained. Rump also offers the necessary facilities for
+running all drivers in separate userspace processes, which is more
+desirable than drivers running in the microkernel.
+
+A rump kernel is a minimal and portable NetBSD kernel running in
+userspace. Rump kernels provide drivers for modern hard drives, sound
+cards, usb support, and a TCP/IP stack. Instead of re-inventing and
+maintaining drivers ourselves, we can re-use the existing NetBSD
+drivers.
+
+Hurd developers have enabled experimental support for modern hard
+drives with a rump kernel. We call it rumpdisk, and you can try it in
+the [[Debian GNU/Hurd image|hurd/running/qemu]].
+
+As of May 2023, Hurd users are having good success with it in qemu
+environments and some are using it on real hardware!
+
+We do hope to use rump kernels for usb support, sound support (this
+was working at some point), and possibly a new TCP/IP stack, but work
+has not completed on those projects.
+
+# Documentation
+
+ * <http://www.fixup.fi/misc/usenix-login-2015/login_oct15_02_kantee.pdf>
+
+ This is an an opinion paper that explains why operating systems need compartmentalized kernel drivers.
+
+ * <https://github.com/rumpkernel/wiki/wiki/Tutorial:-Getting-started>
+
+ A tutorial introduction for those interested in using and deploying rump kernels.
+
+ * <https://core.ac.uk/display/41816390>
+
+ "User space approach to audio device driving on UNIX-like systems" by Robert Millan Hernandez.
+
+
+# Source Code
+
+ * <https://github.com/rumpkernel>
diff --git a/hurd/running/debian/after_install.mdwn b/hurd/running/debian/after_install.mdwn
index 927d05f1..4c7d924a 100644
--- a/hurd/running/debian/after_install.mdwn
+++ b/hurd/running/debian/after_install.mdwn
@@ -15,3 +15,8 @@ you. See [[GRUB]]'s page for this.
Installing packages without having a network connection is described
[[DebianAptOffline]].
+
+# Setting up mDNS responder
+
+To get `ssh <hostname>.local` working, you can set up the
+[[hurd/terrible-mdns-responder]].
diff --git a/hurd/running/debian/patch_submission.mdwn b/hurd/running/debian/patch_submission.mdwn
index d1a3ba33..e8c8aab0 100644
--- a/hurd/running/debian/patch_submission.mdwn
+++ b/hurd/running/debian/patch_submission.mdwn
@@ -18,9 +18,9 @@ package, or otherwise frequently used package, or you know upstream anyway.
If you had to change the code considerably and are not 100% sure you did not
introduce a regression, or are not very experienced with these kinds of code
-changes, you should first submit your patch for review to the [Debian alioth
-patch
-tracker](http://alioth.debian.org/tracker/?atid=410472&group_id=30628&func=browse).
+changes, you should first submit your patch for review to
+[[https://salsa.debian.org/hurd-team/hurd/|https://salsa.debian.org/hurd-team/hurd/]]. Its
+documentation is available [[here|https://wiki.debian.org/Salsa]].
If the patch is trivial, or one of the Debian porters approved your patch for
submission, submit the patch to the Debian BTS (bug tracking system). You can
diff --git a/hurd/running/qemu.mdwn b/hurd/running/qemu.mdwn
index 3514ac98..c56292c8 100644
--- a/hurd/running/qemu.mdwn
+++ b/hurd/running/qemu.mdwn
@@ -24,6 +24,56 @@ You can use the following images to give the Hurd a try.
[[!inline pages=hurd/running/debian/qemu_image raw=yes feeds=no]]
+#### Trying out rumpdisk
+
+[[Rump kernels|hurd/rump]] 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 http://deb.debian.org/debian-ports unstable main
+ deb-src http://deb.debian.org/debian unstable main
+ deb http://deb.debian.org/debian-ports 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:
+
+ GRUB_CMDLINE_GNUMACH="noide"
+
+Then update your grub:
+
+ # update-grub
+
+Check that "noide" does appear in your /boot/grub/grub.cfg.
+
+
## Arch Hurd Live CD
[[!inline pages=hurd/running/live_cd raw=yes feeds=no]]
@@ -252,7 +302,7 @@ If you are on [[Debian GNU/Hurd|debian]], you can even use [[debian/DHCP]].
To get ssh working:
- # apt install random-egd openssh-server (Similarly for telnet if preferred)
+ # apt install openssh-server (Similarly for telnet if preferred)
(See also <http://www.nongnu.org/qemu/qemu-doc.html#SEC32>.)
@@ -355,7 +405,7 @@ Once you have logged in as `root` run the `pfinet` translator with values that a
That should do it! Do not forget to edit/update `/etc/resolv.conf` to get DNS working.
---
-# Multiboot
+# Booting Hurd without grub, using qemu's multiboot support
See "Linux/Multiboot boot specific" section on QEMU manpage.
@@ -374,18 +424,15 @@ 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 device:hd0s1 $(task-create) $(task-resume)',\
+ > '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...
-You can also use `--append [...]`, which will show up in `/proc/cmdline`.
-
-Command line above crashes with old qemu versions, for instance qemu 1.1.2 on Debian Wheezy, fixed by upgrading to wheezy-backports currently qemu 1.7.0, see [[!debbug 741873]]
-
---
# Related Links
diff --git a/hurd/running/qemu/image_for_l4.mdwn b/hurd/running/qemu/image_for_l4.mdwn
index 515f51bc..3dfbc946 100644
--- a/hurd/running/qemu/image_for_l4.mdwn
+++ b/hurd/running/qemu/image_for_l4.mdwn
@@ -156,11 +156,11 @@ Let's create it : we use the magic command `dd` on the special device which cont
We will mount it in loopback :
- $ losetup /dev/loop0 hurd_l4.img
+ # losetup /dev/loop0 hurd_l4.img
We need now to have it recognized as a hard disk :
- $ fdisk -u -C58 -S63 -H16 /dev/loop0
+ # fdisk -u -C58 -S63 -H16 /dev/loop0
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
@@ -195,12 +195,12 @@ If everything is fine (especially check the `Start` and `End` fields), you can p
You will have noticed that the partition only starts at the 63rd sector. The beginning of the disk contains the MBR which is used for booting. We must then remount the disk making sure that this part is skipped before formating it. We know that a sector uses 512 bytes so we should begin at 63 \* 512 = 32256 :
- $ losetup -d /dev/loop0
- $ losetup -o32256 /dev/loop0 hurd_l4.img
+ # losetup -d /dev/loop0
+ # losetup -o32256 /dev/loop0 hurd_l4.img
Now comes time to format it into a decent filesystem :
- $ mke2fs /dev/loop0
+ # mke2fs /dev/loop0
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
@@ -223,19 +223,19 @@ Now comes time to format it into a decent filesystem :
We should now be able to mount it the right way :
- $ mkdir mnt
- $ losetup -d /dev/loop0
- $ mount -o loop,offset=32256 hurd_l4.img mnt/
+ # mkdir mnt
+ # losetup -d /dev/loop0
+ # mount -o loop,offset=32256 hurd_l4.img mnt/
Here comes grub time (I assume you have the grub files in `/boot/grub` and the `menu.lst` we've obtained in the previous section is in `~/`) :
- $ mkdir -p mnt/boot/grub
- $ cp /boot/grub/stage1 /boot/grub/stage2 /boot/grub/e2fs_stage1_5 mnt/boot/grub/
- $ cp ~/menu.lst mnt/boot/grub
+ # mkdir -p mnt/boot/grub
+ # cp /boot/grub/stage1 /boot/grub/stage2 /boot/grub/e2fs_stage1_5 mnt/boot/grub/
+ # cp ~/menu.lst mnt/boot/grub
We will make a grub bootimage and boot it with bochs :
- $ cat stage1 stage2 > grubboot.img
+ # cat stage1 stage2 > grubboot.img
Copy the following into `.bochsrc` (replace the parts in caps by the right info) :
diff --git a/hurd/subhurd.mdwn b/hurd/subhurd.mdwn
index 9b196f2d..d24369bc 100644
--- a/hurd/subhurd.mdwn
+++ b/hurd/subhurd.mdwn
@@ -37,6 +37,11 @@ boot it:
$ gunzip debian-hurd.img.gz
$ boot --kernel-command-line="fastboot root=pseudo-root" -T typed part:1:file:debian-hurd.img
+/!\ If you face an error from the mach-defpager (most probably
+because there is already a default pager), you can comment
+the part that says `/hurd/mach-defpager` from the `/etc/hurd/runsystem.sysv` file
+included within the `debian-hurd.img` file you are trying to use.
+
The 'fastboot' is necessary to skip the filesystem check which fails
because the image assumes the root filesystem to be /etc/hd0s1. Once
booted, you can correct this:
diff --git a/hurd/terrible-mdns-responder.mdwn b/hurd/terrible-mdns-responder.mdwn
new file mode 100644
index 00000000..08e6de75
--- /dev/null
+++ b/hurd/terrible-mdns-responder.mdwn
@@ -0,0 +1,52 @@
+[[!meta copyright="Copyright © 2024 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_hurd]]
+
+# What is the terrible mDNS responder?
+
+Suppose you have the Hurd running on a another machine in your local
+network. `ssh <IP-ADDRESS>` is not guarenteed to work, because your
+router will occassionally change the IP address of your Hurd machine.
+That's kind of annoying! Luckily, Sergey wrote the terrible-mDNS
+responder, so that `ssh <hostname>.local` just works! How cool is
+that!?
+
+To be very clear, this does *not* teach the system to do mDNS queries
+(.local hostname lookups). The terrible-mDNS-responder only responds
+to other host's queries. (Those other hosts may be running Avahi or
+sd-rd or Apple's mDNSResponder or LookupServer or ...)
+
+The sources are over on
+[[GitHub|https://github.com/bugaevc/terrible-mdns-responder]]. There
+are no dependencies other than a libc. It's built with Meson and
+licensed under AGPL v3+. It even comes with an awkward attempt at a
+sysv init script! What's not to like?
+
+# How to use it on Debian GNU/Hurd?
+
+ $ git clone git@github.com:bugaevc/terrible-mdns-responder.git
+ $ cd terrible-mdns-responder
+ $ meson setup build # you may need to apt install meson
+ $ ninja -C build
+ $ sudo ninja install -C build
+ $ sudo update-rc.d terrible-mdns-responder defaults
+ $ sudo update-rc.d avahi-daemon disable
+ $ sudo service terrible-mdns-responder start
+
+# FAQ Why not use avahi?
+
+Debian GNU/Hurd comes with Avahi in the default install (I believe).
+Avahi has never worked for me (on the Hurd), and I doubt it has ever
+worked for anyone else either. I *have* looked into the why (as in
+spent hours debugging and patching it); I don't remember the
+specifics, but I do remember that I concluded it won't be easy to make
+it work. So, a dead end.
diff --git a/hurd/translator/ext2fs.mdwn b/hurd/translator/ext2fs.mdwn
index 81e54dff..957b9c13 100644
--- a/hurd/translator/ext2fs.mdwn
+++ b/hurd/translator/ext2fs.mdwn
@@ -22,16 +22,17 @@ License|/fdl]]."]]"""]]
* [[internal_allocator]]
+## Current Limitations
-## Large Stores
+### Use 64 bit time by default
-The `ext2fs` translator from the upstream Hurd code base can only handle file
-systems with sizes of less than roughly 2 GiB.
+Extend ext2fs to support 64bit time.
-[[!tag open_issue_hurd]]
+## Large Stores
+[[!inline pagenames=faq/2_gib_partition_limit raw=yes feeds=no]]
-### Ognyan's Work
+### Ognyan's Work to allow ext2 to surpass the 2 GiB limit
* Ognyan Kulev, [[*Supporting Large ext2 File Systems in the
Hurd*|ogi-fosdem2005.mgp]], 2005, at FOSDEM
@@ -40,8 +41,8 @@ systems with sizes of less than roughly 2 GiB.
* <http://kerneltrap.org/node/4429>
-Ognyan's patch lifts this limitation (and is being used in the
-[[Debian_GNU/Hurd_distribution|running/debian]]), but it introduces another
+Ognyan's patch lifted this limitation (and is being used in the
+[[Debian_GNU/Hurd_distribution|running/debian]]), but it introduced another
incompatibility: `ext2fs` then only supports block sizes of 4096 bytes.
Smaller block sizes are commonly automatically selected by `mke2fs` when using
small backend stores, like floppy devices.
diff --git a/hurd/translator/httpfs.mdwn b/hurd/translator/httpfs.mdwn
index 3ac9f8ab..0ce0f30b 100644
--- a/hurd/translator/httpfs.mdwn
+++ b/hurd/translator/httpfs.mdwn
@@ -78,11 +78,17 @@ through a proxy server, substitute your proxies IP and port no.s
- query-string and fragment support
- HTTP/1.1 support
- HTTP/2 support
-- HTTP/3 support
+- HTTP/3 support (there may exist a C library that provides HTTP/[123]
+ support).
- Teach httpfs to understand HTTP status codes like re-directs, 404 not found,
etc.
- Teach httpfs to look for "sitemaps". Many sites offer a sitemap, and this
- would be a nifty way for httpfs to allow grep-ing the entire site's contents.
+ would be a nifty way for httpfs to allow grep-ing the entire site's
+ contents. [[sitemaps.org|https://www.sitemaps.org]] is a great resource for
+ this.
+- Teach httpfs to check if the computer has an internet connection at
+ startup and during operation. The translator causes 30 second
+ pauses on commands like "ls", when the internet is down.
# Source
diff --git a/hurd/translator/pfinet/ipv6.mdwn b/hurd/translator/pfinet/ipv6.mdwn
index ccb359cb..d864e256 100644
--- a/hurd/translator/pfinet/ipv6.mdwn
+++ b/hurd/translator/pfinet/ipv6.mdwn
@@ -139,7 +139,7 @@ Indeed, IPv6 now works properly, and the very machine hosting this wiki
<youpi> which repo?
<youpi> I don't have such commit here
<gnu_srs>
- http://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f
+ https://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f
<gnu_srs> From which release, 2.4.x, 2.6.x?
<youpi> it's very old
<youpi> 2002
diff --git a/hurd/translator/procfs.mdwn b/hurd/translator/procfs.mdwn
index 0228d4d4..b3753592 100644
--- a/hurd/translator/procfs.mdwn
+++ b/hurd/translator/procfs.mdwn
@@ -31,7 +31,7 @@ Madhusudan.C.S has implemented a new, fully functional [[procfs|madhusudancs]] f
In August 2010, Jérémie Koenig [published another, new
version](http://lists.gnu.org/archive/html/bug-hurd/2010-08/msg00165.html).
-This can be found in <http://git.savannah.gnu.org/cgit/hurd/procfs.git/>.
+This can be found in <https://git.savannah.gnu.org/cgit/hurd/procfs.git/>.
Testing it is as simple as this:
diff --git a/hurd/translator/tmpfs.mdwn b/hurd/translator/tmpfs.mdwn
index 3d5cb74e..4db6542b 100644
--- a/hurd/translator/tmpfs.mdwn
+++ b/hurd/translator/tmpfs.mdwn
@@ -20,6 +20,18 @@ system|ext2fs]] on it, having a real `tmpfs` is better, as it need not deal
with the additional block-level indirection layer that `ext2` (or any other
disk-based file system) imposes.
-`tmpfs` generally works, although it requires root permissions for file content;
-see the [[discussion]] sub-pages for the past and current issues.
-There is a [[!FF_project 271]][[!tag bounty]] on this task.
+`tmpfs` generally works. See the [[discussion]] sub-pages for the
+past and current issues. There is a [[!FF_project 271]][[!tag
+bounty]] on this task.
+
+## How to use tmpfs
+
+ $ settrans -ac tmp /hurd/tmpfs 1MB
+ $ cd tmp
+ $ touch file
+ $ cat file
+
+ $ echo "tmpfs rocks!" > ./file
+ $ cat file
+ tmpfs rocks!
+ $ \ No newline at end of file
diff --git a/hurd/translator/tmpfs/discussion.mdwn b/hurd/translator/tmpfs/discussion.mdwn
index 72400121..d61fd796 100644
--- a/hurd/translator/tmpfs/discussion.mdwn
+++ b/hurd/translator/tmpfs/discussion.mdwn
@@ -107,7 +107,7 @@ License|/fdl]]."]]"""]]
<antrik> mcsim: did you publish your in-progress work?
<mcsim> there is a branch with working tmpfs in git repository:
- http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/?h=mplaneta/tmpfs/defpager
+ https://git.savannah.gnu.org/cgit/hurd/hurd.git/log/?h=mplaneta/tmpfs/defpager
<jd823592> sorry for interrupting the meeting but i wonder what is a
lazyfs?
<mcsim> jd823592: lazyfs is tmpfs which uses own pager
diff --git a/hurd/translator/ufs.mdwn b/hurd/translator/ufs.mdwn
index 4d611e95..9e9c6f75 100644
--- a/hurd/translator/ufs.mdwn
+++ b/hurd/translator/ufs.mdwn
@@ -19,7 +19,7 @@ and will eat your data.
<Arne`> There might be a copyright problem: <nalaginrut> well, there seems
BSD-4clauses in the code:
- http://git.savannah.gnu.org/cgit/hurd/hurd.git/tree/ufs/alloc.c
+ https://git.savannah.gnu.org/cgit/hurd/hurd.git/tree/ufs/alloc.c
<Arne`> braunr, tschwinge: Do you have any info on that? 4-clause BSD and
GPL on the same code are a license incompatibility…
<tschwinge> Arne`: I've put it onto my (long) TODO list.
diff --git a/hurd/translator/unionfs.mdwn b/hurd/translator/unionfs.mdwn
index 06524f3e..31162c37 100644
--- a/hurd/translator/unionfs.mdwn
+++ b/hurd/translator/unionfs.mdwn
@@ -15,7 +15,7 @@ License|/fdl]]."]]"""]]
*Unionfs allows you to simply union one directory or translator into another one, so you see the files of both of them side by side.*
-Source repository: <http://git.savannah.gnu.org/cgit/hurd/unionfs.git/>
+Source repository: <https://git.savannah.gnu.org/cgit/hurd/unionfs.git/>
Right now there are some problems with syncing, so please be aware
that it might not work as expected.
diff --git a/hurd/what_is_an_os_bootstrap.mdwn b/hurd/what_is_an_os_bootstrap.mdwn
new file mode 100644
index 00000000..b2db2554
--- /dev/null
+++ b/hurd/what_is_an_os_bootstrap.mdwn
@@ -0,0 +1,24 @@
+[[!meta copyright="Copyright © 2020 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]]."]]"""]]
+
+[[!meta title="What is an OS bootstrap"]]
+
+# What is an OS bootstrap?
+
+An operating system's bootstrap is the process that happens shortly
+after you press the power on button, as shown below:
+
+Power-on -> Bios -> Bootloader -> **OS Bootstrap** -> service manager
+
+Note that in this context the OS bootstrap is not [building a
+distribution and packages from source
+code](https://guix.gnu.org/manual/en/html_node/Bootstrapping.html).
+The OS bootstrap has nothing to do with [reproducible
+builds](https://reproducible-builds.org/).
diff --git a/hurd/what_is_the_gnu_hurd.mdwn b/hurd/what_is_the_gnu_hurd.mdwn
index 8315bfff..09c26ee7 100644
--- a/hurd/what_is_the_gnu_hurd.mdwn
+++ b/hurd/what_is_the_gnu_hurd.mdwn
@@ -33,7 +33,14 @@ provides the same standard interfaces known from other [[UNIX]]-like systems.
Thus, for a typical user, the Hurd is intended to silently work in the
background providing the services and infrastructure which the [[microkernel]]
itself has no business implementing, but that are required for higher level
-programs and libraries to operate.
+programs and libraries to operate. Let's look at an example.
+
+[[!img open_issues/images/overview.svg]]
+
+Firefox invokes glibc's `send ()`, which in turn uses the pfinet (or
+lwip) TCP/IP stack, which talk to our device drivers (rump or netdde),
+which finally talk to GNU Mach. Only GNU Mach runs in kernel space!
+Everything else is userspace!
The Hurd supplies the last major software component needed for a complete
[[GNU_operating_system|running/gnu]] as originally conceived by Richard