diff options
458 files changed, 23966 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a7516b7f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ +.ikiwiki diff --git a/.library/IkiWiki/Plugin/copyright.pm b/.library/IkiWiki/Plugin/copyright.pm new file mode 100644 index 00000000..16acaccd --- /dev/null +++ b/.library/IkiWiki/Plugin/copyright.pm @@ -0,0 +1,60 @@ +# A plugin for ikiwiki to implement adding a footer with copyright information +# based on a default value taken out of a file. + +# Copyright © 2007, 2008 Thomas Schwinge <tschwinge@gnu.org> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Unless overridden with the `meta' plugin, a footer with copyright information +# will be added to every page using a source file `copyright' (e.g., +# `copyright.mdwn') (using the same ``locating rules'' as for the sidebar +# plugin). +# +# The state which page's copyright text was gathered from which source is not +# tracked, so you'll need a full wiki-rebuild if the `copyright' file is +# changed. + +package IkiWiki::Plugin::copyright; + +use warnings; +use strict; +use IkiWiki 2.00; + +my %copyright; + +sub import +{ + hook (type => "scan", id => "copyright", call => \&scan); +} + +sub scan (@) +{ + my %params = @_; + my $page = $params{page}; + + return if defined $pagestate{$page}{meta}{copyright}; + + my $content; + my $copyright_page = bestlink ($page, "copyright") || return; + my $copyright_file = $pagesources{$copyright_page} || return; + + # Only an optimization to avoid reading the same file again and again. + $copyright{$copyright_file} = readfile (srcfile ($copyright_file)) + unless defined $copyright{$copyright_file}; + + $pagestate{$page}{meta}{copyright} = $copyright{$copyright_file}; +} + +1 diff --git a/.library/IkiWiki/Plugin/license.pm b/.library/IkiWiki/Plugin/license.pm new file mode 100644 index 00000000..651c039a --- /dev/null +++ b/.library/IkiWiki/Plugin/license.pm @@ -0,0 +1,59 @@ +# A plugin for ikiwiki to implement adding a footer with licensing information +# based on a default value taken out of a file. + +# Copyright © 2007, 2008 Thomas Schwinge <tschwinge@gnu.org> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Unless overridden with the `meta' plugin, a footer with licensing information +# will be added to every page using a source file `license' (e.g., +# `license.mdwn') (using the same ``locating rules'' as for the sidebar +# plugin). +# +# The state which page's license text was gathered from which source is not +# tracked, so you'll need a full wiki-rebuild if the `license' file is changed. + +package IkiWiki::Plugin::license; + +use warnings; +use strict; +use IkiWiki 2.00; + +my %license; + +sub import +{ + hook (type => "scan", id => "license", call => \&scan); +} + +sub scan (@) +{ + my %params = @_; + my $page = $params{page}; + + return if defined $pagestate{$page}{meta}{license}; + + my $content; + my $license_page = bestlink ($page, "license") || return; + my $license_file = $pagesources{$license_page} || return; + + # Only an optimization to avoid reading the same file again and again. + $license{$license_file} = readfile (srcfile ($license_file)) + unless defined $license{$license_file}; + + $pagestate{$page}{meta}{license} = $license{$license_file}; +} + +1 diff --git a/.library/IkiWiki/Plugin/texinfo.pm b/.library/IkiWiki/Plugin/texinfo.pm new file mode 100644 index 00000000..8c651160 --- /dev/null +++ b/.library/IkiWiki/Plugin/texinfo.pm @@ -0,0 +1,226 @@ +# A GNU Texinfo rendering plugin. + +# Copyright © 2007 Thomas Schwinge <tschwinge@gnu.org> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# http://ikiwiki.info/plugins/contrib/texinfo/ + +package IkiWiki::Plugin::texinfo; + +use warnings; +use strict; +use IkiWiki 2.00; + +# From `Ikiwiki/Plugins/teximg.pm'. +sub create_tmp_dir ($) +{ + # Create a temp directory, it will be removed when ikiwiki exits. + my $base = shift; + + my $template = $base . ".XXXXXXXXXX"; + use File::Temp qw (tempdir); + my $tmpdir = tempdir ($template, TMPDIR => 1, CLEANUP => 1); + return $tmpdir; +} + +sub import +{ + hook (type => "filter", id => "texi", call => \&filter); + hook (type => "htmlize", id => "texi", call => \&htmlize); + hook (type => "pagetemplate", id => "texi", call => \&pagetemplate); +} + +my %copyright; +my %license; + +sub filter (@) +{ + my %params = @_; + my $page = $params{page}; + +# TODO. For ``$page eq 'shortcuts''' this fails. Is this expected? + goto out unless defined $pagesources{$page}; + + # Only care for `.texi' files. + goto out unless pagetype ($pagesources{$page}) eq 'texi'; + + # No need to parse twice. + goto out if exists $copyright{$page}; + +# TODO. Check the `meta' plugin about when to do this at all. + $copyright{$page} = undef; + $license{$page} = undef; + # We assume that the copyright and licensing information is to be taken + # from the main `.texi' file. + @_ = split /\n/, $params{content}; + # Do some parsing to cut out the interesting bits, if there are any. + while (defined ($_ = shift @_)) + { + # Did we find a start tag? + last if /^\@copying$/; + } + # Already at the end of the page? + goto out unless defined $_; + while (defined ($_ = shift @_)) + { + # Already at the end of the copying section? (Shouldn't happen.) + goto out if /^\@end\ copying/; + # Found the ``^Copyright'' line? + last if /^Copyright/; + } + # Already at the end of the page? (Shouldn't happen.) + goto out unless defined $_; + # Copyright text will follow. + $copyright{$page} = $_; + while (defined ($_ = shift @_)) + { + # Found the separator of copyright and licensind information? + last if /^$/; + # Already at the end of the copying section? + goto finish if /^\@end\ copying/; + $copyright{$page} .= ' ' . $_; + } + # Already at the end of the page? (Shouldn't happen.) + goto finish unless defined $_; + # Licensing text will follow. + while (defined ($_ = shift @_)) + { + # Already at the end of the copying section? + last if /^\@end\ copying/; + $license{$page} .= ' ' . $_; + } + + finish: + # ``Render'' by hand some stuff that is commonly found in this section. + if (defined $copyright{$page}) + { + $copyright{$page} =~ s/\@copyright{}/©/g; + } + if (defined $license{$page}) + { + $license{$page} =~ s/\@quotation//g; + $license{$page} =~ s/\@end\ quotation//g; + $license{$page} =~ s/\@ignore/<!--/g; + $license{$page} =~ s/\@end\ ignore/-->/g; + } + + out: + return $params{content}; +} + +sub htmlize (@) +{ + my %params = @_; + my $page = $params{page}; + + my $home; + if (defined $pagesources{$page}) + { + $home = $config{srcdir} . '/' . dirname ($pagesources{$page}); + } + else + { + # This happens in the CGI web frontent, when freshly creating a + # `texi'-type page and selecting to ``Preview'' the page before doing a + # ``Save Page''. +# TODO. + $home = $config{srcdir}; + } + + my $pid; + my $sigpipe = 0; + $SIG{PIPE} = sub + { + $sigpipe = 1; + }; + + my $tmp = eval + { + create_tmp_dir ("texinfo") + }; + if (! $@ && + # `makeinfo' can't work directly on stdin. + writefile ("texinfo.texi", $tmp, $params{content}) == 0) + { + return "couldn't write temporary file"; + } + + use File::Basename; + use IPC::Open2; + $pid = open2 (*IN, *OUT, + 'makeinfo', + '--html', + '--no-split', '--output=-', + # We might be run from a directory different from the one the + # `.texi' file is stored in. +# TODO. Should we `cd' to this directory instead? + '-P', $home, +# TODO. Adding the following allows for putting files like `gpl.texinfo' into +# the top-level wiki directory. + '-I', $config{srcdir}, + $tmp . "/texinfo.texi"); + # open2 doesn't respect "use open ':utf8'" + binmode (IN, ':utf8'); +# binmode (OUT, ':utf8'); + +# print OUT $params{content}; + close OUT; + + local $/ = undef; + my $ret = <IN>; + close IN; + waitpid $pid, 0; + $SIG{PIPE} = "DEFAULT"; + + return "failed to render" if $sigpipe; + + # Cut out the interesting bits. + $ret =~ s/.*<body>//s; + $ret =~ s/<\/body>.*//s; + + return $ret; +} + +sub pagetemplate (@) +{ + my %params = @_; + my $page = $params{page}; + my $destpage = $params{destpage}; + + my $template = $params{template}; + +# TODO. Check the `meta' plugin about when to do this at all. + if ($template->query (name => "copyright") && + ! defined $template->param ('copyright')) + { + if (defined $copyright{$page} && length $copyright{$page}) + { + $template->param (copyright => + IkiWiki::linkify ($page, $destpage, $copyright{$page})); + } + } + if ($template->query (name => "license") && + ! defined $template->param ('license')) + { + if (defined $license{$page} && length $license{$page}) + { + $template->param (license => + IkiWiki::linkify ($page, $destpage, $license{$page})); + } + } +} + +1 diff --git a/.templates/editpage.tmpl b/.templates/editpage.tmpl new file mode 100644 index 00000000..906f39ce --- /dev/null +++ b/.templates/editpage.tmpl @@ -0,0 +1,91 @@ +<TMPL_IF NAME="PAGE_CONFLICT"> +<p> +<b>Your changes conflict with other changes made to the page.</b> +</p> +<p> +Conflict markers have been inserted into the page content. Reconcile the +conflict and commit again to save your changes. +</p> +</TMPL_IF> +<TMPL_IF NAME="FAILED_SAVE"> +<p> +<b>Failed to save your changes.</b> +</p> +<p> +Your changes were not able to be saved to disk. The system gave the error: +<blockquote> +<TMPL_VAR ERROR_MESSAGE> +</blockquote> +Your changes are preserved below, and you can try again to save them. +</p> +</TMPL_IF> +<TMPL_IF NAME="PAGE_GONE"> +<p> +<b>The page you were editing has disappeared.</b> +</p> +<p> +Perhaps someone else has deleted it or moved it. If you want to recreate +this page with your text, click "Save Page" again. +</p> +</TMPL_IF> +<TMPL_IF NAME="CREATION_CONFLICT"> +<p> +<b>While you were creating this page, someone else independently created a page +with the same name.</b> +</p> +<p> +The edit box below contains the page's current content, followed by the +content you entered previously, to allow you to merge the two +together before saving. +</p> +</TMPL_IF> +<TMPL_VAR FORM-START> +<TMPL_VAR FIELD-DO> +<TMPL_VAR FIELD-SID> +<TMPL_VAR FIELD-FROM> +<TMPL_VAR FIELD-RCSINFO> +<TMPL_VAR FIELD-NEWFILE> +<TMPL_IF NAME="PAGE_SELECT"> +Page location: <TMPL_VAR FIELD-PAGE> +Page type: <TMPL_VAR FIELD-TYPE> +<TMPL_ELSE> +<br /> +<TMPL_VAR FIELD-PAGE> +<TMPL_VAR FIELD-TYPE> +</TMPL_IF> +<TMPL_VAR FIELD-EDITCONTENT><br /> +<TMPL_IF NAME="CAN_COMMIT"> +Optional comment about this change:<br /> +<TMPL_VAR FIELD-COMMENTS><br /> +</TMPL_IF> + +<div class="copyright_assignment_notice"> + +<p>By contributing to this page, you agree to assign copyright for +your contribution to the Free Software Foundation. The Free Software +Foundation promises to always use a free documentation license (as per +our criteria of free documentation) when publishing your contribution. +We grant you back all your rights under copyright, including the +rights to copy, modify, and redistribute your contributions.</p> + +<p>We're requiring these copyright assignments, so that we'll easily +be able to include your contributions in official GNU documentation, +such as the GNU Hurd manual, etc. Send email to <a +href="mailto:hurd-maintainers@gnu.org"><hurd-maintainers@gnu.org></a> +if there are questions.</p> + +</div> + +<TMPL_VAR FORM-SUBMIT> +<TMPL_VAR HELPONFORMATTINGLINK> +<TMPL_VAR FORM-END> + +<TMPL_IF NAME="PAGE_PREVIEW"> +<hr /> +<div class="header"> +<span>Page preview:</span> +</div> +<div id="preview"> +<TMPL_VAR PAGE_PREVIEW> +</div> +</TMPL_IF> diff --git a/Hurd/ABITransitionStatus.mdwn b/Hurd/ABITransitionStatus.mdwn new file mode 100644 index 00000000..123e8f8c --- /dev/null +++ b/Hurd/ABITransitionStatus.mdwn @@ -0,0 +1,9 @@ +Several transitions have occured recently. + +* [ABI Switch](http://lists.debian.org/debian-hurd/2002/debian-hurd-200204/msg00096.html) from April 17, 2002 + +* [Phase I accomplished](http://lists.debian.org/debian-hurd/2002/debian-hurd-200204/msg00157.html) from April 26, 2002 + +* [status of the ABI transition](http://lists.debian.org/debian-hurd/2002/debian-hurd-200205/msg00242.html) from May 15, 2002 + +-- [[Main/GrantBow]] - 15 May 2002 diff --git a/Hurd/AptConfOffline.mdwn b/Hurd/AptConfOffline.mdwn new file mode 100644 index 00000000..c4cc85be --- /dev/null +++ b/Hurd/AptConfOffline.mdwn @@ -0,0 +1,28 @@ + APT + { + /* This file belongs in Debian GNU/Hurd's /etc/apt/apt.conf.offline + and will be used when running Debian GNU/Linux. This is only + required when the GNU/Hurd does not have network access. */ + + Architecture "hurd-i386"; + + Get::Download-Only "true"; + }; + + Dir + { + /* Use the disc for state information and redirect the status file from + the /var/lib/dpkg default + assumes Debian GNU/Hurd mounted on /misc/hurd and /var mounted underneath this if necessary */ + + // State::lists should be here, the lists subdirectory. + State "/misc/hurd/var/lib/apt/"; + State::status "/misc/hurd/var/lib/dpkg/status"; + + // Binary caches will be stored locally + Cache::archives "/misc/hurd/var/cache/apt/archives/"; + Cache "/tmp/"; + + // Location of the source list. + Etc "/misc/hurd/etc/apt/"; + }; diff --git a/Hurd/BuildingHurdLiveCD.mdwn b/Hurd/BuildingHurdLiveCD.mdwn new file mode 100644 index 00000000..e2082268 --- /dev/null +++ b/Hurd/BuildingHurdLiveCD.mdwn @@ -0,0 +1,70 @@ +# <a name="Recipes_for_bootable_GNU_Mach_Hu"> </a> Recipes for bootable GNU Mach/Hurd Live CD + +## <a name="Greg_s_recipe"> Greg's recipe </a> + +In my attempts to get a bootable CD for the Hurd here's the recipe I followed, your's will be similar. I needed a grub-0.92, with a patch from <http://alpha.polynum.org/misc/>, and version 1.16 of mkbimage (I don't exactly remember where I got that from). + +You can grab a copy of it at <http://sleepingsquirrel.org/hurd/hurdcd.iso.gz>, which is a gzipped bootable \*.iso with the copy of the patched grub and the version of mkbimage I used. Here's the recipe I followed (under linux). + + # mkdir ./2.88floppy + # mkdir ./isodir + # cp grub/* 2.88floppy/boot/grub/ + # cp grub/* isodir/boot/grub/ + # cd 2.88floppy + # tar -cf ../floppyimg.tar * + # cd .. + # mkbimage -f floppyimg.tar -t 2.88 + # cp 2.88.image isodir/ + # mkisofs -r -b 2.88.image -c boot.catalog -o hurdcd.iso isodir/ + # cdrecord -v speed=4 dev=0,0,0 -data hurdcd.iso + +That was the recipe for using a floppy image. If you use the `-t hd` switch of `mkbimage`, you'll get an ext2fs El-Torito HD emulation image that can be any size (I've got one here 300+ MB). You can then use `root (hd0,0)` in Grub to boot something. Also, invoking `mkbimage` with no parameters will give you some additional help messages. + +-- [[Main/GregBuchholz]] - 05 Nov 2003 + +## <a name="Another_recipe_for_a_bootable_GN"> </a> Another recipe for a bootable GNU CD + +[screenshot](http:///mycelium.afraid.org/Screenshot2.png) + +### <a name="What_you_ll_need"> What you'll need </a> + +* A [stage2\_eltorito](http://mycelium.dyndns.org/stage2_eltorito) from [grub 0.95](http://www.gnu.org/software/grub) +* A [base system](http://www.update.uu.se/~ams/gnu/gnu-2004-12-04.tar.bz2) +* [iso9660fs.static](http:///mycelium.dyndns.org/iso9660fs.static) (this link is bought the farm) or just build your own, it should work with CVS + +### <a name="HowTo"> HowTo </a> + + # mkdir iso + ..(at this point untar or setup base system) + # mkdir -p iso/boot/grub + # cp iso9660fs.static iso/hurd + # cp stage2_eltorito iso/boot/grub + ..(edit iso/boot/grub/grub.conf) + # mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ + -boot-load-size 4 -boot-info-table -o livecd.iso iso/ + +**_Note:_** The following files must **\_NOT\_** be symlinks! + +* `/boot/gnumach` +* `/hurd/iso9660fs.static` +* `/hurd/exec` +* `/lib/ld.so.1` + +## <a name="Contents_of_grub_conf"> Contents of grub.conf </a> + + timeout 60 + default 0 + + title GNU/Hurd CD + #uppermem 523648 #this may need to be set + #root (cd) + kernel /boot/gnumach root=device:hd2 #set device to your cdrom device + module /hurd/iso9660fs.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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +**_Note:_** The `root (cd)` line may prevent some computers from booting the livecd. + +-- [[Main/AndrewResch]] - 22 Feb 2005 diff --git a/Hurd/CrossHurd.mdwn b/Hurd/CrossHurd.mdwn new file mode 100644 index 00000000..d33d2a00 --- /dev/null +++ b/Hurd/CrossHurd.mdwn @@ -0,0 +1,99 @@ +This will eventually become an installation guide for the Debian crosshurd package (GNU/Hurd cross install only). However, for the time being I am setting it up as a diet version of Hurd/InstalNotes, adapted for crosshurd, adapted for me. + +-- [[Main/JoachimNilsson]] - 14 Mar 2004 + +## <a name="Reserving_partitions"> Reserving partitions </a> + +You need a swap and root partition, much like any other UNIX system. Two things to remember: + +1. Root partition still <2.0 GiB +2. Root partition: mke2fs -o hurd -b 4096 -L Carlsberg + +From a Debian GNU/Linux installation preparing install of GNU/Hurd on /dev/hdb2 reusing the Linux swap on /dev/hdb4. + + # mke2fs -o hurd -b 4096 -L Carlsberg /dev/hdb2 + +<div> + <center> "Carlsberg. Probably the best beer in the world." </center> +</div> + +## <a name="Bootstrapping"> Bootstrapping </a> + +After having installed the Debian crosshurd package you need to mount your newly created Hurd partition. + + mkdir /gnu + mount /dev/hdb2 /gnu + +Now, simply run the crosshurd program and follow the onscreen directions. **Do** select the usr symlink. + + crosshurd + +crosshurd burps a lot of unneeded information on screen and probably fails to install one or two files due to duplicates between GNU and Debian packages. Lets hope this mess is worked out some day. + +## <a name="Rebooting"> Rebooting </a> + +Before we reboot you must setup a Hurd entry in the menu.lst file of Grub. Do it like this and remember, **no trailing spaces**! + +The first two runs (reboots) you must run the Hurd in single-user mode! + + title GNU (kernel GNUmach 1.3) + root (hd1,1) + kernel /boot/gnumach.gz root=device:hd1s2 -s + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +The notation of Grub, and of the Hurd, can be somewhat bisarre on first sight. Consult the [[InstallNotes]] document and the Grub manual for a thorough explanation. + +N.B. the '-s' on the kernel line, it is "single user mode", which you need for the first two reboots. + +OK, reboot now. + +## <a name="First_steps"> First steps </a> + +Set TERM variable and run native-install script. + + export TERM=mach + ./native-install + +At the end native-install wants you to reboot and run it again. Do so and remember to set the TERM variable as well. + +After the second reboot and native-install run you can remove the '-s' in the kernel line above and boot GNU/Hurd as a normal user. + +## <a name="Logging_in"> Logging in </a> + +Finally, a complete bootstrapped GNU system. + + login root + + export TERM=mach + + nano /etc/fstab + [add swap partition /dev/hd1s4] + + nano /etc/ttys + [remove all hashes to enable the new Hurd Console] + + settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.1.3 -g 192.168.1.1 -m 255.255.255.0 + + dselect + +Now, do the old Debian thing of dancing with dselect for a couple of hours. + +Reboot and start the new [[Console]] + + login root + + console -d vga -d pc_kbd -d generic_speaker /dev/vcs + +Move around just like in Linux console, but with persistent scroll-back buffers for each console. + +## <a name="References"> References </a> + +* [[InstallNotes]] +* [[Network]] +* [[Console]] diff --git a/Hurd/CrossPlatformAliases.mdwn b/Hurd/CrossPlatformAliases.mdwn new file mode 100644 index 00000000..06a0e897 --- /dev/null +++ b/Hurd/CrossPlatformAliases.mdwn @@ -0,0 +1,8 @@ + # Aliases assume Debian GNU/Hurd mounted on /misc/hurd + # possibly via autofs /etc/auto.misc configuration and 'cd / && ln -s var/autofs/misc misc' + alias locatehurd="locate -d /misc/hurd/var/lib/locate/locatedb" + alias apt-cachehurd="APT_CONFIG=/misc/hurd/etc/apt/apt.conf.offline apt-cache" + alias apt-gethurd="APT_CONFIG=/misc/hurd/etc/apt/apt.conf.offline apt-get" + # dselect requires APT_CONFIG due to dselect apt method + alias dselecthurd="APT_CONFIG=/misc/hurd/etc/apt/apt.conf.offline dselect --admindir /misc/hurd/var/lib/dpkg/" + alias dpkghurd="dpkg --root=/misc/hurd"= diff --git a/Hurd/DebianX.mdwn b/Hurd/DebianX.mdwn new file mode 100644 index 00000000..00692ca8 --- /dev/null +++ b/Hurd/DebianX.mdwn @@ -0,0 +1,130 @@ +# <a name="Setting_up_X_on_Debian_GNU_Hurd"> </a> Setting up X on Debian GNU/Hurd + +#### <a name="Table_Of_Contents"> Table Of Contents </a> + +%TOC% + +This is a brief helper on how to setup X-Windows on Debian GNU/Hurd. + +Obviously this text is taken from the page <http://hurd.gnufans.org/bin/view/Hurd/Xfree86> but I was making such drastic changes, I didn't want to hack up that page. + +### <a name="Mouse_amp_Keyboard"> Mouse & Keyboard </a> + +See [[console]] for more details. + +You should instruct the Hurd console to repeat keyboard events to `/dev/cons/kbd`, and mouse events to `/dev/cons/mouse`: + + # console -d vga -d pc_kbd --repeat=kbd \ + -d pc_mouse --repeat=mouse --protocol=ps/2 -c /dev/cons /dev/vcs + +Symbolic links to repeaters should also be created: + + # ln -s /dev/cons/kbd /dev/kbd + # ln -s /dev/cons/mouse /dev/mouse + +### <a name="Selecting_amp_Configuring_Packag"> Selecting & Configuring Packages </a> + +You will need several X packages. The `x-window-system-core` brings you most of what you need: + +* `xserver-xfree86` +* `xfonts-base` +* `xfonts-100dpi` +* `xfonts-75dpi` +* `xfonts-scalable` +* `xbase-clients` +* `xutils` +* `rxvt` +* ... as well as your window manager of choice: + * WindowMaker, `wmaker` + * FVWM, `fvwm` + * Blackbox, `blackbox` + * TWM, `twm` + +I know that twm and Window Maker work, however, I cannot attest to the other two. Also, Michael Banck has a working package for xfce4 for those of you that are interested. The link for the package is here: + + deb http://people.debian.org/~mbanck/hurd-xfce4/ ./ + +Thanks for that Michael!! + +You will probably need to create a .xsession file for xfce4 with the following command: + + exec /usr/bin/startxfce4 || exec xterm + +This will start the xfce4 desktop or dump to xterm if it fails to start. + +The recommended way of configuring X is using the `xserver-xfree86` debconf template, eg: + + # dpkg-reconfigure xserver-xfree86 + +It may be easier to just copy a working configuration from another operating system on the same computer and place it in `/etc/X11/XF86Config-4`, but this is discouraged as you would have to remove some sections by hand. + +**_IMPORTANT:_** when you configure X, make sure you do **NOT** enable the `speedo` and `dri` modules because they are currently broken. + +**_UPDATE 12/28/2004:_** Speedo is working on mine and is currently running. I do not have DRI enabled however. + +### <a name="Edit_XF86Config_4"> Edit XF86Config-4 </a> + +Now you have to edit the file manually to ensure that the mouse sections look like this: + + Section "InputDevice" + Identifier "Configured Mouse" + Driver "mouse" + Option "CorePointer" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + + Section "InputDevice" + Identifier "Generic Mouse" + Driver "mouse" + Option "SendCoreEvents" "true" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + +You may also enable the Emulate3Buttons option, but nothing else will work. + + Option "Emulate3Buttons" "true" + +**_WARNING:_** I cannot verify as of yet whether it was the "Emulate3Buttons" setting or the "ZAxisMapping" setting but I had to disable both in order to be able to move and resize windows. + +### <a name="Dynamic_Linking"> Dynamic Linking </a> + +The Hurd does not use `ld.so.conf`, it is necessary to add the following to `/etc/profile` to be sure that the libraries are found: + + LD_LIBRARY_PATH=/X11R6/lib:$LD_LIBRARY_PATH + +"This is a linker issue. GNU/Hurd expects that \`RPATH' is used, however, Debian takes certain measures to avoid this. Note that this does not cut it for suid binaries because of security implications. We expect to rectify this by using \`RUNPATH', which is specified in the new ELF standard." -- [Why does X not work?](http://www.gnu.org/software/hurd/faq.en.html#q4-8) + +**_CAVEAT 12/28/2004:_** I did not have to do this so can someone verify that this still needs to be done or was it fixed? Thanks! + +### <a name="Starting_X"> Starting X </a> + +Finally, run `startx` + +However, there are several caveats to be aware of: + +* `xterm` does not work correctly; try `rxvt`. + +**_UPDATE 12/28/2004_**: xterm works fine for me. + +* `update-menu` does not yet work. As such, there are no fine Debian menus. +* GNOME can now be ported with the new pthreads, but is still being worked on. Window Maker, TWM, Blackbox and FVWM all work. + +**_WARNING:_** If you get an error about opening the display or a permissions issue, you may need to run the following: + + # dpkg-reconfigure xserver-common + +change from "Console Users Only" to "Anybody" + +### <a name="Miscellaneous"> Miscellaneous </a> + +The dillo web browser does work, though it is not the greatest browser. + +For you xchat lovers like me, xchat will compile if you disable the python module. (The python module causes an assertion failure in pthreads if one of you guru's wants to fix and package. **hint,hint**) + +Good luck and enjoy! + +---- + +-- [[Main/BarryDeFreese]] - 28 Dec 2004 diff --git a/Hurd/DebianXorg.mdwn b/Hurd/DebianXorg.mdwn new file mode 100644 index 00000000..1599c689 --- /dev/null +++ b/Hurd/DebianXorg.mdwn @@ -0,0 +1,197 @@ +# <a name="Setting_up_Xorg_on_Debian_GNU_Hu"> </a> Setting up Xorg on Debian GNU/Hurd + +#### <a name="Table_Of_Contents"> Table Of Contents </a> + +%TOC% + +This is a brief helper on how to setup Xorg on Debian GNU/Hurd. + +Obviously this text is taken from the page <http://hurd.gnufans.org/bin/view/Hurd/DebianX> but I was making such drastic changes, I didn't want to hack up that page. + +### <a name="Mouse_amp_Keyboard"> Mouse & Keyboard </a> + +See [[console]] for more details. + +You should instruct the Hurd console to repeat keyboard events to `/dev/cons/kbd`, and mouse events to `/dev/cons/mouse`: + + # console -d vga -d pc_kbd --repeat=kbd -d generic_speaker \ + -d pc_mouse --repeat=mouse --protocol=ps/2 -c /dev/vcs + +Symbolic links to repeaters should also be created: + + # ln -s /dev/cons/kbd /dev/kbd + # ln -s /dev/cons/mouse /dev/mouse + +### <a name="Selecting_amp_Configuring_Packag"> Selecting & Configuring Packages </a> + +The `x-window-system-core` package brings you most of what you need for a base, plus you need to choose a window manager: + +* WindowMaker, `wmaker` +* FVWM, `fvwm` +* Blackbox, `blackbox` +* TWM, `twm` + +I know that Window Maker works, however, I cannot attest to the others. xfce4 might be temporarily broken. + +The recommended way of configuring X is using the `xserver-xorg` debconf template, eg: + + # dpkg-reconfigure xserver-xorg + +This currently seems to be broken in the Debian package so it may be easier to just copy a working configuration from another operating system on the same computer and place it in `/etc/X11/xorg.conf`. You need to edit the mouse settings by hand according to the below example, though. + +**_IMPORTANT:_** when you configure X, make sure you do **NOT** enable the `speedo` and `dri` modules because they are currently broken. + +**BDd: I cannot attest to this currently.** + +### <a name="Edit_xorg_conf"> Edit xorg.conf </a> + +If you managed to get an xorg.conf autogenerated, make sure to have the mouse section read as follows: + + Section "InputDevice" + Identifier "Configured Mouse" + Driver "mouse" + Option "CorePointer" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + +Do not set the "Emulate3Button" or "ZAxisMapping" options, they do not work and break things. + +Here is an example of an xorg.conf using VESA at 800x600 that works on my Dell laptop: + + # /etc/X11/xorg.conf (xorg X Window System server configuration file) + # + # This file was generated by dexconf, the Debian X Configuration tool, using + # values from the debconf database. + # + # Edit this file with caution, and see the /etc/X11/xorg.conf manual page. + # (Type "man /etc/X11/xorg.conf" at the shell prompt.) + # + # This file is automatically updated on xserver-xorg package upgrades *only* + # if it has not been modified since the last upgrade of the xserver-xorg + # package. + # + # If you have edited this file but would like it to be automatically updated + # again, run the following command: + # sudo dpkg-reconfigure -phigh xserver-xorg + + Section "Files" + FontPath "/usr/share/X11/fonts/misc" + FontPath "/usr/share/X11/fonts/cyrillic" + FontPath "/usr/share/X11/fonts/100dpi/:unscaled" + FontPath "/usr/share/X11/fonts/75dpi/:unscaled" + FontPath "/usr/share/X11/fonts/Type1" + FontPath "/usr/share/X11/fonts/CID" + FontPath "/usr/share/X11/fonts/100dpi" + FontPath "/usr/share/X11/fonts/75dpi" + # paths to defoma fonts + FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" + FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/CID" + EndSection + + Section "Module" + Load "GLcore" + Load "i2c" + Load "bitmap" + Load "ddc" + Load "extmod" + Load "freetype" + Load "glx" + Load "int10" + Load "type1" + Load "vbe" + EndSection + + Section "InputDevice" + Identifier "Generic Keyboard" + Driver "kbd" + Option "CoreKeyboard" + Option "XkbRules" "xorg" + Option "XkbModel" "pc104" + Option "XkbLayout" "us" + EndSection + + Section "InputDevice" + Identifier "Configured Mouse" + Driver "mouse" + Option "CorePointer" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + + Section "InputDevice" + Identifier "Synaptics Touchpad" + Driver "synaptics" + Option "SendCoreEvents" "true" + Option "Device" "/dev/psaux" + Option "Protocol" "auto-dev" + Option "HorizScrollDelta" "0" + EndSection + + Section "Device" + Identifier "Videocard0" + Driver "vesa" + EndSection + + Section "Monitor" + Identifier "Monitor0" + VendorName "Dell" + HorizSync 31.5 - 90.0 + VertRefresh 59.0 - 85.0 + Option "DPMS" + EndSection + + Section "Screen" + Identifier "Screen0" + Device "Videocard0" + Monitor "Monitor0" + DefaultDepth 24 + SubSection "Display" + Depth 1 + Modes "800x600" + EndSubSection + SubSection "Display" + Depth 4 + Modes "800x600" + EndSubSection + SubSection "Display" + Depth 8 + Modes "800x600" + EndSubSection + SubSection "Display" + Depth 15 + Modes "800x600" + EndSubSection + SubSection "Display" + Depth 16 + Modes "800x600" + EndSubSection + SubSection "Display" + Depth 24 + Modes "800x600" + EndSubSection + EndSection + + Section "DRI" + Mode 0666 + EndSection + +### <a name="Starting_X"> Starting X </a> + +Finally, run `startx` + +However, there are several caveats to be aware of: + +* `update-menu` does not yet work. As such, there are no fine Debian menus. + +**_WARNING:_** If you get an error about opening the display or a permissions issue, you may need to run the following: + + # dpkg-reconfigure x11-common + +change from "Console Users Only" to "Anybody" + +Good luck and enjoy! + +---- + +-- [[Main/BarryDeFreese]] - 02 Mar 2006 diff --git a/Hurd/DhcpClient.mdwn b/Hurd/DhcpClient.mdwn new file mode 100644 index 00000000..442f4781 --- /dev/null +++ b/Hurd/DhcpClient.mdwn @@ -0,0 +1,42 @@ +# <a name="DHCP_and_the_Hurd"> </a> DHCP and the Hurd + +According to the following thread, no port should be needed since all the patches that have been applied, including the one concerning the thread. In fact, the thread finishes without concluding whether the patch has been applied or not. You can grab it in the thread, anyway. + +[Link to thread](http://lists.gnu.org/archive/html/bug-hurd/2005-01/msg00025.html) + +The thread starts at Jan 4th 2005 until Jan 6th and is only retaken at April 14th in [this thread](http://lists.gnu.org/archive/html/bug-hurd/2005-01/msg00025.html). + +-- [[Main/ThadeuCascardo]] - 29 Sep 2005 + +No DHCP client has been ported to the Hurd yet. + +[This](http://mail.gnu.org/archive/html/help-hurd/2003-10/msg00016.html) thread on help-hurd has a little more info on what's still needed for DHCP. + +-- [[Main/GregBuchholz]] - 09 Oct 2003 + +Found this [message](http://mail.gnu.org/archive/html/bug-hurd/2003-08/msg00045.html) about DHCP capabilities in the Hurd encouraging. + +-- [[Main/GregBuchholz]] - 03 Sep 2003 + +* Tom Hart began a [discussion ](http://mail.gnu.org/pipermail/help-hurd/2002-October/006643.html) of 14 posts in Oct 2002. + +-- [[Main/GrantBow]] - 20 Oct 2002 + +The beginnings of a DHCP translator is available in the Hurd sources on Savannah: [hurd/trans/pump.c](http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd/trans/pump.c?rev=1.3&content-type=text/vnd.viewcvs-markup) + +Unfortunately our current TCP/IP stack, the pfinet translator, lacks support for the AF\_PACKET interface as well as sending packets with an IP address of 0.0.0.0. + +Grant Bowman on bug-hurd: + + Herbert Xu (Pump maintainer) told me that to operate correctly, pump + uses the AF_PACKET interface which is only present in 2.2. + + Anyone else know the status of getting these compiled and functional? + +Neal Walfield on bug-hurd replies: + + > Anyone else know the status of getting these compiled and functional? + + We need to be able to send to the DHCP server with ip address 0.0.0.0. + +-- [[Main/JoachimNilsson]] - 12 Nov 2002 diff --git a/Hurd/DistributedServers.mdwn b/Hurd/DistributedServers.mdwn new file mode 100644 index 00000000..cb2dd5bc --- /dev/null +++ b/Hurd/DistributedServers.mdwn @@ -0,0 +1,29 @@ +# <a name="Distributed_Computing"> Distributed Computing </a> + +The [[Mach]] micro kernel was originally designed to run on symetric multi-processing (SMP) systems. Later, it was extended to allow for distributed OS support. A group of workstations with Mach can act as a single powerful SMP machine. Thus, Mach is also called a Single System Image (SSI). + +The Mach micro kernel provides a good infrastructure for distributed computing, including thread migration, inter-thread communition (both locally and remotely), load balancing and fault-tolerance. The Hurd, using Mach as a foundation, has great potential for distributed computing. Progress toward distributed kernel designs is proceeding within other projects as well. OpenMosix is a related projects for Linux kernels. You can reach it at: + +* <http://www.openmosix.org/> +* <http://openmosix.sourceforge.net/> +* <http://sourceforge.net/projects/openmosix/> + +OpenMosix patches specific Linux kernel versions to make them "distributed-enabled". However, since the Linux kernel is monolithic, patches must be updated with each new version of kernel. That can be extremely difficult due to the pace at which Linux kernels are currently developed. + +The Hurd architecture is better suited to distributed computing. Due to Hurd's server structure this is much more easily adapted. Efforts continue to evolve it's design not only on the Mach micro kernel but also work continues on a [[Mach/PortToL4]] micro kernel. + +---- + +## <a name="Document_history"> Document history </a> + +Created. + +-- [[Main/LaudneyRen]] - 29 Sep 2002 + +Various grammatical fixes and tidying up. + +-- [[Main/JoachimNilsson]] - 29 Oct 2002 + +Updated for [[Mach]] web, reworded parts for more direct message. Added L4 link. + +-- [[Main/GrantBow]] - 11 Jan 2003 diff --git a/Hurd/ExtTwoSize.mdwn b/Hurd/ExtTwoSize.mdwn new file mode 100644 index 00000000..ec39781f --- /dev/null +++ b/Hurd/ExtTwoSize.mdwn @@ -0,0 +1,27 @@ +## <a name="Ext2_File_system_limitation"> Ext2 File system limitation </a> + +This is a very common question. Many people have problems with the partition limit on Ext2 filesystems being very small by current standards. It feels smaller all the time as people have larger disks and often larger filesystems. It's worth mentioning that 64-bit machines (ia64, alpha) will not have this limitation. + +Note that, while the official CVS sources still suffer of this problem, recent (as of 2007) Debian GNU Hurd distributions **do not have this limit anymore**. Be happy. [July 2007 from debian-hurd](http://lists.debian.org/debian-hurd/2007/07/msg00087.html) + +* From the Hurd FAQ: [partition limit](http://www.gnu.org/software/hurd/faq.en.html#q2-6) + +**_Patch:_** + +[Release candidate 1](https://savannah.gnu.org/patch/?func=detailitem&item_id=2508) of the patch is uploaded in Savannah. + +**_Useful:_** + +Discussions on status and how to fix the problem: + +* [Febuary 2003](http://lists.debian.org/debian-hurd/2003/debian-hurd-200302/msg00016.html) +* [December 2002](http://mail.gnu.org/archive/html/bug-hurd/2002-12/msg00041.html) +* [March 2002 status](http://mail.gnu.org/archive/html/hurd-devel/2002-03/msg00030.html) and a [follow up](http://mail.gnu.org/archive/html/hurd-devel/2002-03/msg00035.html) +* [Nov 2001 status](http://mail.gnu.org/archive/html/hurd-devel/2001-11/msg00002.html) + +**_Maybe Useful:_** + +* <http://mail.nl.linux.org/kernel-doc/1999-03/msg00001.html> (This link is broken. Have been unable to fix it. [[MauriceMcCarthy]] 2 Nov 2004.) +* <http://www.beowulf.org/pipermail/beowulf/2000-March/008708.html> + +(Searching Beowulf for '2Gb patch' seems to show this still present in the archive but somehow it is not accessible.) diff --git a/Hurd/ExtTwofsTranslator.mdwn b/Hurd/ExtTwofsTranslator.mdwn new file mode 100644 index 00000000..d8f708fc --- /dev/null +++ b/Hurd/ExtTwofsTranslator.mdwn @@ -0,0 +1,4 @@ +* [[ExtTwoSize]] - information about the limitation of partition size +* [[XattrHurd]] - Supports Hurd ext2 format extensions on Linux, images at <http://people.debian.org/~mbanck/xattr-hurd> + +-- [[Main/GrantBow]] - 03 Mar 2004 diff --git a/Hurd/FlashHurd.mdwn b/Hurd/FlashHurd.mdwn new file mode 100644 index 00000000..a6288afc --- /dev/null +++ b/Hurd/FlashHurd.mdwn @@ -0,0 +1,60 @@ +# <a name="USB_Flash_Memory_GNU_Hurd"> </a> USB Flash Memory GNU/Hurd + +It would be nice if we had a bootable [USB flash drive](http://en.wikipedia.org/wiki/USB_key) Hurd like [[DamnSmallLinux]]. It would be useful for those who want to try out the Hurd before they commit to installing it on their hard disks. In addition to that, a bootable Flash Hurd would enable us to have a native installer instead of relying on Linux. + +It could be installed in the USB using a [[hurd/running/Live_CD]] (using a script) - this is the Burned version - or directly downloading the iso files from the Internet - Unburned version -. One can use also [qemu] to run the [[hurd/running/Live_CD]] and them use the USB installation script. + +Here is an outline of the things that need to be done. Please add your comments and suggestions. + +## <a name="Requirements_Outline"> Requirements Outline </a> + +### <a name="1_We_need_to_be_able_get_a_bootl"> </a> 1. We need to be able get a bootloader for USBs + +This is not much of a problem. I have already been successful (see below) in using [Grub](http://en.wikipedia.org/wiki/GRand%20Unified%20Bootloader) and the El-Torito HD emulation to boot [[GNUmach]] off a CD. There may be some minor tweaking of Grub code necessary to detect which device to use for booting (instead of having the user select their device (hd0,hd1,etc.) from the Grub menu). + +Using GRUB's stage2\_eltorito seems to work fine. + +### <a name="2_We_need_a_bootstrap_filesystem"> 2. We need a bootstrap filesystem translator </a> + +This would be something like a statically linked iso9660fs translator. Compiling a statically linked iso9660fs translator is easy enough, though it doesn't boot. I don't currently know whether this is because the translator was never meant to be a bootstrap filesystem, or if there is a simple bug which has never been flushed out because the translator has never been used at boot time before. I've had trouble debugging this problem because I haven't yet figured out a way to use a remote gdb with gnumach. Theoretically you could use the "boot" command to overcome this problem, but "boot" for me mangles the terminal and exits in different manner than an actual boot. + +The iso9660fs translator works great, it just needs to be statically linked. + +### <a name="3_We_need_a_ramdisk_to_enable_wr"> 3. We need a ramdisk to enable write access </a> + +I think we could fake this with Farid Hajii's [memfs](http://www.fprintf.net/hurd/) translator and writing an ext2 filesystem to it. + +From the mem-fs README... + +> memfs-1 is a translator that provides a memory-based file of fixed size. This file can, just like bigfile, contain a regular filesystem. + +We could set a mem-fs translator anywhere on the CD you needed write access, including having softlinks to the contents of the root directory and chrooting to this new directory. + +For a quick and dirty memfs, you can do it right now with the following commands: + + # touch ./ramdisk + # touch ./tmpfs + # settrans -a ./ramdisk /hurd/storeio -Tcopy zero:50M + # /sbin/mke2fs -o hurd -b 4096 -F ./ramdisk + # settrans -a tmpfs /hurd/ext2fs.static ./ramdisk + # fsysopts --writable ./tmpfs + # cd tmpfs + # touch somenewfile + +Here we use two files ramdisk, and tmpfs that are already created on a readonly file system. For illustration purposes, they are touched beforehand. We run an active storeio translator on the ramdisk file to give us 50MB of RAM to work with, and then we make an ext2 filesystem on it. + +At this point we'd could copy the contents of the `/var` directory into the tmpfs, and then symlink `/var` to `/tmpfs/var`. The same goes for all other mutable dirs. + +This approach of putting an entire ext2 filesystem in a copy zero'd store has some drawbacks listed [here](http://lists.gnu.org/archive/html/bug-hurd/2000-12/msg00073.html). + +Those are the essentials. Here is a list of the things which would be nice to have for a USB Flash Memory. + +* Knoppix like script for starting up X and [[GraphicEnvironment]] s ([[FluxBox]], Gnome...) +* DHCP support for easy network setup +* Hardware autodetection (Kudzu). +* Knoppix like script for installing to the hard drive or to bootable USB pendrive . +* (add your favorite feature here) + +Here is a mailing-list [thread](http://lists.debian.org/debian-hurd/2003/debian-hurd-200308/msg00172.html) discussing some of these issues. + +-- [[Main/GregBuchholz]] - 21 Oct 2003 -- [[Main/NagromNamreh]] - 29 Jan 2004 diff --git a/Hurd/FtpfsTranslator.mdwn b/Hurd/FtpfsTranslator.mdwn new file mode 100644 index 00000000..528a10f2 --- /dev/null +++ b/Hurd/FtpfsTranslator.mdwn @@ -0,0 +1,7 @@ +ftpfs lets you access ftp servers via the filesystem. For detailed usage information use `/hurd/ftpfs --help` and `/hurd/ftpfs --usage`. + +### <a name="hostmux"> hostmux </a> + +ftpfs ist best used with [[HostmuxTranslator]] + +-- [[Main/PatrickStrasser]] - 13 Jul 2004 diff --git a/Hurd/FunnyHurd.mdwn b/Hurd/FunnyHurd.mdwn new file mode 100644 index 00000000..1653ec77 --- /dev/null +++ b/Hurd/FunnyHurd.mdwn @@ -0,0 +1,39 @@ +## <a name="Fun_stuff_ripped_from_the_Intern"> Fun stuff ripped from the Internet </a> + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <td> %ATTACHURL%/hurd-windows.gif <br /> Hurd Windows, availble from <a href="http://www.hurd.com" target="_top">http://www.hurd.com</a></td> + <td> %ATTACHURL%/HurdExchange.gif <br /> Exchange your Hurd at <a href="http://www.thunderinghurd.com" target="_top">http://www.thunderinghurd.com</a></td> + </tr> + <tr> + <td> %ATTACHURL%/HurdCarDeal.jpg <br /> ... and we can of course also offer you a great deal on this -91 Chevy! :-) </td> + <td> %ATTACHURL%/HurdLodge.jpg <br /> The many perks of being a Hurd user also includes our own ski lodge! <br /><font size="+2">Hurd House</font><br /> + <ul> + <li>Knotty pine kitchen</li> + <li>Spacious kitchen &amp; living room with loft</li> + <li>Leather couch and love seat with a TV &amp; VCR</li> + <li>Outdoor Jacuzzi</li> + <li>Spacious master bedroom/bath upstairs</li> + <li>Twin beds in one room / queen bed in another</li> + </ul> + </td> + </tr> + <tr> + <td> %ATTACHURL%/HurdMagician.jpg <br /> From <a href="http://www.magicposters.com/buy/h-k.html" target="_top">http://www.magicposters.com/buy/h-k.html</a></td> + <td> %ATTACHURL%/CrystalAwards.jpg <br /> "Wow dude, I saw the Debian Swirl logo on last nights <a href="http://www.wif.org/events/crystals.html" target="_top">Crystal Awards</a>!" </td> + </tr> +</table> + +---- + +These images and links are only here to serve as a comic relief to this site. It is **not** the intention to humiliate the people, corporations or organizations behind these factual sites. + +If your [company] name or organization is listed here and you do not approve you can remove yourself simply by clicking on the "Edit" button. In the login window that appears you enter _TWikiGuest_ as username and _guest_ as password. + +---- + +### <a name="Comments"> Comments </a> + +Created the page. + +-- [[Main/JoachimNilsson]] - 09 Nov 2002 diff --git a/Hurd/FunnyHurd/CrystalAwards.jpg b/Hurd/FunnyHurd/CrystalAwards.jpg Binary files differnew file mode 100644 index 00000000..2daac850 --- /dev/null +++ b/Hurd/FunnyHurd/CrystalAwards.jpg diff --git a/Hurd/FunnyHurd/HurdCarDeal.jpg b/Hurd/FunnyHurd/HurdCarDeal.jpg Binary files differnew file mode 100644 index 00000000..9f533384 --- /dev/null +++ b/Hurd/FunnyHurd/HurdCarDeal.jpg diff --git a/Hurd/FunnyHurd/HurdExchange.gif b/Hurd/FunnyHurd/HurdExchange.gif Binary files differnew file mode 100644 index 00000000..bbbb4844 --- /dev/null +++ b/Hurd/FunnyHurd/HurdExchange.gif diff --git a/Hurd/FunnyHurd/HurdLodge.jpg b/Hurd/FunnyHurd/HurdLodge.jpg Binary files differnew file mode 100644 index 00000000..d13562f5 --- /dev/null +++ b/Hurd/FunnyHurd/HurdLodge.jpg diff --git a/Hurd/FunnyHurd/HurdMagician.jpg b/Hurd/FunnyHurd/HurdMagician.jpg Binary files differnew file mode 100644 index 00000000..5ef6509a --- /dev/null +++ b/Hurd/FunnyHurd/HurdMagician.jpg diff --git a/Hurd/FunnyHurd/hurd-windows.gif b/Hurd/FunnyHurd/hurd-windows.gif Binary files differnew file mode 100644 index 00000000..5ca7dd74 --- /dev/null +++ b/Hurd/FunnyHurd/hurd-windows.gif diff --git a/Hurd/GNOME.mdwn b/Hurd/GNOME.mdwn new file mode 100644 index 00000000..1dbef091 --- /dev/null +++ b/Hurd/GNOME.mdwn @@ -0,0 +1,11 @@ + + +GNOME can now be ported with the new [[Pthreads]], but is still being worked on.The packages are at + +deb <http://people.debian.org/~mbanck/hurd-gnome/> ./ + +The caveats: + +Some applications are not yet built, not even all the ones from gnome-core. 'apt-get install gnome-applets gnome-control-center gnome-icon-theme gnome-panel gnome-session metacity nautilus scrollkeeper' (along with the above APT source) should get you started. + +See also: [[Xfree86]]. diff --git a/Hurd/GNUHurdStatus.mdwn b/Hurd/GNUHurdStatus.mdwn new file mode 100644 index 00000000..21448e60 --- /dev/null +++ b/Hurd/GNUHurdStatus.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=hurd/status]] diff --git a/Hurd/GNUstep.mdwn b/Hurd/GNUstep.mdwn new file mode 100644 index 00000000..95b2a622 --- /dev/null +++ b/Hurd/GNUstep.mdwn @@ -0,0 +1,64 @@ +# <a name="Setting_up_GNUstep_on_the_Hurd"> </a> Setting up GNUstep on the Hurd + +GNUstep is not available on the Debian distribution for GNU/Hurd, but it can be built manually. This is, how to do it. + +#### <a name="Prerequisites"> Prerequisites </a> + +This packages should already be installed (Debian package names in brackets): ffcall (libffcall1, libffcall1-dev), libffi (libffi4), libffi4-dev, openssl (openssl), libtiff (libtiff4), libpng (libpng12-0, libpng3), libjpg (libjpeg62), libxml (libxml1, libxml2, libxml2-dev & dependencies), xslt (libxslt1.1, libxslt1-dev & dependencies), ssl (libssl0.9.8, libssl-dev), libungif4-dev libungif4g, aspell (libaspell15, libaspell-dev, aspell & apspell-[for your language, e. g. en]) windowmaker (wmaker), Objective-C-Compiler (gobjc and depending packages) + +#### <a name="Getting_the_sources"> Getting the sources </a> + +To do an up-to-date-installation, download the daily snapshot from GNUstep into one new directory and unzip/untar them: + + wget ftp://ftp.gnustep.org/pub/daily-snapshots/core.current.tar.bz2 + +#### <a name="Building_GNUstep"> </a> Building GNUstep + +Everything needed for the GNUstep base system is included into the expanded tarball. This is how to build it: + +Do the following installation as root! + + cd core/make + ./configure + make && make install + cd .. + . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh (see the dot at the begin!) + cd ../base + ./configure + Edit the file Headers/Additions/GNUstepBase/config.h and add "#define BROKEN_SO_REUSEADDR 1" somewhere + make && make install + cd ../gui + ./configure + make && make install + cd ../back + make && make install + +Now, you've built the GNUstep base system. When you want to start a GNUstep application later or want to build one, open a bash shell and enter this command: + + . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh + +This sets some necessary environment variables. + +#### <a name="Building_GNUstep_apps"> </a> Building GNUstep apps + +You can find some GNUstep applications here: <http://www.gnustep.org/experience/apps.html> + +and here: [http://mediawiki.gnustep.org/index.php/Main\_Page](http://mediawiki.gnustep.org/index.php/Main_Page) + +#### <a name="Known_problems"> Known problems </a> + +##### <a name="GNUMail"> </a> GNUMail + +After starting GNUMail, you can only once get mails from a pop3-server. If you want to fetch mails again, you have to restart it. + +##### <a name="GWorkspace_0_8"> GWorkspace 0.8 </a> + +GWorkspace 0.8 expects a /etc/mtab file. If you want to use it, you must manually make this file. + +Example for a /etc/mtab file: + + /dev/hd0s1 / ext2 rw 1 1 + +---- + +-- Thomas Schlesinger - 03 Mar 2006 diff --git a/Hurd/GrantBowHurdPage.mdwn b/Hurd/GrantBowHurdPage.mdwn new file mode 100644 index 00000000..89af3ada --- /dev/null +++ b/Hurd/GrantBowHurdPage.mdwn @@ -0,0 +1,36 @@ +Here are some notes on my current Hurd activity. + +I am also unable to get my PCI NE-2000 clone network card working. The driver loads but no routes are possible and therefore no packets get to the network. This is actually a DE-220 NIC that I started to discuss on hurd-help. Here's the actual change I made to gnumach-20020421/linux/dev/drivers/net/Space.c + + static struct device eth0_dev = { + "eth0", 0, 0, 0, 0, 0x240, 10, 0, 0, 0, ð1_dev, ethif_probe }; + +Cheers, + +-- [[Main/GrantBow]] - 13 May 2002 + +Booting OSKit-Mach mysteriously works now! Yeah! I didn't even change anything! + +My problems now is how to get my second machine's (hd0,2) (/dev/hda3 for linux folks) partitionto bre recognized by Grub. When I try 'root (hd0,2)' grub spits back 'Filesystem type unknown, partition type 0x83'. This is a standard ext2 /boot partition from my test Progeny install. I even removed the partition, added it back, fsck.ext2 and moved the files back. It still doesn't see the -filesystem-. Very strange. This prevents me from using my second machine right now. + +If anyone knows more about these items, please add your comments below with your signature. + +-- [[Main/GrantBow]] - 16 May 2002 + +PLEASE read these once. They are worth the effort. + +* [How To Ask Questions The Smart Way](http://www.tuxedo.org/~esr/faqs/smart-questions.html) + +* [How To Report Bugs Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) \*<http://khazad.dyndns.org/gnunet/> + +\*[Lincoln Portrait](http://www.people.virginia.edu/~skd9r/409/portrait.html) transcript - amazingly applicable to open source ideals. + +I am working on a page describing the [[Distrib/GNUDebianBuildProcess]]. + +I also created some very very rough images for use in explaining the Hurd and it's relationship with GNU Mach and Oskit Mach. + +-- [[Main/GrantBow]] - 30 May 2002 + +* [[ATTACHURLdiagramxcf]]: Diagram - Gimp file + +* Diagram - PNG file: <br /> diff --git a/Hurd/GrantBowHurdPage/diagram.png b/Hurd/GrantBowHurdPage/diagram.png Binary files differnew file mode 100644 index 00000000..c8b29047 --- /dev/null +++ b/Hurd/GrantBowHurdPage/diagram.png diff --git a/Hurd/GrantBowHurdPage/diagram.xcf b/Hurd/GrantBowHurdPage/diagram.xcf Binary files differnew file mode 100644 index 00000000..76396410 --- /dev/null +++ b/Hurd/GrantBowHurdPage/diagram.xcf diff --git a/Hurd/HurdDevelopers.mdwn b/Hurd/HurdDevelopers.mdwn new file mode 100644 index 00000000..201fbc6b --- /dev/null +++ b/Hurd/HurdDevelopers.mdwn @@ -0,0 +1,30 @@ +Here's an unofficial list of Hurd developers and what they are working on. This is very unofficial. + +* [Marcus Brinkmann](http://www.marcus-brinkmann.de) - GNU Hurd Project maintainer, Debian GNU/Hurd Port Manager, fakeroot, oskit console +* [Thomas Bushnell, BSG](http://www.mit.edu/~tb/) - Primary architect, design issues and debugging help +* [Roland McGrath](http://www.frob.com), [resum�](http://www.apocalypse.org/pub/u/roland/resume.html) - GLibC, GCC-3.1, fakeroot (with fakeauth and settrans --chroot) +* Jeff Bailey - turtle autobuilder, gcc-3.1 +* [Igor Khavkine](http://alcor.concordia.ca/~i_khavki/) +* [Gordon Matzigkeit](http://www.fig.org/gord/) + +* Alexandra "[Bunny](http://www.hurd-bunny.tk)" - graphic designer, Hurd promotion +* Alfred M. Szmidt (ams) - +* Daniel (Chillywilly) Baumann - GNU Enterprise Application Server, GNU Common C++ +* [[Main/GrantBow]] - TWiki, promotion +* Jae - fatfs, possibly smbfs +* [[Main/JoachimNilsson]], [[Hurd/JoachimNilssonHurdPage]] - TWiki, OSKit upgrades (currently ATA-100 patches). +* [[Main/JamesAMorrison]] - porting, kernel interface cleanups, [hurd-extras](http://savannah.gnu.org/projects/hurdextras/) +* Neal Walfield - pthreads, documentation, debugging, #hurd admin, log & bot maintainer +* [[Main/NickRusnov]] - mtab & [[Distrib/PortingIssues]] +* Niels M�ller - kernel debugging +* [[Main/OgnyanKulev]] - [[ExtTwoSize]] patch +* Paul Emsley - [Kernel Cousin Debian Hurd](http://kt.zork.net/debian-hurd/latest.html) +* Philip Charles - [ISO CD-images](http://www.copyleft.co.nz/hurd.html) +* Ryan Golbeck - porting. +* [[Main/SamLauzon]] (Indes) - Installer, Sound(!), Bunny mocking +* [[Main/SimonLaw]] - [Kernel Cousin Debian Hurd](http://kt.zork.net/debian-hurd/latest.html) and [[Hurd/KernelCousinDebianHurd]] +* [[Main/WolfgangJ]] - documentation, promotion +* [[Main/DerekDavies]] - OSKit work +* [Daniel Wagner](http://www.vis.ethz.ch/~wagi/) (wagi) - [pcmcia support for OSKit](http://savannah.nongnu.org/projects/oskit/) + +If we got any names wrong, please accept our apologies. diff --git a/Hurd/HurdNames.mdwn b/Hurd/HurdNames.mdwn new file mode 100644 index 00000000..806ee1a1 --- /dev/null +++ b/Hurd/HurdNames.mdwn @@ -0,0 +1,63 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[toc ]] + +# The Acronym + +Hurd stands for "Hird of Unix Replacing Daemons." + +Hird stands for "Hurd of Interfaces Representing Depth." + + +# Origin + +[Quoting ](http://mail.gnu.org/archive/html/help-hurd/2002-10/msg00099.html) Thomas Bushnell, BSG: + +The name "Hurd" was invented by me, as an alternate spelling for the English word "herd". +"Hird" is just another alternate spelling for the same word. By the normal rules of +English orthography, they all have the same pronunciations. + + +# Spelling, Usage and Pronunication + +The Hurd has its share of linguistic debate. The subject of proper usage comes up quite often. + +We call our kernel replacement \`\`the Hurd.'' Although Thomas Bushnell, BSG states that the +word \`\`Hurd'' is an acronym; we do not treat it as such, but rather as a concrete noun. +It is widely regarded as incorrect to use the term \`\`HURD'' or \`\`H.U.R.D.'' So, to +refer to the collection of servers running on top of the microkernel, we would say, +\`\`I have upgraded to the latest version of the Hurd.'' Since the Hurd is part of +the GNU Project, we also refer to it as \`\`GNU Hurd'' which is treated as a proper noun. + +The Hurd, in conjunction with Mach, forms the core of the GNU operating system. +So, one can say \`\`I have installed GNU on my friend's new computer.'' The +Debian Project clarifies this by using the name \`\`Debian GNU/Hurd'', because +it also distributes the GNU/Linux variant of GNU. + +To pronounce the word \`\`Hurd,'' you should say the English word \`\`herd.'' This is pronounced as \`\`hɚd'' using the International Phonetic Alphabet. + +# In Other Contexts + +One contributor from Norway described two other uses of Hird. + +* "the kings men", a name given to the men accompanying the Norwegian kings at about +year 1000 and on. +This was later coined by V. Quisling when he formed a party with +nationalistic traits to denote a set of helpers promoting his agenda +of national & Nordic ideas. + +* A symbol of collaboration with the (German) enemy used in World War II. + +Perhaps unrelated: the "herd mentality" of folks is what the Hurd project +and the the GNU project in general is fighting against, and using the Hurd it is +very easy to do so, since even normal users without privileged can change things +deep inside the system - without restricting others in any way (see +[translators](http://www.debian.org/ports/hurd/hurd-doc-translator)). diff --git a/Hurd/HurdOnL4.mdwn b/Hurd/HurdOnL4.mdwn new file mode 100644 index 00000000..79e7a714 --- /dev/null +++ b/Hurd/HurdOnL4.mdwn @@ -0,0 +1,173 @@ +# <a name="GNU_Hurd_on_L4_wiki"> GNU/Hurd on L4 wiki </a> + +## <a name="Introduction"> Introduction </a> + +This page is a place for information pertaining to the efforts towards realizing the migration and porting of the [[Hurd]] such that it uses the [L4 Microkernel](http://l4ka.org/). The GNU/Hurd Operating System, sometimes just referred to as the _GNU Operating System_ is a rich and robust collection of programs and utilities which enable you to use your computer to do usefull and or entertaining things. The intent is that most any applicable software package available on the [GNU Website](http://www.gnu.org) (and many others also) will be able to be compiled and run under the resultant operating system. + +At this point (06/20/2004) this is not yet possible. Indeed, the preliminary foundations are still being developed. Nevertheless, this is a volunteer created operating system so those with the knowledge, interest, and spare time are encouraged to study and if possible contribute to the project. + +In [CVS module <samp>hurd-l4</samp>](http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/), there is a [comprehensive list of items that need to be done](http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/TODO). + +## <a name="Components_of_the_System"> Components of the System </a> + +### <a name="The_L4_Microkernel"> The L4 Microkernel </a> + +The kernel of an operating system is a fundamental program which provides essential resources from the hardware of the computer to other programs. A kernel typically runs all the time and remains resident in main memory. The amount of functionality and resources which it provides vary tremendously. The [L4 Microkernel](http://l4ka.org/) is an attempt to create a very small high performace core which provides basic memory management, task and context switching, and little else. + +### <a name="The_Hurd"> The Hurd </a> + +The [Hurd](http://www.gnu.org/software/hurd/hurd.html) is a conglomeration of servers and programs which add additional functionality to a microkernel such that it is capable of utilizing additional hardware resources of the computer. It also provides a compatibility layer such that compiling higher level programs is essentially transparent; i.e. when you write a C program and compile it, you need only include standard headers and libraries and for all intents and purposes your generic program will build and run and you need never resort to unportable coding or access to hardware specific methods. + +For a typical user, The Hurd is intended to silently work in the background providing the services and infrastructure which are lacking in the microkernel but are required for higher level programs and libraries to operate. + +### <a name="GNU_Programs"> GNU Programs </a> + +For the user, this is what is desired: to run [GNU Software](http://www.gnu.org/). These programs provide a full featured, robust, and extremely effective operating system. A L4/Hurd system should be capable of compiling and executing most any software package available from GNU with little or no modification. + +Some readers may be familiar with GNU/Linux systems. When GNU/L4 is complete it should highly resemble the functionality of such systems as L4 and Hurd effectively replace the Linux kernel. The bulk of the software should be expected to run much as it does presently under the Linux kernel (or gnumach based GNU/Hurd systems). + +## <a name="Preparations"> Preparations </a> + +### <a name="Build_System"> Build System </a> + +There are no precompiled binaries for Hurd on L4 that I am aware of, so you will need to be able to compile the source code packages in order to experiment with it. While L4Ka will likely build on a variety of compilers and systems, the Hurd may prove troublesome unless it is built using recent GNU compilers and tools. + +I recently used [Debian Unstable](http://www.debian.org) (Sarge) with GNU gcc version 3.3, autoconf version 2.50, and automake version 1.8 to build the system with good results, although other similarly equipped systems with a good development environment, such as [Gentoo](http://www.gentoo.org) or [Slackware](http://www.slackware.com) are reported to work fine also. + +Generally, I would recommend building the packages using any very up-to-date GNU development system. I'm not going to say that you can't compile them using more exotic platforms, but I wouldn't be overly hopefull about it. I have no idea if Pistachio can be compiled under current gnuMach/Hurd systems it might be interesting to try it. + +### <a name="Making_a_Home_for_L4_Hurd"> Making a Home for L4/Hurd </a> + +Obviously you want to have a home for this little embryonic operating system. Currently, mine is using about 5M for the binaries and headers. If you want the source to reside with the binaries, then allow perhaps another 50M or so, but this is purely optional. + +At the moment, Hurd on L4 can't even see your hard drive, so all you need is a directory on some partition which is visible to the GRUB bootloader. A `/l4hurd` directory on your existing GNU/Linux system is probably fine for now. + +Howevever, if you have some spare disk space or an unused partition, you could optionally create a small partition for the system. This is totally unnecessary at the moment because L4/Hurd lacks hard disk drivers right now, but it is an option. Assuming that you have made some partition **X** with linux _fdisk_, set it to type 83 - Linux and use the following command to initialize it with the classic Hurd extensions: + + + +As noted, this is purely optional, in fact right now you can use any filesystem that GRUB can understand. You can even use TFTP to netboot the system. My current setup takes about 5M for the full install so obviously you don't need much space for this. + +### <a name="Boot_Loader"> Boot Loader </a> + +Just like regular GNU/Hurd, you need to use [GNU GRUB](http://www.gnu.org/software/grub/), the _GRand Unified Bootloader_ in order to boot the system. Hopefully you already have it installed, in which case adding the commands for L4/Hurd to your `menu.lst` is quite trivial. + +If you don't have GRUB installed, then you should probably take some time to get it set up. A good place to look for help is on the regular [Debian GNU/Hurd Installation Page](http://www.debian.org/ports/hurd/hurd-install) at the **3\. The Boot Loader** section. + +This is probably a bit superfluous, but you can even display a snazzy little graphic of some type on your GRUB boot menu. Here's a snip from the header of my `menu.lst` which demonstrates how to do this. + + # menu for grub + splashimage (hd0,0)/boot/grub/debian.xpm + foreground bfbfe7 + background 3f3f7f + +In the above example, my `debian.xpm` is just a 640x480 graphic in xpm format (which you can easily create with GIMP). It does add a bit of pizazz to your boot screen :-) + +In fact, I will attach a sample copy of my `menu.lst` here. It has lots of examples for booting a variety of operating systems in it. Remember that my hard drive partitions are unique to my system. + +* [[ATTACHURLmenulst]]: Sample GRUB boot menu + +## <a name="Building_Hurd_on_L4"> Building Hurd on L4 </a> + +### <a name="L4Ka_Pistachio"> L4Ka Pistachio </a> + +#### <a name="Getting_the_Sources"> Getting the Sources </a> + +I used the latest version of L4Ka, Pistachio version 0.4. It can be obtained from the following website: + +[L4Ka Pistachio Home](http://l4ka.org/projects/pistachio/) + +#### <a name="Compiling"> Compiling </a> + +Pistachio is designed to be compiled in a build directory which is independant from the source directory, so you need to create your build directory after unpacking the tarball. Furthermore, you need to pass a couple of special parameters to the configure program to set it up for use with Hurd. Here is what I did on my ia32 system: + +Note: I have my installation set up in `/l4hurd` and I am starting from within the Pistachio source top-level directory. + + $ mkdir build + $ cd build + Building and installing user-level libraries and servers/applications + $ ../user/configure --with-s0-linkbase=0x40000 --prefix=/l4hurd + $ make + $ make install + Building and installing the kernel + $ make -C ../kernel BUILDDIR=`pwd`/kernel + $ cd kernel + $ make menuconfig + $ make + $ mkdir /l4hurd/boot + $ cp ia32-kernel /l4hurd/boot + +Hopefully everything worked and there were no problems. As usual, if the build fails then scrutinize the output from `configure` and install any missing libraries or development packages. + +### <a name="CVS_l4hurd"> CVS l4hurd </a> + +#### <a name="Getting_the_sources"> Getting the sources </a> + + You need to pull the L4 Hurd sources from the CVS tree on Savannah. The CVS access page is [The GNU/Hurd - CVS (module hurd-l4)](http://savannah.gnu.org/cvs/?group=hurd). In a nutshell, the following commands should retrieve the sources for you: + + $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co hurd-l4 + +#### <a name="Compiling"> Compiling </a> + +Take a look at the README, compiling should be quite simple on any state of the art GNU development system. As per the README, and for my example, you would: + + $ autoreconf -f -i -s + $ ./configure --enable-maintainer-mode --prefix=/l4hurd + $ make + $ make install + $ strip physmem/physmem + + $ mkdir /l4hurd/boot + $ cp laden/laden /l4hurd/boot + $ cp wortel/wortel /l4hurd/boot + $ cp physmem/physmem /l4hurd/boot + +Currently (2004/08/09), physmem needs to be stripped to to avoid a memory conflict with wortel; this requirement may be fixed in the future. + +In my case it was slightly more complicated as Debian uses a wrapper system to enable the use of multiple versions of the GNU Autotools. In this case, the trick is to utilize some environment variables on the command line as follows: + + $ ACLOCAL=aclocal-1.8 AUTOMAKE=automake-1.8 autoreconf -f -i -s + +As above, hopefully this will compile cleanly; otherwise, scroll up, read any error messages, and correct them by installing required packages of the proper version. Any bad compilation problems are most likely due to you either missing or using a wrong version of something. + +## <a name="Installing"> Installing </a> + +The binaries are now installed into `/l4hurd`. All that remains is to add an entry into GRUB's `menu.lst` in order to test it out. Here's an example from my system where I have `/l4hurd` on `/dev/hda9` in my Linux system: + + title GNU Hurd on L4Ka Pistachio 0.4 + root (hd0,8) + kernel /boot/laden -D + module /boot/ia32-kernel + module /libexec/l4/sigma0 + module /boot/wortel -D + module /boot/physmem -D + module /boot/physmem + module /boot/physmem + module /boot/physmem + module /boot/physmem + +It might strike you a little odd that there are five physmem modules. This is done because wortel currently (2004/08/09) expects exactly five modules and the other modules (like the task server, auth server, etc.) have not been implemented yet. Therefore the physmem module is used as a dummy module. + +## <a name="Booting"> Booting </a> + +For me at least, I got some nifty messages and then it dropped into a simple debugging mode. As far as I know, thats all there is right now. + +Read, build, learn, code... + +--todo: add more here. + +## <a name="Experimenting"> Experimenting </a> + +Well, thats why you did all of this, certainly not to do anything else. Use that debugger and get experimenting. + +--todo: things to do wth the debugger + +## <a name="Conclusion"> Conclusion </a> + +If you followed these steps, you most likely have built and booted the latest version of Hurd on L4. I would encourage you to subscribe to the mailing list at the following URL and help in the efforts to get this nifty system up to speed: + +[l4-hurd mailing list](http://lists.gnu.org/mailman/listinfo/l4-hurd) + +And finally, this is a wiki, meaning that **you** have the ability to edit and modify this page. If you want to fix something, add more information, new sub-pages, whatever, feel free to do so. This is a great way to get a doc base up fast and keep it current, so use it like its supposed to be and have fun with Hurd on L4! + +-- [[Main/BDouglasHilton]] - 20 Jun 2004 diff --git a/Hurd/HurdOnL4/menu.lst b/Hurd/HurdOnL4/menu.lst new file mode 100644 index 00000000..3129ea74 --- /dev/null +++ b/Hurd/HurdOnL4/menu.lst @@ -0,0 +1,55 @@ +# menu for grub
+splashimage (hd0,0)/boot/grub/debian.xpm
+foreground bfbfe7
+background 3f3f7f
+ +timeout 30
+default 0 +
+title Debian Sid with Linux kernel 2.6.5
+root (hd0,1)
+kernel /vmlinuz root=/dev/hda2 vga=0x318
+
+title Debian Sid with old kernel
+root (hd0,1)
+kernel /vmlinuz.old root=/dev/hda2 vga=9
+
+title Microsoft Windows 2000
+rootnoverify (hd0,3)
+chainloader (hd0,3)+1
+
+title FreeDOS BETA 8.0
+root (hd0,0)
+chainloader +1
+
+title GNU Hurd on L4Ka Pistachio 0.4
+root (hd0,8)
+kernel /boot/laden -D
+module /boot/ia32-kernel
+module /libexec/l4/sigma0
+module /boot/wortel -D
+module /boot/physmem
+
+title Debian GNU/Hurd (gnumach)
+root (hd0,7)
+kernel /boot/kernel.gz root=device:hd0s8
+module /hurd/ext2fs.static --readonly \
+ --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)
+module /lib/ld.so.1 /hurd/exec $(exec-task=task-create)
+
+# title Debian GNU/Hurd (oskit-mach)
+# root (hd3,0)
+# kernel /boot/kernel-ide -- root=hd0s1
+# module /hurd/ext2fs.static --multiboot-command-line=${kernel-command-line} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T device ${root-device} $(task-create) $(task-resume)
+# module /lib/ld.so.1 /hurd/exec $(exec-task=task-create)
+
+# title Debian GNU/Hurd (oskit-mach w/ remote debugging)
+# root (hd3,0)
+# kernel /boot/kernel-ide -d GDB_COM=1 BAUD=9600 -- root=hd0s1
+# module /hurd/ext2fs.static --multiboot-command-line=${kernel-command-line} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T device ${root-device} $(task-create) $(task-resume)
+# module /lib/ld.so.1 /hurd/exec $(exec-task=task-create)
+
diff --git a/Hurd/InstallNotes.mdwn b/Hurd/InstallNotes.mdwn new file mode 100644 index 00000000..2fc7958a --- /dev/null +++ b/Hurd/InstallNotes.mdwn @@ -0,0 +1,295 @@ +Items of interest during install not mentioned elsewhere include the following. Arranged in the same order as Neal Walfield's [install guide](http://web.walfield.org/papers/hurd-installation-guide/english/hurd-install-guide.html). + +**_Currently, [Debian's installation instructions](http://www.debian.org/ports/hurd/hurd-install) are the most up-to-date._**<br /> Note the mirrors mentioned on debian.org have no hurd iso's. The iso's can be found on several mirrors:<br /> \* [Main mirror](http://ftp.debian-ports.org/debian-cd/)<br /> \* [French mirror I](ftp://ftp.eila.jussieu.fr/pub/Debian-CD/)<br /> \* [French mirror II](ftp://ftp.duckcorp.org/hurdfr/hurd/)<br /> \* [Canada mirror](http://www.superunprivileged.org/debian-cd/)<br /> + +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="1_Overview_Where_we_are_going"> 1. Overview - Where we are going </a> + +There are currently four methods to install GNU + +1. Tarball - Neal Walfield's [guide](http://web.walfield.org/papers/hurd-installation-guide/english/hurd-install-guide.html) is excellent and available in several formats. It is the guide that the Hurd community always references first. The GNU official [installation page](http://www.gnu.org/software/hurd/install.html) is the canonical reference. See [[Distrib/TarballNotesHome]] for more info. +2. [[Distrib/BochsEmulator]] is an x86 emulator similar to the propietary [[Distrib/VmWare]] (which is not supported). See the [[Distrib/BochsEmulator]] page for more info. The Bochs project hosts a preinstalled GNU image that is periodicaly updated. You can get the latest one [here](http://sourceforge.net/project/showfiles.php?group_id=12580). +3. [CD-ROM iso images](http://www.debian.org/ports/hurd/hurd-cd) CD-ROM installs are becoming more and more popular. The CDs are based on the most current tarball at release time. See [[Distrib/CDNotesHome]] for more info. +4. The [crosshurd](http://packages.debian.org/crosshurd/) Debian package, which can be used instead of a tarball to install the base system. This is the recommended way to proceed. + +* References to a `cross-install` script can nowadays be completely ignored by anyone not a maintainer. It is only used when creating a new tarball. + +## <a name="2_Real_Estate_or_Finding_A_Home"> 2. Real Estate or Finding A Home </a> + +For those who do not happen to have an available partition or an extra hard drive, this can be the longest step. In this case, we will need to repartition the hard drive. One solution is to use GNU's partition editor, Parted. It features not only basic partition editing, but also partition resizing and moving functions. It can be found at <http://www.gnu.org/software/parted>. The manual is quite complete and includes several tutorials. Also there's a frontend called [nparted](http://packages.debian.org/unstable/utils/nparted.html) to simplify usage. + +The Hurd can only support partition sizes of up to approximately one gigabyte; anything much larger than this will not work. This limitation is a design decision that was made several years ago in which the file system server maps the entire partition into virtual memory. As the amount of virtual memory available on an ia32 is only four gigabytes of which only two gigabytes are available to the application and, of that, a significant portion is reserved for the code, the stack and the heap, the final, maximum contiguous virtual memory area that is left is generally about one gigabyte. This limitation is scheduled to be remove. Several other items, however, currently have a slightly higher priority. + +Having said that, a single one gigabyte partition is more than enough for a working system. Many, however, prefer at least two partitions: one for a root partition and another for a home partition. This latter scheme is highly advised for developers interested in debugging Hurd servers. + +The Hurd supports several extensions to the ext2fs file system format. Foremost among these are passive translators and a fourth set of permission bits for unknown users. In order to take advantage of these features, however, the owner of the partition must be set to Hurd. `mke2fs`, unless specifically overridden on the command line, will set the owner to whatever system core it is running on. As the Hurd will diligently respect this setting, we must be careful to set this appropriately or the Hurd may fail in subtle ways. Be aware that even if a file system is owned by a particular system core, others may still use it; they just may not be able to use certain extensions. + +To create a file system, we use `mke2fs` and pass it `-o hurd` to designate the Hurd as the owner of the new file system. For instance: + + mke2fs -o hurd /dev/DEVICE + +**_Note:_** You may wish to add a `-b 4096` option to `mke2fs` (the default is chosen depending on the size of the partition, and the support for block size 1024 is buggy). The command to check the block size is `tune2fs -l /dev/hda9` under GNU/Linux. + +## <a name="3_The_Boot_Loader_Getting_GRUB"> </a> 3. The Boot Loader - Getting GRUB + +GRUB is the bootloader of the GNU system, and it's currently the only one that supports the multiboot standard, necessary to boot the Hurd. + +A word about GRUB. Unlike traditional boot loaders on the x86, such as LILO, GRUB is very powerful. It has a command line interface, bootp, dummy terminal support and a plethora of other features. In addition, it can boot most any operating system. If you have ever booted an alpha or sparc, you will understand what GRUB can do. Therefore, do not be scared: GRUB is better. You will like it. You will not go back. + +To find GRUB, visit <ftp://alpha.gnu.org/gnu/grub>. Here, there is a source tarball and a floppy image. If you choose to download the tarball, it is a normal configure, make and make install. Included is a wonderfully complete manual on how GRUB works. Read it. If, on the other hand, you choose to download the floppy image, it is sufficient to dump it to a floppy disk to get a working GRUB: + + dd if=grub-boot-VERSION.image of=/dev/fd0 + +You can always install GRUB onto your hard drive at a later date. + +For instructions on using GRUB, see either the info documentation or the quick reference notes on this wiki: + +* [[Distrib/GrubNotes]] - quick reference + +## <a name="4_Cross_Install_Cross_Installing"> </a> 4. Cross Install - Cross Installing GNU + +The recommended way to cross install the Hurd is by using the [crosshurd](http://packages.debian.org/crosshurd) Debian package. Unfortunately, it's broken right now (2003-10-10), so you'll have to use the old tarball method. + +Download the base system `gnu.tar.gz` from <ftp://alpha.gnu.org/gnu/hurd/contrib/robertmh/> or <http://people.debian.org/~rmh/gnu/> . + +The tarball is setup to extract everything into the current directory. After mounting the partition and changing to the mount point, we just need to extract the archive. In the following example, we assume that the root partition is mounted on `/gnu`. + + cd /gnu + tar --same-owner -xvzpf ~/gnu.tar.gz + +**_NOTE:_** This should NOT be confused with the `cross-install` script method. It is only used by maintainers when creating a new tarball. + +## <a name="5_Booting_GNU"> </a> 5. Booting GNU + +Now things are setup to boot GNU for the first time. Verify that the GRUB boot disk is in the drive and reboot. If all goes well, a GRUB menu will be displayed. Hit c for the GRUB command line. + +First, the root file system needs to be set. GRUB uses a partition nomenclature that is a bit different from either GNU or GNU/Linux: both IDE and SCSI drives are named `(hdN)`. `N` is the drive number (zero based) as reported by the BIOS. That is, GRUB makes no distinction between IDE and SCSI disks. The partitions, like the disks, are also indexed numerically from zero: `(hdN,M)`. If this sounds bad, relax: GRUB is also helpful. + +To determine on which file system a particular file resides, one method is to use the find command. When issued this command, GRUB searches on each file system for the specified file and prints where is was found. Here we search for the kernel, `/boot/gnumach.gz`. + + grub> find /boot/gnumach.gz + (hd0,0) + +As we can see, GRUB is indicating that `/boot/gnumach.gz` is on `(hd0,0)`. Thus, we set the root respectively: + + grub> root (hd0,0) + Filesystem type is ext2fs, partition type 0x83 + +Next, GNU Mach needs to be loaded. In addition to loading the binary, at least one option, the root partition, must be specified. This will be used by the Hurd itself. As such, it must be in terms that the Hurd can understand. + +GNU Mach labels disks starting at zero. IDE drives are prefixed with hd, while SCSI disks are prefixed with sd. Like GNU/Linux, drives are number by their position on the controller. For instance, the primary master is `hd0` and the secondary slave is `hd3`. Partitions use the BSD slice naming convention, and append `sM` to the drive name to indicate a given partition. Note that `M` is a one, not zero, based index. The slice number is simple to calculate: just increment what you used for GRUB by one. + +Since the Hurd has not yet been configured, it must be run in single user mode. Adding a `-s` to the kernel command line is all that is required. + +Thus, continuing with the above example and assuming that the first drive in the master on the secondary controller, we would have: + + grub> kernel /boot/gnumach.gz root=device:hd2s1 -s + [Multiboot-elf, ...] + +NOTE: If after running this command you see GRUB Error 28, according to the [GRUB Troubleshooting](http://www.gnu.org/software/grub/manual/grub.html#Troubleshooting) documentation, you may need to tell grub that you have more memory by using the uppermem command. For example, if you have 256MB of RAM and running **displaymem** within GRUB shows that you have less memory than that, you can type **uppermem 262144** to tell GRUB about the additional memory. + +Next, the root file system server and the exec server must be loaded. This is done using GRUB's boot module capability. The parameters are the semantics by which the kernel passes some important values to the servers. + + grub> module /hurd/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) + + [Multiboot-module 0x1c4000, 0x2cfe6a bytes] + grub> module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + [Multiboot-module 0x494000, 0x27afe bytes] + +**_Important:_** each module string should be asingle separate line _or_ line wrapped with a backslash at the end of each line. Remember to make sure there are **_no trailing spaces!_** Adding this to GRUB's `menu.lst` file as soon as possible is advised. + +Finally, GNU can be booted: + + grub> boot + +Sit back and watch the messages. This is actually more important than one might think as there is a bug in GNU Mach whereby hitting a key during the boot process causes the kernel to panic. + +If GNU fails to boot, it could be due to shared IRQs: GNU Mach does not play well with these. You can verify your situation by looking at, for instance, the `/proc/interrupts` file under GNU/Linux. Also, as GNU Mach does not support loadable kernel modules, many of the drivers are compiled into the default kernel. If you have old peripherals, this can be a significant problem: a device may respond badly to a probe intended for a different device. Building a new kernel with only the required devices drivers will usually solve this problem. GNU Mach is easily cross compiled. If you are running Debian, try the `gcc-i386-gnu` package. + +If this does not help, explore the resources listed at the end of this document. Finally, ask on the appropriate mailing list. + +There are some cavaets to the boot process: + +* **IMPORTANT!** Remember when first booting into your freshly un-tarred distribution, you must pass the `-s` option to `/boot/gnumach.gz`. Failure to do so means that you won't get single-user mode. +* **IMPORTANT2!** Add the `--readonly` flag to the file system server in your GRUB `menu.lst` file. This is a work-around to get `fsck` working properly. Don't forget, everything must be on ONE line, or ended with a backslash! +* **IMPORTANT3!** If you have created the filesystem with a later version of e2fsprogs than the one installed in the tarball, it **might** happen that fsck fails and you can't boot multiuser. The workaround is to copy `/bin/true` into `/sbin/e2fsck` and `/sbin/fsck.ext2`, then boot multiuser and install the latest e2fsprogs. + + title GNU (kernel GNUmach 1.3) + root (hdX,Y) + kernel /boot/gnumach.gz root=device:hdXs(Y+1) + module /hurd/ext2fs.static --readonly \ + --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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +Where `hdX,Y` is the appropriate hard disk and partition number, in GRUB format. `hdXs(Y+1)` is the GNUmach format - because Mach partitions start at 1, unlike GRUB partitions that start on 0 (zero). + +It is important that each module string is only a single separate line, or by escaping the EOL (end of line) with a back slash. Remember though to make sure there are **_no trailing spaces!_** + +**_GRUB floppy and iso images:_** These are available from <http://www.copyleft.co.nz/links.html>. These have been built with the correct strings and only the root and boot partitions names need to be editied. + +## <a name="6_Native_Install_Finishing_the_I"> 6. Native Install - Finishing the Installation </a> + +Once a prompt comes up, and any time that the the Hurd is in single user mode, it is necessary to set the terminal type: + + export TERM=mach + +(Repeat this each time you boot in single user mode) + +Be warned that CONTROL-C and family will not work in single user mode. + +We can now run the native-install script. This will configure the packages and set up several important translators: + + ./native-install + +Right before the script terminates, it will indicate that it needs to be run a second time. Follow its instructions and reboot using the reboot command. Again, go into single user mode. + +Now it is advisable to enable swap. The mach kernel dislikes running without swap and is unlikely to last through the installation, especially on systems with little physical RAM. Although you can enable swap later on after running `./native-install` for the second time, turning swap on early increases your probability of getting there. + +This will start the default pager, create a device corresponding to the swap partition, and turn swap on on that partition: + + /hurd/mach-defpager + cd /dev + ./MAKEDEV hdXsY + swapon /dev/hdXsY + cd / + +**IMPORTANT!** When enabling swap please be very sure that the partition really is swap. If you point `swapon` to a data partition it will use that for swap, overwriting any data you may have there. + +Now run `./native-install` for the second time and go through a series of prompts. + +Next, edit `/etc/fstab` to add the home partition and swap space. By default, `nano` is the only editor installed by the the base distribution (not `ae` nor `vi`). It is very important that swap space be used: the Hurd will be an order of magnitude more stable. Note that the Hurd can transparently share a swap partition with Linux, the kernel, but will happily page to any device including a raw partition such as your home partition. + +Here is an example `/etc/fstab` file: + + # <file system> <mount point> <type> <options> <dump> <pass> + /dev/hd2s1 / ext2 rw 0 1 + /dev/hd2s2 /home ext2 rw 0 2 + /dev/hd2s3 none swap sw 0 0 + +Remember to create any devices using the `MAKEDEV` command. + +When you first boot, your `/home` directory will _not_ be auto-mounted. You must set a passive translator on that node to access that partition. The correct syntax for this is: <br />`settrans -p /home /hurd/ext2fs /dev/hd2s2` + +To mount an nfs partition, use the nfs translator. When run as non-root, the translator will connect, for obvious reasons, to the nfs server on a port above 1024. For this to succeed under GNU/Linux, the insecure option must be added to the export line. Here is an example `/etc/exports` file: + + /home 192.168.1.2(rw,insecure) + +To mount this from a GNU box: + + settrans -cgap /home /hurd/nfs 192.168.1.1:/home + +## <a name="7_Configuration_Making_the_Syste"> 7. Configuration - Making the System Usable </a> + +**NOTE**: _If you are using the Debian distribution of Hurd, you also **want** to read_ **_Debian [[running/debian/after_install]]_** + +* After you install, you'll want to do several _important_ things: + * Run `passwd` to give the root user a password. By default, root does not have one. + * Run `adduser` to give yourself a user account. _Do not_ use root indiscriminately. + * Run `MAKEDEV` to create devices in `/dev` for your hard disk and other required devices. + * Since the Hurd does not use `ld.so.conf`, you will want to specify where the X Window System keeps its libraries. Do this by adding the following line to your `/etc/profile`: <br />`export LD_LIBRARY_PATH='/lib:/usr/X11R6/lib'` + * run `/etc/cron.daily/find` to allow `locate` to function. + +* [[Network]] + * Hopefully Mach will recognize your hardware. If it doesn't you have to recompile in most cases. + * copy over your `/etc/resolv.conf` from GNU/Linux to allow your DNS to resolve correctly. + +* Prepare system for new packages.If you are running Debian GNU/Hurd: + * a recommended `/etc/apt/sources.list`: <br /><code>deb <http://ftp.debian-ports.org/debian> unreleased main<br /> deb <ftp://ftp.debian.org/debian> unstable main <br /> deb-src <ftp://ftp.debian.org/debian> unstable main</code> + * a newer `/etc/apt/sources.list`:<br /><code>deb <http://mirrors.kernel.org/debian> unstable main contrib<br /> deb-src <http://mirrors.kernel.org/debian> unstable main contrib<br /> deb <http://ftp.debian-ports.org/debian> unreleased main<br /> deb-src <http://ftp.debian-ports.org/debian> unreleased main</code> + * There are some extremely useful cross-platform 'apt' tricks that can be used to get packages when using Debian GNU/Linux (possibly others) for installation on GNU. This is especially useful if your GNUMach doesn't recognize your network card. The steps are covered in the file `/usr/share/doc/apt-doc/offline` which has been used by several Hurd developers successfully. + * create an `/etc/apt/apt.conf.offline` like [[AptConfOffline]]. + * consider setting up a few [[CrossPlatformAliases]] for use under Debian GNU/Linux while the Debian GNU/Hurd partitions are mounted. + * select the `apt` method from within dselect. + +* [[Xfree86]] + +* New packages - Hopefully you are able to get your network working but since the default GNUMach is only configured for a few ethernet cards you may need to recompile your GNUMach to get it working with your network hardward. + * Install these extremely useful packages + * `dialog` -- Debconf uses this for interactivity. You should install this first to allow you to configure other packages as they are installed. + * It's a very good idea to bring your packages up to date by running: `apt-get update && apt-get dist-upgrade` + * Some recommended packages + * `screen` -- A terminal multiplexer is important because the Hurd does not yet have virtual consoles. Runs with GNU/Linux too. + * `anacron` -- good to run cron jobs for a machine that is not on all the time. + * `emacs21` -- a powerful editor. + * `cvs` -- Concurrent Version System, you'll probably need this soon. + * `bzip2, zip, unzip` -- compression tools. + * `build-essential` -- preparing to build software. + * `gnu-standards` -- GNU coding and package standards. + +* Some packages use an erroneous dependency on `libc6-dev`. This is incorrect because libc6 is specific to GNU/Linux. The corresponding package for GNU is `libc0.3-dev`. If you find a package that is uninstallable due to a `libc6[-dev]` dependency, please send a bug report with a patch that fixes it. It is important that you don't hack your package system to workaround such problems, because that way you won't be able to spot them when they arrive. See the [[Distrib/PortingIssues]] for details about the problem and [[Distrib/BtsFiling]] for details on sending bug reports. +* Edit your `/etc/inetd.conf` and comment out all the services you don't need. Services that probably don't need to be running are `ftp`, `telnet`, `shell`, `login`, and `exec`. +* There appears to be a bug in `libnss-db` that causes networking to fail. To work around this edit `/etc/nsswitch.conf` and remove the `db` entries. (See <http://www.geocrawler.com/archives/3/333/2001/1/50/4907699/> ) + +## <a name="8_Final_Words_The_FAQ"> </a> 8. Final Words - The FAQ + +* [[FAQ]] - More than frequently asked questions + +* [Hurd FAQ](http://web.walfield.org/papers/hurd-faq/) + +* [[KnownHurdLimits]] - Limitations of the GNU operating system + +## <a name="9_Works_Cited_Referenced_Materia"> 9. Works Cited - Referenced Materials </a> + +On Sept 20, 2002 [[Main/DeepakGoel]] (a self-proclaimed newbie) posted a link to his personal [step-by-step installation](http://24.197.159.102/~deego/pub/hurd/install-guide/install.txt). The parent directory has additional material. + +Tarball Notes: [[Distrib/TarballNotes20020816]] [[Distrib/TarballNotes20020523]] + +CD-ROM Notes: [[Distrib/CDNotesJ2]] + +Others who wish to post summaries of their installation experiences are encouraged to do so. The installer methods, package dependencies and file locations frequently do change without warning. + +---- + +## <a name="Licensing"> Licensing </a> + + This work is based on the hard work by [countless Hurd users](http://web.walfield.org/papers/hurd-installation-guide/THANKS), documented and maintained by Neal H. Walfield. See the original for both reference and its licensing at <http://web.walfield.org/papers/hurd-installation-guide/> + +The license for Neals work is under the [GNU GPL](http://web.walfield.org/papers/hurd-installation-guide/COPYING). However, in the Hurd Wiki license all content under the GNU FDL. (Unless the topic is mostly code or otherwise stated in the text.) + +There are currently issues to be resolved around this matter, as far as I understand at least. Until an agreement can be reached this text, and the unclear status of this topic, will remain. The suggestion is to do something like this: + +<dl> + <dt>[[InstallGuide]]</dt> + <dd> Neals Install Guide in its original form </dd> + <dt>[[InstallNotes]]</dt> + <dd> Or [[InstallGuideErrata]] with all user input and additions </dd> +</dl> + +There are several obvious issues with this as I can see + +1. The [[InstallGuide]] must be kept editable by a select few people to avoid the current situation from repeating itself. +2. This loops back and kicks us in the butt because then we get: + 1. Synchronization problems with the original work + 2. Bottle necks: The people with edit access are too busy to synchronize with Neals guide + 3. Diverging guides +3. Annoyed users, we break the tradition of freely editable wiki content and we also have two guides saying different things. + +-- [[Main/JoachimNilsson]] - 29 Dec 2002 + +## <a name="Blame_annotations"> Blame annotations </a> + + -- [[Main/SimonLaw]] - 29 May 2002 <br /> -- [[Main/GrantBow]] - 13 Oct 2002 <br /> -- [[Main/JoachimNilsson]] - 14 Nov 2002 <br /> -- [[Main/RobertMillan]] - 21 Nov 2002 <br /> + +First effort at straightening out the formatting mess ... added references to Neals' original, which this topic has become heavily based on. + +-- [[Main/JoachimNilsson]] - 19 Dec 2002 <br /> + +Updated to the latest short-comings in the Hurd. + +-- [[Main/OgnyanKulev]] - 11 Oct 2003 + +-- [[Main/TWikiGuest]] - 07 Dec 2003 (<r2q2@rocketmailNOSPAM.com>) + +Updated iso information diff --git a/Hurd/InteractiveTranslators.mdwn b/Hurd/InteractiveTranslators.mdwn new file mode 100644 index 00000000..9a0ca7e2 --- /dev/null +++ b/Hurd/InteractiveTranslators.mdwn @@ -0,0 +1,31 @@ +The following text is from mail by Hurd architect Thomas Bushnell: + +> Thread moved over to bug-hurd since it's about design and not Debian GNU/Hurd per se. Alfred Szmidt had pointed out that a dpkg installation translator (one where you copy a .deb into a directory to install it into the system) cannot be easily written, because Debian package installation scripts are sometimes interactive. +> +> I said that this was a deficiency in the design of the Hurd, and that it would be good to fix it (ultimately) by creating user interaction context widgets which can be passed to servers so that they can safely and securely interact with the user when necessary. +> +> Alfred M. Szmidt writes: +> +> > I think you mean that it is a shortcoming in the design of things that are not or cannot be interactive, filesystems being one such example. I can see it infront of me: stat() poping up a dialog asking me to do something each time it gets called... +> +> No, it's a shortcoming in the design of the Hurd, because many times it **can** be interactive. Of course we don't want stat prompting you ever time it's called, but that's not an excuse for preventing stat from ever prompting you at all. We use all kinds of programs that can be interactive, and needless prompts are bugs, easily fixed. +> +> Please, don't lecture me about the Hurd being perfect; it's not. And this is a shortcoming that can someday be fixed, so we shouldn't pretend it's not a problem. It is. A friend at the AI lab once gave the following dream as an example of a well-functioning system: +> +> You walk up to the workstation and start a complex memory intensive ray-tracing program. It runs out of memory and swap space on the workstation. A dialog pops up informing you of the situation and giving several options: suspend the job until later, kill it, and so forth. (Notice that Unix and the Hurd both simply kill the process or the system here, because the discovery that swap is gone happens so low down that all context has been lost.) +> +> You put a disk in the drive. After putting the disk in, without you doing anything in the dialog, a new option comes up, "I notice you just put a disk in; do you want to use this for additional swap?" You say yes. The process now continues, with part of the swap being on the disk. (Notice that Unix and the Hurd don't make connections like this, having one driver know that something **else** in the system might be waiting for this resource and offering it for use.) +> +> In the middle of the task, you hit the button on the drive and out pops the disk. A notifier pops up on the screen, saying that the necessary swap for your process has been removed from the system, and so the job has been suspended until later, and giving you the option of killing it. You say "OK" (that is, you do not say to kill it), and then you log out. (Note that Unix and the Hurd cannot carry on at all in such a case; failure to satisfy a page-in fault results in utter disaster, not clean behavior. Also, neither control carefully which data is paged to which devices, because all interaction context is gone when pageout decisions are being made, so if you have started paging on this disk, you have probably started paging all kinds of essential system services on it too.) +> +> A week later, you walk up to a different workstation in the cluster, and pop in your disk. The system says, "I notice you have a suspended job that was using this disk for swap space" and allows you to resume it where you left off. (Notice that this requires close interaction between the workstations in the cluster, combined with more driver-level cleverness.) +> +> Now that's a well-functioning system. It requires careful bookkeeping of context, knowledge about how to usefully interact with the user from deep in the bowels of the system, and so forth. The Hurd has the capacity for this kind of thing, because user servers can do arbitrary things, unlike kernel routines in Unix. But we must figure out how to give them all the necessary information about their context. +> +> When I designed the filesystem protocols and the structure of the system, I did not consider this kind of flexibility. I had only the simplest kinds of filesystem translators in mind, ones which were just like Unix filesystems but supporting formats like tar and ar in addition to the typical mass-storage types. It was only a little later that I realized union and shadow translators would be a nice thing (and BSD picked up the idea after I explained it at a Boulder BSD conference). Keeping track of who is using which swap space? Now **that** would be clever, and would be very very nice to have. +> +> The reason that filesystems do not have user context is because I was not sufficiently far-sighted at the time to realize the full flexibility of the translator concept I had created. Now that we know more about that flexibility, it would be nice to start figuring out how to improve it. +> +> Thomas + +-- [[Main/OgnyanKulev]] - 21 Mar 2005 diff --git a/Hurd/JoachimNilssonHurdPage.mdwn b/Hurd/JoachimNilssonHurdPage.mdwn new file mode 100644 index 00000000..e4dde2b9 --- /dev/null +++ b/Hurd/JoachimNilssonHurdPage.mdwn @@ -0,0 +1,247 @@ +<table width="100%"> + <tr> + <td> + </td> + <td align="right"><a href="http://hurd.gnufans.orghttp://LOCATIONHurd/JoachimNilssonHurdPage" target="_top">Edit this page</a></td> + </tr> + <tr> + <td align="right"> %ATTACHURL%/patch_kit.jpg </td> + <td align="left"><nop><h2><a name="Table_of_Contents"> Table of Contents </a></h2> %TOC% </nop></td> + </tr> +</table> + +## <a name="Introduction"> Introduction </a> + +This page serves as a simple project page for me. I use it to list my personal Hurd related projects, currently only OSKit related. If you wish to comment on my work, do so in [[TWiki/GoodStyle]], preferably at the bottom of this page. + +The OSKit work is based on the St. Patrick's Day release, snapshot 20020317. + +These patches are available through the [Savannah OSKit project](http://savannah.gnu.org/projects/oskit/) Hopefully they will also be integrated into the main tree at Utah. + +## <a name="Progress"> Progress </a> + +**_2005-02-05:_** Sorry, these pages are now dead. It turned out that my spare time actually was limited. I have a family with a second child due in August — so it's unlikely that I'll ever go back to working with these patches. However, I plan on joining the [[HurdOnL4]] project, possibly to help with drivers, since that's what I do at work mostly. + +**_2003-04-17:_** I've become a bit distracted lately from my Hurd related projects. My work has consumed a lot of time, as have my personal life (I'm about to become a dad! :). But don't worry, I have been working quietly in the background anyway - the OSKit patches have been integrated into the Savannah OSKit project and a new [[TWiki/GnuSkin]] release has been made. + +There is one thing now, only one little thing that I want to have finished before the summer. My Promise ATA-100 controller - support for it in [[Mach/OskitMach]]. Any spare time I find I'll spend on getting that one up and running. + +## <a name="Current_Project"> Current Project </a> + +I'm working on importing the Linux ATA-100 drivers to the OSKit. Using patches by Linux ATA guy, Andr� Hedrick. [ATA-100 patches](http://www.kernel.org/pub/linux/kernel/people/hedrick/ide-2.2.20/). + +At my help I now have [[Main/OgnyanKulev]], he will test a few ATA-100 cards he has access to. + +[[Main/JoachimNilsson]]: + +* HighPoint HPT366 ATA-66 +* Promise PDC202XX ATA-100 + +[[Main/OgnyanKulev]]: + +* Promise PDC202XX +* Intel 82801BA +* Silicon Image CMD649 + +### <a name="OSKit_ATA_100_Support"> </a> OSKit - ATA-100 Support + +I have used the Linux 2.2.22 patch as the base and added the Linux ide-2.2.20.01102002 patch on top. Integration is now complete, testing have started. An alpha quality release is available below, if you want to help out with testing or be on the bleeding edge of things, please contact me via email. + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Part</strong></th> + <th bgcolor="#99CCCC"><strong>Brief description</strong></th> + <th bgcolor="#99CCCC"><strong>DIFF</strong></th> + <th bgcolor="#99CCCC"><strong>Date</strong></th> + </tr> + <tr> + <td> 2.2.22-ATA (ALPHA) </td> + <td> Adds ATA-100/66 capabilities (alpha release) </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.22-ATA-alpha.diff.gz" target="_top">patch-oskit-linux-2.2.22-ATA-alpha.diff.gz</a></td> + <td align="right"> Jan 3, 2003 </td> + </tr> +</table> + +**_Comments:_** + +* Progress is slow. + * Off-board chipsets seem more difficult ... + * PIIX chipset works, tuning included. + +---- + +## <a name="Previous_Projects"> Previous Projects </a> + +### <a name="OSKit_New_Linux_NIC_drivers"> </a> OSKit - "New" Linux NIC drivers + +"New" means simply to add more of the drivers existing in Linux 2.2.X that don't exist in the OSKit today. + +To test any of the work in this project you first need to upgrade the OSKit to Linux 2.2.22 (or later) using my patches below. The first stage deals with network drivers, 10 and 100 Mbps. Gigabit ethernet I have no possibility to test ... so they are **not** included. + +I may, at a later date, also include updates to drivers by Donald Becker. See the drivers at <http://www.scyld.com/network/> + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Part</strong></th> + <th bgcolor="#99CCCC"><strong>Brief description</strong></th> + <th bgcolor="#99CCCC"><strong>DIFF</strong></th> + <th bgcolor="#99CCCC"><strong>Date</strong></th> + </tr> + <tr> + <td> 2.2.22-NET </td> + <td> Adds more Linux NIC drivers </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.22-net.diff.gz" target="_top">patch-oskit-linux-2.2.22-net.diff.gz</a></td> + <td align="right"> Dec 26, 2002 </td> + </tr> +</table> + +**_Added NICs:_** + +* 3Com 3c515 +* D-Link DE-600, DE-620 +* Davicom DM9102(A)/DM9132/DM9801 +* N2k-PCi, NE2000 PCI-based cards +* PCNet32 +* RealTek RTL8139 +* SiS 900/7016 +* ThunderLAN +* VIA Rhine + +### <a name="OSKit_Upgrade_existing_Linux_dri"> </a> OSKit - Upgrade existing Linux drivers + + The OSKit itslef is currently at Linux version 2.2.12 for most of its drivers. The objective of this project was to upgrade to 2.2.22. I will of course also provide upgrades to upcoming revisions of the 2.2.x series, but they have a low priority right now. Please note: + +* The patches are cummulative, i.e., you only need one. +* The patches only upgrade existing OSKit drivers, they don't add support for new ones. Unlike the corresponding Linux patches. + +To build [[Mach/OskitMach]] you also need some other [[Mach/OskitPatches]]. As well as two unofficial GNUmach2 patches. See Daniel Wagners post to bug-hurd, <http://mail.gnu.org/pipermail/bug-hurd/2002-December/011134.html>, or the [[Mach/OskitMachPatches]]. + +**_Tested NICs:_** + +Testbed: Intel AL440LX mobo 128MiB RAM (only 64MiB detected by Grub 0.93). + +* Digital Equipment Corp. Etherworks Turbo PCI Controller DE435 - digital Tulip 21040-AA +* 3Com 3C905B-TXNM Fast Etherlink XL PCI - Parallel Tasking II 3Com 40-0483-004 +* RTL8139 + +**_Untested NICs:_** + +These I have and will test eventually + +* Western Digital 10 Mbps ISA - WD8003EBT +* SMC Ultra 16 ISA +* NE1000/2000 + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Part</strong></th> + <th bgcolor="#99CCCC"><strong>Brief description</strong></th> + <th bgcolor="#99CCCC"><strong>DIFF</strong></th> + <th bgcolor="#99CCCC"><strong>Date</strong></th> + <th bgcolor="#99CCCC"><strong>Verified?</strong></th> + </tr> + <tr> + <td> 2.2.13 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.13 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.13.diff.gz" target="_top">patch-oskit-linux-2.2.13.diff.gz</a></td> + <td> Oct 27, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.14 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.14 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.14.diff.gz" target="_top">patch-oskit-linux-2.2.14.diff.gz</a></td> + <td> Oct 30, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.15 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.15 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.15.diff.gz" target="_top">patch-oskit-linux-2.2.15.diff.gz</a></td> + <td> Oct 31, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.16 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.16 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.16.diff.gz" target="_top">patch-oskit-linux-2.2.16.diff.gz</a></td> + <td> Oct 31, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.17 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.17 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.17.diff.gz" target="_top">patch-oskit-linux-2.2.17.diff.gz</a></td> + <td> Nov 1, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.18 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.18 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.18.diff.gz" target="_top">patch-oskit-linux-2.2.18.diff.gz</a></td> + <td> Nov 1, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.19 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.19 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.19.diff.gz" target="_top">patch-oskit-linux-2.2.19.diff.gz</a></td> + <td> Nov 4, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.20 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.20 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.20.diff.gz" target="_top">patch-oskit-linux-2.2.20.diff.gz</a></td> + <td> Nov 5, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.21 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.21 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.21.diff.gz" target="_top">patch-oskit-linux-2.2.21.diff.gz</a></td> + <td> Nov 5, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.22 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.22 </td> + <td><a href="http://gnufans.org/joachim/hurd/patch-oskit-linux-2.2.22.diff.gz" target="_top">patch-oskit-linux-2.2.22.diff.gz</a></td> + <td> Nov 5, 2002 </td> + <td> Yes (1) </td> + </tr> + <tr> + <td> 2.2.23 </td> + <td> Upgrade from Linux 2.2.12 to 2.2.23 </td> + <td> [[][patch-oskit-linux-2.2.23.diff.gz]] </td> + <td> Not yet </td> + <td> </td> + </tr> +</table> + +**_Notes:_** + +1. Yes, the patch has been tested using the latest CVS version (HEAD) of GNUmach. Verified means that I have verified that GNUmach can be built, booted successfully (using IDE and various NICs). + +## <a name="Future_Work"> Future Work </a> + +1. Try to enable GNUmach to use the [[TWiki/FreeBSD]] drivers in the OSKit. +2. Port a simple DHCP client (udhcp perhaps?). +3. Enable the sound drivers in the OSKit -- port a useful sound daemon. +4. SMP support for GNUmach2 - Current OSKit is broken. + +### <a name="TWiki_FreeBSD_NIC_drivers_for_GN"> </a> [[TWiki/FreeBSD]] NIC drivers for GNUmach + + I have looked into this a bit. The PCI drivers are initialized from the PCI probe. GNUmach v2 uses the Linux PCI stuff which means the [[TWiki/FreeBSD]] probe will not run - this is probably solved in some ingenious way in the OSKit, maybe the COM interfaces, but I've yet to find out more about that. + +---- + + Feel free to contact me if you have any comments or suggestions. + +-- [[Main/JoachimNilsson]] - Feb 19th 2003 + +## <a name="Comments"> Comments </a> + +Go Joachim! Great work! + +-- [[Main/GrantBow]] - 11 Nov 2002 diff --git a/Hurd/JoachimNilssonHurdPage/patch_kit.jpg b/Hurd/JoachimNilssonHurdPage/patch_kit.jpg Binary files differnew file mode 100644 index 00000000..da5cc147 --- /dev/null +++ b/Hurd/JoachimNilssonHurdPage/patch_kit.jpg diff --git a/Hurd/KernelCousinDebianHurd.mdwn b/Hurd/KernelCousinDebianHurd.mdwn new file mode 100644 index 00000000..1ff8a698 --- /dev/null +++ b/Hurd/KernelCousinDebianHurd.mdwn @@ -0,0 +1,3 @@ +[Kernel Traffic](http://www.kerneltraffic.org/) publishes newsletters that track the technical developments of various projects of the Free and Open Source world. [Newsletters for the Hurd development](http://www.kerneltraffic.org/debian-hurd/archives.html) were published, but not anymore. + +Updated status. -- [[Main/OgnyanKulev]] - 18 Sep 2004 diff --git a/Hurd/KnownHurdLimits.mdwn b/Hurd/KnownHurdLimits.mdwn new file mode 100644 index 00000000..51d66b50 --- /dev/null +++ b/Hurd/KnownHurdLimits.mdwn @@ -0,0 +1,20 @@ +* ~1.5 GB ext2 file system size limit + * The problem is fixed in the Debian GNU/Hurd distribution but not the official sources, see [this email](http://lists.debian.org/debian-hurd/2007/07/msg00087.html) + * See [[ExtTwoSize]] + +* Many Unsupported Devices. + * See [[Mach/HardwareCompatabilityList]] + +* Entropy. Mach does not yet gather entropy and thus there are no /dev/random and /dev/urandom nodes. + There are needed by OpenSSH. + * In progress, see [[translator/random]] + +* No DHCP client + * promising information [Jan 2005](http://lists.gnu.org/archive/html/bug-hurd/2005-01/msg00025.html), needs an update + * See [[DhcpClient]] - need to update TCP/IP server. + +* Missing bits of POSIX + * See [[Distrib/SystemAPILimits]] + +* Stability issues + * [[ZallocPanics]] diff --git a/Hurd/LuisBustamanteHurdPage.mdwn b/Hurd/LuisBustamanteHurdPage.mdwn new file mode 100644 index 00000000..abbf1531 --- /dev/null +++ b/Hurd/LuisBustamanteHurdPage.mdwn @@ -0,0 +1,11 @@ +Nothing much to see right now, I'll add some stuff I'm working in the near future! :) + +Cheers, + +-- [[Main/LuisBustamante]] - 16 May 2002 + +After making some trivial/incorrect patches (thanks Neal :) for building um-pppd with gcc 3.0.4 in Debian (see [\#147085](http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=147085&repeatmerged=yes)) this weekend I'll finally give it a try, I got an external modem... anyway serial drivers seem to be broken in GNUmach iirc, I won't get much more than 300b/s :). + +Keep Hurding! + +-- [[Main/LuisBustamante]] - 17 May 2002 diff --git a/Hurd/MakeImage.mdwn b/Hurd/MakeImage.mdwn new file mode 100644 index 00000000..95b928c4 --- /dev/null +++ b/Hurd/MakeImage.mdwn @@ -0,0 +1,60 @@ +## <a name="Make_a_disk_image"> Make a disk image </a> + +This is just a reminder to myself currently. + + /bin/dd if=/dev/zero of=gnu.img count=224000 + /sbin/sfdisk -C 58 -H 16 -S 63 -D gnu.img<<EOT + ,,83,*,0,1,1 + + EOT + losetup -o 32256 /dev/loop0 gnu.img + mke2fs -o hurd -L GNU -b 4096 /dev/loop0 + +## <a name="Install_GNU_Hurd"> </a> Install GNU/Hurd + + mkdir image + mount /dev/loop0 image + cd image/ + /usr/share/crosshurd/makehurddir.sh `pwd` i386 gnu + cd .. + umount image + losetup -d /dev/loop0 + +## <a name="Make_Boot_ISO"> </a> Make Boot ISO + +I use this for testing OSKit... + + mkdir -p iso/boot/grub + cp /lib/grub/i386-pc/stage2_eltorito iso/boot/grub/ + cp oskit-mach.gz iso/boot/ + cat >iso/boot/grub/menu.lst << EOF + title GNUmach 2.0 (OSKit-Mach) + root (cd) + kernel /boot/oskit-mach.gz root=device:hd0s1 -- + root (hd0,0) + module /hurd/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) + module /lib/ld-2.3.2.so /hurd/exec $(exec-task=task-create) + + title GNU/Hurd (GNUmach 1.3) + root (hd0,0) + kernel /boot/gnumach.gz root=device:hd0s1 + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + + EOF + mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 \ + -boot-info-table -o grub.iso iso + +## <a name="Booting_Qemu"> Booting Qemu </a> + + qemu -user-net -isa -boot d -cdrom grub.iso -hda gnu.img + +The switch `-isa` is for current gnumach.gz on hda. + +-- [[Main/JoachimNilsson]] - 11 Apr 2005 diff --git a/Hurd/PosixThreads.mdwn b/Hurd/PosixThreads.mdwn new file mode 100644 index 00000000..f031b56f --- /dev/null +++ b/Hurd/PosixThreads.mdwn @@ -0,0 +1,21 @@ +## <a name="POSIX_Threads_for_the_Hurd"> </a> POSIX Threads for the Hurd + +One of the features the Hurd has been lacking up til now is support for POSIX threads, pthreads. It has been the show stopper for porting many useful applications and has sometimes been pointed out as one of the bigger problems with the GNU operating system. + +In 2002 however, all this came to an end when Neal Walfield implemented libpthreads for his work on L4 and decided to also make it work on GNUmach. + +Information on the library can be found on Neals web site. + +* <http://web.walfield.org/pub/people/neal/hurd/libpthread/> + +## <a name="Previous_Attempts"> Previous Attempts </a> + +Plans to implement pthreads for the Hurd has existed since, at least, 1999. Mark Kettenis [1] began work that was supposed to be useful on Linux as well. His work was continued by Igor Khavikine [2], who implemented most of it. Igor could however not continue his work so it was picked up by Jeroen Dekkers [3] and Ryan Golbeck. Their work can be found on Savannah, <http://savannah.gnu.org/projects/pthreads/>. + +1. <http://sources.redhat.com/ml/libc-hacker/1999-08/msg00117.html> +2. <http://lists.debian.org/debian-hurd/2001/debian-hurd-200102/msg00283.html> +3. <http://mail.gnu.org/pipermail/l4-hurd/2001-October/000310.html> + +---- + +Initial version -- [[Main/JoachimNilsson]] - 03 Nov 2002 diff --git a/Hurd/PppDaemon.mdwn b/Hurd/PppDaemon.mdwn new file mode 100644 index 00000000..f667d449 --- /dev/null +++ b/Hurd/PppDaemon.mdwn @@ -0,0 +1,6 @@ +There is no PPP solution present for the Hurd. + +* Filed Debian [um-ppp bug](http://bugs.debian.org/cgi-bin/bugreport.cgi?archive=no\&bug=147085) +* Clemmitt [asked about um-pppd](http://mail.gnu.org/pipermail/help-hurd/2002-October/006664.html) in this thread of 9 posts beginning Oct 10, 2002. + +-- [[Main/GrantBow]] - 20 Oct 2002 diff --git a/Hurd/RequirementsForLiveCD.mdwn b/Hurd/RequirementsForLiveCD.mdwn new file mode 100644 index 00000000..03bd3884 --- /dev/null +++ b/Hurd/RequirementsForLiveCD.mdwn @@ -0,0 +1,54 @@ +# <a name="Requirements_for_a_GNU_Hurd_Live"> </a> Requirements for a GNU/Hurd Live CD + +Here is an outline of the things that need to be done for producing a Live CD for the Hurd. Please add your comments and suggestions. + +## <a name="1_We_need_to_be_able_get_a_bootl"> 1. We need to be able get a bootloader for CDs </a> + +This is not much of a problem. I have already been successful (see below) in using [Grub](http://en.wikipedia.org/wiki/GRand Unified Bootloader) and the El-Torito HD emulation to boot [[GNUmach]] off a CD. There may be some minor tweaking of Grub code necessary to detect which device to use for booting (instead of having the user select their device (hd0,hd1,etc.) from the Grub menu). + +Using GRUB's stage2\_eltorito seems to work fine. + +## <a name="2_We_need_a_bootstrap_filesystem"> 2. We need a bootstrap filesystem translator </a> + +This would be something like a statically linked iso9660fs translator. Compiling a statically linked iso9660fs translator is easy enough, though it doesn't boot. I don't currently know whether this is because the translator was never meant to be a bootstrap filesystem, or if there is a simple bug which has never been flushed out because the translator has never been used at boot time before. I've had trouble debugging this problem because I haven't yet figured out a way to use a remote gdb with gnumach. Theoretically you could use the "boot" command to overcome this problem, but "boot" for me mangles the terminal and exits in different manner than an actual boot. + +The iso9660fs translator works great, it just needs to be statically linked. + +## <a name="3_We_need_a_ramdisk_to_enable_wr"> 3. We need a ramdisk to enable write access </a> + +I think we could fake this with Farid Hajii's [memfs](http://www.fprintf.net/hurd/) translator and writing an ext2 filesystem to it. + +From the mem-fs README... + +> memfs-1 is a translator that provides a memory-based file of fixed size. This file can, just like bigfile, contain a regular filesystem. + +We could set a mem-fs translator anywhere on the CD you needed write access, including having softlinks to the contents of the root directory and chrooting to this new directory. + +For a quick and dirty memfs, you can do it right now with the following commands: + + # touch ./ramdisk + # touch ./tmpfs + # settrans -a ./ramdisk /hurd/storeio -Tcopy zero:50M + # /sbin/mke2fs -o hurd -b 4096 -F ./ramdisk + # settrans -a tmpfs /hurd/ext2fs.static ./ramdisk + # fsysopts --writable ./tmpfs + # cd tmpfs + # touch somenewfile + +Here we use two files ramdisk, and tmpfs that are already created on a readonly file system. For illustration purposes, they are touched beforehand. We run an active storeio translator on the ramdisk file to give us 50MB of RAM to work with, and then we make an ext2 filesystem on it. + +At this point we'd could copy the contents of the `/var` directory into the tmpfs, and then symlink `/var` to `/tmpfs/var`. The same goes for all other mutable dirs. + +This approach of putting an entire ext2 filesystem in a copy zero'd store has some drawbacks listed [here](http://lists.gnu.org/archive/html/bug-hurd/2000-12/msg00073.html). + +Those are the essentials. Here is a list of the things which would be nice to have for a Live-CD. + +* Knoppix like script for starting up X and [[GraphicEnvironment]] s ([[FluxBox]], Gnome...) +* DHCP support for easy network setup +* Hardware autodetection (Kudzu). +* Knoppix like script for installing to the hard drive or to bootable USB pendrive . +* (add your favorite feature here) + +Here is a mailing-list [thread](http://lists.debian.org/debian-hurd/2003/debian-hurd-200308/msg00172.html) discussing some of these issues. + +-- [[Main/GregBuchholz]] - 21 Oct 2003 -- [[Main/NagromNamreh]] - 29 Jan 2004 diff --git a/Hurd/SeenHurd.mdwn b/Hurd/SeenHurd.mdwn new file mode 100644 index 00000000..be9e1aba --- /dev/null +++ b/Hurd/SeenHurd.mdwn @@ -0,0 +1,71 @@ +# <a name="Hurd_Sightings"> Hurd Sightings </a> + +#### <a name="Table_Of_Contents"> Table Of Contents </a> + +%TOC% + +## <a name="Hurd_People_Sightings"> Hurd People Sightings </a> + +<dl> + <dt>[[Mailing_lists]]</dt> + <dd> Available mailing lists </dd> + <dt>[[IRC]]</dt> + <dd> + </dd> + <dt>[[WhoRunsGNU]]</dt> + <dd> + </dd> + <dt>[[HurdDevelopers]]</dt> + <dd> Who's who? </dd> + <dt>[[PersonalHurdPages]]</dt> + <dd> Users with Hurd wiki pages </dd> + <dt>[[UserGroups]]</dt> + <dd> Canadian, French &amp; Russian </dd> + <dt>[[community/Meetings]]</dt> + <dd> Meetings with Hurd developer attendance. </dd> + <dt>[[community/Orkut]]</dt> + <dd> online "community" of interest - 89 members and counting </dd> + <dt>[[community/LiveJournal]]</dt> + <dd> online community </dd> +</dl> + +## <a name="Hurd_Press_Sightings"> Hurd Press Sightings </a> + +Here's a page for links that specifically talk about the Hurd in some way. See also, [[FunnyHurd]]. + +### <a name="Searching_the_Word_Hurd_in_Some_"> Searching the Word "Hurd" in Some Famous Sites </a> + +* [OSNews.com](http://www.osnews.com/search.php?search=hurd) +* [Slashdot.org](http://slashdot.org/search.pl?query=hurd) +* [KernelTrap.org](http://kerneltrap.com/index.php?or=6,16,40) +* [DebianPlanet.org](http://www.debianplanet.org/module.php?mod=search&edit%5Btype%5D%5Bnode%5D=1&keys=hurd) +* [Hungarian Unix portal](http://www.hup.hu/modules.php?name=News&new_topic=65) (in Hungarian) + +### <a name="Single_Articles"> Single Articles </a> + +* [Interview with Hurd developer Marcus Brinkmann](http://portal.wikinerds.org/brinkmann-interview-mar2005) by Wikinerds Portal +* [A historic first step for the GNU/HURD-L4 microkernel port](http://portal.wikinerds.org/gnu-hurd-l4-first-program) by Wikinerds Portal +* [Interviews: Linus Torvalds: "Desktop Market has already started"](http://linuxtimes.net/modules.php?name=News&file=article&sid=145), in Linux Times, the viability of the Hurd is discussed a bit. +* [The Answer Gang 88: Linux Kernel Maintainability: Bees Can't Fly](http://www.linuxgazette.com/issue88/tag/3.html), in Linux Gazette, March 2003, issue 88. +* [Renaming Linux](http://www.infomaticsonline.co.uk/News/1135403) article on GNU OS (Hurd is a strongly related issue) - Sept 26, 2002 +* GNU's new [GNU/Linux FAQ](http://www.gnu.org/gnu/gnu-linux-faq.html) - Sept 24, 2002 +* [Debian Weekly News](http://www.debian.org/News/weekly/2002/37/) on Sarge & Hurd - Sept 24, 2002 +* Debian Release Manager Anthony Towns [notes on Sarge](http://lists.debian.org/debian-devel-announce-0209/msg00004.html) & Hurd - Sept 28, 2002 +* [New Console](http://www.kerneltrap.org/node.php?id=420) - Kernel Trap, Sept 18, 2002 +* [Radio CSJ](http://pagina.de/radiocsj) 104.5 FM discussions during "error 404" show - [Universidad Cat�olica de Chile](http://www.puc.cl) (Macul, Santiago, Chile), June 2002 +* [New GNU Hurd Kernel Released](http://slashdot.org/article.pl?sid=02/05/30/1547250&mode=nested&tid=117) [_sic_] - Slashdot, May 30, 2002 +* [GNU Mach 1.3 released!](http://www.debianplanet.org/article.php?sid=680&mode=thread&order=0&thold=0) - Debian Planet, May 29, 2002 +* [Running Hurd Under [[Distrib/BochsEmulator]] x86 Emulator](http://www.debianplanet.org/article.php?sid=673&mode=thread&order=0&thold=0) - Debian Planet, May 12, 2002 +* [Hurd-i386 gets new GLibc core](http://www.debianplanet.org/article.php?sid=668&mode=thread&order=0) by Jeff Bailey - Debian Planet, May 3, 2002 +* [IDG](http://www.idg.net/ic_829012_4394_1-3921.html) - IDG, March 11, 2002 +* [Interview with Neal Walfield](http://kerneltrap.org/article.php?sid=375) - Kernel Trap, Nov 12, 2001 + +### <a name="On_Cover_Pages"> On Cover Pages </a> + +* [freeX #4 2000](http://www.cul.de/data/freex42000inh.pdf) (PDF) - _Die andere Systemphilosophie_ auf Marcus Brinkmann + +%ATTACHURL%/freex42000cg.jpg + +* Linux Magazine France 10 + +%ATTACHURL%/lmf10\_1999.jpg diff --git a/Hurd/SeenHurd/lmf10_1999.jpg b/Hurd/SeenHurd/lmf10_1999.jpg Binary files differnew file mode 100644 index 00000000..85332658 --- /dev/null +++ b/Hurd/SeenHurd/lmf10_1999.jpg diff --git a/Hurd/SerialConsole.mdwn b/Hurd/SerialConsole.mdwn new file mode 100644 index 00000000..e4e5324d --- /dev/null +++ b/Hurd/SerialConsole.mdwn @@ -0,0 +1,28 @@ +# <a name="Grub"> Grub </a> + +To enable serial console support in Grub, you'll need to add a variation of the following to the top of your menu.lst: + + serial --unit=0 + terminal --timeout=2 serial console + +The first line enables the serial console on the first serial port (use --unit=1 to use the second). The second tells Grub to use either the serial console or the vga display on the first one on which input is sensed within two seconds of executing this command. If no input is detected, Grub defaults to the first which in this case is the serial console. + +# <a name="Hurd"> Hurd </a> + +You'll first need to create a serial port device. Change to /dev and execute the following as root: + + ./MAKEDEV com0 + +Then add the following to /etc/ttys: + + com0 "/libexec/getty 9600" xterm-color on secure trusted console + +runttys won't automatically reread /etc/ttys. You need to send it a SIGHUP. + +If you are running your serial console on the second serial port, replace com0 with com1. + +# <a name="Using_the_Serial_Port"> Using the Serial Port </a> + +minicom is popular but sredird has a more integrated feel. + +-- [[NealWalfield]] - 12 Dec 2005 diff --git a/Hurd/Shopping.mdwn b/Hurd/Shopping.mdwn new file mode 100644 index 00000000..d9806e93 --- /dev/null +++ b/Hurd/Shopping.mdwn @@ -0,0 +1,13 @@ +Here are some e-shops from which you can buy stuff: T-Shirts and others. Free Software Foundation Inc. doesn't get percent from these sells. + +* [CafePress](http://www.cafeshops.com/hurd) + +-- [[Main/OgnyanKulev]] - 11 Feb 2004 + +Wait, so they are making money off the Hurd and not giving any to the FSF? Uh.... + +-- [[Main/GrantBow]] - 27 Feb 2004 + +OK, It was kind a stupid to add this sentence. What about removing it all this sentence? + +-- [[Main/OgnyanKulev]] - 27 Feb 2004 diff --git a/Hurd/TheGnuHurd.mdwn b/Hurd/TheGnuHurd.mdwn new file mode 100644 index 00000000..dbd5c721 --- /dev/null +++ b/Hurd/TheGnuHurd.mdwn @@ -0,0 +1,30 @@ +[[meta copyright="Copyright © 2001, 2002, 2007, 2008 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]]."]]"""]] + +The Hurd is GNU's replacement for the various UNIX and Linux kernels. + +The Hurd is firstly a collection of protocols formalizing how different +components may interact. The protocols are designed to reduce the mutual +[[trust]] requirements of the actors thereby permitting a more [[extensible|extensibility]] +system. These include interface definitions to manipulate files and +directories and to resolve path names. This allows any process to +implement a file system. The only requirement is that it have access +to its backing store and that the principal that started it own the +file system node to which it connects. + +The Hurd is also a set of servers that implement these protocols. +They include fie systems, network protocols and authentication. +The servers run on top of the [[microkernel/Mach]] [[microkernel]] and use +Mach's [[microkernel/mach/IPC]] mechanism to transfer information. + +The Hurd development effort is a somewhat separate project from the +Debian GNU/Hurd port. The Hurd is a component of the GNU operating +system. diff --git a/Hurd/Translation.mdwn b/Hurd/Translation.mdwn new file mode 100644 index 00000000..a5f78aa5 --- /dev/null +++ b/Hurd/Translation.mdwn @@ -0,0 +1,18 @@ +\* [[HurdCn]]: <http://www.gnu.org/software/hurd/hurd.cn.html> + +\* [[HurdNl]]: <http://www.gnu.org/software/hurd/hurd.nl.html> + +\* [[HurdPl]] : <http://www.gnu.org/software/hurd/hurd.pl.html> + +\* [[HurdEo]]: <http://www.gnu.org/software/hurd/hurd.eo.html> + +\* [[HurdHe]] : <http://www.gnu.org/software/hurd/hurd.he.html> + +\* [[HurdEs]]: <http://www.gnu.org/software/hurd/hurd.es.html> + +\* [[HurdFr]]: <http://www.hurdfr.org> <http://wiki.hurdfr.org> + +\* [[HurdIt]]: <http://www.hurd.it> + +\* [[HurdRu]]: <http://hurd.kholmsk.ru> + diff --git a/Hurd/TranslatorExamples.mdwn b/Hurd/TranslatorExamples.mdwn new file mode 100644 index 00000000..227e9275 --- /dev/null +++ b/Hurd/TranslatorExamples.mdwn @@ -0,0 +1,65 @@ +## <a name="Introduction"> Introduction </a> + +Translators are probably the most known feature of the Hurd, the first thing you should show when doing a demo. + +## <a name="run"> run </a> + +Couldn't manage to compile it, but allows you to do nice things with eg. fortune. + +## <a name="ftpfs"> ftpfs </a> + +hurd:~# settrans -c ftp /hurd/ftpfs 128.101.80.131:/ + +hurd:~# cd ftp + +hurd:~/ftp# ls + +debian debian-archive lost+found + +hurd:~/ftp# cd debian + +hurd:~/ftp/debian# ls + +README README.mirrors.txt doc ls-lR.patch.gz + +README.CD-manufacture README.non-US indices pool + +README.html README.pgp ls-lR project + +README.mirrors.html dists ls-lR.gz tools + +hurd:~/ftp/debian# cp README ~ + +hurd:~/ftp/debian# + +You have to specify the server address with its IP, or your computer will buy a farm or something. + +## <a name="ftpfs_and_hostmux"> ftpfs and hostmux </a> + +currently (28/02/2004) not working, but should be. + +hurd:~# settrans -c ftp /hurd/hostmux /hurd/ftpfs / + +hurd:~# cd ftp + +hurd:~/ftp# cd ftp.debian.org + +-bash: cd: ftp.debian.org: Computer bought the farm + +hurd:~/ftp# host ftp.debian.org + +ftp.debian.org A 128.101.80.131 + +ftp.debian.org A 208.185.25.38 + +hurd:~/ftp# cd 128.101.80.131 + +-bash: cd: 128.101.80.131: Computer bought the farm + +## <a name="Articles_about_translators"> Articles about translators </a> + +* [The GNU Hurd - Translators by Gael le Mignot](http://kilobug.free.fr/hurd/pres-en/html/node8.html) + +* [Translators by Marcus Brinkmann](http://www.gnu.org/software/hurd/whatis/translator.html) + +-- [[Main/LucasNussbaum]] - 28 Feb 2004 diff --git a/Hurd/TranslatorPages.mdwn b/Hurd/TranslatorPages.mdwn new file mode 100644 index 00000000..8e954521 --- /dev/null +++ b/Hurd/TranslatorPages.mdwn @@ -0,0 +1,51 @@ +<dl> + <dt>[[NeighborHurd]]</dt> + <dd> A concept possible with microkernels. </dd> + <dt>[[InteractiveTranslators]]</dt> + <dd> Translators that interact with user </dd> + <dt>[[TranslatorExamples]]</dt> + <dd> Examples of what you can do with translators </dd> + <dt>[[TranslatorWishList]]</dt> + <dd> Interesting file translator ideas </dd> +</dl> + +Here are the translators that currently exist: + +* [[AuthTranslator]] +* [[CrashTranslator]] +* [[ExecTranslator]] +* [[ExtTwofsTranslator]] - (actually named ext2fs) Ext2 filesystems, also ext2fs.static +* [[FifoTranslator]] - also [[NewfifoTranslator]] (actually named new-fifo) +* [[FirmlinkTranslator]] +* [[FtpfsTranslator]] - ftp as a filesystem +* [[FwdTranslator]] +* [[HelloTranslator]] - also [[HellomtTranslator]] (actually named hello-mt) +* [[HostmuxTranslator]] +* [[IfsockTranslator]] +* [[InitTranslator]] +* [[IsofsTranslator]] +* [[KbdTranslator]] +* [[MachdefpagerTranslator]] - (actually named mach-defpager) +* [[hurd/translator/magic]] +* [[MouseTranslator]] +* [[NfsTranslator]] +* [[NullTranslator]] +* [[PasswordTranslator]] +* [[PfinetTranslator]] - also [[PflocalTranslator]] +* [[ProcTranslator]] +* [[SmbfsTranslator]] +* [[StoreioTranslator]] +* [[StreamioTranslator]] +* [[SymlinkTranslator]] +* [[TermTranslator]] +* [[TmpfsTranslator]] +* [[UfsTranslator]] - also ufs.static +* [[UsermuxTranslator]] + +Here are the contributed translators: + +* [[CryptTranslator]] - <http://www.trek.eu.org/devel/hurd/crypt-trans-0.0.3.tgz> + +This is an old list and might need some updating, please check if you have a Hurd system that this list is accurate. + +-- [[Main/GrantBow]] - 03 Mar 2004 diff --git a/Hurd/TranslatorWishList.mdwn b/Hurd/TranslatorWishList.mdwn new file mode 100644 index 00000000..38bd87d9 --- /dev/null +++ b/Hurd/TranslatorWishList.mdwn @@ -0,0 +1,193 @@ +## <a name="Introduction"> Introduction </a> + +The idea behind file system translators is a powerful concept which hasn't recieved much attention in the mainstream computing world. So here is a list of interesting translators I've been able to dream up. I'm sure there are many more ideas floating around out there, so add them to the list! + +The [ferris project](http://witme.sourceforge.net/libferris.web/features.html) has some great ideas and code in the area of userspace dynamic filesystems, as has the [FUSE project](http://fuse.sourceforge.net/). + +## <a name="Audio_cdfs"> Audio\_cdfs </a> + +A translator which produces a directory of \*.wav files when you have an audio CD in the drive. + +## <a name="Ogg"> Ogg </a> + +This translator could be a sub-directory of the Audio\_cdfs translator and it would translate the \*.wav files into Ogg Vorbis/MP3 format. + +## <a name="CDDB"> </a> CDDB + +Of course it would be a lot nicer if the above two translators didn't name their files something worthless like track001.ogg. So we would want a translator which would hook up with a database on the web and produce meaningful file names. + +## <a name="Crypto"> Crypto </a> + +A cryptographic/steganographic seem like a nice match with the concept of user-land file systems. I like the idea of something like `settrans -a /secure stegfs --mpeg file001.mpg` + +## <a name="Revision_control"> Revision control </a> + +All of the empty space on your drive is now being wasted. Why not have a revision control translator which tracks changes to your documents? See also [this guy](http://www.linuxjournal.com/article.php?sid=5976). And then you'd do something like `cd /time-machine/2003/sept/14/` to see what your system looked like on the 14th of septempber 2003. + +## <a name="CVSFS"> </a> CVSFS + +See [cvsFS for Linux](http://cvsfs.sourceforge.net/). This provides a package which presents the CVS contents as mountable file system. It allows to view the versioned files as like they were ordinary files on a disk. There is also a possibility to check in/out some files for editing. A read-only version has been written by Stefan Siegl and is available at [Berlios](http://cvs.berlios.de/cgi-bin/viewcvs.cgi/cvsfs4hurd/cvsfs/). + +## <a name="tar_and_gzip"> tar and gzip </a> + +Rumor has it that they are on the way. Actually, a tar + gzip/bzip2 translator does exist (although it hasn't been used much...) : see [the Hurdextras project](http://savannah.nongnu.org/projects/hurdextras/) on Savannah. + +## <a name="ROM"> </a> ROM + +How about a translator which makes it look like you can write to read only media (like CDs), or change files which I don't have permission to change. This translator would make it seem like you could copy files to places where you normally couldn't. Think about combining this translator with the ftp translator and the tar and gzip translators. (cd /ftp/gnu.org/gnome.tar.gz/writes\_allowed; make install). It could be that unionfs does this very thing. + +## <a name="Super_FIFO"> Super\_FIFO </a> + +It's like a named pipe which is smart enough to start a process everytime something new tries to read from it. For example, let's say I have a script that reads in a JPEG image and spits out a smaller thumbnail \*.jpg to STDOUT. With a standard fifo (`mknod -p fifo`) this would almost works (`script big.jpg > fifo`). But what if there are two processes trying to read the fifo at once? Ick. And of course the standard way only works once without rerunning the command. I'm not quite sure what the syntax should look like, but I'm sure someone out there has a great idea waiting to happen. + +## <a name="Perl"> Perl </a> + +Perl is a wonderful language for hacking together something useful in a short amount of time. No concept is complete without being able to use it in a perl one-liner. And that goes for Hurd translators too. Right? + + #!/usr/bin/perl + use Hurd::translator; + + #file named "two" can produce an endless supply of twos, etc. (a la /dev/zero) + my $i=0; + for $filename ([zero one two three four]) + { + $libtrivfsread_codehash{$filename}= + sub{ $num_bytes=shift; my $data=$i; return chr($data) x $num_bytes; }; + #that's a hash of references to closures + $i++; + } + translator_startup(); + +A Perl translator has been started by [John Edwin Tobey](http://john-edwin-tobey.org/Hurd/) (pith). + +## <a name="Source_code"> Source code </a> + +Here's a crazy thought. How about a translator for source code. You have a C source file like `hello.c` which is your normal everyday file. But there's a translator sitting underneath, so when you `cd hello.c` you get a directory with files like `main()` which represent the subroutines in `hello.c`. And of course you should be able to edit/remove those and have it modify the original source. + +## <a name="Libraries"> Libraries </a> + +Here's an [idea](http://www.circlemud.org/~jelson/software/fusd/docs/node13.html) from the people making [userspace drivers in Linux](http://www.circlemud.org/~jelson/software/fusd/): + +* "One particularly interesting application of FUSD that we've found very useful is as a way to let regular user-space libraries export device file APIs. For example, imagine you had a library which factored large composite numbers. Typically, it might have a C interface--say, a function called `int *factorize(int bignum)`. With FUSD, it's possible to create a device file interface--say, a device called `/dev/factorize` to which clients can `write(2)` a big number, then `read(2)` back its factors. + +* This may sound strange, but device file APIs have at least three advantages over a typical library API. First, it becomes much more language independent--any language that can make system calls can access the factorization library. Second, the factorization code is running in a different address space; if it crashes, it won't crash or corrupt the caller. Third, and most interestingly, it is possible to use `select(2)` to wait for the factorization to complete. `select(2)` would make it easy for a client to factor a large number while remaining responsive to other events that might happen in the meantime. In other words, FUSD allows normal user-space libraries to integrate seamlessly with UNIX's existing, POSIX-standard event notification interface: `select(2)`." + +## <a name="Mail"> Mail </a> + +Am I off my rocker, or does an IMAP/POP translator sound like a good idea? It would make your remote mail servers look like local ones. Or what about a translator that makes a mbox format mail spool look like a directory. Can anyone think of a good use for an SMTP translator? + +## <a name="UUEncode"> </a> UUEncode + +How about a UUEncode translator for those places you can only store ASCII. Combine this with a NNTP translator and store your data in someone's Usenet archive. Or since, (as far as I know), there are no size limitations on file names in the Hurd, why not have a filesystem translator whose underlying store is a file name. (Now ls becomes cat). + +## <a name="Computation"> Computation </a> + +This is from the revenge of the command-line department. Make a directory translator whose contents are a result of the computation specified in the directory name. Here's an example... + + $ settrans -a /comp /hurd/computationfs + $ cd "/comp/3+4" + $ ls -l + total 0 + -rw-r--r-- 1 nobody users 0 Oct 16 11:41 7 + $ + $ cd "/comp/sqrt(2)" + $ ls -l + total 0 + -rw-r--r-- 1 nobody users 0 Oct 16 11:42 1.4142135623731 + $ + +...etc. Now think about your favorite GUI HTML editor and using File->Open on the following directory name, ``"/comp/for i in $( find / -name *.html ); do ln -s $i `basename $i`;done"`` Which would produce a directory listing with soft links to all of the \*.html files on your system. You could have all of the comforts of the shell from within that little File->Open dialog box. + +## <a name="Other"> Other </a> + +Just found Wolfgang J�hrling's translator [wishlist](http://www.8ung.at/shell/trans.html). + +## <a name="Bochs"> Bochs </a> + +A translator which works with [Bochs](http://bochs.sourceforge.net/) disk images would be nice. + +## <a name="Rollover"> Rollover </a> + +A translator that uses a circular buffer to store log files. The translated node only contains the last N (mega,kilo)bytes. + +## <a name="Birthday"> Birthday </a> + +A translator that provides an interface into the birthday program. + +You can cat your calendar, eg. bd/calendar/today bd/calendar/this-week or bd/calendar/this-month. + +And you could write new events into files located in bd/events/DATE/event-name. + +DATE is of the format the birthday expects DD/MM/YYYY. + +The contents of the file are any or none of the following birthday options: ann (An anniversary), bd (A birthday), ev (Some other event), wN (Warn N days in advance of date), toDATE (Event lasts until this DATE), forDAYS (Event runs for DAYS). + +You can optionally just edit the bd/birthdays file if you want to edit the configuration file by hand. It might make sense to write changes from bd/birthdays into ~/.birthdays. + + $ settrans -c bd /hurd/birthday -f ~/.birthdays + $ ls bd/ + birthdays calendar events + $ find bd -print + bd + bd/calendar + bd/calendar/daily + bd/calendar/this-week + bd/calendar/this-month + bd/events + bd/birthdays + $ + +## <a name="LVM"> </a> LVM + +A translator to access block devices from Linux's [Logical Volume Management](http://www.tldp.org/HOWTO/LVM-HOWTO/) would be an useful addition. + + # settrans -cap /dev/VolumeGroup0 /hurd/lvm /dev/PhysicalVolume0 /dev/PhysicalVolume1 ... + # ls /dev/VolumeGroup0/ + home + var + # settrans -cap /home /hurd/ext2fs /dev/VolumeGroup0/home + # settrans -cap /var /hurd/ext2fs /dev/VolumeGroup0/var + +Probably both [LVM2](http://sourceware.org/lvm2/) and the [Device-mapper](http://sourceware.org/dm/) need to be ported. + +## <a name="bridging_translator"> bridging translator </a> + +A [bridging](http://bridge.sourceforge.net/faq.html) translator could improve the Hurd's networking facilities. + + # settrans -cap /dev/br0 /hurd/bridge -i eth0 -i eth1 ... + # settrans -cap /servers/socket/2 /hurd/pfinet -i /dev/br0 -a ... -g ... -m ... + +Perhaps Linux's bridging code and [utilities](http://bridge.sourceforge.net/) can be ported (or glued in) or code from one of the BSDs. + +## <a name="SSH_translator"> </a> SSH translator + +Presenting remote file systems through SSH similar to what gnome-vfs does. + +## <a name="SMB_translator"> </a> SMB translator + +Presenting remote file systems through Samba similar to what gnome-vfs does. Guiseppe Scrivano has worked on this and smbfs is available at [hurdextras](http://savannah.nongnu.org/cgi-bin/viewcvs/hurdextras/smbfs/). + +## <a name="Crontab_translator"> Crontab translator </a> + +Presenting a user's crontab in a filesystem where cron entries are files. + +## <a name="globlink"> globlink </a> + +Firmlink to a file according to a filename matching pattern. When a file goes away, the next file that is matched is automatically linked to. + + $ settrans -ac libfoo.so /hurd/globlink '/lib/libfoo*' + +## <a name="alphabetfs"> alphabetfs </a> + +Organize a large group of files by their first letter. Present one subdirectory for each letter in the alphabet. + +## <a name="fsysoptsctl"> fsysoptsctl </a> + +Send an fsysopts command to a set of translators. When you have a directory full of translators and you want to send each of them the same runtime option, this translator can do it for you. + + $ settrans -ac all /hurd/fsysoptsctl '/tmp/mystuff/*' + $ fsysopts all --update + +---- + +-- [[Main/GregBuchholz]] - updated 17 Oct 2003 diff --git a/Hurd/WebHome/hurd_sm_mf.png b/Hurd/WebHome/hurd_sm_mf.png Binary files differnew file mode 100644 index 00000000..26bb78b5 --- /dev/null +++ b/Hurd/WebHome/hurd_sm_mf.png diff --git a/Hurd/WhoRunsGNU.mdwn b/Hurd/WhoRunsGNU.mdwn new file mode 100644 index 00000000..ad1685b7 --- /dev/null +++ b/Hurd/WhoRunsGNU.mdwn @@ -0,0 +1,31 @@ +## <a name="Who_runs_GNU_"> </a> Who runs GNU in production? + +On an official [GNU Project](http://www.gnu.org/gnu/thegnuproject.html) page I found a quote, attributed to Rabbi Hillel: + +> If I am not for myself, who will be for me? +> +> <br /> +> +> If I am only for myself, what am I? +> +> <br /> +> +> If not now, when? + +There are many now using test installations of Debian GNU/Hurd for testing and development. This page is set aside to list those sites using full GNU systems (GNU/Hurd) for non-testing and non-development purposes. + +## <a name="I_run_GNU_"> </a> I run GNU! + +<dl> + <dt> Budi Rahardjo</dt> + <dd><a href="http://hurd.indocisc.com" target="_top">http://hurd.indocisc.com</a>, contact at <a href="mailto:budi@research.indociscNOSPAM.com">budi@research.indociscNOSPAM.com</a></dd> + <dt>[[Main/JamesAMorrison]]</dt> + <dd><a href="http://hurd.dyndns.org" target="_top">http://hurd.dyndns.org</a> - +seems to be offline -- [[Community/weblogs/ArneBab]] - 2008-09-02</dd> +</dl> + +### Testing and developer installations + +Installations for testing purposes are listed as [[public_hurd_boxen]]. + +These also contain the wiki server. diff --git a/Hurd/XattrHurd.mdwn b/Hurd/XattrHurd.mdwn new file mode 100644 index 00000000..d3856c1b --- /dev/null +++ b/Hurd/XattrHurd.mdwn @@ -0,0 +1,5 @@ +Roland McGrath has made [Linux support for Hurd's extensions to ext2 via Extended Attributes (xattr) interface](http://lists.gnu.org/archive/html/bug-hurd/2004-02/msg00108.html). This is important because it allows Hurd to be completely cross-installed in Linux. + +Michael Banck made some Debian precompiled Linux kernel packages that allow [using this xattr-hurd](http://lists.debian.org/debian-hurd/2004/09/msg00036.html). + +-- [[Main/OgnyanKulev]] - 18 Sep 2004 diff --git a/Hurd/Xfree86.mdwn b/Hurd/Xfree86.mdwn new file mode 100644 index 00000000..617508e5 --- /dev/null +++ b/Hurd/Xfree86.mdwn @@ -0,0 +1,109 @@ +# <a name="Setup_XFree86_in_GNU"> </a> Setup XFree86 in GNU + +#### <a name="Table_Of_Content"> Table Of Content </a> + +%TOC% + +This is a brief helper on how to setup X-Window on GNU. + +### <a name="Mouse_amp_Keyboard"> Mouse & Keyboard </a> + +See [[console]] for more details. + +First, set up the keyboard translator. Using `/hurd/kbd` and `/hurd/mouse` is not supported. You should instruct Hurd console to repeat keyboard events to `/dev/cons/kbd`, and mouse events to `/dev/cons/mouse`: + + # console -d vga -d pc_kbd --repeat=kbd -d generic_speaker \ + -d pc_mouse --repeat=mouse --protocol=ps/2 --console-node=/dev/cons /dev/vcs + +Symbolic links to repeaters should be created too: + + # ln -s /dev/cons/kbd /dev + # ln -s /dev/cons/mouse /dev + +### <a name="Selecting_amp_Configuring_Packag"> Selecting & Configuring Packages </a> + +You will need several X packages. The `x-window-system-core` brings you most of what you need: + +* `xserver-xfree86` +* `xfonts-base` +* `xfonts-100dpi` +* `xfonts-75dpi` +* `xfonts-scalable` +* `xbase-clients` +* `xutils` +* `rxvt` +* ... as well as your window manager of choice: + * WindowMaker, `wmaker` + * FVWM, `fvwm` + * Blackbox, `blackbox` + * TWM, `twm` + +The recommended way of configuring X is using the `xserver-xfree86` debconf template, eg: + + # dpkg-reconfigure xserver-xfree86 + +It may be easier to just copy a working configuration from another operation system on the same computer and place it in `/etc/X11/XF86Config-4`, but this is discouraged as you would have to remove some sections by hand. + +**_IMPORTANT:_** when you configure X, make sure you do **NOT** enable the `speedo` and `dri` modules because they are currently broken. + +### <a name="Edit_XF86Config_4"> Edit XF86Config-4 </a> + +Now you have to edit the file manually to ensure that the mouse sections look like this: + + Section "InputDevice" + Identifier "Configured Mouse" + Driver "mouse" + Option "CorePointer" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + + Section "InputDevice" + Identifier "Generic Mouse" + Driver "mouse" + Option "SendCoreEvents" "true" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + +You may also enable the Emulate3Buttons option, but nothing else will work. + + Option "Emulate3Buttons" "true" + +### <a name="Dynamic_Linking"> Dynamic Linking </a> + +The Hurd does not use `ld.so.conf`, it is necessary to add the following to `/etc/profile` to be sure that the libraries are found: + + LD_LIBRARY_PATH=/X11R6/lib:$LD_LIBRARY_PATH + +"This is a linker issue. GNU/Hurd expects that \`RPATH' is used, however, Debian takes certain measures to avoid this. Note that this does not cut it for suid binaries because of security implications. We expect to rectify this by using \`RUNPATH', which is specified in the new ELF standard." -- [Why does X not work?](http://www.gnu.org/software/hurd/faq.en.html#q4-8) + +### <a name="Starting_X"> Starting X </a> + +Finally, run + +`startx` + +However, there are several caveats to be aware of: + +* `xterm` does not work correctly; try `rxvt`. +* `update-menu` does not yet work. As such, there are no fine Debian menus. +* GNOME can now be ported with the new pthreads, but is still being worked on. [[WindowMaker]], [[TWM]], [[Blackbox]] and [[FVWM]] all work. + +### <a name="Graphical_Environment"> Graphical Environment </a> + +See [[GNOME]] in Hurd . (?) + +---- + +Created. -- [[Main/RobertMillan]] - 21 Nov 2002 + +Some text formatting. -- [[Main/OgnyanKulev]] - 05 Dec 2002 + +Dito. -- [[Main/JoachimNilsson]] - 12 Jan 2003 + +`/hurd/kbd` is no longer supported. -- [[Main/OgnyanKulev]] - 11 Aug 2004 + +`/hurd/mouse` is deprecated. -- [[Main/OgnyanKulev]] - 21 Sep 2004 + +-c /dev/cons is now --console-note=/dev/cons -- Sven 01 May 2005 diff --git a/Hurd/ZallocPanics.mdwn b/Hurd/ZallocPanics.mdwn new file mode 100644 index 00000000..0b00d7ec --- /dev/null +++ b/Hurd/ZallocPanics.mdwn @@ -0,0 +1,43 @@ +The Hurd sometimes crashes with a kernel panic saying someting like: "Panic: zalloc failed: zone map exhausted". + +These panics are generally caused by some kind of kernel resource exhaustion, but there are several differnt reasons for that. + +It used to happen very often under heavy disk load (like large compile jobs), or in a reproducible test case by opening a large number of ports to /dev/null and then closing them all very quickly. The reason for this particular problem has been identified a while back: The multithreaded Hurd servers create a new worker thread whenever a new request (RPC) comes in while all existing threads are busy. When the server is hammered with lots of requests -- which happens both under heavy disk load, and when quickly closing many ports to one server -- it will create an absurd number of threads, causing the resource exhaustion. + +The Debian hurd package contains a patch by k0ro (Sergio Lopez), which fixes this by limiting the amount of created threads in a rather simplistic but very effective manner. This patch however hasn't been included in upstream CVS so far. A more elegant solution, suitable for upstream inclusion, would be desirable. + +Some panics still seem to happen in very specific situations, like the one described at <https://savannah.gnu.org/bugs/?19426> . These are probably the result of bugs that cause port leaks, accidental fork bombs, or similar problems. + +In principle, resource exhaustion can also happen by normal use, though this is rather unlikely in the absence of bugs or malicious programs. Nevertheless, all these problems could be avoided (or limited in effect) by introducing some limits on number of processes per user, number of threads and ports per process/user etc. + +Trying to track down causes for the panics, I got some interesting results. (UPDATE: Many of my original observations were clearly related to the server thread explosion problem. To avoid confusion, I now removed these, as this is no longer an open issue.) + +* It all started with someone (probably azeem) mentioning that builing some package always crashes Hurd at the same stage of the Debian packaging process (UPDATE: Almost all of these panics when building packages were a result of the thread explosion and don't happen anymore.) +* Someone (maybe he himself) pointed out that this stage is characterized by many processes being quickly created and destroyed +* Someone else (probably hde) started some experimenting, to get a reproducible test case +* He realized that just starting and killing five child processes in quick succession suffices to kill some Hurd systems +* I tried to confirm this, but it turned out my system is more robust + +As I could never reproduce the problem with a small number of quickly killed processes, I can't say whether this problem still exists. While I could reproduce such an effect with first opening and then very quickly closing many ports (which is more or less what happens when quickly killing many processes), I needed really large numbers of processes/ports for that. The thread throtteling patch fixed my test case; but it seems unlikely that killing only five processes could have caused a thread explosion, so maybe hde's observation was a different problem really... + +I started various other experiments with creating child processes (fork bombs), resulting in a number of interesting observations: + +* Just forking a large number of processes crashes the Hurd reliably (not surprising) +* The number of processes at which the panic occurs is very constant (typicallly +-2) under stable conditions, as long as forking doesn't happen too fast +* The exact number depends on various conditions: + * Run directly from the Mach console, it's around 1040 on my machine (given enough RAM); however, it drops to 940 when started through a raw ssh session, and to 990 when run under screen through ssh (TODO: check number of ports open per process depending on how it is started) UPDATE: In a later test, I got somewhat larger numbers (don't remember exactly, but well above 1000), but still very constant between successive runs. Not sure what effected this change. + * It doesn't depend on whether normal user or root + * With only 128 MiB of RAM, the numbers drop slightly (like 100 less or so); no further change between 256 and 384 MiB + * Lowering zone\_map\_size in mach/kern/zalloc.c reduces the numbers (quite exactly half from 8 MiB to 4 MiB) + * There seems to be some saturation near 16 MiB however: The difference between 8 MiB and 16 MiB is significantly smaller + * Also, with 8 MiB or 4 MiB, the difference between console/ssh/screen becomes much more apparent (500 vs. 800, 250 vs. 400) + * With more than 16 MiB, Mach doesn't even boot +* Creating the processes very fast results in a sooner and less predictable crash (TODO: Check whether this is still the case with thread throtteling?) +* Creating processes recursively (fork only one child which forks the next one etc.) results in faster crash +* rpcinfo shows that child processes have more ports open by default, which is very likely the reason for the above observation +* Opening many ports from a few processes doesn't usually cause a system crash; there are only lots of open() failures and translator faults once some limit is reached... Seems the zalloc-full condition is better caught on open() than on fork() (TODO: investigate this further, with different memory sizes, different zone\_map\_size, different kinds of resources using zalloc etc.) +* After opening/leaking lots of ports to /dev/null (32768 it seems), the NULL translator somehow becomes disfunctional, and a new instance is started + +While most of these Observations clearly show an exhaustion of kernel memory which is not surprising, some of the oddities seem to indicate problems that might deserve further investigation. + +-- antrik (Last update: 12 Apr 2007) diff --git a/Mach/AdvancedGrubUsage.mdwn b/Mach/AdvancedGrubUsage.mdwn new file mode 100644 index 00000000..8e307b4f --- /dev/null +++ b/Mach/AdvancedGrubUsage.mdwn @@ -0,0 +1,42 @@ +## <a name="Advanced_Grub"> Advanced Grub </a> + +[Grub](http://www.gnu.org/software/grub/) is a capable boot loader. This document is intended to capture some of its most interesting features and try to explain them a bit better than the texinfo documentation. + +### <a name="Debian_Grub"> Debian Grub </a> + +The Debian grub packages do not have networking enabled, so you have to apt-get the source, modify the debian/rules file to include --enable-network-card and dpkg-buildpackage to get a .deb of grub that supports TFTP. + +1. cd /usr/src/debian +2. apt-get source grub +3. cd grub-\_VERSION\_ +4. Add `--enable-tulip` or similar for your NIC to the `./configure` line of the `configure-stamp` target in the `debian/rules` file. +5. `dpkg-buildpackage` (as `root`) +6. `cd ..` +7. `dpkg -i grub*.deb` +8. cp /lib/grub/\_ARCH\_/\* /boot/grub/, e.g., _ARCH_ is `i386-pc` +9. Edit your `/boot/grub/menu.lst` (see below) +10. If your boot disk is `/dev/hda` ==> `grub-install (hd0)` + +### <a name="TFTP_Boot"> </a> TFTP Boot + +Using trivial ftp to load a kernel is one of the best features of Grub. Here is how it is done. + +The `menu.lst` can look something like this: + + ifconfig --address=192.168.1.2 --server=192.168.1.1 + root (nd) + kernel /gnu/boot/oskit-mach.gz root=device:hd0s2 -- + root (hd0,1) + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +**Note: Make sure there are NO spaces after the trailing backslases (\\)!!** + +For more information on GNUmach modules lines and installation setup, see [[Hurd/InstallNotes]] + +-- [[Main/JoachimNilsson]] - 13 Apr 2005 diff --git a/Mach/BuildingOskitMach.mdwn b/Mach/BuildingOskitMach.mdwn new file mode 100644 index 00000000..334b0669 --- /dev/null +++ b/Mach/BuildingOskitMach.mdwn @@ -0,0 +1,190 @@ +## <a name="HowTo_Build_OSKit_Mach"> </a> HowTo Build OSKit-Mach + +<table align="center" width="75%"> + <tr> + <td width="50%"> %TOC% </td> + <td width="50%"> + <p><nop></nop></p> + <h3><a name="Introduction"> Introduction </a></h3> This is a brief "<nop>HowTO build OSKit-Mach" (a.k.a GNUmach 2.0). It covers everything from getting the latest sources of both the <a href="http://www.cs.utah.edu/flux/oskit/" target="_top">OSKit</a> and the GNUmach kernel, down to building and debugging them. <p> To be able to actually make use of your recently checked out CVS version of the GNUMach kernel &amp; c:o you need a GNU system of <a href="ftp://ftp.funet.fi/pub/gnu/alpha/gnu/hurd/contrib/marcus/gnu-20020816.tar.gz" target="_top">gnu-20020816.tar.gz</a> or later. See [[Distrib/TarballNotesHome]] for more info. </p></nop></td> + </tr> +</table> + +## <a name="Getting_your_hands_on_the_source"> Getting your hands on the source </a> + +First you need to checkout the relevant sources. It comes in various flavours and the recommended way is to checkout from CVS. + +### <a name="The_OSKit_Sources"> </a> The OSKit Sources + +**_Note:_** The [Savannah OSKit](http://savannah.gnu.org/projects/oskit/) project is the recommended source today of the OSKit. Its CVS tree holds the official sources and all known patches, plus a few others. + +**_Official Sources:_** + +* St. Patricks day 2002 release: <ftp://flux.cs.utah.edu/flux/oskit/oskit-20020317.tar.gz> + +* Valentine's day 2001 release: <ftp://flux.cs.utah.edu/flux/oskit/oskit-20010214.tar.gz> + +**_Official Patches:_** + +* Download useful [[OskitPatches]] or on the nearest Debian FTP. + +**_Savannah CVS:_** + +The recommended document for accessing the Savannah OSKit CVS is <http://savannah.gnu.org/cvs?group=oskit> + +The following command should get the sources for you: + + $ export CVS_RSH="ssh" + $ cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/oskit co oskit + +Note: if you get a message about RSA/DSA keys, please go check it here: <http://savannah.gnu.org/cvs?group=oskit> + +### <a name="GNUmach_amp_Mig_Sources"> </a> GNUmach & Mig Sources + +The recommended document for accessing the Hurd CVS on Savannah is at <http://savannah.gnu.org/cvs/?group=hurd> + +Remember to set up you environment to use 'ssh' for cvs: + + $ export CVS_RSH="ssh" + +Note: if you get a message about RSA/DSA keys when using cvs commands, please go check it here: <http://savannah.gnu.org/cvs?group=hurd> + +**_Gnu Mach:_** + +All development, apart from critical bug fixes, is done on the upcoming 2.0 release (OSKit/Mach). A potentially confusing point is that the code for OSKit/Mach (as opposed to the 1.X release, aka "GNU Mach") is now on the `TRUNK` of the 'gnumach' CVS module. In the past the trunk was 1.X (GNU Mach) and 2.0 (OSKit/Mach) was a branch. + + $ cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/hurd co gnumach + +In case you have been tracking the oskit-branch and want to move to the current `HEAD` branch you can issue the following instead to update your tree. + + $ cd <YOUR MACH DIR> + $ cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/hurd update -Pd -A + +Where `<YOUR MACH DIR>` can be `gnumach`, `oskit-mach`, or similar. The `-A` is what moves you from a branch to the default (in this case HEAD), but without forcing a specific tag. `-P` Prunes your local copy from stale directories and `-d` creates new directories for you. + +**_The Hurd servers:_** + +In case you want to build the Hurd servers as well, you can check them out with: + + $ cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/hurd co hurd + +**_Inteface generator:_** + +See the [[microkernel/mach/MIG]] for more information. + +Check it out using + + $ cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/hurd co mig + +## <a name="Building"> Building </a> + +The recommended versions of GCC are + +<dl> + <dt> For the OSKit</dt> + <dd> GCC 2.95.X </dd> + <dt> For GNUmach and <nop>MiG</nop></dt> + <dd> GCC 3.2 </dd> +</dl> + +### <a name="The_OSKit"> </a> The OSKit + +Do _not_ forget to apply all known [[OskitPatches]] before starting the build! This does not apply if you use the OSKit from [Savannah](http://savannah.gnu.org/). + +The attached [[ATTACHURLmodulesx86pc]], or [[ATTACHURLmodules-lightx86pc]], is an example setup, your needs may vary but this one works for standard COTS PC's. Now, how to configure and build the OSKit. + + $ cd oskit-20020317/ + $ mkdir build + $ cd build + $ CC=gcc-2.95 \ + CFLAGS="-g" \ + ../configure --prefix=/usr/local \ + --enable-debug \ + --enable-modulefile=modules-light.x86.pc + $ make + $ sudo make install + +Comment: Barry deFreese + +For you newbies like me, I had problems using `modules.x86.pc.full` and `modules.x86.pc`. There seems to be problems with `examples/dyntest`. Make sure you pull down and use the [[ATTACHURLmodules-lightx86pc]]. + +Comment: Luis Miguel + +I needed to apply another patch that is not in CVS yet. The patch is in this [message](http://mail.gnu.org/archive/html/bug-hurd/2003-06/msg00054.html) in the bug-hurd mailing list. + +### <a name="Mach_Interface_Generator"> Mach Interface Generator </a> + +To build any Mach kernel you need an interface generator, MiG. To be on the safe side, use the CVS version. If you use Debian, you can install package [mig-i386-gnu](http://packages.debian.org/mig-i386-gnu). If you don't use Debian or want to compile MiG by yourself on Linux/\*BSD system, you must first install Mach headers. In Mach directory do: + + $ mkdir build + $ cd build + $ ../configure --prefix=/usr/local # Default prefix is / ! + $ sudo make -k install-headers # -k is for ignoring errors + +Now you are ready to compile and install MiG (commands are in Mig's source directory): + + $ automake --add-missing # sometimes it's needed + $ mkdir build + $ cd build + $ ../configure + $ make + $ sudo make install + +### <a name="GNUmach_2_0_OSKit_Mach_"> </a> GNUmach 2.0 (OSKit-Mach) + +Unlike its half sister, the OSKit-Mach kernel does _not_ need a cross compiler. The regular gcc for your x86 Linux system does just fine. However, you might want to use gcc 3.2 with the latest and greatest CVS version of Mach. + +**_Configuring:_** + + $ cd gnumach + $ mkdir build + $ cd build + $ MIG=/usr/local/bin/mig \ + CC=gcc-3.2 \ + CFLAGS="-g -O2" \ + OSKIT_LIBDIR=/usr/local/lib/oskit \ + ../configure --prefix=/gnu + +Comment: Barry deFreese + +I updated `CFLAGS` to `CFLAGS="-g -O2"`. Using just `-O` I was getting errors in the `machine_init` function. For newbies like me, the `-g` is only needed if you want to enable debugging. The `-O2` is Oh 2, not Zero 2. + +**_Building:_** + +Instead of using `make kernel` to build kernel, in OSKit-Mach you have to use <code>make kernel-<var>DRIVERS</var></code>, where <var>DRIVERS</var> is <code><var>DRIVER</var>+<var>DRIVER</var>+...+<var>DRIVER</var></code> (a list of drivers separated by `+`). <var>DRIVER</var> can be one of: + +* `ide` +* `floppy` +* <code>ethernet\_<var>ETHDRV</var></code> where <var>ETHDRV</var> is taken from `oskit/oskit/dev/linux_ethernet.h`. +* <code>scsi\_<var>SCSIDRV</var></code> where <var>SCSIDRV</var> is taken from `oskit/oskit/dev/linux_scsi.h`. + +Thus, to build a IDE capable kernel with 3Com Vortex Boomerang support you use the following: + + $ make kernel-ide+ethernet_vortex + $ sudo make install + $ sudo gzip -f /gnu/boot/oskit-mach + +If the `make` command complains about missing dependencies, then you haven't passed correct `OSKIT_LIBDIR` variable to the `configure` script. Or you can use the patch below and pass something like `--with-oskit=/usr/local` to `configure`. + +Comment: Barry deFreese + +If you receive an error like `No rule to make target Kernel-ide...`, there is a patch for an issue with finding the oskit libraries. Then run `configure` on gnumach again with the option `--with-oskit=/path/to/oskit/libraries`. + +The patch can be found here: [gnumach-oskit-path.patch](http://www.vis.ethz.ch/~wagi/hurd/gnumach/gnumach-oskit-path.patch) Thanks wagi!! + +Don't use both `--with-oskit` and `OSKIT_LIBDIR`. Choose one of these methods. + +If you want to use tftp to download the kernel from Grub and don't care about the symbols I recommend either stripping or removing the `--enable-debug` and `-g` statements. + +## <a name="Debugging"> Debugging </a> + +See the [[Mach/RemoteDebugOskitMach]] page. + +## <a name="Attachments"> Attachments </a> + +* [[ATTACHURLmodulesx86pc]]: Configures modules to build in OSKit. +> Compared to 21May04 CVS, this adds SMP but omits the random module which was added to CVS in Jan03. + +* [[ATTACHURLmodules-lightx86pc]]: Lighter version of required modules. Used for building GNUmach with OSKit, i.e. OSKit/Mach. +> Compared to the above config, this omits the Linux, MSDOS, +> +> NetBoot, and PXE loader support, bootp support, OSKit on UNIX support, some thread-safe library versions, the address map manager, fsread, fsnamespace/\{fsn,fsn\_r\}, fudp, memdebug, memfs, smp, POSIX threads, svm, uvm, the Simple Process Library, realtime support, FreeBSD devices and code, linux/fs, the UDP library, **the sets of x86 and UNIX example kernels**, the testsuite, and the security server. **The new random module is also not configured.** diff --git a/Mach/BuildingOskitMach/modules-light.x86.pc b/Mach/BuildingOskitMach/modules-light.x86.pc new file mode 100644 index 00000000..07818cc5 --- /dev/null +++ b/Mach/BuildingOskitMach/modules-light.x86.pc @@ -0,0 +1,236 @@ +## +## OSKit Module configuration file. +## +## Comments are ignored, non-commented words should be +## OSKit directories to include in the build. +## +## Libraries are built in the order defined in this +## file. +## +## Specify this file with the --with-modulesfile=<x> +## option to configure. By default the file 'modules' +## in the OSKit source directory is used. +## + +### Always include this module (the header files) +oskit + +### The flask module must be compiled before +### most of the other modules. +### It is currently a required module. +flask + +### Builds the documentation (Utah only) +#doc + + +### --- Required components + +### The C Runtime (the magic that calls 'main') (required) +crt + +knit/c + +### Various bits of kernel magic (required) +kern + +### List Memory Manager (required) +lmm + +### The Client OS library (required) +clientos + + +### --- Boot Adaptors + +### Build the multiboot compliant boot adaptor +### Requires that ld support '-format binary' (checked) +boot/multiboot + +### Build the Linux boot adaptor +### Requires ld support '-oformat binary' (checked) +#boot/linux + +### Build the MSDOS boot adaptor (??) +## Requires ld support '-oformat msdos' (checked) +#boot/dos + +### Build the BSD boot adaptor +### Requires some sort of a.out linker (checked) +#boot/bsd + +### The NetBoot Meta-kernel +#boot/net + +### Build the PXE compliant boot loader +#boot/pxe + +### --- OSKit-on-UNIX support libraries. +#unix + +### --- C Libraries + +### A minimal standard C library +libc + +### A much more complete standard C library +posix/sys + +### Thread-safe version of the previous +#posix/sys_r + + +### --- Miscellaneous utility libraries + +### Address Map Manager +#amm + +### Library for contacting a bootp server +#bootp + +### Com IIDs library (required for most kernels) +com + +### For groking disk partitions +diskpart + +### Include the Dynamic Packet Filter library +#dpf/dpf + +### Exec library for loading linked executables +exec + +### Read-only access to a number of filesystems +#fsread + +### Filesystem name parsing library +#fsnamespace/fsn + +### Same as above, but multithread safe +#fsnamespace/fsn_r + +### Fake UDP library (Only supports UDP send) +#fudp + +### Include the Hierarchical Packet Fair Queueing module +#hpfq + +### The Memdebug library +#memdebug + +### The memory file system +#memfs + +### SMP support (believed to be broken) +#smp +## the SMP example +#examples/x86/smp ### requires smp + +### POSIX threads +#threads + +### Simple Virtual Memory +#svm + +### UVM +#uvm/uvm + +### Simple Process Library +#uvm/sproc +### the sproc example +#examples/x86/sproc ### requires sproc + +### --- Startup Library + +### Simpler functions for initializing OSKit subsystems +### NOTE: this drags in almost every other library. +#startup + + +### --- Devices, Networks and Filesystems + +### The device layer glue. Depends on lmm and kern +### Required for any kernel that uses OSKit devices. +dev + +### Realtime support. Needed for realtime threads and for GPROF. +#realtime + +### Devices and code stolen from FreeBSD +#freebsd/dev +#freebsd/net_flask +#freebsd/net +#freebsd/libm +#freebsd/libc +#freebsd/libc_r + +### Include Run-time linker support. This must come after freebsd build +#rtld +## The rltd example +#examples/dyntest ### requires rtld + +### Stuff stolen from Linux +linux/dev +#linux/fs + +### Stuff stolen from NetBSD +#netbsd/fs + +### SVGA video library +#video/svgalib +### SVGA-related examples +#examples/x86/video_svga ### requires video/svgalib + +### X11 video library +#x11/client +#x11/video +### X11-related examples +#examples/x86/video_x11 ### requires x11/video + +### The zlib compression library +#zlib + +### The UDP library. More complete than fudp, but not totally complete. +#udp + +### The Utah testbed TMCP communication library and examples +#tmcp +#examples/tmcp + +### The NetDisk kernel. +## Requires the zlib compression library. +## Requires the udp library. +#netdisk + +### --- Scripts and build/debug utilities + +### Includes the CPU-oskit-gcc wrapper. +unsupported + + +### --- Additional stuff that must be at or near the end of the build + + +### Sets of example kernels +#examples/x86 +#examples/x86/extended +#examples/x86/threads + +### Building the example kernels as host-build binaries with unix-mode +### emulation. NOTE: These will only be built if you are compiling +### the OSKit with unixmode support (and on Linux or FreeBSD). +#examples/unix +#examples/unix/extended +#examples/unix/threads + +### The OSKit test infrastructure +#testsuite + +### The security server +#security +## security server example kernel +#examples/x86/security ### requires security + +### The Mad MPEG audio decoder library and example +#libmad +#libmad/minimad diff --git a/Mach/BuildingOskitMach/modules.x86.pc b/Mach/BuildingOskitMach/modules.x86.pc new file mode 100644 index 00000000..bb27aca3 --- /dev/null +++ b/Mach/BuildingOskitMach/modules.x86.pc @@ -0,0 +1,236 @@ +## +## OSKit Module configuration file. +## +## Comments are ignored, non-commented words should be +## OSKit directories to include in the build. +## +## Libraries are built in the order defined in this +## file. +## +## Specify this file with the --with-modulesfile=<x> +## option to configure. By default the file 'modules' +## in the OSKit source directory is used. +## + +### Always include this module (the header files) +oskit + +### The flask module must be compiled before +### most of the other modules. +### It is currently a required module. +flask + +### Builds the documentation (Utah only) +#doc + + +### --- Required components + +### The C Runtime (the magic that calls 'main') (required) +crt + +knit/c + +### Various bits of kernel magic (required) +kern + +### List Memory Manager (required) +lmm + +### The Client OS library (required) +clientos + + +### --- Boot Adaptors + +### Build the multiboot compliant boot adaptor +### Requires that ld support '-format binary' (checked) +boot/multiboot + +### Build the Linux boot adaptor +### Requires ld support '-oformat binary' (checked) +boot/linux + +### Build the MSDOS boot adaptor (??) +## Requires ld support '-oformat msdos' (checked) +#boot/dos + +### Build the BSD boot adaptor +### Requires some sort of a.out linker (checked) +#boot/bsd + +### The NetBoot Meta-kernel +boot/net + +### Build the PXE compliant boot loader +#boot/pxe + +### --- OSKit-on-UNIX support libraries. +unix + +### --- C Libraries + +### A minimal standard C library +libc + +### A much more complete standard C library +posix/sys + +### Thread-safe version of the previous +posix/sys_r + + +### --- Miscellaneous utility libraries + +### Address Map Manager +amm + +### Library for contacting a bootp server +bootp + +### Com IIDs library (required for most kernels) +com + +### For groking disk partitions +diskpart + +### Include the Dynamic Packet Filter library +#dpf/dpf + +### Exec library for loading linked executables +exec + +### Read-only access to a number of filesystems +fsread + +### Filesystem name parsing library +fsnamespace/fsn + +### Same as above, but multithread safe +fsnamespace/fsn_r + +### Fake UDP library (Only supports UDP send) +fudp + +### Include the Hierarchical Packet Fair Queueing module +#hpfq + +### The Memdebug library +memdebug + +### The memory file system +memfs + +### SMP support (believed to be broken) +smp +## the SMP example +examples/x86/smp ### requires smp + +### POSIX threads +threads + +### Simple Virtual Memory +svm + +### UVM +uvm/uvm + +### Simple Process Library +uvm/sproc +### the sproc example +examples/x86/sproc ### requires sproc + +### --- Startup Library + +### Simpler functions for initializing OSKit subsystems +### NOTE: this drags in almost every other library. +startup + + +### --- Devices, Networks and Filesystems + +### The device layer glue. Depends on lmm and kern +### Required for any kernel that uses OSKit devices. +dev + +### Realtime support. Needed for realtime threads and for GPROF. +realtime + +### Devices and code stolen from FreeBSD +freebsd/dev +#freebsd/net_flask +freebsd/net +freebsd/libm +freebsd/libc +freebsd/libc_r + +### Include Run-time linker support. This must come after freebsd build +#rtld +## The rltd example +#examples/dyntest ### requires rtld + +### Stuff stolen from Linux +linux/dev +linux/fs + +### Stuff stolen from NetBSD +netbsd/fs + +### SVGA video library +#video/svgalib +### SVGA-related examples +#examples/x86/video_svga ### requires video/svgalib + +### X11 video library +#x11/client +#x11/video +### X11-related examples +#examples/x86/video_x11 ### requires x11/video + +### The zlib compression library +#zlib + +### The UDP library. More complete than fudp, but not totally complete. +udp + +### The Utah testbed TMCP communication library and examples +#tmcp +#examples/tmcp + +### The NetDisk kernel. +## Requires the zlib compression library. +## Requires the udp library. +#netdisk + +### --- Scripts and build/debug utilities + +### Includes the CPU-oskit-gcc wrapper. +unsupported + + +### --- Additional stuff that must be at or near the end of the build + + +### Sets of example kernels +examples/x86 +examples/x86/extended +examples/x86/threads + +### Building the example kernels as host-build binaries with unix-mode +### emulation. NOTE: These will only be built if you are compiling +### the OSKit with unixmode support (and on Linux or FreeBSD). +examples/unix +examples/unix/extended +examples/unix/threads + +### The OSKit test infrastructure +testsuite + +### The security server +security +## security server example kernel +examples/x86/security ### requires security + +### The Mad MPEG audio decoder library and example +#libmad +#libmad/minimad diff --git a/Mach/OskitMach.mdwn b/Mach/OskitMach.mdwn new file mode 100644 index 00000000..c28f2d89 --- /dev/null +++ b/Mach/OskitMach.mdwn @@ -0,0 +1,64 @@ +[[toc ]] + +* [[OskitMachStatusList]]: Status and TODO list (<a href="http://packages.debian.org/gnumach" target="_top">deb status</a>) </li> +* [[OskitMachPatches]]: Bleeding edge patches </li> +* [[OskitPatches]]: Useful patches for the OSKit </li> +* [[BuildingOskitMach]]: How to build your own GNUmach kernel </li> +* [[RemoteDebugOskitMach]]: How to use gdb to remote debug the GNUmach kernel </li> + + +## <a name="About"> About </a> + +OSKit-Mach began as a branch of the GNUMach 1.2 kernel, but since the release of GNU Mach 1.3, OSKit-Mach has been merged as the new GNUMach 2.x mainline. The [[history]] page tells a more interesting story including other operating systems who use Mach in their kernels. + +GNU Mach 2.0 makes use of the drivers provided by [the OSKit](http://www.cs.utah.edu/flux/oskit/) from [the Flux Research Group](http://www.cs.utah.edu/flux/). The OSKit provided a neat driver base where both [[TWiki/FreeBSD]] and Linux (2.2.12) drivers are made available to [Mach](http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html) and thus the Hurd. However, OSKit isn't maintained anymore. + +## <a name="Status"> Status </a> + +The OSKit-Mach version of GNUmach is today (2005) more or less defunct. Nobody +is working on it. Few people ever got it running, and by now there are also +problems building with recent toolchains. Instead, the Hurd developers now +concentrate on completely different microkernels (Coyotos being the current +favourite), as well as on improving the original GNU Mach 1.x codebase. (See +also [[microkernel/mach/gnumach/projects]].) + +The [[mailing_lists]], or the [[IRC]] is, like always, the best source of more +current information. + +There also exist other efforts: + +* [OSKit and OSKit-Mach PPC Port](http://es.gnu.org/~jemarch/ppc-oskit/) - Maintained by [Jos� Marchesi](mailto:jemarch AT gnu DOT org) + +* [OSKit-Mach Alpha Port](http://savannah.gnu.org/projects/gnumach-alpha/). - This work has been integrated into the actual OSkit cvs tree at utah. + +## <a name="Building"> Building </a> + +First you need to get the latest OSKit release and, preferrably, the latest CVS version of GNUmach. Take a look at the following [tutorial](http://www.etherhogz.org/doc/oskit-mach.html) to get started. Or the locally kept version, [[BuildingOskitMach]]. + +## <a name="Starting"> Starting </a> + +You start Oskit-Mach almost the same way as the old 1.x version of GNUmach. Using [[Hurd/GrubNotes]] an entry can look like this: + + title GNUmach 1.90 (CVS) + root (hd0,1) + kernel /boot/oskit-mach.gz root=device:hd0s2 -- + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +_Remember_ to ensure that there are no trailing spaces after the backslashes on the lines above if you copy-paste this into your menu.list file. + +## <a name="Bugs"> Bugs </a> + +We have bugs, just like any other software product. To get around the more nasty ones you can apply the unofficial patches found on + +* [[OskitMachPatches]] + +## <a name="Debugging"> Debugging </a> + +See Igor Khavkine's, [i\_khavki@alcor.concordiaNOSPAM.ca](mailto:i_khavki@alcor.concordiaNOSPAM.ca), excellent help to [remote debug oskit-mach over a serial line](http://www.etherhogz.org/doc/oskit-boot.txt), or the local [[RemoteDebugOskitMach]]. + diff --git a/Mach/OskitMachPatches.mdwn b/Mach/OskitMachPatches.mdwn new file mode 100644 index 00000000..c1e1b068 --- /dev/null +++ b/Mach/OskitMachPatches.mdwn @@ -0,0 +1,10 @@ +## <a name="GNUmach2_oskit_mach_Patches"> </a> GNUmach2 (oskit-mach) Patches + +The following patches are here for your convenience only. They are probably not accepted yet and should thus only be used by people working on the bleeding edge of ... oh well, use at your own risk. :-) + +**_Daniel Wagner:_** + +* Fix GNUmach2 panic related to buggy softint handling [[ATTACHURLpatch-gnumach_softint-wagidiffgz]] +* Eliminate GNUmach2 assertion that triggers a bug [[ATTACHURLpatch-gnumach_assertion-wagidiffgz]] + +- [[Main/GrantBow]] - 03 Mar 2004 diff --git a/Mach/OskitMachPatches/patch-gnumach_softclock-wagi.diff.gz b/Mach/OskitMachPatches/patch-gnumach_softclock-wagi.diff.gz Binary files differnew file mode 100644 index 00000000..3d57b43a --- /dev/null +++ b/Mach/OskitMachPatches/patch-gnumach_softclock-wagi.diff.gz diff --git a/Mach/OskitMachPatches/patch-gnumach_softint-wagi.diff.gz b/Mach/OskitMachPatches/patch-gnumach_softint-wagi.diff.gz Binary files differnew file mode 100644 index 00000000..215706b3 --- /dev/null +++ b/Mach/OskitMachPatches/patch-gnumach_softint-wagi.diff.gz diff --git a/Mach/OskitMachStatusList.mdwn b/Mach/OskitMachStatusList.mdwn new file mode 100644 index 00000000..f62e0686 --- /dev/null +++ b/Mach/OskitMachStatusList.mdwn @@ -0,0 +1,15 @@ +**NOTE**: As of March 2006, nobody is using or working on OSKit-Mach. Consider below text for historic reference only. + +The only thing that is needed before we will switch to the OSKit-Mach variant of GNU Mach is the missing console: OSKit-Mach has no console in the kernel, so we need an implementation in user space. Marcus Brinkmann is writing a console implementation with a client-server design, Unicode support and lots of other goodies. The server is working, the ncurses client is working (which is useful for testing and results in something similar to screen) and the VGA client is the one missing component. A part of the code for it already exists; it will share some code with the ncurses client via a console-client library. After it works, some testing of OSKit-Mach will also be needed. + +-- [[Main/WolfgangJ]] - 24 Jul 2002 + +There was quite a bit of coding and testing in September as described in several [bug-hurd threads](http://mail.gnu.org/pipermail/bug-hurd/2002-September/thread.html). + +Unfortunately this work still needs to be ported from GNUmach 1.3 (commonly used today) to GNUmach 2.0 (a.k.a OSKit-Mach). + +-- [[Main/GrantBow]] - 07 Oct 2002 + +There should now exist a working console-client for [[OskitMach]] as well. + +-- [[Main/JoachimNilsson]] - 28 Nov 2002 diff --git a/Mach/OskitPatches.mdwn b/Mach/OskitPatches.mdwn new file mode 100644 index 00000000..d189bb6d --- /dev/null +++ b/Mach/OskitPatches.mdwn @@ -0,0 +1,67 @@ +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="Flux_OS_Toolkit"> Flux OS Toolkit </a> + +[The OSKit](http://www.cs.utah.edu/flux/oskit/) is a framework and a set of libraries for building and extending operating systems developed by [the Flux Project](http://www.cs.utah.edu/flux/). + +**_Note:_** All of these patches, and more, are now avilable directly through the [Savannah OSKit](http://savannah.gnu.org/projects/oskit/) project. This is also the recommended source today of the OSKit, especially if you want to use it with GNUmach2. + +## <a name="OSKit_2001_02_14"> </a> OSKit 2001-02-14 + +These are extra patches for people who, for some reason, use the 2001 version of the OSKit. + +* Patrick Tullman [[ATTACHURLpatch-oskit-097-tullmandiffgz]] + +* This patch is necessary to get the `--enable-indirect-osenv` flag to the configure script. The flag is enabled by default for OSKit 2002-03-17 and later. Kevin Kraemer [[ATTACHURLpatch-oskit-097-kkraemerdiffgz]] + +## <a name="OSKit_2002_03_17"> </a> OSKit 2002-03-17 + +**_Critical Patches:_** + +Here are the patches critical to get [[OskitMach]] running. These are absolutely essential to get a working Mach kernel. Many of these patches are included with the Debian distribution of the OSKit. + +* Igor Khavkine [[ATTACHURLpatch-oskit-097-i_khavkidiffgz]] + +* Famous removal of only one line in sbrk-hack.c - needed for people with newer libc's (e.g. Debian Woody) [[ATTACHURLpatch-oskit-097-sbrk_hackdiffgz]] + +* Jonathan S. Arney - Important patch to diskpart library. Without it you cannot activate swap in oskit-mach. [[ATTACHURLpatch-oskit-097-jon_arneydiffgz]] + +* Richard Kreuter's [patches](http://anduril.rutgers.edu/richard/oskit/) ([announcement](ftp://flux.cs.utah.edu/flux/oskit/mail/html/oskit-users/msg01560.html)). Needed when your Hurd partition is embedded inside an extended partition created by Windows. The patches also include: + * support for extended partitions with lba + * support for 16-entry BSD disklabels, as are supported by recent Net- and [[TWiki/FreeBSD]] kernels. + * support for the recognition of NetBSD's slice id (169) in the BIOS partition table. + +**_Cosmetic Patches:_** + +* Kevin Kraemer - Removes annoying debug output from eepro.c driver. [[ATTACHURLpatch-oskit-097-eeprodiffgz]] + +* Ognyan Kulev - Reduce warnings when compiling with GCC 3.2. <http://debian.fmi.uni-sofia.bg/~ogi/hurd/oskit/> + +**_New Functionality:_** + +* [Roland McGrath](http://www.frob.com/) - [i8042 support](http://mail.gnu.org/archive/html/bug-hurd/2002-10/msg00146.html). Thread continues at <http://mail.gnu.org/archive/html/bug-hurd/2002-11/msg00110.html> + +* Daniel Wagner - PCMCIA support. <http://www.vis.ethz.ch/~wagi/hurd/oskit/> ([instructions](http://www.vis.ethz.ch/~wagi/hurd/oskit/readme.txt)) + +* [[Main/JoachimNilsson]] - See [[Hurd/JoachimNilssonHurdPage]] + * Upgrade to Linux 2.2.22 drivers + * More Linux NIC drivers + * **_Soon:_** ATA-100 patches (α-release available) + +* [[Main/DerekDavies]] - [OSKit Entropy patch](http://www.ddavies.net/oskit-entropy/). A Linux entropy driver, see [bug-hurd posting](http://mail.gnu.org/archive/html/bug-hurd/2003-01/msg00000.html) for more information. + +---- + +## <a name="Comments"> Comments </a> + +Divided this growing topic into sections. <br /> -- [[Main/JoachimNilsson]] 19 Nov 2002 + +Updates by [[Main/OgnyanKulev]] -- 19 Nov 2002 + +All small patches are as attachments now. -- [[Main/OgnyanKulev]] - 16 Dec 2002 + +Minor updates, also, added Davids Entropy patch -- [[Main/JoachimNilsson]] - 03 Jan 2003 + +Fixed some gnu mail links -- [[Main/MattGrant]] - 26 Feb 2003 diff --git a/Mach/OskitPatches/patch-oskit-0.97-eepro.diff.gz b/Mach/OskitPatches/patch-oskit-0.97-eepro.diff.gz Binary files differnew file mode 100644 index 00000000..80d94f3f --- /dev/null +++ b/Mach/OskitPatches/patch-oskit-0.97-eepro.diff.gz diff --git a/Mach/OskitPatches/patch-oskit-0.97-i_khavki.diff.gz b/Mach/OskitPatches/patch-oskit-0.97-i_khavki.diff.gz Binary files differnew file mode 100644 index 00000000..2e322de9 --- /dev/null +++ b/Mach/OskitPatches/patch-oskit-0.97-i_khavki.diff.gz diff --git a/Mach/OskitPatches/patch-oskit-0.97-jon_arney.diff.gz b/Mach/OskitPatches/patch-oskit-0.97-jon_arney.diff.gz Binary files differnew file mode 100644 index 00000000..aaf1475a --- /dev/null +++ b/Mach/OskitPatches/patch-oskit-0.97-jon_arney.diff.gz diff --git a/Mach/OskitPatches/patch-oskit-0.97-kkraemer.diff.gz b/Mach/OskitPatches/patch-oskit-0.97-kkraemer.diff.gz Binary files differnew file mode 100644 index 00000000..7d75a34e --- /dev/null +++ b/Mach/OskitPatches/patch-oskit-0.97-kkraemer.diff.gz diff --git a/Mach/OskitPatches/patch-oskit-0.97-sbrk_hack.diff.gz b/Mach/OskitPatches/patch-oskit-0.97-sbrk_hack.diff.gz Binary files differnew file mode 100644 index 00000000..2fef6632 --- /dev/null +++ b/Mach/OskitPatches/patch-oskit-0.97-sbrk_hack.diff.gz diff --git a/Mach/PortToL4.mdwn b/Mach/PortToL4.mdwn new file mode 100644 index 00000000..fb7f0004 --- /dev/null +++ b/Mach/PortToL4.mdwn @@ -0,0 +1,42 @@ +**_The Hurd-L4 port has an [official page](http://www.gnu.org/software/hurd/hurd-l4.html) with more up-to-date information_** -- [[Main/OgnyanKulev]] - 05 Feb 2005 + +A group of one being led by Neal H. Walfield is working on porting the Hurd to the pistachio version of the L4 microkernel. This second generation microkernel provides a significantly different API than the one offered by the Mach microkernel, a first generation microkernel. One of the primary goals of the project, outside of porting the Hurd to L4, is to reevaluate the current Hurd abstractions and consider how they can be modified to be more general. + +I have no web page describing my efforts. There is a mailing list[1]. + +[1] <http://mail.gnu.org/mailman/listinfo/l4-hurd> + +-- Neal Walfield, 18 Sep 2002 + +Neal noted [1] that there are licensing issues being worked out so no code is yet released. His work was performed in the summer of 2002 at Karlsruhe. + +[1] <http://mail.gnu.org/pipermail/l4-hurd/2002-September/000673.html> + +-- [[Main/GrantBow]] - 21 Sep 2002 + +There are several important pages that are of interest for the L4 & hurd communities. + +* Main L4 home page - <http://www.l4ka.org/> +* Hurd on L4 - <http://www.freesoftware.fsf.org/l4hurd/> +* Hurd on L4 - <http://savannah.gnu.org/projects/l4hurd/> +* <http://www.informatik.uni-freiburg.de/~ganter/comp/l4-hurd.html> + +-- [[Main/GrantBow]] - 22 May 2002 + +<http://os.inf.tu-dresden.de/fiasco/> + +-- [[Main/GrantBow]] - 24 Oct 2002 + +There was [discussion in October 2002](http://mail.gnu.org/pipermail/l4-hurd/2002-October/000727.html) about the differences between Hurd on Mach and Hurd on L4 with some interesting URLs. In the thread Okuji [responds](http://mail.gnu.org/pipermail/l4-hurd/2002-October/000728.html) confirming his document is two years old and outdated by the directions that Neal is taking in furthering this effort. The URLs in that email might be helpful to those learning more about Hurd and L4 ideas that were considered yet abandoned. + +-- [[Main/GrantBow]] - 04 Jan 2003 + +A "Porting GNU Hurd to L4" website: + +* <http://www.gnu.org/software/hurd/l4-hurd.html> + +-- [[Main/SebastianGabriel]] - 29 Sep 2003 + +The only valid L4-Hurd link on <http://hurd.gnu.org> is <http://www.freesoftware.fsf.org/l4hurd/> + +-- [[Main/JoachimNilsson]] - 29 Sep 2003 diff --git a/Mach/PosixSemaphores.mdwn b/Mach/PosixSemaphores.mdwn new file mode 100644 index 00000000..be5586bd --- /dev/null +++ b/Mach/PosixSemaphores.mdwn @@ -0,0 +1,13 @@ +Posix Semaphores are an optional part of pthreads. There is currently an implementation for Neal Walfields libpthread, which is included in the hurd sources tree. This implemention uses a mutex and a condition variable. The implmentation is in the mailing list archives at [ [http://mail.gnu.org/archive/html/bug-hurd/2002-11/msg00316.html](http://mail.gnu.org/archive/html/bug-hurd/2002-11/msg00316.html</a>)](http://mail.gnu.org/archive/html/bug-hurd/2002-11/msg00316.html). + +Neal does not want to use this implementation because it adds the overhead of a condition variable. The condition variable imposes the following penalties: 1 extra spinlock/unlock 1 an extra call to a pthread cleanup function. + +The first penalty has virtually no cost because we know that we will never spin trying to get this spin lock because we already have a mutex lock outside the condition variable serializing accesses to the condition variable. + +The second may be more of a performance penalty, but it saves reimplmenting the code in pt-cond-signal.c pt-cond-wait.c, and pthread-timedwait.c . + +-- [[Main/JamesAMorrison]] - 19 Jan 2003 + +Moved page to Mach web. + +-- [[Main/GrantBow]] - 21 Jan 2003 diff --git a/Mach/RemoteDebugOskitMach.mdwn b/Mach/RemoteDebugOskitMach.mdwn new file mode 100644 index 00000000..c260ce25 --- /dev/null +++ b/Mach/RemoteDebugOskitMach.mdwn @@ -0,0 +1,195 @@ +# <a name="Remote_Debug_GNUmach"> </a> Remote Debug GNUmach + +# <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +# <a name="Booting_oskit_mach_with_a_serial"> Booting oskit-mach with a serial console </a> + +**Original Author:** Igor Khavkine **Last Updated:** Mon Jul 30 17:58:55 EDT 2001 + +---- + +## <a name="Introduction"> Introduction </a> + +This document now has a wider audience. The OSKit branch of GNUmach has been merged with the main branch, HEAD. Please note that the instructions here are not tested with the latest stable release, GNUmach 1.3. + +Here you will find out how to access, build, bootstrap and debug the latest CVS version of the GNUmach kernel (the OSKit based 2.x series of GNUmach). + +## <a name="Why_"> Why? </a> + +Because it's covenient. If you have a second computer, but not a second monitor or keyboard, you can connect your second box to your main one using null-modem serial cables. Once that is done, you can configure the GRUB bootloader to use the serial port when starting up and boot [GNUmach](http://savannah.gnu.org/cgi-bin/viewcvs/hurd/gnumach/?only_with_tag=HEAD) (a.k.a [[OskitMach]]) without having to switch monitor cables or type blindly at a second keyboard. + +Also, [[OskitMach]] supports the GDB remote debugging protocol over a serial line. This way it is now possible to debug the running kernel relatively unobtrusively, because the debugger will not be running on the same machine. + +## <a name="How_"> How? </a> + +First you need some equipment: two computers, each one should have at least one (two is preferable) free serial port(s) and one (or two) null-modem serial cable(s). + +While developing the kernel it might also be a good idea to use grub to get the Mach kernel via tftp from the same server you do the remote debugging and building on. This way you don't need to reboot the target to copy or build a new kernel on its hard drive. See the [[AdvancedGrubUsage]] document for more information on this. + +Last you need to follow the instructions given below. + +1. The first step is to the get source for oskit-mach and OSKit. + Currently the [St. Patrick's day release](ftp://flux.cs.utah.edu/flux/oskit/oskit-20020317.tar.gz), 2002-03-17, of the OSKit is the latest. Get the sources and compile them yourself, compile OSKit with debugging symbols if that is what you need. If you encounter errors while compiling, try removing anything that has to do with `unix` or `examples` from the file `modules.x86.pc`. + Then you need to get the sources for oskit-mach version of the GNU Mach kernel, available from the GNU CVS repository[3]. Previously you needed to check out the `gnumach` module with the flag `-roskit-branch`. Today the 2.0 branch of GNU Mach resides on the HEAD branch, so you don't have to provide any specifc branch information to get the correct version. Use the update command with `-rHEAD` to move from the oskit-branch to the HEAD branch. + Again now is your chance to compile oskit-mach with debugging symbols. + (More detailed instructions can be found in [[BuildingOskitMach]].) +2. Now you need to setup GRUB on your second box so it accepts input from a serial port while booting up. This is simple to do by adding the following lines to your `menu.lst` file, before any of the menu entries: + serial --unit=0 --speed=9600 + terminal serial + Unit refers to the serial port you wish to use (0 is COM1), and speed is optional. For more information see the GRUB documentation. +3. You need to make sure that your main box has the necessary utilities to communicate with your second box over a serial line. You can use a terminal emulator like _minicom_(1), _seyon_(1), _tip_(1), or a simple serial communication program _cu_(1) which comes with the GNU uucp package. Or if you feel really lazy you can use this hack: + stty raw + cat > /dev/ttyS1 # in one terminal window + cat /dev/ttyS1 # in a second terminal window +4. Now you have to make sure your computer has an at least partially setup Hurd partition. You can find instructions how to do that here [4,5]. Copy the oskit-mach kernel binary compressed with gzip to `/boot/oskit-mach.gz` and use the following command line[1] to boot it from GRUB: + kernel /boot/oskit-mach.gz -h CONS_COM=1 -d GDB_COM=2 BAUD=9600 root=device:hd0s2 -- +<dl> + <p> + </p> + <dt><tt>-h</tt></dt> + <dd>use serial console:<ul> + <li><tt>CONS_COM=1</tt> (COM1)</li> + <li><tt>CONS_COM=2</tt> (COM2)</li> + <li><tt>CONS_COM=3</tt> (COM3)</li> + <li><tt>CONS_COM=4</tt> (COM4)</li> + </ul> + </dd> + <p> + </p> + <dt><tt>-d</tt></dt> + <dd>enable serial port debugging, optional</dd> + <p> + </p> + <dt><tt>GDB_COM=2</tt></dt> + <dd>use a different port other then <tt>CONS_COM</tt>, default is to use the same as <tt>CONS_COM</tt></dd> + <p> + </p> + <dt><tt>BAUD=9600</tt></dt> + <dd>use this baud rate, optional, default is 9600</dd> + <p> + </p> + <dt><tt>--</tt></dt> + <dd>delimits the arguments passed to the oskit from those to the kernel</dd> + <p> + </p> + <dt><tt>root=device:hd0s2</tt></dt> + <dd>tell gnumach which is your root partition, in this case it's <tt>hd0s2</tt></dd> + <p> + </p> +</dl> +5. Now I suggest that you familiarize yourself with [the GDB documentation](http://vmlinux.org/doc/gdb/), especially on remote debugging. If you pass the `-d` boot flag to oskit-mach, then it will automatically insert a breakpoint at main() and wait for further instructions from GDB over the serial line. Here's a simple example of how to attach GDB to a remote target over a serial line: + $ script # record the debugging session + $ gdb # assume you're in the oskit-mach build dir. + (gdb) file kernel + (gdb) set remotebaud 9600 + (gdb) target remote /dev/ttyS1 + [...gdb attached, blah, blah, blah...] + (gdb) break panic + (gdb) continue + (gdb) continue + [...] + (gdb) quit + $ ^D # finish recording the session + This way you can catch any kernel panics (except for the really nasty ones and try to debug them). + I've noticed that once Mach is running under GDB, pressing C-c from GDB will not suspend it, this makes it hard to set additional breakpoints after the kernel is running. So optionally you can modify Mach to add a dummy system call that will be used only for setting breakpoints, and make a small program that calls it, you can use it whenever you want to pause the kernel and examine something under GDB. An example of how to do this is attached in Appendix A. + +TODO: OSKit overrides interrupts 1 and 3 in kern/x86/gate\_init.c:gate\_init. A patch that skips src->vector `= 1 || =` 3 have to be prepared and attached to this page. More robust solution is to make OSKit/GNUMach recognize when it's debugged and change vector table accordingly. + +Now you're all set to do some serious kernel hacking. I hope more people will take advantage of this opportunity. + +## <a name="Appendix_A"> Appendix A </a> + +TODO: Move inline diff and code into 2 attached files: one for patching GNU Mach, and one for gdb-break.c. + +Apply this patch to oskit-mach to add a dummy system call: + + --- gdb-stub.diff --- + Index: kern/syscall_sw.c + =================================================================== + RCS file: /cvs/gnumach/kern/syscall_sw.c,v + retrieving revision 1.1.1.1.2.2 + diff -u -r1.1.1.1.2.2 syscall_sw.c + --- kern/syscall_sw.c 2001/04/05 06:52:47 1.1.1.1.2.2 + +++ kern/syscall_sw.c 2001/07/30 21:45:14 + @@ -98,6 +98,8 @@ + extern kern_return_t syscall_fipc_recv(); + #endif /* FIPC */ + + +/*XXX*/extern kern_return_t gdb_break_stub (); + + + mach_trap_t mach_trap_table[] = { + MACH_TRAP(kern_invalid, 0), /* 0 */ /* Unix */ + MACH_TRAP(kern_invalid, 0), /* 1 */ /* Unix */ + @@ -283,7 +285,14 @@ + MACH_TRAP(kern_invalid, 0), /* 126 */ + MACH_TRAP(kern_invalid, 0), /* 127 */ + MACH_TRAP(kern_invalid, 0), /* 128 */ + - MACH_TRAP(kern_invalid, 0), /* 129 */ + + MACH_TRAP(gdb_break_stub, 1), /* 129 */ + }; + + +volatile int gdb_break_stub (void *addr) /*XXX*/ + +{ + + void *dummy; + + dummy = addr; + + return 0; + +} + + + int mach_trap_count = (sizeof(mach_trap_table) / sizeof(mach_trap_table[0])); + --- end --- + +When starting an oskit-mach debug session with GDB set a break point at `gdb_break_stub`. Then use this program to invoke the system call when desired: + + --- gdb-break.c --- + /* Compile with: gcc -o gdb-break gdb-break.c gdb-break-stub.S */ + + #include <mach.h> + + #include <stdio.h> + #include <string.h> + + extern int gdb_break_stub (void *addr); + + int main () + { + kern_return_t err; + + err = gdb_break_stub (&main); + printf ("result from syscall: %s\n", strerror(err)); + + return 0; + } + --- end --- + --- gdb-break-stub.S --- + #include <mach/syscall_sw.h> + + kernel_trap(gdb_break_stub,-129,1) + --- end --- + +## <a name="References"> References </a> + +* [1] OSKit documentation, section 1.6.3. +* [2] <http://www.cs.utah.edu/flux/oskit/> +* [3] <http://www.gnu.org/software/devel.html> +* [4] <http://www.walfield.org/papers/hurd-installation-guide/> +* [5] <http://www.pick.ucam.org/~mcv21/hurd.html> + + vim:ts=8:tw=72:sw=8: + +---- + +This HowTo is (C) Copyright 2001 Igor Khavkine. + +Minor additions and grammatical fixups by [[JoachimNilsson]]. + +-- [[Main/JoachimNilsson]] - 14 May 2002 + +Additions on booting GNU Mach via TFTP + +-- [[Main/JoachimNilsson]] - 13 Jun 2002 + +Text formatting. + +-- [[Main/OgnyanKulev]] - 16 Dec 2002 diff --git a/abac.mdwn b/abac.mdwn new file mode 100644 index 00000000..a260a986 --- /dev/null +++ b/abac.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +ABAC stands for authorization-based access control. +In this model, access is not granted based on the +identity of the caller but by an authorizing agent +that delegates access to a particular resource. +Such authorization is then encapsulated in +[[capabilities|capability]] allowing them to be freely [[delegated|delegation]]. + +See also [[IBAC]]. diff --git a/about_the_twiki_to_ikiwiki_conversion.mdwn b/about_the_twiki_to_ikiwiki_conversion.mdwn new file mode 100644 index 00000000..8c556261 --- /dev/null +++ b/about_the_twiki_to_ikiwiki_conversion.mdwn @@ -0,0 +1,107 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# Some Quick Notes About the *TWiki to ikiwiki* Conversion + +/!\ Incomplete. + +I saw a *moin2iki* program bundle being announced from +<http://ikiwiki.info/index/discussion/#index2h1>. + + <tschwinge> JoshTriplett: On http://ikiwiki.info/users/joshtriplett.html + you write about a TWiki to ikiwiki conversion script. Is that already + available somewhere? + <JoshTriplett> tschwinge: Yes, you can get it in its current state at + git://svcs.cs.pdx.edu/git/moin2iki.git + <JoshTriplett> tschwinge: That repo has scripts for converting from Moin + and TWiki to ikiwiki. + <JoshTriplett> tschwinge: Work in progress. + <JoshTriplett> tschwinge: For a purely TWiki setup, it should work fine. + <JoshTriplett> tschwinge: You need a number of depenencies, though, and we + haven't documented them well yet. + <tschwinge> JoshTriplett: Thanks, I'll have a look and report back (in some + days, I hope). + <JoshTriplett> tschwinge: In particular, you need HTML::WikiConverter with + our 12 ikiwiki-related patches. + <JoshTriplett> tschwinge: + http://rt.cpan.org/Public/Bug/Display.html?id=24446 + +As I had difficulties with extracting the patches from the cpan site, they were +also made available by the authors at +<http://svcs.cs.pdx.edu/~jamey/wikiconverter/>. + +The Debian package *libhtml-wikiconverter-perl* is too old at least until +[[debbug 419918]] is closed. + +For converting from rcs files (as used by TWiki) to a git repository you'll +need to get `git clone git://people.freedesktop.org/~keithp/parsecvs` and build +it. Or don't do that and install the Debian *git-cvs* package instead; see +below. + +Here is the command line I used (line breaks added for readability) to create +an *Authors* file from the TWiki files, suitable for *parsecvs* or +*git-cvsimport* to use: + + $ sort < data/Main/TWikiUsers.txt | uniq | ↩ + while read s n r; do ↩ + ( [ "$s" != \* ] || expr "$r" : .\*\< > /dev/null) && continue; ↩ + echo "$n"="$(recode Latin1..UTF-8 < data/Main/"$n".txt | ↩ + awk -v name="$n" 'BEGIN { FS = ": "; email = "web-hurd@gnu.org" } ↩ + { sub("\r$", "") } $1 ~ /\* Name$/ { name = $2 } ↩ + $1 ~ /\* Email$/ { email = $2 } ↩ + END { print name " <" email ">" }')"; ↩ + done | tee Authors + +The old TWiki installation had managed to corrupt one of its own rcs files, +which both *parsecvs* and *git-cvsimport* stumbled on. As that file was not +essential for me, I simply deleted it. + +The final output (after the TWiki markup to Markdown markup conversion) was +expected to pour out *.mdwn* files. However the original TWiki files are named +*.txt*. As the *git-map* step as yet (would this be possible at all?) has no +way to rename the files while converting, I simply adapted the input files' +names to what was expected: I ran a the following command to rename the +*.txt,v* files to *.mdwn,v* files before running *git-cvsimport*: + + $ find ./ | grep \\.txt,v | while read f; do ↩ + mv -vi "$f" "$(expr "$f" : \\\(.\*\\\)\\.txt,v)".mdwn,v; done + +Instead of using *parsecvs* (which finally even choked on the valid rcs input +files) I eventually ended up successfully converting the old TWiki with +*git-cvsimport*: + + $ git-cvsimport -v -d "`pwd`"/../hurd-wiki/ -z 0 -a -A ../Authors data + [...] + Committed patch 4698 (origin +0000 2007-04-13 17:40:08) + Commit ID c33d05d0274d0d602fba835805abb9ba413c65c6 + Generating pack... + Done counting 18576 objects. + Deltifying 18576 objects... + 100% (18576/18576) done + Writing 18576 objects... + 100% (18576/18576) done + Total 18576 (delta 12567), reused 16106 (delta 10886) + Pack pack-d38e3d55705f5d355f669aaa7d993420b50798d0 created. + Removing unused objects 100%... + Done. + DONE; creating master branch + +The only thing I had to do to make the conglomerate of rcs files a *valid* cvs +repository (read: to satisfy *git-cvsimport*'s needs) was a `mkdir +../hurd-wiki/CVSROOT`. + +Then let's convert the whole git tree from TWiki syntax to Markdown: + + $ TWIKI="`pwd`"/../hurd-wiki tw_2001-12-01_2iki "`pwd`"/.git + [...] + +After that I repeated -- in a separate directory!, they can be merged later -- +the same last steps again, replacing *data* with *pub*, which contains the data +files that had been attached to the wiki pages (like images, for example). diff --git a/asbestos.mdwn b/asbestos.mdwn new file mode 100644 index 00000000..65ab391e --- /dev/null +++ b/asbestos.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Asbestos is an operating system developed at MIT, Stanford +and UCLA to explore information flow control policies. The motivation +behind Asbestos is that typical access control systems are concerned +with the release of information, however, once that information is +released, the [[principal]] that released that information has no way to +control it. The problem is that a program might want to make use of +a service another program provides but not want to release the +information to it. To work around this, the OS provides the ability +to taint data. The taint is automatically applied to any derived +information. To propagate information outside of the machine, the +releaser must first untaint the information. This can only be done +with the original principal's authorization. + +Asbestos is described in Efstathopoulos et al.'s 2005 paper [Labels and +Event Processes in the Asbestos Operating System](http://pdos.csail.mit.edu/papers/asbestos-sosp05.pdf). diff --git a/binutils.mdwn b/binutils.mdwn new file mode 100644 index 00000000..3e9e5889 --- /dev/null +++ b/binutils.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The [GNU Binutils](http://www.gnu.org/software/binutils/). diff --git a/capability.mdwn b/capability.mdwn new file mode 100644 index 00000000..2d4d2ce8 --- /dev/null +++ b/capability.mdwn @@ -0,0 +1,33 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +A capability is a protected reference. It is a reference in that +it designates an object; it is protected in that in cannot be +forged. A capabilities both designates the object it refers to and +carries the authority to manipulate it. + +By binding [[designation]] and [[authorization]] together, capabilities +simplify [[delegation]]. Imagine that program instance A wants to +tell program B to use a particular file to store some data. +Further imagine that A and B are running in different [[trust_domains]] +(e.g., with different UIDs). If A sends B just the name +of the file, B needs to first ensure that he does not accidentally +enable A to access the file on his own authority. That is, B wants +to protect against A hijacking his authority. (This problem is +refused to the [[confused_deputy]] problem.) Also, since A likely +sent a string to identify the file to B, the identifier lacks a +[[naming_context]] and therefore may resolve to a different object +than A intended. Be ensuring that [[designation]] and [[authorization]] are +always bound together, these problems are avoided. + +[[Unix]] file descriptors can be viewed as capabilities. Unix file +descriptors do not survive reboot, that is, they are not +[[persistent|persistency]]. To work around this, [[ACL]]s are used to +recover authority. diff --git a/community.mdwn b/community.mdwn new file mode 100644 index 00000000..68d2c3d1 --- /dev/null +++ b/community.mdwn @@ -0,0 +1,53 @@ +[[meta copyright="Copyright © 2002, 2003, 2005, 2007, 2008 +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]]."]]"""]] + +There is an expanding community of people developing and running test Debian +GNU/Hurd machines. + +[[Communication]] -- How communication and coordination works within the group. + +Further ways of getting in contact or getting information: + +[[Shared-Wiki-Weblog|Weblogs]] -- A shared weblog by Hurd developers and enthusiasts. + +[[Meetings]] -- Meetings with Hurd developer attendance. + +[[GSoC]] -- Participation in Google Summer of Code (2008) + +[[Hurd/WhoRunsGNU]] + +[[Hurd/HurdDevelopers]] -- Who's who? + +[Hurd User's Guide](http://www.gnu.org/software/hurd/users-guide/using_gnuhurd.html). + +[[LiveJournal]] + +[[Orkut]] + +[[FaceBook]] + +[Advogato.org -- Hurd Project page](http://advogato.org/proj/HURD/) + +--- + +# Hurd User Groups + +* [[THUG]] - Toronto (GNU/)Hurd User Group +* [[CHUG]] - California Hurd User Group +* [[DHUG]] - Dunedin (GNU/)Hurd User Group +* [[HurdBr]] - Hurd Br is a brasilian, portuguese speaking, HUG +* [HurdEs](http://hurd.es.gnu.org/) +* [Hurdfr.org](http://www.hurdfr.org/) +* [HurdIn] +* [HurdIt](http://hurd-it.sf.net/) +* [HurdPl](http://hurd.pl/forum/) +* [HurdUk](http://uwhug.org.uk/) +* [HurdUs](http://hurd.gnufans.org/) diff --git a/community/02may08minutes.mdwn b/community/02may08minutes.mdwn new file mode 100644 index 00000000..9c99a8e7 --- /dev/null +++ b/community/02may08minutes.mdwn @@ -0,0 +1,39 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +- madrazr wanted a wiki to keep track of progress. antrik suggested: + http://www.bddebian.com/~wiki/community/gsoc/ and that everyone use + that to keep track of their progress. bddebian was poked about git + accounts on flubber.bddebian.com + +- antrik/youpi talked about the mailing lists. + Debian GNU/Hurd (installer, etc): http://lists.debian.org/debian-hurd + bug-hurd, etc + +- Don't be afraid to post to the lists. There's no need to send the + post for review first. Generally people on the list are the same as + people on IRC + +- various docs links were posted: + http://angg.twu.net/the_hurd_links.html + http://www.gnu.org/software/hurd/docs.html + +- youpi posted a survey of some of the reasons why packages don't work + on Hurd: http://lists.debian.org/debian-hurd/2007/07/msg00000.html + and http://lists.debian.org/debian-hurd/2007/07/msg00001.html + +- andrei posted + http://web.cecs.pdx.edu/~trent/gnu/hurd/hurd-talk.tar.gz an archive + of hurd-folks + +- antrik is happy with communication in general + +- wiki pages for each of the projects should be created sometime this + week diff --git a/community/16may08minutes.mdwn b/community/16may08minutes.mdwn new file mode 100644 index 00000000..8adb838c --- /dev/null +++ b/community/16may08minutes.mdwn @@ -0,0 +1,21 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +* **madrazr** said that web commits for the wiki stall forever (more than half an hour); the reason is unknown. **antrik** said that it is not much of a problem if the problems with git access are solved. + +* It was explained that the wiki server is not a very fast machine, which runs Hurd, hence the delay. + +* Everybody agreed on the fact that there is much school/university work to do, since it's the end of the term now; students have little time to work on their projects. + +* The idea to use git and github for the projects was suggested. + +* **antrik** remarked that the summer session starts pretty soon and that it is time to tackle open design questions and decide where to start actual coding. The task to do that was assigned as a homework till the next meeting. + +* the official GSoC students talked about the start of program gift by Google. diff --git a/community/25april08minutes.mdwn b/community/25april08minutes.mdwn new file mode 100644 index 00000000..3f2c0313 --- /dev/null +++ b/community/25april08minutes.mdwn @@ -0,0 +1,61 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +- People agreed that some small projects should be done to during the bonding + period: ideas that floated around were fixing some of the build failures or + looking at the new debian installer. + http://unstable.buildd.net/buildd/hurd-i386_Failed.html + http://unstable.buildd.net/index-hurd-i386.html + For some context: + http://dept-info.labri.fr/~thibault/tmp/graph-radial.ps + Don't pick something that looks too critical, it'll probably be too hard + +- Antrik was ok with not having a formal weekly report as long as the + repositories are growing and the students are around + +- Discussion about scms. It's ok to have your own, you'll get you own branch, + just make sure to make your own repository public. There was some talk about + not checking in one huge commit at the end + +- Copyright assignments to the FSF are required for most of hurd and other gnu + projects. http://lists.gnu.org/archive/html/bug-hurd/2008-03/msg00175.html + is your friend. Fill it out 3 times: Mach, Hurd, glibc. It's ok if you're + not planning on working on all of these. Email to fsf-records@gnu.org + +- Non-SoC students were offered some compensation for doing their projects + anyway. They were far more interested in the fact that they would be doing + worthwhile work than financial compensation + +- It was agreed that regular meetings would be a good idea. Once a + week, especially in the bonding period. + +- In general it was agreed that conversations shouldn't stay between just + mentors and their students, that it's better to keep everything out in the + open + +- Non-SoC students were assigned mentors, though it was agreed that they would + be mostly a primary contact and that most conversations should be kept + public + +- Discussion turned back to the meetings, the usual back and forth about the + timeslot. Fridays at 19 UTC was decided as the meeting time. + +- It was suggested that students look into writing documentation/guides for + hurd, for example cross-compiling hurd on gentoo, as a way to get more + familliar. + +- Andrei will set up a google calendar for organizing meetings. + +- Antrik noted that IRC is good for quick questions but serious ones should go + to the mailing list to get everyone involved. + +And so the first meeting was concluded. + + diff --git a/community/chug.mdwn b/community/chug.mdwn new file mode 100644 index 00000000..173d0125 --- /dev/null +++ b/community/chug.mdwn @@ -0,0 +1,3 @@ +Mail me if you are interested! + +-- [[Main/GrantBow]] - 11 Oct 2002 diff --git a/community/communication.mdwn b/community/communication.mdwn new file mode 100644 index 00000000..d2eccceb --- /dev/null +++ b/community/communication.mdwn @@ -0,0 +1,40 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +The GNU Hurd community comprises of a crowd of people living in different areas +of the whole world. For that, having regular working-[[meetings]] -- usually +one of the more productive ways of coordination works -- is not easily +possible. + +The two key resources most often used for communication are the Debian and GNU +[[mailing_lists]], as well as [[IRC]]. + +These are measures of communication that work (compared to, e.g., a one-to-one +telephone call) one-to-many. It is important to not send email only to a +single person, but in a way that several people can see your questions and +reasonings. (There are exceptions, of course. Administrative stuff usually +need not be discussed in public.) It often happens that -- if you send email +only to a single developer -- someone is unavailable for some days and can't +answer to your email, but another person could easily have done so. Also, when +discussing matters in public, others can learn from it (while reading, or +eventually even taking part in the discussions), transform the results into +real documentation, etc. Efficient using of scarce resources. Start +discussions on public mailing lists/public IRC channels instead of sending +discussing with single developers. And always use *reply to all* instead of +*reply* when answering to email. + +If you're interested in keeping up with current events and taking part in +discussions, you'll want to join the [[mailing_lists/bug-hurd]] mailing list or +have a look at its [archives](http://lists.gnu.org/archive/html/bug-hurd/). + +Even if you're a beginner (we've also been, and some of us even still +remember), don't hesitate to make the first move and make active use of these +resources. But -- of course -- please try to adhere to the conventions as +described on the [[mailing_lists]] and [[IRC]] pages. diff --git a/community/da.mdwn b/community/da.mdwn new file mode 100644 index 00000000..e15aade1 --- /dev/null +++ b/community/da.mdwn @@ -0,0 +1,110 @@ +# Zheng Da + +Email: zhengda1936 at gmail dot com + +Project: Network virtualization for subhurds etc. + +The [code](http://www.assembla.com/spaces/VNetHurd/trac_subversion_tool). + +The [[howto]] shows the instructions of setting up the virtual network in hurd and subhurd. + +--- + +## The design and the implementation + +### The requirements: +* to implement a mechanism which help pfinet servers communicate with each other. For example, if pfinet 1 has IP A and pfinet 2 has IP B, the packet sent by pfinet 1 with destination address IP B should be received by pfinet 2. +* Sub-hurd should be able to use this mechanism to communicate with each other. +* Meanwhile this mechanism should allow non-privileged the user to start his own pfinet. + + +### The possible approach is to use the multiplexer and the filter. +The multiplexer's roles are: + +1. to create some virtual network interface, so pfinet can send packets to it. +2. to receive the packet from pfinet, and forward the packet to other pfinets in hurd +3. or forward the packet to the real network device in the kernel and send it to the network. + +A filter translator is needed to enforce the policies between the interface and the pfinet server. For example, the filter can control which packets can be delivered to the pfinet server, and which packets can be sent to the network interface. The filter can also guard the network traffic and drop illegal packets (forged by some malicious users) from pfinet or some other programs. + + +### To create a virtual network interface: +* Implement the RPC interface defined in device.defs. +* The multiplexer works as a translator and other programs can get the port to it by calling file_name_port(). +* Other programs can use this port as a master device port to open the virtual interface. + + +### The routing inside the multiplexer: +* when the multiplexer gets a packet, it forwards it to every interface. +* BPF is ported to the multiplexer. BPF delivers the packet to the right pfinet (according to the filter set by the pfinet) just as the BPF in Mach does. +* All packets are forwarded to the interface which the multiplexer sits on. + + +### The implementation of the filter translator: +* The filter works as a proxy, forwarding the packet between the interface and the pfinet server. +* BPF is also ported to the filter translator. There are two filers in the translator, one for outgoing packets, the other for incoming packets. +* Only one pfinet can connect to the translator at a time. + + +--- + +## TODO +### Coding + + - make subhurds running without root privileges + - merge BPF rules from the filter translator and the multiplexer + +--- + +## Completed tasks + +### Coding + +The patch of glibc (pfinet server overriding) is [here](http://www.assembla.com/spaces/VNetHurd/documents/aJidqKp6ur3z-Nab7jnrAJ/download/A%20patch%20of%20glibc). + +The patch of pfinet (open the virtual network interface) is [here](http://www.assembla.com/spaces/VNetHurd/documents/aWqYwYATKr3BBOab7jnrAJ/download/patch%20of%20pfinet%201%20(to%20use%20the%20virtual%20interface)). + +The patch of pfinet (fix pfinet to use the proper filter rule) is [here](http://www.assembla.com/spaces/VNetHurd/documents/besb-qATKr3AIxab7jnrAJ/download/patch%20of%20pfinet%202%20(to%20add%20an%20IP%20filter)). + +The patch of pfinet (set the mach device in the promiscuous mode) is [here](http://www.assembla.com/spaces/VNetHurd/documents/bEovN6ATKr3B8uab7jnrAJ/download/patch%20of%20pfinet%203%20(to%20set%20the%20mach%20device%20into%20the%20promiscuous%20mode)). + +The patch of boot (open the virtual network interface) is [here](http://www.assembla.com/spaces/VNetHurd/documents/cWkeEixHar3AdKab7jnrAJ/download/A%20patch%20of%20boot). + +The patch of gnumach (set the network device into the promiscuous mode) is [here](http://www.assembla.com/spaces/VNetHurd/documents/b0eLzUxHmr3ymXab7jnrAJ/download/A%20patch%20of%20gnumach). + +the multiplexer: + +- Create multiple virtual network interfaces. +- Port BPF to the multiplexer. +- Finish the routing among the pfinet servers. + +the filter translator: + +- Forward the packet between the interface and the pfinet server. +- Filter the packet. + +the proxy of the proc server: + +- Forward all requests from the process to its proc server. +- The proxy doesn't do any real work except returning the host private port and the master device port of the proxy (shown as an example). + +the devnode translator: + +- Create a device file to help open the network device. + + +### The Code Read + +- boot + +### Documentation Read + + +- [A Programmer's Guide to the Mach System Calls](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machsys.doc) +- [Meet Mach](http://www.stepwise.com/Articles/Technical/MeetMach.html) by James Scott +- [A Programmer's Guide to the Mach User Environment](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.doc), the MIG part +- Part of The GNU Mach Reference Manual and The GNU Hurd Reference Manual +- The Hurd, a presentation by Marcus Brinkmann +- Towards a New Strategy of OS Design, an architectural overview by Thomas Bushnell, BSG. +- GNU/Hurd User's Guide +- The Hurd Hacking Guide diff --git a/community/dhug.mdwn b/community/dhug.mdwn new file mode 100644 index 00000000..02a404cf --- /dev/null +++ b/community/dhug.mdwn @@ -0,0 +1,7 @@ +The Dunedin (GNU/)Hurd Users Group is a small group of currently 2 people in Dunedin, New Zealand. + +At the moment our main role is producing the CD install images, mainly thanks to Philip Charles. + +Mail me if you want info or want to get in contact. + +-- [[Main/AndrewMitchell]] - 16 Oct 2002 diff --git a/community/facebook.mdwn b/community/facebook.mdwn new file mode 100644 index 00000000..b5340224 --- /dev/null +++ b/community/facebook.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +There is [a Facebook group for the Hurd](http://www.facebook.com/group.php?gid=5141429597). If you're on Facebook, join it and say hello. + diff --git a/community/flavioc.mdwn b/community/flavioc.mdwn new file mode 100644 index 00000000..9c9af71d --- /dev/null +++ b/community/flavioc.mdwn @@ -0,0 +1,126 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Name: Flávio Cruz + +Email: flaviocruz at gmail dot com + +Some [Hurd stuff](http://opensvn.csie.org/leic/hurd/) + +And code: [cl-hurd](http://freehg.org/u/flavioc/cl-hurd/) + +hg clone [http://freehg.org/u/flavioc/cl-hurd/](http://freehg.org/u/flavioc/cl-hurd/) + +## Summer session + +Creating an extensible translator library in lisp using the mig generated stubs. + +### What's done + +- The library for writing translators is mostly written. +- This library is intended to implement virtual filesystems. Examples are: translators were data is located in a local file (like zipfs, tarfs, rarfs, ...), single file translators (that do content filtering, output of a command, etc), network based filesystems (ftpfs, httpfs, ...), proxy filesystems (like hostmux, usermux, etc..) +- It's possible to specialize the basic translator library and implement new translator classes. This is done using CLOS. +- There is a tree-translator class that makes the managing of a node tree very easy, doing all the work for us, through a simple directory API and implementing the directory callbacks for us. +- There is a simple example (something like zipfs) translator that can expose the directories and file contents of a ZIP file. +- More translator examples include: + - /dev/null translator. + - /dev/zero translator. + - translator that creates a symlink node. + - tmpfs like translator. + - a translator that does proxying between clients and the underlying translator returning all data in upper-case. + - a translator that watches for changes in a file describing the file system structure. + - an IRC translator. + - a categorizer translator: creates a virtual directory containing files listed in a file, each file is categorized with a script. For example, a script can output the music author (in an mp3 file) and then all files will be categorized by author. +- Translator options (manipulated through fsysopts) have a simple and easy to use API. +- All the Mach port manipulation API is available. +- It's possible to send and receive messages. Simple example: +<pre> + (let* ((spec-mixed (make-message-spec :fields '(:string :integer :char :string :integer :real))) + (msg-mixed (make-message :spec spec-mixed)) + (port (port-allocate :right-receive))) + (send-message msg-mixed :remote port :data (list "abc" 42 #\b "cba" 314 3.14)) + (receive-message msg-mixed :source port) ; This returns T on success. + (get-message msg-mixed))) ; Returns '("abc" 42 #\b "cba" 314 3.14) +</pre> +- New message types (like :string, :integer) can be implemented, providing a powerful extension mechanism. +- Creation of symlinks and symlink path resolution. +- Creation of character/block devices, fifos and sockets. +- Patch that opens stdin + stdout to /dev/null. +- Project has been separated into 5 ASDF installable systems: + - hurd-common + - mach + - hurd + - hurd-translator + - tree-translator +- Test cases are now written. + + +### What needs to be done + +- Fix fsys-getroot (block happens in trivfs based translators, when they do RPC's to me when I call fsys_getroot to them) and fetch-root (for passive translators). +- Make the library multithreaded (blocked by the pthread conversion project and the unavailable thread support in CLISP) +- Use the socket stubs? +- More documentation + + +### Project dependencies + +- CLISP +- [CFFI](http://common-lisp.net/project/cffi/) (apt-get installable) +- [Flexi streams](http://www.weitz.de/flexi-streams/) (apt-get installable) +- [Trivial garbage](http://www.cliki.net/trivial-garbage) (not in debian repositories) +- [cl-zip](http://common-lisp.net/project/zip/) (only needed for the zip translator) +- [cl-irc](http://common-lisp.net/project/cl-irc/) (for the irc translator) + + +## To do + +### Documentation +- Manually Bootstrapping a Translator + +### Translation +- Translate the Hurd website to Portuguese? + +## Completed tasks + +### Patches +- http://alioth.debian.org/tracker/index.php?group_id=30628&atid=410472 + - libsvg patch accepted. +- Adapted glibc patch (http://www.schwinge.homeip.net/~thomas/tmp/glibc-patches/0009-2007-07-22-version-of-init-first.c_vs._GCC_4.1.patch.patch) + - http://opensvn.csie.org/leic/hurd/patches/glibc-init-first.patch +- Patch to remove some GNUMach IPC warnings and minor cleanup: + - http://opensvn.csie.org/leic/hurd/patches/gnumach-ipc-warnings.patch +- Website patches that correct some encountered typos: + - http://opensvn.csie.org/leic/hurd/patches/hurd-talk-typo.patch + +### Documentation read + +- GNU/Hurd User's Guide, an introduction to the important concepts and software of the GNU system, written for new users, AKA "GNUbies." +- Towards a New Strategy of OS Design, an architectural overview by Thomas Bushnell, BSG. +- The Hurd, a presentation by Marcus Brinkmann. +- The Hurd Hacking Guide. +- The GNU Mach Reference Manual +- The GNU Hurd Reference Manual +- The Unofficial GNU Mach IPC beginner's guide +- Mach IPC without MIG +- CFFI User's Manual + +### Before selection + +- Uptime program in C and Lisp using CFFI. +- Hello translator. + +## Misc + +### Lisp implementations that run on Hurd + +- Clisp +- ECL +- ? diff --git a/community/gsoc.mdwn b/community/gsoc.mdwn new file mode 100644 index 00000000..bab00748 --- /dev/null +++ b/community/gsoc.mdwn @@ -0,0 +1,108 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +The GNU Hurd project has successfully participated in the +[Google Summer of Code 2008](http://code.google.com/soc/2008/hurd/about.html)! + +All in all we had five students working on a diverse selection of five projects +from our [[ideas_list|gsoc/project_ideas]], and the students as well as the mentors +did a great job! + +## Projects + +* [[Sergiu_Ivanov|scolobb]] worked on **namespace-based translator selection**. + Although he wasn't an official (sponsored) GSoC student, he worked on his + project quite as steady as the other students (except for a two week + vacation). The project however was hampered by various misunderstandings, + wrong assumptions, and several major redesigns during the course of the work + -- which is probably more our fault than the student's. In the end, though, he + completed nsmux (the main namespace proxy handling the magic filename + lookups, running dynamic translators on demand); he still works on + finishing the translator stack filtering necessary to implement some of the + desired functionality (accessing files while skipping existing translators). + +* [[Zheng_Da|da]] worked on **network virtualization** and some related topics. In + spite of many open design question in the beginning, he did a lot of good + work -- finishing not only the ethernet multiplexer and filter translators, + which form the core of his project, but also a glibc patch to allow + overriding the standard socket servers with environment variables; the + devnode translator and a pfinet patch to allow accessing network devices + through device files; support for setting the network device in promiscuous + mode in gnumach; a pfinet patch to use BPF for the packet filtering instead + of the old Mach packet filters, and also to set a proper filter rule that + really only passes the required packages to pfinet; a patch for the subhurd + boot program to allow giving arbitrary virtual devices to the subhurd; and a + proxy for the proc server, which allows running unmodified programs with a + pseudo device master port instead of the real one -- providing some of the + subhurd functionality without having to start a complete new system instance. + He is still working on fixing some remaining issues, and on allowing subhurds + to be run by normal users. + +* [[Flavio_Cruz|flavioc]] was working on **Lisp bindings for the Hurd interfaces**, + and did a great job: Not only did he implement bindings for all low-level + interfaces as well as higher-level libraries for easy creation of translators + and other hurdish programs, but also a whole bunch of sample + translators based on these bindings, some of them quite useful on their own + account. He also fixed a few bugs in the Hurd he found along the way. + Presently he is doing some further improvements, like additional abstractions + and more sample translators. + +* [Andrei Barbu](http://csclub.uwaterloo.ca/~abarbu/hurd/) was working on + **porting a kernel instrumentation framework** like dtrace or SystemTap. He + implemented the necessary kernel infrastructure (and some nice general + improvements along the way), making it possible to create tracing programs by + hand; however, only at the end of the summer he realized that SystemTap is + really extremely Linux-specific (while dtrace was ruled out already at the + setout because of licensing problems), so there is no nice frontend yet. + Unfortunately he was not able to continue work beyond the official deadline + because of his PhD. + +* [[Madhusudan.C.S|procfs]] was working on a **new procfs implementation**, to + allow running existing programs based on Linux procfs out of the box. He + managed to implement all the necessary information bits, so the most + important procfs programs now work; and also fixed the procps program suite + to actually build on the Hurd. There are still some major bugs left, though. + Aside from fixing the remaining bugs, he now works on adding some more + information bits that are nontrivial to implement, and on fixing libgtop to + work for us as well. + +## IRC meetings + +Since the selection of the students on we have had regular GSoC IRC meetings, +every Friday 19:00 UTC. + +Minutes from some of the meetings: [[25April08Minutes]], [[02May08Minutes]], [[16May08Minutes]] + +We decided to keep up the meetings after the end of official GSoC, so things +can be properly wrapped up for upstream submission; but also because the +students want to continue discussing progress with their ongoing work, +problems, future directions etc. + +I also think that regular IRC meetings are a good thing in general. + +As always, the meetings are not only for (former) GSoC students and mentors, +but open to any interested party :-) + +If someone of you is lurking around here and would like to contribute, +but feel that you could do so better under formal mentoring: Please +speak up at the meeting! :-) + +## History + +2006 and 2007 we participated in GSoC under the umbrella of the GNU project, +getting one slot each year. + +<!-- TODO. Extend. --> + +## Joining in + +If these successes got you interested in contributing some larger part yourself - +in your free time or maybe in next years Google Summer of Code - +please have a look at our [[project_ideas]] and read up about [[contributing]]. diff --git a/community/gsoc/organization_application.mdwn b/community/gsoc/organization_application.mdwn new file mode 100644 index 00000000..ca844fff --- /dev/null +++ b/community/gsoc/organization_application.mdwn @@ -0,0 +1,210 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +* What is your Organization's Name? + +GNU Hurd + +* What is your Organization's Homepage? + +http://hurd.gnu.org + +* Describe your organization. + +The Hurd project is a loose community of people sharing a common interest in +developing the Hurd kernel, which is the official kernel of the [GNU operating +system](http://gnu.org). + +When the Hurd was originally started in 1990, it was the last missing major +component for a complete GNU system. Today Linux and other free kernels are +available to fill this gap, and the combination of GNU and Linux (often +[incorrectly](http://www.gnu.org/gnu/why-gnu-linux.html) called just "Linux") +is in wide use. However, the Hurd is still interesting due to its unique +design, better fitting the GNU philosophy than traditional monolithic kernels +like Linux. + +The GNU GPL guarantees that all users of software published under this license +get the legal permission to adapt the software they are using according to +their wishes, and also get the source code and other tools necessary to put +this permission to use. However, in traditional operating systems, the kernel +and related low-level system software are protected from normal users, and +cannot be easily modified; only the system administrator has power over these. + +The Hurd offers special mechanisms that allow any user to change almost all of +the system functionality he uses, without affecting the rest of the system, and +thus easily (at runtime) and without any special permissions. + +This ability to run subenvironments more or less independant from the rest of +the system, can be classified as a very sophisticated [lightweight +virtualization](http://tri-ceps.blogspot.com/2007/10/advanced-lightweight-virtualization.html) +approach. + +To offer these possibilities, the Hurd uses a true multiserver microkernel +architecture. That makes it quite unique: The Hurd is the only general-purpose +multiserver microkernel system in development today that is nearly ready for +everyday use, and offering almost perfect UNIX compatibility. (More than half +of the packages in the Debian repository are available for the Hurd.) All other +existing true microkernel systems are either research projects not nearly +complete enough for actual use, or limited to embedded systems and other +special purposes, or both. + +Marcus Brinkmann and Neal Walfield from the Hurd project are working at the +bleeding edge of microkernel operating system research. They have been in +contact with the most distinguished researchers in that field from the +[L4](http://l4hq.org/) and +[EROS](http://www.eros-os.org/eros.html)/[Coyotos](http://www.coyotos.org/) +microkernel operating system groups, and have written a couple of [research +papers](http://walfield.org/). + +* Why is your organization applying to participate in GSoC 2008? What do you +hope to gain by participating? + +For one, it is a way to make progress with tasks that require an amount of +focused work, that is hard to do for volunteers working in their spare time +only. + +Also it is a good possibility to get valuable input from new people, as well as +spreading technical and other knowledge about the Hurd among actual and +potential contributors. More generally, participation should help raising +awareness among people who might know about the existence of the Hurd, but +otherwise having very little idea what the project is all about, and how its +progress is. + +Last but not least, we hope the participation will have a positive effect on +our community -- new impulses, increased communication etc. + +* Did your organization participate in previous GSoC years? If so, please +summarize your involvement and the successes and failures of your student +projects. + +We did not participate as an organisation on our own so far. In 2006 and 2007, +we participated under the umbrella of the GNU project, getting one slot each +year. + +The 2006 participation was mostly a failure. After some intitial work +(available in CVS), the student disappeared -- moving to another country and +other personal issues from what we heard. + +The 2007 participation was a considerable success. The student was very bright +and dedicated. We got some code, as well as a lot of ideas, which we continued +discussing after the end of GSoC, and he intends to put into code as well in +the future. + +We decided to participate as an own organisation this year, as we believe that +will give us much better possibilities to find and select good students. + +* If your organization has not previously participated in GSoC, have you +applied in the past? If so, for what year(s)? + +We didn't apply as as organisation so far. + +* What license does your project use? + +Most of the code in the Hurd servers and the Hurd-specific glibc parts is +licensed GPLv2 or later; it might move to GPLv3 soon. Some components (mostly +the TCP/IP stack and parts of the ext2fs driver) are based on Linux code and +thus GPLv2 only. + +The microkernel (gnumach) is covered by the three-clause BSD license. (And some +minor variations of same...) + +* URL for your ideas page + +[[project_ideas]] + +* What is the main development mailing list for your organization? + +bug-hurd@gnu.org, see http://lists.gnu.org/mailman/listinfo/bug-hurd + +* Where is the main IRC channel for your organization? + +\#hurd on freenode.net + +* Does your organization have an application template you would like to see +students use? If so, please provide it now. + +[[student_application_form]] + +* Who will be your backup organization administrator? Please enter their Google +Account address. We will email them to confirm, your organization will not +become active until they respond. + +bddebian at gmail + +* What criteria did you use to select these individuals as mentors? Please be +as specific as possible. + +The most important criterium is that the person is involved in the project for +some time, knowing the ways; so he can actually instruct the student; and if +there are tough technical questions he can't answer himself, he knows whom to +ask. + +It's also important that the mentors are reliable and helpful, so the students +won't be left on their own with any problems they face. + +* Who will your mentors be? Please enter their Google Account address separated +by commas. If your organization is accepted we will email each mentor to invite +them to take part. + +antrik at gmx.net, benasselstine at gmail, samuel.thibault at ens-lyon.org, +glguida at gmail, neal, marcus, ... + +* What is your plan for dealing with disappearing students? + +The plan is mostly to avoid that happening in the first place. For that, we +will be particularily careful with the selection of the students: Making sure +that they have no other obligations during that time; that they are motivated +enough; that they actually have the necessary skills to complete the task; that +they fit in our community. + +Also, we will make sure that we are constantly in contact with the students -- +asking about progress, discussing technical issues, etc. -- so we can act in +time if things go wrong. + +If a student disappears in spite of that, there is little we can do. Of course +we will try to contact him and find out what the problem is; whether the +project can perhaps be scaled down, or at least wrapped up to bring it in a +state where it is useful even if not finished. + +We will also try to limit damage by insisting that students regularily check in +their work, so that we get partial results at least if someone disappears. + +* What is your plan for dealing with disappearing mentors? + +As our mentors all have been with the project for some time, the risk of them +disappearing is not too big. If one of them disappears nevertheless, it's not a +problem for us: We have enough mentors, and someone else will take over. + +We will encourage the students to keep discussions public as much as possible, +keeping private conversations with the mentors to a minimum, so the transition +should go smoothly. + +* What steps will you take to encourage students to interact with your +project's community before, during and after the program? + +As part of the application process, we will ask students to answer very +specific questions about our organisation and the project they chose, which +they won't be able to answer without contacting us and discussing details +already during the application phase. This way we make sure we only get +studends able and willing to communicate with us. + +During the program, we will be asking the students actively about the work they +do, problems they face, decisions they take etc. + +After the program we will continue discussing the projects, and ask the +students to take part in these discussions. + +* What will you do to ensure that your accepted students stick with the project +after GSoC concludes? + +We will try to invite all participating students to a conference afterwards, +where we will discuss the projects, as well as other Hurd-related topics. We +hope this will motivate them to follow up on the work they have done during the +program, and generally help keeping them involved. diff --git a/community/gsoc/project_ideas.mdwn b/community/gsoc/project_ideas.mdwn new file mode 100644 index 00000000..c4b665b7 --- /dev/null +++ b/community/gsoc/project_ideas.mdwn @@ -0,0 +1,1015 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +This list offers a wide range of tasks: From rather straightforward to pretty +involved ones; from low-level kernel hacking (drivers, VM) to high-level +translators; from fixing bugs, implementing new functionality based on existing +interfaces, to creating totally new mechanisms. + +If you have questions regarding the projects, or if there is more than one that +you are interested in and you are unsure which to choose, don't hesitate to +[[contact_us|communication]]. + +Most project descriptions mention a possible exercise related to the respective +task. Doing this exercise is part of the application process -- the purpose is +to get more familiar with the stuff you will need to complete the project and +with the Hurd community. Contact us if you encounter any difficulties -- we +will assist you with as well as we can :-) + +Please report on the progress you make with the exercise. This allows us to get +a better picture of how well you can cope with the task; as well as how well +you manage the necessary communication with us :-) + +The exercise is part of the application process, but it's perfectly OK if you +do it only after handing in the first version of your application. (The +experience you get with the exercise should help you to further improve your +application afterwards...) In general, don't hesitate too long -- the sooner +you submit your first proposal, the sooner we can give feedback! + +Take a look at our [[application_template|student_application_form]] to get an +idea what your application should contain. + + +## Bindings to Other Programming Languages + +The main idea of the Hurd design is giving users the ability to easily +modify/extend the system's functionality ([[extensible_system|extensibility]]). +This is done by creating [[filesystem_translators|hurd/translator]] and other +kinds of Hurd servers. + +However, in practice this is not as easy as it should, because creating +translators and other servers is quite involved -- the interfaces for doing +that are not exactly simple, and available only for C programs. Being able to +easily create simple translators in RAD languages is highly desirable, to +really be able to reap the advantages of the Hurd architecture. + +Originally Lisp was meant to be the second system language besides C in the GNU +system; but that doesn't mean we are bound to Lisp. Bindings for any popular +high-level language, that helps quickly creating simple programs, are highly +welcome. + +Several approaches are possible when creating such bindings. One way is simply +to provide wrappers to all the available C libraries ([[hurd/libtrivfs]], [[hurd/libnetfs]] +etc.). While this is easy (it requires relatively little consideration), it may +not be the optimal solution. It is preferable to hook in at a lower level, thus +being able te create interfaces that are specially adapted to make good use of +the features available in the respective language. + +These more specialised bindings could hook in at some of the lower level +library interfaces ([[hurd/libports]], [[hurd/glibc]], etc.); use the +[[microkernel/mach/MIG]]-provided [[microkernel/mach/RPC]] stubs directly; or +even create native stubs directly from the interface definitions. + +The task is to create easy to use Hurd bindings for a language of the student's +choice, and some example servers to prove that it works well in practice. This +project will require gaining a very good understanding of the various Hurd +interfaces. Skills in designing nice programming interfaces are a must. + +There has already been some [earlier work on Python +bindings](http://www.sigill.org/files/pytrivfs-20060724-ro-test1.tar.bz2), that +perhaps can be re-used. Also some work on [Perl +bindings](http://www.nongnu.org/hurdextras/#pith) is availabled. + +### Lisp + +Most Lisp implementations provide a Foreign Function Interface (FFI) that +enables the Lisp code to call functions written in another language. +Specifically, most implementations provide an FFI to the C ABI (hence giving +access to C, Fortran and possibly C++). + +Common Lisp has even a portability layer for such FFI, +[CFFI](http://common-lisp.net/project/cffi/), so that you can write bindings +purely in Lisp and use the same binding code on any implementation supported by +CFFI. + +Many Scheme implementation also provide an FFI. [Scheme48](http://www.s48.org/) +is even the implementation used to run scsh, a Scheme shell designed to provide +instant access to POSIX functions. +[Guile](http://www.gnu.org/software/guile/guile.html) is the GNU project's +Scheme implementation, meant to be embeddable and provide access to C. At least +[Gambit](http://dynamo.iro.umontreal.ca/~gambit/), +[Chicken](http://www.call-with-current-continuation.org/), +[Bigloo](http://www-sop.inria.fr/mimosa/fp/Bigloo/) and +[PLT](http://www.plt-scheme.org/) are known to provide an FFI too. + +With respect to the packaging and dependencies, the good news is that Debian +comes handy: 5 Common Lisp implementations are packaged, one of which has +already been ported to Hurd (ECL), and CFFI is also packaged. As far as Scheme +is concerned, 14 [R5RS](http://www.schemers.org/Documents/Standards/R5RS/) +implementations are provided and 1 [R6RS](http://www.r6rs.org/). + +Possible mentors: Pierre THIERRY (nowhere_man) for Common Lisp or Scheme, and perhaps Python + +Exercise: Write some simple program(s) using Hurd-specific interfaces in the +language you intend to work on. For a start, you could try printing the system +uptime. A more advanced task is writing a simple variant of the hello +translator (you can use the existing C imlementation as reference), +implementing only open() and read() calls. Don't only write an implementations +using the existing C libraries (libps, libtrivfs), but also try to work with +the MiG-generated stubs directly. If you are ambitious, you could even try to +write your own stubs... + +*Status*: Flavio Cruz has completed [[Lisp_bindings|flavioc]] for GSoC 2008! + + +## Virtualization Using Hurd Mechanisms + +The main idea behind the Hurd design is to allow users to replace almost any +system functionality ([[extensible_system|extensibility]]). Any user can easily +create a subenvironment using some custom [[servers|hurd/translator]] instead +of the default system servers. This can be seen as an +[[advanced_lightweight_virtualization|hurd/virtualization]] mechanism, which +allows implementing all kinds of standard and nonstandard virtualization +scenarios. + +However, though the basic mechanisms are there, currently it's not easy to make +use of these possibilities, because we lack tools to automatically launch the +desired constellations. + +The goal is to create a set of powerful tools for managing at least one +desirable virtualization scenario. One possible starting point could be the +[[hurd/subhurd]]/[[hurd/neighborhurd]] mechanism, which allows a second almost totally +independant instance of the Hurd in parallel to the main one. The current +implementation has serious limitations though. A subhurd can only be started by +root. There are no communication channels between the subhurd and the main one. +There is no mechanism for safe sharing of hardware devices. Fixing this issues +could turn subhurds into a very powerful solution for lightweight +virtualization using so-called logical partitions. (Similar to Linux-vserver, +OpenVZ etc.) + +While subhurd allow creating a complete second system instance, with an own set +of Hurd servers and [[UNIX]] daemons and all, there are also situations where it is +desirable to have a smaller subenvironment, living withing the main system and +using most of its facilities -- similar to a chroot environment. A simple way +to create such a subenvironment with a single command would be very helpful. + +It might be possible to implement (perhaps as a prototype) a wrapper using +existing tools (chroot and [[hurd/translator/unionfs]]); or it might require more specific tools, +like some kind of unionfs-like filesytem proxy that mirrors other parts of the +filesystem, but allows overriding individual locations, in conjuction with +either chroot or some similar mechanism to create a subenvironment with a +different root filesystem. + +It's also desirable to have a mechanism allowing a user to set up such a custom +environment in a way that it will automatically get launched on login -- +practically allowing the user to run a customized operating system in his own +account. + +Yet another interesting scenario would be a subenvironment -- using some kind +of special filesystem proxy again -- in which the user serves as root, being +able to create local sub-users and/or sub-groups. + +This would allow the user to run "dangerous" applications (webbrowser, chat +client etc.) in a confined fashion, allowing it access to only a subset of the +user's files and other resources. (This could be done either using a lot of +groups for individual resources, and lots of users for individual applications; +adding a user to a group would give the corresponding application access to the +corresponding resource -- an advanced [[ACL]] mechanism. Or leave out the groups, +assigning the resources to users instead, and use the Hurd's ability for a +process to have multiple user IDs, to equip individual applications with sets +of user IDs giving them access to the necessary resources -- basically a +[[capability]] mechanism.) + +The student will have to pick (at least) one of the described scenarios -- or +come up with some other one in a similar spirit -- and implement all the tools +(scripts, translators) necessary to make it available to users in an +easy-to-use fashion. While the Hurd by default already offers the necessary +mechanisms for that, these are not perfect and could be further refined for +even better virtualization capabilities. Should need or desire for specific +improvements in that regard come up in the course of this project, implementing +these improvements can be considered part of the task. + +Completing this project will require gaining a very good understanding of the +Hurd architecture and spirit. Previous experience with other virtualization +solutions would be very helpful. + +Possible mentors: Olaf Buddenhagen (antrik) + +Exercise: Make some modification to the "boot" programm used to start subhurds. +(More specific suggestions welcome... :-) ) + +*Status*: Zheng da has has implemented [[network_virtualization|da]] (an +important prerequisite for unprivileged subhurds) for GSoC 2008, along with +various other interesting bits, including a mechanism to override socket +servers; a proc proxy that allows running processes/subenvironments with a +pseudo device master port; and a mechanism to pass arbitrary virtual devices to +a subhurd. He is still working on running subhurds by normal users. + + +## Namspace-based Translator Selection + +The main idea behind the Hurd is to make (almost) all system functionality +user-modifiable ([[extensible_system|extensibility]]). This includes a +user-modifiable filesystem: the whole filesystem is implemented decentrally, by +a set of filesystem servers forming the directory tree together, a +[[hurd/virtual_file_system]]. These filesystem servers are called +[[translators|hurd/translator]], and are the most visible feature of the Hurd. + +The reason they are called translators is because when you set a translator on +a filesystem node, the underlying node(s) are hidden by the translator, but the +translator itself can access them, and present their contents in a different +format -- translate them. A simple example is a +[[gunzip_translator|hurd/translator/storeio]], which can be set on a gzipped +file, and presents a virtual file with the uncompressed contents. Or the other +way around. Or a translator that presents an +[[XML_file_as_a_directory_tree|hurd/translator/xmlfs]]. Or an mbox as a set of +individual files for each mail ([[hurd/translator/mboxfs]]); or ever further +breaking it down into headers, body, attachements... + +This gets even more powerful when translators are used as building blocks for +larger applications: A mail reader for example doesn't need backends for +understanding various mailbox formats anymore. All formats can be parsed by +special translators, and the mail reader gets the data as a uniform, directly +usable filesystem structure. Translators can also be stacked: If you have a +compressed mailbox for example, first apply a gunzip translator, and then an +mbox translator on top of that. + +There are a few problems with the way translators are set, though. For one, +once a translator is set on a node, you always see the translated content. If +you need the untranslated contents again, to do a backup for example, you first +need to remove the translator again. Also, having to set a translator +explicitely before accessing the contents is pretty cumbersome, making this +feature almost useless. + +A possible solution is implementing a mechanism for selecting translators +through special filename attributes. For example you could use +`index.html.gz,,+` and `index.html.gz,,-` to choose between translated and +untranslated versions of a file. Or you could use `index.html.gz,,u` to get +the contents of the file with a gunzip translator applied automatically. You +could also use attributes on whole directory trees: `.,,0/` would give you a +directory tree corresponding to the current directory, but with any translators +disabled, for doing a backup. And `site,,u/*.html.gz` would present a whole +directory tree of compressed HTML files as uncompressed files. + +One benefit of the Hurd's flexibility is that it should be possible to +implement such a mechanism without touching the existing Hurd components: +Rather, just implement a special proxy, that mirrors the normal filesystem, but +is able to interpret the special extensions and present transformed files in +place of the original ones. + +In the long run it's probably desirable to have the mechanism implemented in +the standard name lookup mechanism, so it will be available globally, and avoid +the overhead of a proxy; but for the beginnig the proxy solution is much more +flexible. + +The goal of this project is implementing a prototype proxy; perhaps also a +first version of the global variant as proof of concept, if time permits. It +requires good understanding of the name lookup mechanism, and translator +programming; but the implementation should not be too hard. Perhaps the hardest +part is finding a convenient, flexible, elegant, hurdish method for mapping the +special extensions to actual translators... + +Possible mentors: Olaf Buddenhagen (antrik) + +Exercise: Try to make some modification to the existing unionfs and/or firmlink +translators. (More specific suggestions welcome... :-) ) + +*Status*: Sergiu Ivanov has been working *voluntarily* on +[[namespace-based_translator_selection|scolobb]], as an inofficial GSoC 2008 +participant! Not all the desired functionality is in place yet; work is +ongoing. + + +## Fix File Locking + +Over the years, [[UNIX]] has aquired a host of different file locking mechanisms. +Some of them work on the Hurd, while others are buggy or only partially +implemented. This breaks many applications. + +The goal is to make all file locking mechanisms work properly. This requires +finding all existing shortcomings (through systematic testing and/or checking +for known issues in the bug tracker and mailing list archives), and fixing +them. + +This task will require digging into parts of the code to understand how file +locking works on the Hurd. Only general programming skills are required. + +Possible mentors: Samuel Thibault (youpi) + +Exercise: Find one of the existing issues, either by looking at the task/bug +trackers on savannah, or by trying things out yourself; and take a go at it. +Probably you wont' be able to fix the problem in a limited amount of time, but +you should be able to do a detailed analysis of the issue at least. + + +## `procfs` + +Although there is no standard (POSIX or other) for the layout of the `/proc` +pseudo-filesystem, it turned out a very useful facility in GNU/Linux and other +systems, and many tools concerned with process management use it. (`ps`, `top`, +`htop`, `gtop`, `killall`, `pkill`, ...) + +Instead of porting all these tools to use [[hurd/libps]] (Hurd's official method for +accessing process information), they could be made to run out of the box, by +implementing a Linux-compatible `/proc` filesystem for the Hurd. + +The goal is to implement all `/proc` functionality needed for the various process +management tools to work. (On Linux, the `/proc` filesystem is used also for +debugging purposes; but this is highly system-specific anyways, so there is +probably no point in trying to duplicate this functionality as well...) + +The [[existing_partially_working_procfs_implementation|hurd/translator/procfs]] +can serve as a starting point, but needs to be largely rewritten. (It should +use [[hurd/libnetfs]] rather than [[hurd/libtrivfs]]; the data format needs to +change to be more Linux-compatible; and it needs adaptation to newer system +interfaces.) + +This project requires learning [[hurd/translator]] programming, and +understanding some of the internals of process management in the Hurd. It +should not be too hard coding-wise; and the task is very nicely defined by the +exising Linux `/proc` interface -- no design considerations necessary. + +**Note**: We already have several applications for this task. + +Possible mentors: Olaf Buddenhagen (antrik) + +Exercise: Add or fix one piece in the existing procfs translator. + +*Status*: Madhusudan.C.S has implemented a new, fully functional [[procfs]] for +GSoC 2008. He is still working on some outstanding issues. + + +## New Driver Glue Code + +Although a driver framework in userspace would be desirable, presently the Hurd +uses kernel drivers in the microkernel, +[[GNU_Mach|microkernel/mach/gnumach]]. (And changing this would be far beyond a +GSoC project...) + +The problem is that the drivers in GNU Mach are presently old Linux drivers +(mostly from 2.0.x) accessed through a glue code layer. This is not an ideal +solution, but works quite OK, except that the drivers are very old. The goal of +this project is to redo the glue code, so we can use drivers from current Linux +versions, or from one of the free BSD variants. + +Using [ddekit](http://demo.tudos.org/dsweeper_tutorial.html) instead of our +own glue code can be explored as a possible alternative approach. + +This is a doable, but pretty involved project. Experience with driver +programming under Linux (or BSD) is a must. (No Hurd-specific knowledge is +required, though.) + +This is [[GNU_Savannah_task 5488]]. + +Possible mentors: Samuel Thibault (youpi) + +Exercise: Try porting one driver from Linux 2.6 to run in the old framework. +The port needn't be elegant or complete; but it would be nice if you could get +it to work at least partially... + + +## Server Overriding Mechanism + +The main idea of the Hurd is that every user can influence almost all system +functionality ([[extensible_system|extensibility]]), by running private Hurd +servers that replace or proxy the global default implementations. + +However, running such a cumstomized subenvironment presently is not easy, +because there is no standard mechanism to easily replace an individual standard +server, keeping everything else. (Presently there is only the [[hurd/subhurd]] +method, which creates a completely new system instance with a completely +independent set of servers.) + +The goal of this project is to provide a simple method for overriding +individual standard servers, using environment variables, or a special +subshell, or something like that. + +Various approaches for such a mechanism has been discussed before. +Probably the easiest (1) would be to modify the Hurd-specific parts of [[hurd/glibc]], +which are contacting various standard servers to implement certain system +calls, so that instead of always looking for the servers in default locations, +they first check for overrides in environment variables, and use these instead +if present. + +A somewhat more generic solution (2) could use some mechanism for arbitrary +client-side namespace overrides. The client-side part of the filename lookup +mechanism would have to check an override table on each lookup, and apply the +desired replacement whenever a match is found. + +Another approach would be server-side overrides. Again there are various +variants. The actual servers themself could provide a mechanism to redirect to +other servers on request. (3) Or we could use some more generic server-side +namespace overrides: Either all filesystem servers could provide a mechanism to +modify the namespace they export to certain clients (4), or proxies could be +used that mirror the default namespace but override certain locations. (5) + +Variants (4) and (5) are the most powerful. They are intimately related to +chroots: (4) is like the current chroot implementation works in the Hurd, and +(5) has been proposed as an alternative. The generic overriding mechanism could +be implemented on top of chroot, or chroot could be implemented on top of the +generic overriding mechanism. But this is out of scope for this project... + +In practice, probably a mix of the different approaches would prove most useful +for various servers and use cases. It is strongly recommended that the student +starts with (1) as the simplest approach, perhaps augmenting it with (3) for +certain servers that don't work with (1) because of indirect invocation. + +This tasks requires some understanding of the Hurd internals, especially a good +understanding of the file name lookup mechanism. It's probably not too heavy on +the coding side. + +This is [[GNU_Savannah_task 6612]]. Also there are quite a bit of emails +discussing this topic, from a last year's GSoC application -- see +<http://lists.gnu.org/archive/html/bug-hurd/2007-03/msg00050.html>, +<http://lists.gnu.org/archive/html/bug-hurd/2007-03/msg00114.html>, +<http://lists.gnu.org/archive/html/bug-hurd/2007-06/msg00082.html>, +<http://lists.gnu.org/archive/html/bug-hurd/2008-03/msg00039.html>. + +Possible mentors: Olaf Buddenhagen (antrik) + +Exercise: Come up with a glibc patch that allows overriding one specific +standard server using method (1). + +*Status*: Overriding of socket servers through environment variables has been +implemented by Zheng Da for GSoC 2008, as part of his +[[network_virtualization|da]] project. + + +## `dtrace` Support + +One of the main problems of the current Hurd implementation is very poor +performance. While we have a bunch of ideas what could cause the performance +problems, these are mostly just guesses. Better understanding what really +causes bad performance is necessary to improve the situation. + +For that, we need tools for performance measurements. While all kinds of more +or less specific profiling tools could be convieved, the most promising and +generic approach seems to be a framework for logging certain events in the +running system (both in the microkernel and in the Hurd servers). This would +allow checking how much time is spent in certain modules, how often certain +situations occur, how things interact, etc. It could also prove helpful in +debugging some issues that are otherwise hard to find because of complex +interactions. + +The most popular framework for that is Sun's dtrace; but there might be others. +The student has to evaluate the existing options, deciding which makes most +sense for the Hurd; and implement that one. (Apple's implementation of dtrace +in their Mach-based kernel might be helpful here...) + +This project requires ability to evaluate possible solutions, and experience +with integrating existing components as well as low-level programming. + +Possible mentors: Samuel Thibault (youpi) + +Exercise: In lack of a good exercise directly related to this taks, just pick +one of the kernel-related or generally low-level tasks from the bug/task +trackers on savannah, and make a go at it. You might not be able to finish the +task in a limited amount of time, but you should at least be able to make a +detailed analysis of the issue. + +*Status*: Andei Barbu was working on +[SystemTap](http://csclub.uwaterloo.ca/~abarbu/hurd/) for GSoC 2008, but it +turned out too Linux-specific. He implemented kernel probes, but there is no +nice frontend yet. + + +## Hurdish TCP/IP Stack + +The Hurd presently uses a [[TCP/IP_stack|hurd/translator/pfinet]] based on code from an old Linux version. +This works, but lacks some rather important features (like PPP/PPPoE), and the +design is not hurdish at all. + +A true hurdish network stack will use a set of stack of [[hurd/translator]] processes, +each implementing a different protocol layer. This way not only the +implementation gets more modular, but also the network stack can be used way +more flexibly. Rather than just having the standard socket interface, plus some +lower-level hooks for special needs, there are explicit (perhaps +filesystem-based) interfaces at all the individual levels; special application +can just directly access the desired layer. All kinds of packet filtering, +routing, tunneling etc. can be easily achieved by stacking compononts in the +desired constellation. + +While the general architecture is pretty much given by the various network +layers, it's up to the student to design and implement the various interfaces +at each layer. This task requires understanding the Hurd philosophy and +translator programming, as well as good knowledge of TCP/IP. + +This is [[GNU_Savannah_task 5469]]. + +Possible mentors: ? + +Exercise: Make some modification to the existing pfinet implementation. (More +specific suggestions welcome... :-) ) + + +## Improved NFS Implementation + +The Hurd has both NFS server and client implementations, which work, but not +very well: File locking doesn't work properly (at least in conjuction with a +GNU/Linux server), and performance is extremely poor. Part of the problems +could be owed to the fact that only NFSv2 is supported so far. + +This project encompasses implementing NFSv3 support, fixing bugs and +performance problems -- the goal is to have good NFS support. The work done in +a previous unfinished GSoC project can serve as a starting point. + +Both client and server parts need work, though the client is probably much more +important for now, and shall be the major focus of this project. + +This task, [[GNU_Savannah_task 5497]], has no special prerequisites besides general programming skills, and +an interest in file systems and network protocols. + +Possible mentors: ? + +Exercise: Make a go at one of the known issues in the NFS client. You might not +be able to finish this in the limited amount of time, but you should at least +be able to make a detailed analysis of the issue. + + +## Fix `libdiskfs` Locking Issues + +Nowadays the most often encountered cause of Hurd crashes seems to be lockups +in the [[hurd/translator/ext2fs]] server. One of these could be traced +recently, and turned out to be a lock inside [[hurd/libdiskfs]] that was taken +and not released in some cases. There is reason to believe that there are more +faulty paths causing these lockups. + +The task is systematically checking the [[hurd/libdiskfs]] code for this kind of locking +issues. To achieve this, some kind of test harness has to be implemented: For +exmple instrumenting the code to check locking correctness constantly at +runtime. Or implementing a unit testing framework that explicitely checks +locking in various code paths. (The latter could serve as a template for +implementing unit checks in other parts of the Hurd codebase...) + +This task requires experience with debugging locking issues in multithreaded +applications. + +Possible mentors: ? + +Exercise: Hack libdiskfs to keep count of the number of locks currently held. + + +## Convert Hurd Libraries and Servers to pthreads + +The Hurd was originally created at a time when the [pthreads +standard](http://www.opengroup.org/onlinepubs/009695399/basedefs/pthread.h.html) +didn't exist yet. Thus all Hurd servers and libraries are using the old +[[cthreads|hurd/libcthreads]] package that came with [[microkernel/Mach]], +which is not compatible with [[pthreads|hurd/libpthread]]. + +Not only does that mean that people hacking on Hurd internals have to deal with +a non-standard thread package, which nobody is familiar with. Although a +pthreads implementation for the Hurd was created in the meantime, it's not +possible to use both cthreads and pthreads in the same program. Consequently, +pthreads can't presently be used in any Hurd servers -- including translators. + +Some work already has been done once on converting the Hurd servers and +libraries to use pthreads, but that work hasn't been finished. It is available +as [[GNU_Savannah_task 5487]] and can of course be used to base the new work +upon. + +The goal of this project is to have all the Hurd code use pthreads. Should any +limitations in the existing pthreads implementation turn up that hinder this +transition, they will have to be fixed as well. + +One possible option is creating a wrapper that implements the cthreads +interfaces on top of pthreads, to ease the transition -- but it might very well +turn out that it's easier to just change all the existing code to use pthreads +directly. This is up to the student. Such a wrapper has been proposed as +[[GNU_Savannah_task 7895]] and its implementation would be a useful +starting-point. + +This project requires relatively little Hurd-specific knowledge. Experience +with multithreaded programming in general and pthreads in particular is +required, though. + +Possible mentors: Samuel Thibault (youpi) + +Exercise: Take some small piece of code using ctreads and convert it to +pthreads. + + +## Sound Support + +The Hurd presently has no sound support. Fixing this, [[GNU_Savannah_task +5485]], requires two steps: the first is to port some other kernel's drivers to +[[GNU_Mach|microkernel/mach/gnumach]] so we can get access to actual sound +hardware. The second is to implement a userspace server ([[hurd/translator]]), +that implements an interface on top of the kernel device that can be used by +applications -- probably OSS or maybe ALSA. + +Completing this task requires porting at least one driver (e.g. from Linux) for +a popular piece of sound hardware, and the basic userspace server. For the +driver part, previous experience with programming kernel drivers is strongly +advisable. The userspace part requires some knowledge about programming Hurd +translators, but shouldn't be too hard. + +Once the basic support is working, it's up to the student to use the remaining +time for porting more drivers, or implementing a more sophisticated userspace +infrastructure. The latter requires good understanding of the Hurd philosophy, +to come up with an appropriate design. + +Another option would be to evaluate whether a driver that is completely running +in user-space is feasible. <!-- TODO. Elaborate. --> + +Possible mentors: ? + +Exercise: Take a newer driver for a device in one of the subsystems we already +implement (disk or network) from a newer Linux version, or some other operating +system, and try to port it so that it runs in the existing driver framework. +The port needn't be elegant or complete; but it would be nice if you could get +it to work at least partially... + + +## Disk I/O Performance Tuning + +The most obvious reason for the Hurd feeling slow compared to mainstream +systems like GNU/Linux, is very slow harddisk access. + +The reason for this slowness is lack and/or bad implementation of common +optimisation techniques, like scheduling reads and writes to minimalize head +movement; effective block caching; effective reads/writes to partial blocks; +reading/writing multiple blocks at once; and read-ahead. The +[[ext2_filesystem_server|hurd/translator/ext2fs]] might also need some +optimisations at a higher logical level. + +The goal of this project is to analyze the current situation, and implement/fix +various optimisations, to achieve significantly better disk performance. It +requires understanding the data flow through the various layers involved in +disk acces on the Hurd ([[filesystem|hurd/virtual_file_system]], +[[pager|hurd/libpager]], driver), and general experience with +optimising complex systems. That said, the killing feature we are definitely +missing is the read-ahead, and even a very simple implementation would bring +very big performance speedups. + +Possible mentors: ? + +Exercise: Make some modification in at least one of the components involved in +disk I/O. (More specific suggestions welcome... :-) ) + + +## VM Tuning + +Hurd/[[microkernel/Mach]] presently make very bad use of the available physical memory in the +system. Some of the problems are inherent to the system design (the kernel +can't distinguish between important application data and discardable disk +buffers for example), and can't be fixed without fundamental changes. Other +problems however are an ordinary lack of optimisation, like extremely crude +heuristics when to start paging. (See <http://lists.gnu.org/archive/html/bug-hurd/2007-08/msg00034.html> for example.) +Many parameters are based on assumptions from +a time when typical machines had like 16 MiB of RAM, or simply have been set to +arbitrary values and never tuned for actual use. + +The goal of this project is to bring the virtual memory management in Hurd/Mach +closer to that of modern mainstream kernels (Linux, FreeBSD), by comparing the +implementation to other systems, implementing any worthwhile improvements, and +general optimisation/tuning. It requires very good understanding of the Mach +VM, and virtual memory in general. + +This project is related to [[GNU_Savannah_task 5489]]. + +Possible mentors: ? + +Exercise: Make some modification to the existing VM code. You could try to find +a piece of code that can be improved with simple code optimization, for +example. + + +## `mtab` + +In traditional monolithic system, the kernel keeps track of all mounts; the +information is available through `/proc/mounts` (on Linux at least), and in a +very similar form in `/etc/mtab`. + +The Hurd on the other hand has a totally +[[decentralized_file_system|hurd/virtual_file_system]]. There is no single +entity involved in all mounts. Rather, only the parent file system to which a +mountpoint ([[hurd/translator]]) is attached is involved. As a result, there +is no central place keeping track of mounts. + +As a consequence, there is currently no easy way to obtain a listing of all +mounted file systems. This also means that commands like `df` can only work on +explicitely specified mountpoints, instead of displaying the usual listing. + +One possible solution to this would be for the translator startup mechanism to +update the `mtab` on any `mount`/`unmount`, like in traditional systems. +However, there are same problems with this approach. Most notably: what to do +with passive translators, i.e., translators that are not presently running, but +set up to be started automatically whenever the node is accessed? Probably +these should be counted an among the mounted filesystems; but how to handle the +`mtab` updates for a translator that is not started yet? Generally, being +centralized and event-based, this is a pretty unelegant, non-hurdish solution. + +A more promising approach is to have `mtab` exported by a special translator, +which gathers the necessary information on demand. This could work by +traversing the tree of translators, asking each one for mount points attached +to it. (Theoretically, it could also be done by just traversing *all* nodes, +checking each one for attached translators. That would be very inefficient, +though. Thus a special interface is probably required, that allows asking a +translator to list mount points only.) + +There are also some other issues to keep in mind. Traversing arbitrary +translators set by other users can be quite dangerous -- and it's probably not +very interesting anyways what private filesystems some other user has mounted. +But what about the global `/etc/mtab`? Should it list only root-owned +filesystems? Or should it create different listings depending on what user +contacts it?... + +That leads to a more generic question: which translators should be actually +listed? There are different kinds of translators: ranging from traditional +filesystems ([[disks|hurd/libdiskfs]] and other actual +[[stores|hurd/translator/storeio]]), but also purely virtual filesystems like +[[hurd/translator/ftpfs]] or [[hurd/translator/unionfs]], and even things that +have very little to do with a traditional filesystem, like a +[[gzip_translator|hurd/translator/storeio]], +[[mbox_translator|hurd/translator/mboxfs]], +[[xml_translator|hurd/translator/xmlfs]], or various device file translators... +Listing all of these in `/etc/mtab` would be pretty pointless, so some kind of +classification mechanism is necessary. By default it probably should list only +translators that claim to be real filesystems, though alternative views with +other filtering rules might be desirable. + +After taking decisions on the outstanding design questions, the student will +implement both the actual [[mtab_translator|hurd/translator/mtabfs]], and the +necessery interface(s) for gathering the data. It requires getting a good +understanding of the translator mechanism and Hurd interfaces in general. + +Possible mentors: Olaf Buddenhagen (antrik) + +Exercise: Create a simple translator using libnetfs, that only allows creating +directories and attaching other translators. + + +## GNU Mach Code Cleanup + +Although there are some attempts to move to a more modern microkernel +alltogether, the current Hurd implementation is based on +[[GNU_Mach|microkernel/mach/gnumach]], which is only a slightly modified +variant of the original CMU [[microkernel/Mach]]. + +Unfortunately, Mach was created about two decades ago, and is in turn based on +even older BSD code. Parts of the BSD kernel -- file systems, [[UNIX]] [[mechanism]]s +like processes and signals, etc. -- were ripped out (to be implemented in +[[userspace_servers|hurd/translator]] instead); while other mechanisms were +added to allow implementing stuff in userspace. +([[Pager_interface|microkernel/mach/external_pager_mechanism]], +[[microkernel/mach/IPC]], etc.) + +Also, Mach being a research project, many things were tried, adding lots of +optional features not really needed. + +The result of all this is that the current code base is in a pretty bad shape. +It's rather hard to make modifications -- to make better use of modern hardware +for example, or even to fix bugs. The goal of this project is to improve the +situation. + +The task starts out easy, with fixing compiler warnings. Later it moves on to +more tricky things: removing dead or unneeded code paths; restructuring code +for readability and maintainability. + +This task requires good knowledge of C, and experience with working on a large +existing code base. Previous kernel hacking experience is an advantage, but +not really necessary. + +Possible mentors: Samuel Thibault (youpi) + +Exercise: Create a few simple patches that fix some of the compiler warnings, +rework a piece of ugly code etc. + + +## `xmlfs` + +Hurd [[translators|hurd/translator]] allow presenting underlying data in a +different format. This is a very powerful ability: it allows using standard +tools on all kinds of data, and combining existing components in new ways, once +you have the necessary translators. + +A typical example for such a translator would be xmlfs: a translator that +presents the contents of an underlying XML file in the form of a directory +tree, so it can be studied and edited with standard filesystem tools, or using +a graphical file manager, or to easily extract data from an XML file in a +script etc. + +The exported directory tree should represent the DOM structure of the document, +or implement XPath, or both, or some combination thereof (perhaps XPath could +be implemented as a second translator working on top of the DOM one) -- +whatever works well, while sticking to XML standards as much as possible. + +Ideally, the translation should be reversible, so that another, complementary +translator applied on the expanded directory tree would yield the original XML +file again; and also the other way round, applying the complementary translator +on top of some directory tree and xmlfs on top of that would yield the original +directory again. However, with the different semantics of directory trees and +XML files, it might not be possible to create such a universal mapping. Thus +it is a desirable goal, but not a strict requirement. + +The goal of this project is to create a fully usable XML translator, that +allows both reading and writing any XML file. Implementing the complementary +translator also would be nice if time permits, but is not mandatory part of the +task. + +The [[existing_partial_(read-only)_xmlfs_implementation|hurd/translator/xmlfs]] +can serve as a starting point. + +This task requires pretty good designing skills. Good knowledge of XML is also +necessary. Learning translator programming will obviously be necessary to +complete the task. + +Possible mentors: Olaf Buddenhagen (antrik) + +Exercise: Make some modification to the existing xmlfs translator, and write a +shell script that uses xmlfs to extract some interesting information from an +.odt document. (More specific suggestions welcome... :-) ) + + +## Allow Using `unionfs` Early at Boot + +In [[UNIX]] systems, traditionally most software is installed in a common directory +hierachy, where files from various packages live beside each other, grouped by +function: user-invokable executables in `/bin`, system-wide configuration files +in `/etc`, architecture specific static files in `/lib`, variable data in +`/var`, and so on. To allow clean installation, deinstallation, and upgrade of +software packages, GNU/Linux distributions usually come with a package manager, +which keeps track of all files upon installation/removal in some kind of +central database. + +An alternative approach is the one implemented by GNU Stow: each package is +actually installed in a private directory tree. The actual standard directory +structure is then created by collecting the individual files from all the +packages, and presenting them in the common `/bin`, `/lib`, etc. locations. + +While the normal Stow package (for traditional UNIX systems) uses symlinks to +the actual files, updated on installation/deinstallation events, the Hurd +[[hurd/translator]] mechanism allows a much more elegant solution: +[[hurd/translator/stowfs]] (which is actually a special mode of +[[hurd/translator/unionfs]]) creates virtual directories on the fly, composed +of all the files from the individual package directories. + +The problem with this approach is that unionfs presently can be launched only +once the system is booted up, meaning the virtual directories are not available +at boot time. But the boot process itself already needs access to files from +various packages. So to make this design actually usable, it is necessary to +come up with a way to launch unionfs very early at boot time, along with the +root filesystem. + +Completing this task will require gaining a very good understanding of the Hurd +boot process and other parts of the design. It requires some design skills +also to come up with a working mechanism. + +Possible mentors: ? + +Exercise: Try to write a dummy server that is started instead of ext2fs on +system boot, and starts the actual ext2fs in turn. + + +## Fix `tmpfs` + +In some situations it is desirable to have a file system that is not backed by +actual disk storage, but only by anonymous memory, i.e. lives in the RAM (and +possibly swap space). + +A simplistic way to implement such a memory filesystem is literally creating a +ramdisk, i.e. simply allocating a big chunck of RAM (called a memory store in +Hurd terminology), and create a normal filesystem like ext2 on that. However, +this is not very efficient, and not very convenient either (the filesystem +needs to be recreated each time the ramdisk is invoked). A nicer solution is +having a real [[hurd/translator/tmpfs]], which creates all filesystem +structures directly in RAM, allocating memory on demand. + +The Hurd has had such a tmpfs for a long time. However, the existing +implementation doesn't work anymore -- it got broken by changes in other parts +of the Hurd design. + +There are several issues. The most serious known problem seems to be that for +technical reasons it receives [[microkernel/mach/RPC]]s from two different +sources on one [[microkernel/mach/port]], and gets mixed up with them. Fixing +this is non-trivial, and requires a good understanding of the involved +mechanisms. + +The goal of this project to get a fully working, full featured tmpfs +implementation. It requires digging into some parts of the Hurd, incuding the +[[pager_interface|hurd/libpager]] and [[hurd/translator]] programming. This +task probably doesn't require any design work, only good debugging skills. + +Possible mentors: ? + +Exercise: Take a go at one of the existing issues in tmpfs. You may not be able +to finish this in the limited amount of time, but you should at least be able +to do a detailed analysis of the problem. + + +## Lexical `..` Resolution + +For historical reasons, [[UNIX]] filesystems have a real (hard) `..` link from each +directory pointing to its parent. However, this is problematic, because the +meaning of "parent" really depends on context. If you have a symlink for +example, you can reach a certain node in the filesystem by a different path. If +you go to `..` from there, UNIX will traditionally take you to the hard-coded +parent node -- but this is usually not what you want. Usually you want to go +back to the logical parent from which you came. That is called "lexical" +resolution. + +Some application already use lexical resolution internally for that reason. It +is generally agreed that many problems could be avoided if the standard +filesystem lookup calls used lexical resolution as well. The compatibility +problems probably would be negligable. + +The goal of this project is to modify the filename lookup mechanism in the Hurd +to use lexical resolution, and to check that the system is still fully +functional afterwards. This task requires understanding the filename resolution +mechanism. It's probably a relatively easy task. + +See also [[GNU_Savannah_bug 17133]]. + +Possible mentors: ? + +Exercise: Make some modification to the name lookup mechanism. (More specific +suggestions welcome... :-) ) + + +## Secure `chroot` implementation + +As the Hurd attempts to be (almost) fully [[UNIX]]-compatible, it also implements a +`chroot()` system call. However, the current implementation is not really +good, as it allows easily escaping the `chroot`, for example by use of +[[passive_translators|hurd/translator]]. + +Many solutions have been suggested for this problem -- ranging from simple +workaround changing the behaviour of passive translators in a `chroot`; +changing the context in which passive translators are exectuted; changing the +interpretation of filenames in a chroot; to reworking the whole passive +translator mechanism. Some involving a completely different approch to +`chroot` implementation, using a proxy instead of a special system call in the +filesystem servers. + +The task is to pick and implement one approach for fixing chroot. + +This task is pretty heavy: it requires a very good understanding of file name +lookup and the translator mechanism, as well as of security concerns in general +-- the student must prove that he really understands security implications of +the UNIX namespace approach, and how they are affected by the introduction of +new mechanisms. (Translators.) More important than the acualy code is the +documentation of what he did: he must be able to defend why he chose a certain +approach, and explain why he believes this approach really secure. + +Possible mentors: ? + +Exercise: Make some modification to the chroot mechanism. (More specific +suggestions welcome :-) ) + + +## Hurdish Package Manager for the GNU System + +Most GNU/Linux systems use pretty sophisticated package managers, to ease the +management of installed software. These keep track of all installed files, and +various kinds of other necessary information, in special databases. On package +installation, deinstallation, and upgrade, scripts are used that make all kinds +of modifications to other parts of the system, making sure the packages get +properly integrated. + +This approach creates various problems. For one, *all* management has to be +done with the distribution package management tools, or otherwise they would +loose track of the system state. This is reinforced by the fact that the state +information is stored in special databases, that only the special package +management tools can work with. + +Also, as changes to various parts of the system are made on certain events +(installation/deinstallation/update), managing the various possible state +transitions becomes very complex and bug-prone. + +For the official (Hurd-based) GNU system, a different approach is intended: +making use of Hurd [[translators|hurd/translator]] -- more specifically their +ability to present existing data in a different form -- the whole system state +will be created on the fly, directly from the information provided by the +individual packages. The visible system state is always a reflection of the +sum of packages installed at a certain moment; it doesn't matter how this state +came about. There are no global databases of any kind. (Some things might +require caching for better performance, but this must happen transparently.) + +The core of this approach is formed by [[hurd/translator/stowfs]], which +creates a traditional unix directory structure from all the files in the +individual package directories. But this only handles the lowest level of +package management. Additional mechanisms are necessary to handle stuff like +dependencies on other packages. + +The goal of this task is to create these mechanisms. + +Possible mentors: Ben Asselstine (bing) + +Exercise: Write a translator that observes a directory tree using +dir_notify_changes(), and presents a file with a log of changes. + + +## Port the Debian Installer to the Hurd + +The primary means of distributing the Hurd is through Debian GNU/Hurd. +However, the installation CDs presently use an ancient, non-native installer. +The situation could be much improved by making sure that the newer *Debian +Installer* works on the Hurd. + +Some preliminary work has been done, see +<http://wiki.debian.org/DebianInstaller/Hurd>. + +The goal is to have the Debian Installer fully working on the Hurd. It +requires relatively little Hurd-specific knowledge. + +Possible mentors: Samuel Thibault (youpi) + +Exercise: Try to get one piece of the installer running on Hurd. diff --git a/community/gsoc/student_application_form.mdwn b/community/gsoc/student_application_form.mdwn new file mode 100644 index 00000000..d2ddd3ea --- /dev/null +++ b/community/gsoc/student_application_form.mdwn @@ -0,0 +1,92 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Some of the questions might seem quite intimidating at first. But don't +despair. Most certainly you won't be able to answer all of them right away -- +this is intentional. The goal is *not* to prove that you already know +everything. Rather, we want to see that you are willing to do your howework: To +do some actual research to find the necessary answers. + +Most likely you won't be able to get all answers without contacting us +directly. (On [[IRC]] or using [[mailing_lists]].) This is intentional as well. +We want to see that you are able and willing to communicate with us, to get the +information you need. This is also a chance for us to get to know you a bit :-) + +Also keep in mind that you do not need to give perfect answers when you first +hand in your application. The application process allows us to give feedback; +to request further input on anything that we need. + +With these explanations, we hope the questions don't look so scary anymore :-) + +**Note:** The application Form is [limited to 7500 +characters](http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_student_app). +This is not much. You will need to put some of your information on an external +server, and link to that. + +* Please describe the task of the project you want to work on, in your own +words. Be as specific as possible. It's not sufficient to rephrase the +description from the project ideas page; show us that you actually understand +what this task involves! Read the available documentation (and possibly code) +if necessary. And don't hesitate to ask us if you have questions :-) + +* Give a preliminary schedule for your work. The exact dates will obviously be +only guesses; but try to be specific about all the individual steps you will +have to do to complete the task. + +* What things will you have to learn to be able to complete the project? What +do you already know? + +* Why did you choose this project idea? What do you consider most appealing +about it? + +* Please describe your previous programming experience in detail. What +languages do you use? How long have you been programming, and how much? What +kind of programs have you written? What kind of programming (and related) work +are you enjoying most? + +* Have you been involved in any free software ("Open Source") projects yet? +Which projects, how long, and in what way have you been involved? + +* Please try to describe your understanding of how a free software project +works, how people interact in the community. Include anything specific you know +about the Hurd project. How do you imagine your interaction with the community +during GSoC? + +* Have you been active in the Hurd project/Hurd community before? In what way? + +* Are you running or have you run a Hurd system yet? What did you do with it? +How was your experience? + +* Have you ever compiled parts of the Hurd -- including the Hurd +servers/libraries, glibc, gnumach, or some standalone traslator? Which ones, +and how? Please go into details. + +* Please briefly describe the Hurd, including the goals, architecture etc. + +* What makes you interested in the Hurd? Why do you want to work on it? What is +your vision of it's future development? + +* Are you subscribed to bug-hurd@gnu.org, or other Hurd-related mailing lists? +Do you have general experience with mailing list communication? + +* Are you using the #hurd IRC channel on freenode? Are you familiar with IRC in +general? Do you have a permanent internet connection, and/or access to one +during the summer? + +* In what time zone do you live? Would you be able and willing to shift your +day/night rhythm to better match that of other Hurd developers, if necessary? + +* When are the exams and vacations at your University? + +* How much time do you intend to spend on your GSoC project per day/week during +the summer months? What other major activities will you engage in during the +summer? (Moving apartments, longer vacations, other obligations, etc.) If any, +how do you intend to make sure you will be able to dedicate sufficient time to +your project nevertheless? diff --git a/community/howto.mdwn b/community/howto.mdwn new file mode 100644 index 00000000..3f0d0d13 --- /dev/null +++ b/community/howto.mdwn @@ -0,0 +1,95 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + +This document briefly introduces how to set up the virtual network and connect the subhurd with the main hurd. + + +### 1. Set up the virtual network. + +####1.1 Patch and install GNU Hurd, GNU Mach and the GNU C library. + +Step 1: Get the Hurd and compile it. + + cvs -z3 -d:ext:username@cvs.savannah.gnu.org:/sources/hurd co -r zhengda-soc2008-virt-branch + + +Step 2: apply the [patch](http://www.assembla.com/spaces/VNetHurd/documents/b0eLzUxHmr3ymXab7jnrAJ/download/A%20patch%20of%20gnumach) on the GNU Mach. + +In order to connect the virtual network created in hurd with the external network, we need this patch. It enables the Hurd to set the Mach device into the promiscuous mode, so the real device can accept the packet that goes to the virtual device in hurd. +(This step is optional if we are only interested in creating a internal virtual network.) + +Step 3: apply the [patch](http://www.assembla.com/spaces/VNetHurd/documents/aJidqKp6ur3z-Nab7jnrAJ/download/A%20patch%20of%20glibc) on glibc. + +This patch enables the user to override the default socket server by using the environment variables SOCK_SERV_DIR or SOCK_SERV_%d (%d is the domain of the socket server). + + +#### 1.2 Set up the Hurd components to build the virtual network. + +In this section, I show how to create two virtual interfaces and run three pfinet servers. I assume that the source code of Hurd is in /root/hurd. + +Step 4: create the network device file in /dev with devnode. +The network device file is used to help other translators open the device. + + # settrans -acfg /dev/eth0 /root/hurd/devnode/devnode -d eth0 + +Step 5: create the virtual network device with eth-multiplexer. + +eth-multiplexer is responsible to create the virtual network device and dispatch the packet to the right clients that connect to the virtual device. It also connects the virtual network and the external network. + + # settrans -acfg /root/multiplexer /root/hurd/eth-multiplexer/eth-multiplexer -v 2 -i /dev/eth0 + +Step 6: create the network device files for the virtual network device with devnode. + + # settrans -acfg /dev/veth0 /root/hurd/devnode/devnode -d veth0 -M /root/multiplexer + # settrans -acfg /dev/veth1 /root/hurd/devnode/devnode -d veth1 -M /root/multiplexer + +Step 7: setup the filter translator eth-filter on the network device. This step is optional. +eth-filter is used to set up the traffic policy on the network device. + + # settrans -acfg /dev/fveth0 /root/hurd/eth-filter/eth-filter -i /dev/veth0 -S 192.168.8.0/24 -R 192.168.8.0/24 + # settrans -acfg /dev/fveth1 /root/hurd/eth-filter/eth-filter -i /dev/veth1 -S 192.168.8.0/24 -R 192.168.8.0/24 + +Step 8: setup the pfinet server on the virtual network device. + + # settrans -afgc /root/socket0/2 /root/hurd/pfinet/pfinet -i /dev/fveth0 -a 192.168.8.10 -g 192.168.8.1 -m 255.255.255.0 + # settrans -afgc /root/socket1/2 /root/hurd/pfinet/pfinet -i /dev/fveth1 -a 192.168.8.11 -g 192.168.8.1 -m 255.255.255.0 + # settrans -afgc /root/socket2/2 /root/hurd/pfinet/pfinet -i /dev/fveth1 -a 192.168.8.12 -g 192.168.8.1 -m 255.255.255.0 + + +#### 1.3 Run the command with the customized pfinet server. + +Step 9: Set environment variables to use the customized pfinet server. + +The environment variable of SOCK_SERV_DIR is used to override all socket servers and SOCK_SERV_%d to override a specific socket server. %d after SOCK_SERV_ is the domain of the protocol that the socket server supports. The environment variable SOCK_SERV_%d has the higher priority than SOCK_SERV_DIR. + + # export SOCK_SERV_2=/root/socket1/2 + +If the modified glibc isn't installed as the system default C library, set LD_LIBRARY_PATH environment. + + # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/the/path/of/glibc + +We can run any command now, for example, ping. + +A SHELL script is provided to run all translators I mentioned automatically: http://www.assembla.com/spaces/VNetHurd/documents/c2W71ABser3AIxab7jnrAJ/download/runmultiplexer. To use this script, the user must specify the source of the hurd tree (the default value is /root/hurd) and the path of the servers (the default value is /root) where they should be created. This script is only used to test all translators I mentioned above and shows all steps to set up the virtual network. + + +### 2. Connect the subhurd with the main hurd. + +In the main hurd, we still need to do Step 1-9. +We run subhurd, + + # /root/hurd/boot/boot -m eth0=/dev/fveth0 -m eth1=/dev/fveth1 servers.boot /dev/hd1s1 + +In the subhurd, we do Step 1, 4, 8. +Step 4: # settrans -acfg /dev/veth0 /root/hurd/devnode/devnode -d veth0 +Step 8: # settrans -afgc /servers/socket/2 /root/hurd/pfinet/pfinet -i /dev/veth0 -a 192.168.8.20 -g 192.168.8.1 -m 255.255.255.0 + +Now we can communicate from the subhurd with any pfinet server of the main Hurd that runs in the virtual network. diff --git a/community/hurdbr.mdwn b/community/hurdbr.mdwn new file mode 100644 index 00000000..d28e25f7 --- /dev/null +++ b/community/hurdbr.mdwn @@ -0,0 +1,11 @@ +Hurd Br is a brasilian, portuguese speaking, HUG. + +Hurd Br � um grupo de usu�rios de l�ngua portuguesa, principalmente brasileiros, do GNU/Hurd. + +Nossa lista de discuss�o �: <http://www.freelists.org/list/hurd-br> + +Creio que o prop�sito principal do grupo nesse momento � fazer com que o Hurd rode em cima do L4 :-), e mostrar que � poss�vel n�s termos um sistema livre que use um microkernel avan�ado (segunda gera��o)! + +-- [[Main/PietroFerrari]] - 03 Sep 2003 + +-- [[Main/RafaelK]] - 05 Oct 2004 diff --git a/community/livejournal.mdwn b/community/livejournal.mdwn new file mode 100644 index 00000000..9b845d9b --- /dev/null +++ b/community/livejournal.mdwn @@ -0,0 +1,6 @@ +Pop over to <http://www.LiveJournal.org> where I have [created a community](http://www.livejournal.com/community/gnu_hurd/). You can do the following to show your support: + +* list GNU/Hurd as one of your "Interests". You can even click through to make your interest visible to others, listing your name in the results of a related search with others that are interested. +* Subscribe to the gnu\_hurd community + +-- [[Main/GrantBow]] - 27 Feb 2004 diff --git a/community/meetings.mdwn b/community/meetings.mdwn new file mode 100644 index 00000000..b4a5a7b3 --- /dev/null +++ b/community/meetings.mdwn @@ -0,0 +1,24 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# Upcoming + +* [[Self-organised_2008]] + +# Past + +* [[FOSDEM_2008]] +* [[Weekend_at_stesie's|stesie_2007-10-12]] +* [[FOSDEM_2007]] +* [[RMLL_2006]] +* [[FOSDEM_2006]] +* [[RMLL_2005]] +* [[FOSDEM_2005]] +* ... diff --git a/community/meetings/fosdem_2005.mdwn b/community/meetings/fosdem_2005.mdwn new file mode 100644 index 00000000..984c6637 --- /dev/null +++ b/community/meetings/fosdem_2005.mdwn @@ -0,0 +1,16 @@ +[[meta copyright="Copyright © 2006, 2008 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]]."]]"""]] + +<http://fosdem.org/2005> + +[Article on KernelTrap](http://kerneltrap.org/node/5122) + +[FOSDEM 2005 Hurd Developers' +Mini-Symposium](http://people.debian.org/~neal/FOSDEM-2005/) diff --git a/community/meetings/fosdem_2006.mdwn b/community/meetings/fosdem_2006.mdwn new file mode 100644 index 00000000..c775b658 --- /dev/null +++ b/community/meetings/fosdem_2006.mdwn @@ -0,0 +1,246 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 +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]]."]]"""]] + +<http://fosdem.org/2006> + +FOSDEM will take place on February 25th/26th at the Université Libre de +Bruxelles. + +# Who And When + +<!-- TODO. Use the table plugin. See `fosdem_2007.mdwn'. --> +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Name</strong></th> + <th bgcolor="#99CCCC"><strong>Attending</strong></th> + <th bgcolor="#99CCCC"><strong>Arrival</strong></th> + <th bgcolor="#99CCCC"><strong>Return</strong></th> + <th bgcolor="#99CCCC"><strong>Share room with us</strong></th> + </tr> + <tr> + <td>[[AurelienJarno]]</td> + <td> yes </td> + <td> Sat </td> + <td> Sun </td> + <td> probably </td> + </tr> + <tr> + <td>[[BasWijnen]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[ChristopherBodenstein]]</td> + <td> yes </td> + <td> N/A </td> + <td> N/A </td> + <td> no </td> + </tr> + <tr> + <td>[[GianlucaGuida]]</td> + <td> yes </td> + <td> Sat </td> + <td> Mon </td> + <td> yes </td> + </tr> + <tr> + <td>[[GuillemJover]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[IsabelHuenig]]</td> + <td> no </td> + <td> N/A </td> + <td> N/A </td> + <td> N/A </td> + </tr> + <tr> + <td>[[JeroenDekkers]]</td> + <td> yes </td> + <td> ? </td> + <td> ? </td> + <td> no </td> + </tr> + <tr> + <td>[[JohanRydberg]]</td> + <td> no </td> + <td> N/A </td> + <td> N/A </td> + <td> N/A </td> + </tr> + <tr> + <td>[[JordiMallach]]</td> + <td> yes </td> + <td> N/A </td> + <td> N/A </td> + <td> no </td> + </tr> + <tr> + <td>[[MartinMichlmayr]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[MarcoGerards]]</td> + <td> yes </td> + <td> Thu </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[MarcusBrinkmann]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[MatthieuLemerre]]</td> + <td> probably not </td> + <td> ? </td> + <td> ? </td> + <td> yes, if coming </td> + </tr> + <tr> + <td>[[MichaelAblassmeier]]</td> + <td> probably not </td> + <td> Fri </td> + <td> Sun </td> + <td> yes, if coming </td> + </tr> + <tr> + <td>[[MichaelBanck]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[NealWalfield]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[OgnyanKulev]]</td> + <td> yes </td> + <td> Thu </td> + <td> Sun </td> + <td> yes </td> + </tr> + <tr> + <td>[[PeterDeSchrijver]]</td> + <td> yes </td> + <td> N/A </td> + <td> N/A </td> + <td> no </td> + </tr> + <tr> + <td>[[OlafBuddenhagen]]</td> + <td> yes </td> + <td> Fri </td> + <td> ? </td> + <td> yes </td> + </tr> + <tr> + <td>[[RobertLemmen]]</td> + <td> no </td> + <td> N/A </td> + <td> N/A </td> + <td> N/A </td> + </tr> + <tr> + <td>[[SamuelThibault]]</td> + <td> no </td> + <td> N/A </td> + <td> N/A </td> + <td> N/A </td> + </tr> + <tr> + <td>[[SoerenSchulze]]</td> + <td> no </td> + <td> N/A </td> + <td> N/A </td> + <td> N/A </td> + </tr> + <tr> + <td>[[Stefan_Siegl|stesie]]</td> + <td> yes </td> + <td> Thu </td> + <td> Mon </td> + <td> yes </td> + </tr> + <tr> + <td>[[Thomas_Schwinge|tschwinge]]</td> + <td> yes </td> + <td> Thu </td> + <td> Mon </td> + <td> yes </td> + </tr> + <tr> + <td>[[TheDuck]]</td> + <td> yes </td> + <td> Fri </td> + <td> Sun </td> + <td> no (with [[HurdFr]]) </td> + </tr> +</table> + + +# General + +There will be a [Keysigning +party](http://wiki.fosdem.org/tiki-index.php?page=KeySigningParty). + + +# Youth Hostel + +<http://www.vjh.be/jeugdherbergen/brussel/main1-5n7-1.htm> + +<http://link2.map24.com/?street0=Heilige%20Geeststraat&zip0=1000&city0=Br%FCssel&state0=&country0=be&name0=&lid=43c26f81&ol=de-de> + +Heilige Geeststraat 2 + +1000 Brüssel + +Phone: +32(0)2 511 04 36 + +Fax: +32(0)2 512 07 11 + +<brussel@vjh.be> + + +# What + +We don't have a Developers Room at FOSDEM, but we could book a meeting room at +the hostel (40 EUR for half a day) + +There is a pre-FOSDEM meeting on Friday night in the Roi d'Espagne on Grand +Place + + +# Photos + +Gianluca: <http://it.gnu.org/~gianluca/images/FOSDEM2006/> + +Michael: <http://people.debian.org/~mbanck/photos/fosdem_2006/> + +Ogi: <http://debian.fmi.uni-sofia.bg/~ogi/gallery/20060318-fosdem2006/> + +Stefan: <http://brokenpipe.de/misc/images/index.cgi?d=fosdem-2006> diff --git a/community/meetings/fosdem_2007.mdwn b/community/meetings/fosdem_2007.mdwn new file mode 100644 index 00000000..c320c1fc --- /dev/null +++ b/community/meetings/fosdem_2007.mdwn @@ -0,0 +1,144 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 +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]]."]]"""]] + +<http://fosdem.org/2007> + +FOSDEM will take place on February 24th/25th at the Université Libre de +Bruxelles. + +# Who And When + +[[table class="table_style_1" data=""" +"Name","Attending","Arrival","Return","Share room with us" +"[[AlfredoBeaumont]]","no","n/a","n/a","n/a" +"[[AndrewResch]]","no","n/a","n/a","n/a" +"[[BenAsselstine]]","no","n/a","n/a","n/a" +"[[Barry_de_Freese|bddebian]]","undecided; help convince the boss","?","?","?" +"[[BasWijnen]]","no","n/a","n/a","n/a" +"[[ChristopherBodenstein]]","?","?","?","?" +"[[ColinLeitner]] and<br />KaroRilling","yes","2007-02-23<br />late","2007-02-26","**yes<br />(two persons)**" +"[[CyrilBrulebois]]","yes","2007-02-23<br />late","?","no (HurdFR)" +"Gaël Le Mignot","no","n/a","n/a","n/a" +"[[GianlucaGuida]]","no","n/a","n/a","n/a" +"[[GuillaumeLibersat]]","yes","?","?","no (HurdFR)" +"[[GuillemJover]]","no","n/a","n/a","n/a" +"[[JeroenDekkers]]","yes","2007-02-22<br />15:30","2007-02-26","**yes**" +"[[JohanRydberg]]","no","n/a","n/a","n/a" +"[[JordiMallach]]","?","?","?","?" +"[[Main/TheDuck]]","yes","2007-02-23<br />late","?","no (HurdFR)" +"[[MarcPoulhies]]","no","n/a","n/a","n/a" +"[[MarcoGerards]]","most probably not","n/a","n/a","n/a" +"[[MarcusBrinkmann]]","yes","2007-02-<strike>22</strike>**23**<br />12:38","2007-02-<strike>26</strike>**25**<br />19:00","**yes**" +"[[MatthieuLemerre]]","no","n/a","n/a","n/a" +"[[ManuelMenal]]","?","?","?","?" +"[[MichaelBanck]]","yes","2007-02-22<br />12:10","2007-02-26<br />11:05","**yes**" +"[[NealWalfield]]","no","n/a","n/a","n/a" +"[[NicolasCenta]]","yes","?","?","no (HurdFR)" +"[[OgnyanKulev]]","no","n/a","n/a","n/a" +"[[OlafBuddenhagen]]","yes","probably 2007-02-22<br />14:32","2007-02-26","**yes**" +"[[PeterDeSchrijver]]","yes","?","?","no" +"[[RichardBraun]]","yes","2007-02-23<br />late","?","no (HurdFR)" +"[[RolandMcGrath]]","?","?","?","?" +"[[SamuelThibault]]","yes","2007-02-24<br />10h17","2007-02-25<br />19h43","**yes**" +"[[SoerenSchulze]]","yes","2007-02-23<br />20:03","2007-02-25","**yes**" +"[[Stefan_Siegl|stesie]]","yes","2007-02-22<br />12:10","2007-02-26<br />11:05","**yes**" +"[[ThomasBushnell]]","?","?","?","?" +"[[Thomas_Schwinge|tschwinge]]","yes","2007-02-22<br />12:10","2007-02-26<br />11:05","**yes**" +"[[TimRetout]]","yes","2007-02-23<br />lunchtime","2007-02-25<br />evening","no" +"[[TomBachmann]]","no","n/a","n/a","n/a" +"[[WouterVanHeyst]]","yes","2007-02-22<br />15:30","2007-02-26","**yes**" +"""]] + +[[HurdFR]] page: <http://wiki.hurdfr.org/index.php/FOSDEM2007> + + +# General + +There will be a keysigning party, see <http://fosdem.org/2007/keysigning>. + + +# Accommodation + +## A-XL flathotel + +<http://www.axlflathotel.be/fr/tarifs.html> + +Fully booked. + + +## Youth hostel _Bruegel_ + +<http://www.vjh.be/jeugdherbergen/brussel/mainE.htm> + +Heilige Geeststraat 2 +1000 Brussels +Phone: +32(0)2 511 04 36 +Fax: +32(0)2 512 07 11 +<brussel@vjh.be> + +[Map via Google maps](http://maps.google.com/maps?f=q&hl=en&q=Heilige+Geeststraat+2,+1000+Brussels,+Belgium&sll=50.846056,4.344578&sspn=0.022599,0.086517&ie=UTF8&om=1&z=15&ll=50.843942,4.351444&spn=0.0113,0.043259&iwloc=cent). +[Map via Map24](http://link2.map24.com/?street0=Heilige%20Geeststraat&zip0=1000&city0=Br%FCssel&state0=&country0=be&name0=&lid=43c26f81&ol=de-de). + +Been there in 2006. It was okay. + +[[SamuelThibault]] booked rooms at ~ 18.60€ there: + +[[table class="table_style_1" data=""" +"Night of...","Persons" +"2007-02-22","<strike>7</strike>**6**" +"2007-02-23","10" +"2007-02-24","11" +"2007-02-25","<strike>9</strike>**8**" +"""]] + +i.e including sdschulze, who hereby confirms + +We need someone (not me, since I'm arriving on Saturday) to get the keys before +20:00. Reservations last until 16:00, so either he gets the keys before 16:00, +or I'll just need to call for confirming the reservation + + +## Sleep Well Youth Hostel + +<http://www.sleepwell.be/> + +Fully booked. + + +## Youth Hostel Can Gogh + +<http://chab.be/> + +No under 18-ers and over 35-ers allowed. + +FULL + + +## Auberge de Jeunesse Jacques Brel + +<http://www.laj.be/html/fr/auberges/brel/aubergesbrel_01.htm>. + +Samuel knows that one and liked it. + +FULL + + +# What + +We don't have a Developers Room at FOSDEM. + +There is again a pre-FOSDEM meeting on Friday night in the Roi d'Espagne on +Grand Place, see <http://fosdem.org/2007/beerevent>. + + +# Photos + +Stefan: <http://brokenpipe.de/misc/images/index.cgi?d=fosdem-2007> diff --git a/community/meetings/fosdem_2008.mdwn b/community/meetings/fosdem_2008.mdwn new file mode 100644 index 00000000..47d7771a --- /dev/null +++ b/community/meetings/fosdem_2008.mdwn @@ -0,0 +1,181 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 +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]]."]]"""]] + +<http://fosdem.org/2008> + +FOSDEM will take place on February 23rd/24th at the Université Libre de +Bruxelles. + + +# Who And When + +[[table class="table_style_1" data=""" +"Name","Attending","Arrival","Return","Share room with us" +"Alfredo Beaumont","?","?","?","?" +"Andrew Resch","?","?","?","?" +"Ben Asselstine","?","?","?","?" +"[[Barry_de_Freese|bddebian]]","?","?","?","?" +"[[Bas_Wijnen|baswijnen]] and girlfriend","yes","Friday","Monday","yes (two)" +"Christian Dietrich","no","n/a","n/a","n/a" +"Christopher Bodenstein","?","?","?","?" +"Colin Leitner","no","n/a","n/a","n/a" +"Cyril Brulebois","?","?","?","?" +"Daniel Wagner","?","?","?","?" +"Fredrik Hammar","?","?","?","?" +"Gaël Le Mignot","?","?","?","?" +"[[Gianluca_Guida|GianlucaGuida]]","yes","Thursday","Monday","yes" +"Guillaume Libersat","?","?","?","?" +"Guillem Jover","?","?","?","?" +"Jeff Bailey","?","?","?","?" +"Jeroen Dekkers","?","?","?","?" +"Johan Rydberg","?","?","?","?" +"Jordi Mallach","?","?","?","?" +"Marc Dequènes","?","?","?","?" +"Marc Poulhies","?","?","?","?" +"Marco Gerards","?","?","?","?" +"Marcus Brinkmann","yes","Friday, 17:00","Monday, 12:00","yes" +"Mark Kettenis","?","?","?","?" +"Matthieu Lemerre","?","?","?","?" +"Manuel Menal","?","?","?","?" +"[[Michael_Banck|MichaelBanck]]","yes","Friday, 17:00","Monday, 14:00","yes" +"Neal Walfield","yes","Friday, 15:20","Monday, 12:00","yes" +"Nicolas Centa","?","?","?","?" +"Ognyan Kulev","?","?","?","?" +"Olaf Buddenhagen","yes","Fr 15:27/15:32/15:36 (nord/central/midi)","Mo 12:09 (central)","yes" +"Peter de Schrijver","?","?","?","?" +"Richard Braun","no","n/a","n/a","n/a" +"Roland McGrath","?","?","?","?" +"[[Samuel_Thibault|SamuelThibault]]","yes","Thursday","Monday","yes" +"[[Soeren_Schulze|SoerenSchulze]]","yes","Friday 19:43/19:46 Midi/Central","Sunday 13:14 Central","yes" +"[[Stefan_Siegl|stesie]]","no","n/a","n/a","n/a" +"Thomas Bushnell","?","?","?","?" +"[[Thomas_Schwinge|tschwinge]]","yes","Friday, 17:00","Monday, 14:00","yes" +"Tim Retout","plans to go","?","?","no" +"[[Tom_Bachmann|tombachmann]]","?","?","?","?" +"[[Vikram_Vincent|vincentvikram]]","no","n/a","n/a","n/a" +"Wouter van Heyst","?","?","?","?" +"Yoshinori K. Okuji","?","?","?","?" +"""]] + +# Accommodation + +(Large) evening counts: + +[[table class="table_style_1" data=""" + , Bas, Gianluca, Marcus, Michael, Neal, Olaf, Samuel, Soeren, Thomas, Total +Thu 21, , 1? , *<strike>1</strike>*, , , , 1 , , *<strike>1</strike>*, *<strike>4</strike>* 2 +Fri 22, 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,10 +Sat 23, 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,10 +Sun 24, 2 , 1 , 1 , 1 , 1 , 1 , 1 , *<strike>1</strike>*, 1 , *<strike>10</strike>* 9 +"""]] + +## The Moon Hotel + +Samuel booked rooms at The Moon Hotel, Rue de la Montagne 4B + +- one triple room for the night of Thirsday 21 +- two double rooms and two triple rooms for the nights of Friday 22, Saturday 23 and Sunday 24. +(these were the last rooms of the hotel) + +i.e. 3+10*3 nights for a total cost of 1104€, which makes 33.5€/night. + +in each room there is a double bed, so some people will have to be "couples". + +Breakfast is included, there is hotspot wifi + +check-in can be between 13:00 and 00:00, departure is before 11:00 + + +## A-XL flathotel + +<http://www.axlflathotel.be/fr/tarifs.html> + + +## Youth hostel _Bruegel_ + +<http://www.vjh.be/jeugdherbergen/brussel/mainE.htm> + +Heilige Geeststraat 2 +1000 Brussels +Phone: +32(0)2 511 04 36 +Fax: +32(0)2 512 07 11 +<brussel@vjh.be> + +[Map via Google maps](http://maps.google.com/maps?f=q&hl=en&q=Heilige+Geeststraat+2,+1000+Brussels,+Belgium&sll=50.846056,4.344578&sspn=0.022599,0.086517&ie=UTF8&om=1&z=15&ll=50.843942,4.351444&spn=0.0113,0.043259&iwloc=cent). +[Map via Map24](http://link2.map24.com/?street0=Heilige%20Geeststraat&zip0=1000&city0=Br%FCssel&state0=&country0=be&name0=&lid=43c26f81&ol=de-de). + +Been there in 2006 and 2007. It was okay. + +Rooms at ~ 18.60€ + +gaah, Full! + +<!-- +[[SamuelThibault]] booked rooms at ~ 18.60€ there: + +[[table class="table_style_1" data=""" +"Night of...","Persons" +"2007-02-22","<strike>7</strike>**6**" +"2007-02-23","10" +"2007-02-24","11" +"2007-02-25","<strike>9</strike>**8**" +"""]] + +i.e including sdschulze, who hereby confirms +--> + +We need someone to get the keys before +20:00. Reservations last until 16:00, so either he gets the keys before 16:00, +or we just need to call for confirming the reservation + +[[I|tschwinge]] seem to remember something that in 2007 the Madame at the +reception wasn't really happy with us arriving later than 16:00 even with +having had confirmed that via a phone call. + + +## Sleep Well Youth Hostel + +<http://www.sleepwell.be/> + +Overbooked + +## Youth Hostel Can Gogh + +<http://chab.be/> + +No under 18-ers and over 35-ers allowed. + + +## Auberge de Jeunesse Jacques Brel + +<http://www.laj.be/html/fr/auberges/brel/aubergesbrel_01.htm>. + +Samuel knows that one and liked it. antrik too :-) + +Unfortunately it's already full + + +# What + +There will be a keysigning party, see <http://fosdem.org/2008/keysigning>. + +We don't have a Developers Room at FOSDEM. + +There is again a pre-FOSDEM meeting on Friday night, see <http://fosdem.org/2008/beerevent>. + +Both Neal and Bas would be happy to show their recent kernel works. + + +<!-- +# Photos + +Put links to your photos here. +--> diff --git a/community/meetings/rmll_2006.mdwn b/community/meetings/rmll_2006.mdwn new file mode 100644 index 00000000..74ad21c9 --- /dev/null +++ b/community/meetings/rmll_2006.mdwn @@ -0,0 +1,108 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 +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]]."]]"""]] + +The 7th Rencontres Mondiales du Logiciel Libre (also known as Libre Software +Meeting) will be held on July 4th-8th 2006 in Vandoeuvre-les-Nancy. + +There won't be a track of OS-related talks as it has been last year, see +<http://lists.gnu.org/archive/html/bug-hurd/2006-06/msg00005.html>. + +Dorms have to be reserved on <http://resa.rmll.info/> as soon as possible. + +# Who And When + +<!-- TODO. Use the table plugin. See `fosdem_2007.mdwn'. --> +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Name</strong></th> + <th bgcolor="#99CCCC"><strong>Attending</strong></th> + <th bgcolor="#99CCCC"><strong>Arrival</strong></th> + <th bgcolor="#99CCCC"><strong>Return</strong></th> + </tr> + <tr> + <td>[[JeroenDekkers]]</td> + <td> perhaps </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[ManuelMenal]]</td> + <td> perhaps </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[MarcoGerards]]</td> + <td> no </td> + <td> n/a </td> + <td> n/a </td> + </tr> + <tr> + <td>[[MarcusBrinkmann]]</td> + <td> probably not </td> + <td> n/a </td> + <td> n/a </td> + </tr> + <tr> + <td>[[MichaelBanck]]</td> + <td> probably not </td> + <td> n/a </td> + <td> n/a </td> + </tr> + <tr> + <td>[[NealWalfield]]</td> + <td> perhaps </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[PeterDeSchrijver]]</td> + <td> no </td> + <td> n/a </td> + <td> n/a </td> + </tr> + <tr> + <td>[[OlafBuddenhagen]]</td> + <td> ? </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[SamuelThibault]]</td> + <td> yes </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[SoerenSchulze]]</td> + <td> perhaps </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[Stefan_Siegl|stesie]]</td> + <td> no </td> + <td> n/a </td> + <td> n/a </td> + </tr> + <tr> + <td>[[Thomas_Schwinge|tschwinge]]</td> + <td> perhaps </td> + <td> ? </td> + <td> ? </td> + </tr> + <tr> + <td>[[YoshinoriOkuji]]</td> + <td> perhaps </td> + <td> ? </td> + <td> ? </td> + </tr> +</table> diff --git a/community/meetings/self-organised_2008.mdwn b/community/meetings/self-organised_2008.mdwn new file mode 100644 index 00000000..dc86afc2 --- /dev/null +++ b/community/meetings/self-organised_2008.mdwn @@ -0,0 +1,50 @@ +[[meta copyright="Copyright © 2008 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="Self-organised meeting, somewhere in 2008"]] + +This meeting will be held in a to-be-determined place, at a to-be-determined time. This page hopes to help finding a good time and place, and finding out who wants to come. + +# Who wants to come? + +Please add yourself here. + +* [[Bas_Wijnen|baswijnen]] (no preference for specific times) +* [[Thomas_Schwinge|tschwinge]] +* [[Tom_Bachmann|tombachmann]] (weekend in the middle of germany would be preferred) +* [[Gianluca_Guida|GianlucaGuida]] (wherever, whenever) + +# Who will come? + +* (to be filled in when the date is set) + +# When is a good time? + +Please add any suggestions here, and add to your name above if that time is good for you. + +# Where is a good place? + +## Somewhere in Germany + +This likely has the benefit of being relatively close to most people + +## Somewhere in Italy + +This likely has the benefit of better weather. ;-) + +## Venice (Italy) + +This certainly has the benefit of being in an awesome place. :-) Perhaps we shouldn't care too much about that, since we're mostly busy with ourselves anyway. Or perhaps we should: beauty helps creativity (wow, I should use this as my next catch-phrase to convince a girl to stay with me: I will fail again, but with style! Gianluca). + +# What will we do? + +There will be talks with discussions: + +* Bas will give a talk about Capability-microkernel-based operating systems, with an emphasis on how this can be useful for the Hurd. The talk hopes to get people enthousiastic for the concept, and it will be tried to keep it interesting for people who are not yet familiar with the concepts. diff --git a/community/meetings/stesie_2007-10-12.mdwn b/community/meetings/stesie_2007-10-12.mdwn new file mode 100644 index 00000000..8559c662 --- /dev/null +++ b/community/meetings/stesie_2007-10-12.mdwn @@ -0,0 +1,23 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +On the weekend 2007-10-12 to 14 [[Stefan_Siegl|stesie]] invited Hurd people. +Colin Leitner and [[Thomas_Schwinge|tschwinge]] came, as well as novice +Christian Dietrich. [[Michael_Banck|MichaelBanck]] also joined in for one +evening. + +Stefan and Christian mainly worked on [[hurd/translator/pfinet]] and +[DHCP](http://lists.gnu.org/archive/html/bug-hurd/2007-10/msg00036.html), +Michael on the [orbit2 +issue](http://lists.debian.org/debian-hurd/2007/09/msg00067.html) and Colin and +Thomas on PAE support for GNU Mach, amongst other things. + +Pictures can be found at +<http://brokenpipe.de/misc/images/index.cgi?d=hackend-200710>. diff --git a/community/orkut.mdwn b/community/orkut.mdwn new file mode 100644 index 00000000..2e7aae09 --- /dev/null +++ b/community/orkut.mdwn @@ -0,0 +1,3 @@ +As of March 6, 2004 the Gnu/Hurd community on <http://www.orkut.com/> has a membership of 89 people. An invitation from a current Orkut member is required to register with the Orkut site and join us. + +-- [[Main/GrantBow]] - 06 Mar 2004 diff --git a/community/procfs.mdwn b/community/procfs.mdwn new file mode 100644 index 00000000..1139c718 --- /dev/null +++ b/community/procfs.mdwn @@ -0,0 +1,395 @@ +[[meta copyright="Copyright © 2008 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="GNU/Linux compatible procfs"]] + +[[!toc ]] +---- + + Project Name +---- + +GNU/Linux compatible procfs pseudo-filesystem + +------ + + Project Description +---- +I wish to provide a sophisticated procfs pseudo-filesystem to “the Hurd”. An implementation of /proc pseudo-filesystem already exists in hurdextras repository. After skimming through the code it is clear that it needs a lot +of rework and tuning. Experiences from GNU/Linux have proven procfs to be a very useful facility in implementing +many of the process management tools. So the goal of this project is to rework on the existing procfs on “the Hurd” +so that its not only reliable and robust but also more importantly it is fully compatible with the GNU/Linux procfs. +The project thus aims at making the GNU/Linux process management tools like top, sysctl, kill, +skill, nice, snice, pgrep, free, tload, uptime, fuser, killall, pidof, pstree, etc., to run out of the box. + +------ + + Mentor +---- + +Olaf Buddenhagen + +------ + + Project Schedule +---- + +##### 1. Initial preparation and migration (Community Bonding Period: has already started – May 25th) + + This phase involves improving my translator programming skills by gaining + hands-on experience in it and becoming well versed in it. I will also go + through the Hurd code to understand its architecture in depth and will read + documentations related to obtaining process related information in Hurd. + This phase also involves the migration of existing procfs to use libnetfs. + +##### 2. Analysis and Design (May 26th – June 11th ) + + This phase involves the analysis of previous migration. Also involves + interacting with the mentor, the Hurd community and other people involved + in development of ps. tools to draw the exact design of the proposed procfs + including the algorithms required for coding. + +##### 3. Coding Stage I (June 12th – June 22nd ) + + Finishing up the migration to libnetfs based on the finalized design and + making necessary changes to the existing procfs. Coding up to + /proc/<pid>/exe in the features list. + +##### 4. Coding Stage II (June 23rd – July 13th) + + Involves coding of the features from /proc/<pid>/environ, up to + /proc/<pid>/maps. These contain most of the information required for ps. + tools and hence form the heart of the project. Will be completed by + mid-term evaluation deadline. + +##### 5. Coding Stage III (July 14th – July 26th ) + + Coding the rest of the features in the list including any necessary + features that may be added in the analysis phase. + +##### 6. Final Testing and evaluation (July 27th – August 8th ) + + Closely interacting with the community and requesting them to help me + in overall testing and reviewing and making changes as per their + suggestions. Also involves testing with the ps. tools and consolidating + the documentation. + +##### 7. Packaging and Wrap-up (August 9th - August 18th ) + + Final phase of testing and fixing remaining bugs. Working with the + community to merge the project with the CVS HEAD of Hurd. Documentation + reviews, making necessary changes as per the suggestions and wrapping + up the documentation. + +------ + + Deliverables +---- + +1. /proc filesystem that uses libnetfs. Using this library makes it easier for implementing a large set of functionalities and hence makes the implementation robust. +2. The core GNU/Linux compatible /proc filesystem with functionalities to support and provide information for ps. tools like procps, psmisc etc. + +Non-code deliverables include an exhaustive Documentation. This documents the code of the Hurd's procfs which explains in detail the implementation of each of the functionalities of procfs implemented +during the course of this project. + +------ + + Code Repository +---- + +[http://github.com/madhusudancs/procfs/tree/master](http://github.com/madhusudancs/procfs/tree/master) + +Clone URL: [git://github.com/madhusudancs/procfs.git](git://github.com/madhusudancs/procfs.git) + +------ + + Progress +---- + +1. Packages Ported: [http://www.madhusudancs.info/parted-hurdi386 parted-1.7.1] +2. Packages Porting in progress: autogen_1:5.9.4-1. Error installing texlive-bin. Error tracked to some post installation scripts of texlive-bin. Problem seems to be in fmutil. Trying to debug. +3. Have to start coding libnetfs skeleton for procfs translator. + +**Target for next week** + + Task To be completed by Status Now + + 1. Finish Defining the necessary netfs call backs 25-05-2008 Completed + 2. Create Directories for each process with pid directory name 27-05-2008 Completed + 3. Create stat file for each process within this directory and<br/> + put atleast 1 information into it 31-05-2008 In Progress + +**Documentations Read/Reading** + +1. [Hurd Hacking Guide](http://www.gnu.org/software/hurd/hacking-guide/hhg.html) (Have Concentrated mainly on Translator part) +2. [Linux Kernel Implementation of procfs](http://users.sosdg.org/~qiyong/lxr/source/Documentation/filesystems/proc.txt) + +**Code Being Read** + +1. libps +2. libnetfs +3. [procfs implementation in Linux kernel](http://users.sosdg.org/~qiyong/lxr/source/fs/proc/) +4. ftpfs (In Hurd main) +5. cvsfs (In Hurd extras) +6. xmlfs (In Hurd extras) +7. httpfs (In Hurd extras) +8. gopherfs (In Hurd extras) +9. libfuse (In Hurd extras) +10. procfs (libtrivfs based, In Hurd extras) + +------ + + Post Mid-Term Road Map +---- + + +####Already Implemented + +#####File - /proc/<PID>/stat + +* pid + +* comm + +* state + +* ppid + +* pgrp + +* session + +* tty_nr + +* tpgid + +* minflt +> The number of minor faults the process has made which have not required loading a memory page +> from disk. + +* majflt +> The number of major faults the process has made which have required loading a memory page from +> disk. + +* utime +> The number of jiffies that this process has been scheduled in user mode. + +* stime +> The number of jiffies that this process has been scheduled in kernel mode. + +* priority +> The standard nice value, plus fifteen. The value is never negative in the kernel. + +* num_threads +> Number of threads in this process. + +* starttime +> The time in jiffies the process started after system boot. + +* vsize +> Virtual memory size in bytes. + +* rss +> Resident Set Size: number of pages the process has in real memory, minus 3 for administrative +> purposes. This is just the pages which count towards text, data, or stack space. This does not +> include pages which have not been demand-loaded in, or which are swapped out. + +* itrealvalue +> The time in jiffies before the next SIGALRM is sent to the process due to an interval timer. + +* nswap +> Number of pages swapped (not maintained). + +* cnswap +> Cumulative nswap for child processes (not maintained). + +* flags +> PF_* fields defined in (Not Linux compatible, but nearly says the something Linux says) + +* nice +> The nice value ranges from 19 to -19. + +* cutime +> The number of jiffies that this process’s waited-for children have been scheduled in user +> mode. + +* cstime +> The number of jiffies that this process’s waited-for children have been scheduled in kernel mode. + +#####File - /proc/<PID>/statm + +* size +> total program size + +* resident +> resident set size + +* lib +> library + +* dt +> dirty pages + +####I already know the where the information is exactly available. + +#####Other Per-PID Files + +#####* /proc/<PID>/exe + +#####* /proc/<PID>/environ + +#####Non Per-PID Files + +#####* /proc/version + + +####I know where the information is available roughly, but need to look in detail to extract the exact information. + +* cminflt +> The number of minor faults that the process’s waited-for children have made. + +* cmajflt +> The number of major faults that the process’s waited-for children have made. + +* signal +> The bitmap of pending signals. + +* blocked +> The bitmap of blocked signals. + +* sigignore +> The bitmap of ignored signals. + +* sigcatch +> The bitmap of caught signals. + +* policy +> Scheduling policy. + +#####File - /proc/<PID>/statm + +* text +> text (code) + +#####Other Per-PID Files + +#####* /proc/<PID>/cwd + +####The information may be available, but needs to be searched to know where it will be. + +#####File - /proc/<PID>/stat + +* rlim +> Current limit in bytes on the rss of the process (usually 4294967295 on i386). + +* startcode +> The address above which program text can run. + +* endcode +> The address below which program text can run. + +* startstack +> The address of the start of the stack. + +* kstkesp +> The current value of esp (stack pointer), as found in the kernel stack page for the process. + +* kstkeip +> The current EIP (instruction pointer). + +* exit_signal +> Signal to be sent to parent when we die. + +#####File - /proc/<PID>/statm + +* share +> shared pages + +* data +> data/stack + +#####Other Per-PID File + +#####* /proc/<PID>/root + +#####Non Per-PID Files + +#####* /proc/stat + +#####* /proc/meminfo + +####I fear information may not be available. + +#####File - /proc/<PID>/stat + +* wchan +> This is the "channel" in which the process is waiting. It is the address of a system call, and +> can be looked up in a namelist if you need a textual name. (If you have an up-to-date +> /etc/psdatabase, + +* processor +> CPU number last executed on. + +* rt_priority +> Real-time scheduling priority + +* delayacct_blkio_ticks +> Aggregated block I/O delays, measured in clock ticks (centiseconds). + + +###Newly added to Roadmap(but these were the original goals of the project) + +#### procps tools need to be ported so that they run on top of the procfs + +> ##### pgrep - Done +> ##### pkill - Done +> ##### killall - Done +> ##### pstree - Done +> ##### top - Mostly Done (except per-PID shared memory field, and non per-PID caches and buffers field) +> ##### free - Mostly Done (Ditto from above) +> ##### htop - Mostly Done (Ditto again) +> ##### watch - Done +> ##### tload - I think it is done. (Need someone to test it) +> ##### libgtop - In progress +> ##### gnome-system-moitor - In progress + + + +------ + + Code Updates +---- + +1. May, 14, 2008 +2. May, 18, 2008 +3. May, 28, 2008 +4. June, 1, 2008 +5. June, 2, 2008 +6. June, 4, 2008 +7. June, 5, 2008 (3 commits, 00:30 HRS, 02:30 HRS, 11:15HRS, all in IST) +8. June, 9, 2008 +9. June, 19, 2008 (Targets 1 and 2 successfully accomplished. Duration between the commits became inevitably longer because of the large amount of time spent on debugging the code.) + +------ + + Contact Details +---- + +Name : Madhusudan.C.S + +Email : [madhusudancs@gmail.com](mailto:madhusudancs@gmail.com) + +Blog : [http://www.madhusudancs.info](http://www.madhusudancs.info/) + +Detailed proposal: [http://www.madhusudancs.info/gnu-hurd-procfs-proposal](http://www.madhusudancs.info/gnu-hurd-procfs-proposal) + +Google Summer of Code Site Link: [Abstract](http://code.google.com/soc/2008/hurd/appinfo.html?csaid=D2E9266819D2EEF9) + + diff --git a/community/scolobb.mdwn b/community/scolobb.mdwn new file mode 100644 index 00000000..2de8eb4f --- /dev/null +++ b/community/scolobb.mdwn @@ -0,0 +1,134 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +# scolobb + +Sergiu Ivanov, interested non-student + +Mail: <mailto:unlimitedscolobb@gmail.com> + +Project: Namespace-based translator selection + +--- + +## Current Task + +Write the filesystem proxy for namespace-based translator selection (*nsmux*). + +The code is at <http://github.com/scolobb/nsmux/tree/master>. + +--- + +###Did this week + +* Modified the node cache so that it maintains shadow nodes alive. + +###Plans for the next week + +* Implement the shutting down of translator stacks when *nsmux* is asked to go away (in case **antrik** considers that necessary). + +* Make *nsmux* provide the access to the translator stack of the real node, in case a translator (mainly, a filter) should ask for its underlying node to be opened in O_NOTRANS mode. + +--- + +###Current Status + +####DONE: + +* The skeleton which mirrors the filesystem. + +* Provide proxy nodes (modify the standard version of netfs_S_dir_lookup). + +####TODO: + +* Create the generic filtering translator. + +* Create the translator '0' (providing the untranslated version of the + node). + +* Create the "recursive wrappers" for one-node translators. + +* Create special translators for the main proxy so that its functionality + should be complete. + +* Implement sharing of dynamic translator stacks where possible. + +* Make dynamic translators go away as soon as they are not required. + +* Refine the skeleton in several places so that it should become faster + and more reliable. + +* Kill bugs. + +* Integrate nsmux upstream. + +* Solve the libtrivfs stacking issue. + +* Patch libnetfs (it does not support file_get_translator_cntl, for + instance). + +--- + +###Progress + +####8: Fri Sep 19: + +> Modified the ncache so that it now maintains shadow nodes (and directory nodes too, it is a side effect at the moment) alive. + +####7: Sat Aug 30 - Fri Sep 5: + +> Added the code for shutting down dynamic translator stacks. + +####6: Mon Aug 4 - Fri Aug 29: + +> Implemented the proxy nodes. + +####5: Thu Jul 24 - Thu Jul 24: + +> Created a *libnetfs*-based one-node translator, working exactly like the *libtrivfs*-based translator I had written before; the former, however, can be included in a translator stack. + +####4: Tue Jul 22 - Thu Jul 24: + +> Attempted to make a *libtrivfs*-based translator to be able to be stacked upon itself (to be able to receive a translator on top of itself, more exactly); attempted to borrow some code from *libnetfs* but this didn't bring any results. + +####3: Sun Jul 20 - Tue Jul 22: + +> Implemented the possibility to propagate a translator on all files belonging to a directory 'dir' in the request of the type 'dir,,x/'. + +####2: Thu Jul 17 - Fri Jul 18: + +> Extended the lookup code in *nsmux* to allow for looking up nodes like 'file,,x' and added the possibility to escape the double-comma in the following way: ',,,'. + +####1: Mon Jul 12 - Tue Jul 13: + +> Implemented a simple *libtrivfs*-based translator to test the lookup code for *nsmux*. + +####0: Sat Jul 12 - Sat Jul 12: + +> Made small changes to the code of *filterfs* to fit the needs of *nsmux*. + +--- + +## Completed Tasks + +####2: Sat May 3 - Fri Jul 17: + +> Write a translator that should filter the contents of the directory it is set on according to some property. The property can be an arbitrary command. + +> The code is at <http://github.com/scolobb/filterfs/tree/master>. + +####1: Mon Apr 28 - Wed Apr 30: + +> Wrote a Python extension module in C for retreiving the uptime. The module is based on the code of *w*. + +####0: Sun Apr 27: + +> Followed the code of *dmesgd* (<http://www.bddebian.com/junk/dmesgd/>) kindly offered by **bddebian** and rewrote it from scratch as a tutorial. + diff --git a/community/self-organised_2008.mdwn b/community/self-organised_2008.mdwn new file mode 100644 index 00000000..01b25578 --- /dev/null +++ b/community/self-organised_2008.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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 redir=meetings/self-organised_2008]] diff --git a/community/thug.mdwn b/community/thug.mdwn new file mode 100644 index 00000000..721c5aaf --- /dev/null +++ b/community/thug.mdwn @@ -0,0 +1,25 @@ +# <a name="Toronto_GNU_Hurd_User_Group"> </a> Toronto (GNU/)Hurd User Group + +We are the first of the [[WebHome]] [[UserGroups]], and consequently the biggest! Our name is a slight misnomer, since we have plenty of members who live outside of Toronto, Ontario, Canada. We have a members in the Kitchener/Waterloo area who are about two hours from Toronto (by automobile,) and a member in Oakland, California, USA who is about two hours from Toronto (by aeroplane.) + +We are also expanding our reach. Currently our core members range in location from Montreal, PQ. to Waterloo, On. + +## <a name="Membership"> Membership </a> + +Anyone can join! Just find us, and help contribute. + +## <a name="Services"> Services </a> + +Currently, we maintain a [Savannah](http://savannah.gnu.org) project site at <http://savannah.nongnu.org/projects/thug>. + +As well, our web page links to lots of useful [documentation](http://www.nongnu.org/thug/docs.html). + +## <a name="Contact_us"> Contact us </a> + +Our website can be found at: <http://www.nongnu.org/thug/>. + +You can typically find us in the #thug channel on the Official GNU IRC network (irc.gnu.org). + +As well, we have a mailing list at [thug at gnu dot org](http://mail.gnu.org/mailman/listinfo/thug). + +-- [[Main/SimonLaw]] - 25 May 2002 diff --git a/community/weblogs.mdwn b/community/weblogs.mdwn new file mode 100644 index 00000000..016c483f --- /dev/null +++ b/community/weblogs.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Weblogs from Hurd programmers and enthusiasts. + +[[inline +pages="community/weblogs/*/* and !*/discussion" +show=0 +actions=no +rootpage="community/weblogs" postformtext="Add a new user named:"]] diff --git a/community/weblogs/ArneBab.mdwn b/community/weblogs/ArneBab.mdwn new file mode 100644 index 00000000..8c7b377a --- /dev/null +++ b/community/weblogs/ArneBab.mdwn @@ -0,0 +1,45 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +I'm just a Hurd dabbler who likes the ideas behind the Hurd: + +*"With the Hurd, users can change anything in their system which doesn't affect other +users."* + +And this is one definition of freedom in a community: *"Do what you want as long as +you don't restrict others from doing what they want."* + +In contrast, current systems (like Linux, MacOSX, Windows or others) require root/admin access to just install a new file system for reading out a nonstandard USB-stick (OK, who'd put reiserfs, zfs or similar on a USB stick? but still...). + +Why do I have to be root or even to recompile my kernel in Linux to get a new filesystem to run? Why can't I just start a program which takes care of the filesystem for me, and only for me? + +Well, with the Hurd I can do that, and it will be a transparent layer over my normal filesystem. + +And the same is true for networking stuff and anything else. Hacking on the deep internals of the system is possible with the Hurd without all the pain of having to compile the kernel to check it - and even without the need of superuser access for doing to. + +And sharing and exchanging programs deep inside the core is possible, too, since any Hurd user can just test them without fearing to compromise his/her machine. + + +Myself, I don't hack the kernel or anything (this shouldn't be a 'yet', I think, but I try not to be too sure about these kinds of things - life is weird :) ), but I'd sure like to be able to just get a new filesystem when I need it (and I don't dig rebooting my computer). + +And I like my freedom - in my life as well as in technology. + + +See you in the Hurd! + +- Arne Babenhauserheide ( http://draketo.de ) + +----- My Blog ----- + +[[inline +pages="community/weblogs/ArneBab/* and !*/discussion" +show=0 +actions=no +rootpage="community/weblogs/ArneBab" postformtext="Add a new entry named:"]] diff --git a/community/weblogs/ArneBab/2008-06-17-latest-changes-in-the-hurd.mdwn b/community/weblogs/ArneBab/2008-06-17-latest-changes-in-the-hurd.mdwn new file mode 100644 index 00000000..111bb640 --- /dev/null +++ b/community/weblogs/ArneBab/2008-06-17-latest-changes-in-the-hurd.mdwn @@ -0,0 +1,18 @@ +In the past few months the Hurd got quite many commits. + +I want to write a bit about the changes they brought, and what they mean to the Hurd. + +If some of my comments seem too 'simple' to you, just ignore them :) + +First we got many Bug fixes from Samuel Thibault, mainly in libpthread (multithreading), ext2fs and libdiskfs (both filesystem interaction). + +Then hurd-l4 (the port of the Hurd on the L4 kernel) seems to get quite much love by Neal H. Walfield (neal) at the moment. +Quite much is saying a bit to little: hurd-l4 looks steamingly active in the commits :) + +And there is the [PyHurd](http://pypi.python.org/pypi/PyHurd) project. It attempts to create a full binding to the GNU/Hurd API, so people should someday be able to, for example, create translators in Python. + +There's been more - a lot more in fact, but much of it is above my coding horizon, and this entry shall end someplace (it's late - too late :) ). + +Best wishes, +Arne + diff --git a/community/weblogs/ArneBab/2008-07-12-codeswarm-movies-for-the-hurd.mdwn b/community/weblogs/ArneBab/2008-07-12-codeswarm-movies-for-the-hurd.mdwn new file mode 100644 index 00000000..54bd0eff --- /dev/null +++ b/community/weblogs/ArneBab/2008-07-12-codeswarm-movies-for-the-hurd.mdwn @@ -0,0 +1,29 @@ +Today (OK, this night) I created some codeswarm movies to visualize the code history of the Hurd. + +What's particularly interesting to me in gnumach is the tschwinge - sthibaul effect in march 2008, where development suddenly seems to speed up enormeously. + +It clearly shows how much impact just two developers can have - you can have that kind of an impact, too! + +The code movies are created from the history of the cvs branches gnumach, hurd-l4 and +hurd. + +The movies: + + - [Gnumach](http://draketo.de/filme/codeswarm/gnumach_code_evolution.avi) + + - [Hurd](http://draketo.de/filme/codeswarm/gnu_hurd_code_evolution_1_min.avi) + + - [Hurd L4](http://draketo.de/filme/codeswarm/hurd-l4.avi) + + - [Hurd wiki](http://draketo.de/filme/codeswarm/hurd_wiki.avi) + +in gnumach, red is the "kern", while in "hurd" red is stuff in "release". + +.*doc.* is dark blue and any stuff named .*linux.* is shown in a blue-green in +both. In Hurd-L4 is annotated: It shows libc, gcc, Hurd and L4 kernel commits in +different colors. + +The hurd wiki movie shows all web commits as "web-hurd@gnu.org", and you can clearly see that most changes are being done via the version control system. There's a way to split the web-commits, but since there aren't many, I leave that for another day :) - [article on the ikiwiki page](http://ikiwiki.info/news/code_swarm/). + +Best wishes, +Arne diff --git a/community/weblogs/ArneBab/2008-08-02-gnu_hurd_and_x.mdwn b/community/weblogs/ArneBab/2008-08-02-gnu_hurd_and_x.mdwn new file mode 100644 index 00000000..d72f4cef --- /dev/null +++ b/community/weblogs/ArneBab/2008-08-02-gnu_hurd_and_x.mdwn @@ -0,0 +1,38 @@ +Getting X to work on the GNU/Hurd +================================= + +This is a try to get X to work in my qemu GNU/Hurd. + +*This is a first try, my next one will be with the [[guide_from_this_wiki|Hurd/DebianXorg]].* + +Firstoff: I used the following guides: + +* [X Under the Hurd from debian-hurd](http://www.kerneltraffic.org/debian-hurd/dh20000112_31.html#3) +* [GNU/Hurd FAQ](http://www.gnu.org/software/hurd/faq.en.html#q4-7) + + +What I did +---------- + +I worked as root. + +First I installed xorg, x-window-system-code, rxvt and twm: + + apt-get install xserver-xorg x-window-system-core rxvt twm + +Then I set the LD_LIBRARY_PATH and DISPLAY + + export LD_LIBRARY_PATH=/usr/X11R6/lib + export DISPLAY=localhost:0.0 + +After that I set the mouse and keyboard translator. + + settrans /dev/kbd /hurd/kbd /dev/kbd + settrans -c /dev/mouse /hurd/mouse --protocol=ps/2 + +Then I started x + + startx + +It didn't work yet - but watch the blog for updates - I'll post once I get it +working. diff --git a/community/weblogs/ArneBab/hurd-gsoc2008-code_swarm.mdwn b/community/weblogs/ArneBab/hurd-gsoc2008-code_swarm.mdwn new file mode 100644 index 00000000..01757867 --- /dev/null +++ b/community/weblogs/ArneBab/hurd-gsoc2008-code_swarm.mdwn @@ -0,0 +1,11 @@ +Hurd GSoC 2008 code_swarm +========================= + +I created a code_swarm of the work done in the Hurd project during this years Google +Summer of Code. + +* [Hurd GSoC 2008 code_swarm](http://draketo.de/filme/codeswarm/hurd-gsoc2008.ogv) + +I hope you enjoy it! + +PS: Now also available [on vimeo](http://www.vimeo.com/2097773) thanks to scolobb! diff --git a/community/weblogs/ArneBab/niches_for_the_hurd.mdwn b/community/weblogs/ArneBab/niches_for_the_hurd.mdwn new file mode 100644 index 00000000..ecfcc4c8 --- /dev/null +++ b/community/weblogs/ArneBab/niches_for_the_hurd.mdwn @@ -0,0 +1,310 @@ +Niches for the Hurd +=================== + +In the bug-hud mailinglist we did a search for niches where the Hurd is *the biggest +fish in the pond*. + +This search was segmented into four distinct phases, three of them major: + +- Brainstorm +- Reality check: can already do vs. could be used for +- Turn ideas into applications +- Find a compromise -> About which niches should we talk in the wiki? + + +Brainstorm +---------- + +"Which niches could there be for the Hurd?" + +### Basic Results + +The result is a mix of target groups, +nice features and options of the Hurd, reasons for running a Hurd and areas where +the Hurd offers advantages: + +#### Nice features and options the Hurd offers + +- Give back power to users: arbitrary mounts, subhurds +- Nice features: dpkg -iO ftp://foo/bar/*.deb +- Easier access to low-level functions +- Advanced lightweight virtualization +- operating system study purposes as its done with minix +- The possibility to create more efficient and powerful desktop environments +- Having a _complete_ GNU System +- All-in-one out-of-the-box distro running a webserver for crash-proof operation. + + +#### Target groups and strong environments + +- Tinkerers who like its design. +- multicore-systems + + +### The keyphrases in more detail or with additional ideas + +#### Give back power to users: arbitrary mounts, subhurds + +Simpler virtual computing environments - no need to setup XEN, everyone can +just open up his/her computer for someone else by creating a new user account, +and the other one can login and easily adapt the system for his/her own needs. +If most systems just differ by the translators setup on them, people could +even transfer their whole environment from one computer to another one without +needing root access or more root interaction than creating a new user account. +"I want my tools" -> "no problem, just setup your translators". + +Also it would be possible to just open an account for stuff like joining the +"World Community Grid" allowing for easier sharing of CPU time. + + +#### Easier access to low-level functions + +*"One important use is for very technical people, who don't always go with +standard solutions, but rather use new approaches to best solve their +problems, and will often find traditional kernels too limiting."* + +*"Another interesting aspect is application development: With the easily +customized/extended system functionality, and the ability to contain +such customizations in subenvironments, I believe that Hurd offers a +good platform for much more efficient development of complex +applications. Application developers can just introduce the desired +mechanisms on a very low level, instead of building around existing +abstractions. The extensible filesystem in particular seems extremely +helpful as a powerful, intuitive and transparent communication +mechanism, which allows creating truly modular applications."* + + +#### Advanced lightweight virtualization + +*"There is also the whole area I called "advanced lightweight +virtualization" (see +http://tri-ceps.blogspot.com/2007/10/advanced-lightweight-virtualization.html +), i.e. the ability to create various kinds of interesting +subenvironments. Many use cases are covered by much bigger fish; but the +flexibility we offer here could still be interesting: I think the middle +grounds we cover between directly running applications, and full +isolation through containers or VMs, are quite unique. This could +simplify management of demanding applications for example, by partially +isolating them from other applications and the main system, and thus +reducing incompatibilities. Creating lightweight software appliances +sounds like an interesting option.*" + +#### The possibility to create more efficient and powerful desktop environments + +*"While I believe this can be applied to any kind of applications, I'm +personally most interested in more efficient and powerful desktop +environments -- these considerations are in fact what got me seriously +interested in the Hurd. + +Even more specifically, I've done most considerations (though by far not +all) on modular web browsing environments. Those interested can read up +some of my thoughts on this: + + +http://sourceforge.net/mailarchive/message.php?msg_name=20080909073154.GB821%40alien.local + +(Just skip the text mode browsing stuff -- the relevant part is the long +monologue at the end... I really should put these ideas into my blog.)"* + + + +#### Nice features + +Another example of features which would be easily possible with the Hurd: + +* media-player translator: + - settrans play /hurd/mediaplayer_play + - cp song1.ogg song2.ogg play + - # -> files get buffered and played. + +or even: + +* cp ftp://foo/bar/ogg play + +that's KDEs fabled network transparency on the filesystem / shell level. + + +Reality check +------------- + +Check which of the ideas can already be done easily with the Hurd in its current +state, which ones are a bit more complex but already possible, which ones need a bit +of coding (could be accomplished in a few months judging from the current speed of +development), which ones need a lot of work (or fundamental changes) and which ones +aren't possible. + +### Already possible and easy + +- Sample translators: + * hello world. + * transparently bind FTP into the filesystem + * hostmux + ftpfs -> connect to FTP automatically via asking for a dir named after the hostname -> fully transparent FTP filesystem: "touch ftp: ; settrans ftp: /hurd/hostmux /hurd/ftpfs / " + * bind any filesystem at any place in the filesystem (you have access to) without needing to be root. + * elegantly mount iso images and similar as unprivileged user. + +- Other useful stuff: + * Install deb-packages from an ftp server via 'dpkg -iO ftp://foo/bar/*.deb' + +- Having a complete GNU System (but not yet on every hardware, and only about half the software Debian offers has been ported). + +### Already possible but complex or underdocumented + +- Easier access to low-level functions via translators. + +- Operating system study purposes as it's done with minix. + +- Tinkering for fun - need documentation about the fun things which can be done. + +### Need a few months of coding + +- A filesystem-based package manager. + +- A framework for confining individual applications is really just one +possible use case of the hurdish subenvironments. Writing the tools +necessary for that should be quite doable in a few months. It's probably +not really much coding -- most of the work would be figuring out how it +should be set up exactly. + +- Running parts of the Hurd on different computers, maybe even with shared servers on +dedicated hardware (Cloud Computing when the servers can be made to migrate from +between computers). Maybe this should be placed in "need a lot of coding". + +- subhurds for quickly adapting the whole system without bothering others. + +- Define your personal environment via translators, so you can easily take it with +you (translators written in scripting laguages can make this easier - they could +also for example be taken to each computer on USB stick). + +- A more powerful alternative to FUSE filesystems: While FUSE is limited to standard +filesystem semantics, while Hurd translators can implement whatever they +want. +It is possible to change the behaviour in any aspect, including the way +file name lookup works. Admittedly the only specific use case I know is +the possibility to implement namespace-based translator selection with a +set of normal translators, without any changes to the Hurd itself. +It is also possible to extend the filesystem interfaces, adding new RPCs +and options as needed. This allows using the filesystem for +communication, yet implementing domain-specific interfaces where +standard filesystems are too unefficient or cumbersome. A sound server +would be one possible use case. + +- Namespace based translator selection (if you for example want to quickly check the +contents of an iso image, just look at them via 'ls image.iso,,iso9660fs'). + +### Need a lot of coding or fundamental changes + +- Effective resource management (For example via Viengoos on which Neal Walfield is +working). The idea is that we could make a virtue out of necessity: Once we have a +proper resource management framework, we should be able not only to catch up with +traditional systems in this reagard, but in fact surpass them. + +- The possibility to create more efficient and powerful desktop environments. + +- Multicore systems (need to fixup Mach for SMP) + +- Currently to offer CPU time to some project (like the World Community Grid), it is +necessary to install a program from them, and they can then do only what that proram +allows them to - which leads to reinventing a processing environment instead of just +using the existing OS. +With the Hurd people could just create a user for them, give that user specific +permissions (like "you're always lowest priority"), add the public ssh keys of +the project they want to donate CPU cycles to, and the project could just turn +the computer into the environment it needs for the specific computation, +without compromising the main system in any way (needs better resource management). + +- A shared MMORPG game world consisting simply of files for levels and person +descriptions with access rights. All synchronizing is done on the translator +level. Programs only have to display the given files and quickly update the +state of their own files, so the programs stay very easy. The translator could +notify the program when something changes. + + + +### Unfeasible ideas + + + +Applications +------------ + +A minor phase, which will surely be interleaved with the others: Making the ideas +tangible to turn them into ways how people can use the Hurd. + +"Hey, look, this is the Hurd. You can use it like this to do that which you can't do +as well/easily/elegantly in any other way." + + +### Applications for private use + +### Applications for companies + +### How an application should be presented so people can easily test and digest it + +We need stuff which gets people to say "hey that's cool!" + +And it must be readily available. +If I have to search for arcane command line parameters before I can use it, +it's too hard. + +From what I see, each direct cool application must be about as simple as + +$ qemu hurd-is-cool.img +$ login root +$ settrans cool /hurd/cool +$ ls cool + +One main focus in this example is: No command line parameters but the ones we +really need. No "-a", if the example is also cool without it. +No "--console" if it works otherwise. + +Especially no "qemu --cd livecd --hda hurd.img ..." - that one is great for +specialists, but the goal here isn't to teach people better usage of qemu, +but to show them that the Hurd is cool, and only that. + +All that interesting advanced stuff just gets newcomers confused. + +The translator concept in itself is enough news to faze a mind - anything else +can easily be too much. + +If the application isn't as simple as the example above, then the best step +would be to see if we can make it as simple - if that involves writing trivial +scripts than be it so. They are trivial only to those who already understand +the underlying concepts. + +And now enough with rambling :) + +The Hurd is cool, and the complex to use applications are cool, too. +But they are hard to present in a way newcomers easily understand. + + +Compromise +---------- + +For each niche: + +- What do we have to do to conquer the niche? +- How many additional programmers can the Hurd get in this niche? +- How does choosing this niche limit the flexibility of further development (for example due to the goals of the people who join up)? +- Can we easily move on to conquering the next niche once we got this one? +- What should the Hurd accomplish on the long term (long term goals)? Which possible niches help that? + +Each participant: + +- Give your personal priorities to the niches: + * Must -> all of these of all developers must be included; + remember that at most 3 to 4 ideas can be conveyed in any text. + * Should -> The number of shoulds can be used for ranking and similar. + +("must", because in a community people can do what they perceive as important, and +telling someone to stop what he's doing is no option (in my opinion)) + + +Things to do +------------ + +todo-item -> niches for which it is useful. + +### Easy + +- Port debian packages to the Hurd -> mainly tinkerers, but also any other niche. + diff --git a/community/weblogs/ArneBab/xkb-woes-trying-to-get-a-german-keyboard-layout.mdwn b/community/weblogs/ArneBab/xkb-woes-trying-to-get-a-german-keyboard-layout.mdwn new file mode 100644 index 00000000..fef628bc --- /dev/null +++ b/community/weblogs/ArneBab/xkb-woes-trying-to-get-a-german-keyboard-layout.mdwn @@ -0,0 +1,47 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Yesterday I spent a few hours trying to get my german keyboard to let me use my umlauts (and to let me type without having to hunt down the right keys), but without much luck. + +I got xkb installed after following this FaQ answer: + +- <http://www.gnu.org/s/hurd/faq.en.html#q4-4> + +and this info: + +- <http://people.debian.org/~mbanck/hurd-console.default> + +(you can find the second under /etc/default/hurd-console ). + +But I didn't get it to work. + +### What I did in short: + + +First I got the needed apt-sources: + +- <http://debian.duckcorp.org/> + +Then I installed the xkb console: + +- `apt-get install console-driver-xkb` + + +And set it in the file /etc/default/hurd-console + + +Sadly it didn't work, but maybe this posts will give You the needed headstart for success :) (I'd be glad to see a guide from you!). + + +Some additional info: + +- <http://kerneltrap.org/node/420> +- <http://www.bddebian.com/~wiki/hurd/console/> + diff --git a/config_edittemplate.mdwn b/config_edittemplate.mdwn new file mode 100644 index 00000000..24641bb5 --- /dev/null +++ b/config_edittemplate.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +This page exists purely for configuring the [[iki plugins/edittemplate]] +plugin. + +[[edittemplate template="config_edittemplate/regular_page" match="*"]] diff --git a/config_edittemplate/regular_page.mdwn b/config_edittemplate/regular_page.mdwn new file mode 100644 index 00000000..fe591ac7 --- /dev/null +++ b/config_edittemplate/regular_page.mdwn @@ -0,0 +1,23 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +HERE STARTS YOUR NEW CONTENT -- remove everything from here on, including this +line. + +By creating this page, you agree to assign copyright for your contribution to +the Free Software Foundation. The Free Software Foundation promises to always +use a free documentation license (as per our criteria of free documentation) +when publishing your contribution. We grant you back all your rights under +copyright, including the rights to copy, modify, and redistribute your +contributions. + +We're requiring these copyright assignments, so that we'll easily be able to +include your contributions in official GNU documentation, such as the GNU Hurd +manual, etc. Send email to <hurd-maintainers@gnu.org> if there are questions. diff --git a/confused_deputy.mdwn b/confused_deputy.mdwn new file mode 100644 index 00000000..16b3bebf --- /dev/null +++ b/confused_deputy.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[The confused deputy](http://www.cis.upenn.edu/~KeyKOS/ConfusedDeputy.html) +problem was articulated by Norm Hardy. It is a possible consequence +when [[designation]] and [[authorization]] are separated. [[Capabilities|capability]] +help with this problem. diff --git a/contributing.mdwn b/contributing.mdwn new file mode 100644 index 00000000..1946153e --- /dev/null +++ b/contributing.mdwn @@ -0,0 +1,115 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 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]]."]]"""]] + +So, you are interested in contributing to the GNU Hurd project? + +Welcome! Every single contribution is very much encouraged! + +There are various ways of contributing, read on about contributing to... + +[[!toc levels=3]] + + +# Documentation + +## These Wiki Pages + +Please read about [[how_to_contribute_to_this_wiki|wiki]]. + + +# The System Itself + +There are essential two kinds of Hurd system designs. + +<a name="hurd_on_mach"> </a> +## Hurd on Mach + +For one there's the implementation of the *[[Hurd]] running on the +[[GNU_Mach_microkernel|microkernel/mach/gnumach]]*. This is what is commonly +meant when people are talking about GNU/Hurd systems. + +This system has mostly been designed and implemented [in the +'90s](http://www.gnu.org/software/hurd/history.html). It works and is usable. +For example, this wiki system [is running on a GNU/Hurd +system](http://www.bddebian.com/cgi-bin/uptime). + +You can try it out for yourself: for getting access, installing +[[Debian_GNU/Hurd|hurd/running/debian]] will probably be the easiest and most +feature-complete solution. If you don't have spare hardware to use for doing +so, you can also get a +[[shell_account_on_a_public_Hurd_machine|public_hurd_boxen]]. Depending on the +things you're going to work on (and on your internet connection), this may be +an easy way of getting used to Hurd systems. Installing in a virtual machine +is another possibility, see the page about +[[running_a_Hurd_system|hurd/running]] for the full story. + +Then you can either play around and eventually strive to do something +useful or -- if you want -- ask us to assign something to you, depending +on the skills you have and the resources you intend to invest. + +Please spend some time with thinking about the items in this [[questionnaire]]. + +Before you can significantly contribute, take some time to learn about the +system, e.g., [[microkernels_for_beginners|microkernel/for_beginners]]. Until +you can do the basic exercises listed there, you won't be able to significantly +contribute to the Hurd. + +For more reading resources, please see this whole wiki, and also +<http://www.gnu.org/software/hurd/devel.html>, +<http://www.gnu.org/software/hurd/docs.html> for links to a bunch of documents, +and <http://www.gnu.org/software/hurd/> in general. + +### Porting Packages + +Debian is currently the Hurd distribution of choice among Hurd users and +developers. + +Here is a +[[list_of_Debian_packages_that_need_porting|hurd/running/debian/porting]]. + +You can also just [[install_Debian_GNU/Hurd|hurd/running/debian]] and find what +doesn't work or suit you and try to improve that. + +### Open Issues: GNU Hurd + +Here is a [[list_of_open_issues|hurd/Open_Issues]] for the [[GNU_Hurd|hurd]]. + +### Open Issues: GNU Mach + +Here is a [[list_of_open_issues|microkernel/mach/gnumach/Open_Issues]] for +[[GNU_Mach|microkernel/mach/gnumach]]. + +### Open Issues: GNU MIG + +Here is a [[list_of_open_issues|microkernel/mach/mig/Open_Issues]] for +[[GNU_MIG|microkernel/mach/mig]]. + + +<a name="hurd_on_modern_microkernel"> </a> +## Hurd on a modern microkernel + +Developers [[have_identified|hurd/critique]] a number of problem with the *Hurd on +Mach* system. Problems, that can not easily be fixed by bug-fixing the +existing code base, but which require design changes -- deep going ones +actually. + +As such systems (as the desired one) are not in common use, but are -- if at +all -- research projects, this new *Hurd on a modern microkernel* project +itself is more a research project than a *sit down and implement/code/hack* +project. + +If you're interested in contributing in this area, knowing the *Hurd on Mach* +system nevertheless is a prerequisite. At least have a deep look at the +documentation pointers given in the previous section. Also read through the +[[HurdNG|hurd/ng]] section of this wiki. + +Please send email to the [[mailing_lists/l4-hurd]] mailing list for discussing +this post-Mach system design. diff --git a/contributing/questionnaire.mdwn b/contributing/questionnaire.mdwn new file mode 100644 index 00000000..3320b80a --- /dev/null +++ b/contributing/questionnaire.mdwn @@ -0,0 +1,45 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 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]]."]]"""]] + +People often come to us and state that they'd like to help with the GNU/Hurd. +This is very good and very much encouraged: we're always looking for volunteers +to help with the effort! However, for things to eventually become productive, +we'd like every new potential contributor to read through the following list of +items and spend some time thinking about those. + + +* What areas are you interested in contributing to? + + Think a moment about this list: porting and extending existing software to + run on Hurd systems; work on existing or write new Hurd servers or + libraries; work on the standard C library; make Hurd stuff usuable from + other programming languages than C; work on the current Mach microkernel; + do research and development of a next-generation microkernel; help with + development of new Hurd libraries and servers on top of that. Those + projects are all within the *Hurd* topic, but are vastly different + projects. + +* How is your expertise about system and kernel programming? + + Sadly we don't have the ressources to teach you from ground-up. We will -- + of course! -- try to give answers to specific questions, but on substantial + parts of your contribution you'll have to work on your own. (Unless there + is someone who is already working in the same area, of course.) + +* Have you previously been working on Free Software projects? + + Are you used to the working-style Free Software projects bring with them? + Did you already contribute to other projects? What sort of contributions? + +* What is your motivation to work on the GNU Hurd? + + +Every new contributor is very much encouraged to take some notes about these +items and post them to *[[mailing_lists/bug-hurd]]*. diff --git a/contributing/wiki.mdwn b/contributing/wiki.mdwn new file mode 100644 index 00000000..85851c43 --- /dev/null +++ b/contributing/wiki.mdwn @@ -0,0 +1,164 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +(!) Some general hints first; they may sound very familiar from other software +projects: + + * Do independent changes *separately*: don't aggregate changes that don't + belong together. + * Install your changes *early* and *often*: don't hold your contribution back + until you think it is perfect. + +Before doing any changes, you are encouraged to play a bit in this wiki's +[[sandbox]], to become familiar with the [[ikiwiki/Markdown]] syntax. Get some +[[help_on_formatting|ikiwiki/formatting]]. + +Please comment every change you make, however small. Keep all comments short +and to the point, e.g. "Fixed typo." or "Added link to main page.". + +Feel free to ask questions or report problems on every page's [[discussion]] +sub-page. They're reachable from the *Discussion* link on the top of the page, +which will, when selected, create a new page if there isn't one yet. + +Every page on the site is editable. Feel free to join in, but we do have some +simple requests. In an ideal wiki, everyone is equal and shares equal rights, +liberties, responsibilities and common sense. Please try to match the *tone* +of your topics and edits with the existing topics. If we all pull in the same +direction the site will be more useful for everyone, especially for our own +use. + + +# Edit Via the Web Interface + +When you found a page you want to work on, just follow the *Edit* link on the +top of the page. When doing this for the first time, this will first transfer +you to a page where you have to create a wiki account. After logging in, you +can edit the wiki pages. + + +# Working on a Checkout of the git Repository + +(!) What is being described here are only the basics. The checkouts are +completely valid git repositories and can (and want to) be treated as such. +Consult the git documentation about how to shuffle around with branches, how to +rename files, how to upload arbitrary data files, and so on. + +(!) Before attempting any bigger editing work (to which you are sincerely +invited!) be sure to check the involved pages' *Discussion* subpages (linked +from the pages' header line) and in there take down (short) notes about the +editing endeavors you're going to undertake. Doing so should help to (a) avoid +double work and (b) avoid merge conflict if you install your changes into the +main repository. + + +First, let's make sure that you're properly identifying yourself towards git. + + $ git var GIT_AUTHOR_IDENT + Thomas Schwinge <tschwinge@gnu.org> 1186743435 +0200 + +If it doesn't look akin to that for you, you'd better adjust either your +`EMAIL` environment variable or alternatively tell git about your real +identity: + + $ git config --global user.name 'Your Name' + $ git config --global user.email you@somewhere.invalid + + +For being able to do a checkout from which you can later directly push your +changes back into the master repository, you need a +[[shell_account_on_*flubber*|public_hurd_boxen]] and need to be a member of +the *wiki* group. (It's also very much recommenable that you set up your local +ssh configuration as advised on that page.) If you have an account on there: + + $ git clone flubber:~wiki/wiki [dest] + +If you don't have such an account or don't have your login data handy, you can +still get the pages the read-only way. + +Note that this -- currently -- is not the data from the master server, but from +a mirror of it, so it may be lacking behind a bit from time to time. + + $ git clone git://git.savannah.gnu.org/hurd/wiki.git [dest] + +If that also doesn't work out, you have yet another chance: pull over the http +protocol. Not very efficient (read: rather inefficient), but it works. This +is also read-only. + + $ git clone http://www.bddebian.com/git/wiki [dest] + +For all cases: if you omit `[dest]` it will default to `wiki`. + +Later, you can just `cd` into the `wiki` directory and run a `git pull` to get +hold of the latest changes others have been installing in the mean time. (Even +better would be to do a `git fetch`, followed by a `git rebase origin/master` +to avoid those *Merge branch ...* messages. See the git documentation for +details.) + + +But now: work on these files. + + $ cd wiki/ + $ emacs hurd/ng.mdwn + $ # Check what you've done. + $ git diff hurd/ng.mdwn + $ git commit hurd/ng.mdwn + [...] + $ # Add a new file. + $ emacs microkernel/mach/issues.mdwn + $ git add microkernel/mach/issues.mdwn + $ git commit microkernel/mach/issues.mdwn + [...] + $ [...] + +Remember that at this stage your commits have only been installed into your +personal working copy. You'll finally have to explicitly install your changes +into the master repository, see below. + + +You can also locally get the whole wiki rendered to html pages: + + $ wiki/render_locally + [...] + scanning contributing/wiki.mdwn + rendering contributing/wiki.mdwn + + Now open `wiki.rendered/index.html' to browse the wiki pages. + + +If you like what you've done, then it's now time to publish your changes. + +If you can push directly into the master repository this is really simple: + + $ git push + updating 'refs/heads/master' + from d83f93f34b69633ca1afb588001df7addd708faf + to c0b8171de9c69e029bf998aafd4682105c217eb8 + Generating pack... + [...] + Updating web pages. This may up to a few minutes at the utmost... + +If you can't do that, then first prepare to publish your changes: + + $ git-format-patch -M -B origin + 0001-Be-a-bit-more-expressive.patch + [...] + +See through the generated `*.patch` files and simply delete those you don't +want to publish. + +Finally, publish the good ones. If you have a local mail transfer agent +running, the following is all you have to do: + + $ git-send-email --to web-hurd@gnu.org *.patch + [...] + +If you don't have an MTA running, you'll have to find another way: either post +the `*.patch` files to <web-hurd@gnu.org> or upload them somewhere for us to +download them from. diff --git a/copyright.mdwn b/copyright.mdwn new file mode 100644 index 00000000..fcdab55d --- /dev/null +++ b/copyright.mdwn @@ -0,0 +1 @@ +Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008 The Contributing Authors diff --git a/designation.mdwn b/designation.mdwn new file mode 100644 index 00000000..4307ec5b --- /dev/null +++ b/designation.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +To designate is to name. diff --git a/destructive_interference.mdwn b/destructive_interference.mdwn new file mode 100644 index 00000000..1cda81a6 --- /dev/null +++ b/destructive_interference.mdwn @@ -0,0 +1,32 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Interference can be destructive or non-destructive. When a [[principal]] +invokes an object (thereby requesting a service) and the implementation +carries out the principal's intent, the interference was non-destructive +in the sense that the interference was desired. + +In invoking the object, the principal may make itself vulnerable to +destructive interference. When a user runs Solitaire on Windows, +the Solitaire program is instantiated and given all of the user's +authority. The program may delete all of the users files after +publishing credit card and other sensitive information on the Internet. +This type of interference is undesirable, however, generally practically +unavoidable due to the way programs work on Windows (and [[Unix]], for that +matter). + +The problem is that the callee has induced negative consequence for caller +due to actions of the former. To not have to depend on another program (and +thereby not have to add it to its [[tcb]]), it is necessary that the +caller only make itself vulnerable to destructive inference in ways that +can be detected and from which it can recover. + +Mark Miller examines the idea of destructive interference in his PhD thesis +[Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control](http://www.erights.org/talks/thesis/). diff --git a/documentation.mdwn b/documentation.mdwn new file mode 100644 index 00000000..45bb5ffc --- /dev/null +++ b/documentation.mdwn @@ -0,0 +1,32 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +# General + + * [GNU Hurd Documentation](http://www.gnu.org/software/hurd/docs.html) + + +# Introductory Material + +## External + + * [*Examining the Legendary HURD + Kernel*](http://www.informit.com/articles/printerfriendly.aspx?p=1180992), + an article by David Chisnall. + + Also covers a bit of GNU's and the Hurd's history, fundamental techniques + applied, comparisions to other systems. + + +# [[Unix]] Programming + + * *The C Programming Language* by Brian W. Kernighan and Dennis M. Ritchie, + [order from + Amazon](http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=pd_bxgy_b_img_a) diff --git a/donate.mdwn b/donate.mdwn new file mode 100644 index 00000000..954b4ee4 --- /dev/null +++ b/donate.mdwn @@ -0,0 +1,66 @@ +[[meta copyright="Copyright © 2003, 2006, 2007, 2008 +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]]."]]"""]] + +If you feel like donating goods or money for the work the developers are doing, +then we're happy to confirm that this is indeed possible. Of course we'd +really like to have you working with us on the system, but if you're feeling +generous we won't stop you either. + +Note that you can't donate directly to the Hurd project, but only to either the +Free Software Foundation or individually to the developers. Donations to the +Free Software Foundation are tax deducible, see <http://fsf.org/donate>. + +If you've got more money on hand than hacking time, you might consider buying +some [maintenance points](http://g10code.com/products.html#maintpoints) (EUR 10 a point) to +help the Hurd along. From the [g10 Code](http://www.g10code.com/products.html) +site: + +> Hurd Maintenance Points are special: Some of our employees are well known +> Hurd hackers in their spare time; collected points for this program will be +> given to them in form of paid time. + +See also this related +[mailing-list](http://mail.gnu.org/archive/html/help-hurd/2003-04/msg00044.html) +thread. + +And for further motivation, some words of wisdom from Marcus Brinkmann: + +> By the way, if you are more on the speculating side, then it can't harm to +> just buy one or two maintenance points. That means that at some time I get +> an incentive to start the hacking, and there is a chance that when I start I +> don't stop for a while, and just continue on my private time (as I did for +> the last five years, if I might add that ;). + +Another possibility is to meet with the Hurd developers at a +[[meeting|community/meetings]] and spend them a pizza or beer or both or +similar. + + +# Developers + +<small>(alphabetically)</small> + +<!-- TODO. Need some real ikiwiki way of adding such anchors. --> + +<a name="Marcus_Brinkmann"></a> +## Marcus Brinkmann + +... would like you to donate to the Free Software Foundation (see the top of +this page) or to the [Electronic Frontier Foundation](http://eff.org/support/). + +<a name="Thomas_Schwinge"></a> +## [[Thomas_Schwinge|tschwinge]] + +Rate him and donate money to the Free Software Foundation [through +Affero](http://rate.affero.net/tschwinge/Hurd/). + +For specifically donating to him [go +here](http://nic-nac-project.de/~schwinge/donate.html). diff --git a/emulation.mdwn b/emulation.mdwn new file mode 100644 index 00000000..856e0f92 --- /dev/null +++ b/emulation.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +# External + + * [*Emulation: Role-Playing for + Computers*](http://www.informit.com/articles/printerfriendly.aspx?p=659522), + an article by David Chisnall. + + +# See Also + + * [[Virtualization]]. diff --git a/extensibility.mdwn b/extensibility.mdwn new file mode 100644 index 00000000..4ef70986 --- /dev/null +++ b/extensibility.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +An extensible system is one that enables extensibility. Enabling extensibility +means providing non-privileged mechanisms to extend existing objects and to +introduce new objects. [[UNIX]] is generally not an extensible system as it does +not generally facilitate the hooking of system calls. For instance, there is +no way to hook into the virtual file system. This has motivated the introduction +of separate, parallel interfaces by both the GNOME and KDE projects to provide +users a more integrated view of their objects. diff --git a/favicon.ico b/favicon.ico Binary files differnew file mode 100644 index 00000000..a8ad72f8 --- /dev/null +++ b/favicon.ico diff --git a/fdl.texi b/fdl.texi new file mode 100644 index 00000000..a6845f40 --- /dev/null +++ b/fdl.texi @@ -0,0 +1,456 @@ +[[meta copyright="Copyright © 2000, 2001, 2002 Free Software Foundation, Inc., +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA"]] +[[meta license="Everyone is permitted to copy and distribute verbatim copies of +this license document, but changing it is not allowed."]] + +@c The GNU Free Documentation License. +@center Version 1.2, November 2002 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + 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''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/gcc.mdwn b/gcc.mdwn new file mode 100644 index 00000000..93256f1b --- /dev/null +++ b/gcc.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The [GNU Compiler Collection](http://gcc.gnu.org/). diff --git a/gdb.mdwn b/gdb.mdwn new file mode 100644 index 00000000..83113f9e --- /dev/null +++ b/gdb.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The [GNU debugger *GDB*](http://www.gnu.org/software/gdb/). + +* [[Backtrace]]s + +* [Manual](http://sourceware.org/gdb/documentation/) + +* [When disassemble doesn't work](http://lists.gnu.org/archive/html/bug-hurd/2007-02/msg00039.html) diff --git a/gdb/backtrace.mdwn b/gdb/backtrace.mdwn new file mode 100644 index 00000000..9716a211 --- /dev/null +++ b/gdb/backtrace.mdwn @@ -0,0 +1,29 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +When someone asks you to supply a backtrace (from a [[segmentation_fault]], for +example), here is roughly what you have to do. + +Run the faulting program like this: + + $ gdb --args PROGRAM [ARGUMENTS] + [...] + (gdb) run + [...] + [Segmentation fault.] + (gdb) bt + [...] + +(!) This will only provide useful information if the executable (and additional +libraries) contain debugging symbols, or those are available separartely. + +If you're one a [[Debian_GNU/Hurd_system|hurd/running/debian]], you'll have +to have the *hurd-dbg* package installed for debugging Hurd stuff, and perhaps +*libc0.3-dbg* as well if it's inside the glibc. diff --git a/glibc.mdwn b/glibc.mdwn new file mode 100644 index 00000000..f6325ff8 --- /dev/null +++ b/glibc.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The [GNU C Library](http://www.gnu.org/software/libc/). diff --git a/how_to_contribute_to_this_wiki.mdwn b/how_to_contribute_to_this_wiki.mdwn new file mode 100644 index 00000000..89df20e5 --- /dev/null +++ b/how_to_contribute_to_this_wiki.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=contributing/wiki]] diff --git a/hurd.mdwn b/hurd.mdwn new file mode 100644 index 00000000..403c3df2 --- /dev/null +++ b/hurd.mdwn @@ -0,0 +1,75 @@ +[[img logo.png]] + +[[toc ]] + +# Introduction + +* [[TheGnuHurd]] - A Brief Description +* [[HurdNames]] - Acronym, Origin and Usage +* [[History]] +* [[Logo]] +* [[Status]] +* [[KnownHurdLimits]] +* [[Translation]] - Localized sites about the Hurd +* [[Donate]] +* [[SeenHurd]] - Media references +* [[Shopping]] - Hurd Gear +* [[FunnyHurd]] - From a different Herd +* [[FAQ]] + +# Understanding + +* Introductory Material + * [Marcus Brinkmann](http://www.gnu.org/software/hurd/hurd-talk.html) + * [Gaël Le Mignot](http://kilobug.free.fr/hurd/pres-en/slides/slides.html) +* Architecture + * [Towards a New Strategy of OS Design](http://www.gnu.org/software/hurd/hurd-paper.html) by Thomas Bushnell, BSG. + * Marcus Brinkmann's [revisit](http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00651.html) + * Jonathan S. Shapiro [comments](http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00654.html) + * [[Critique]] - Analysis + * [[Hurd_Hacking_Guide]] +* [[Concepts]] +* Other resources + * [Docs at gnu.org](http://www.gnu.org/software/hurd/docs.html) + +# Using + +* [[Running]] +* [[running/Distrib]] -- Distributions +* [[Public_Hurd_Boxen]] +* [[Neighborhurd]]s and [[Subhurd]]s + +## Common Problems + +* [[Console]] +* [[Xfree86]] -- [[DebianX]] -- [[DebianXorg]] +* [[GNUstep]] +* [[XattrHurd]]: Setting translators under GNU/Linux +* [[SerialConsole]]: Setting up a serial console. + +# Contributing + +* [[Contributing]] +* [[ToDo]] + +* [[Building]] + * [[building/Cross-Compiling]] + +* [[Open_Issues]] + +# Developer References + +* [[Rules]] +* [[Trackers]] +* [[Toolchain]] + * [[glibc]] +* Libraries + * [[libpager]] + * [[libstore]] + * [[libchannel]] + * [[libhello_example]] -- Hurd library example + * [[libnetfs]] -- short introductory material +* [[IO_Path]] +* [[Debugging]] +* [Hurd Sourcecode Reference](http://www.htu.tugraz.at/~past/hurd/global/): Searchable and browsable index of the code. +* [[Networking]] diff --git a/hurd/authentication.mdwn b/hurd/authentication.mdwn new file mode 100644 index 00000000..cbb164c8 --- /dev/null +++ b/hurd/authentication.mdwn @@ -0,0 +1,27 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +UIDs on the Hurd are separate from processes. A process has +[[capabilities|capability]] designating so-called UID vectors that +are implemented by an [[auth]] server. This +makes them easily [[virtualizable|virtualization]]. + +When a process wishes to gain access to a resource provided by a third +party (e.g., a file system) and that party wishes to authenticate the client +so as to implement some identity-based access control ([[IBAC]]) policy, +the latter initiates a three-way authentication handshake. The server +and client each then begin an authentication sequence with +their respective [[trust]]ed auth servers. If they have +a mutally trusted ancestor and an auth server does not abort the +transaction, then the client is delivered a new capability +naming a newly authenticated session with the server +and the server is delivered the client's designated UID vector. + +For more details, see section 2.3 of the [[critique]]. diff --git a/hurd/binutils.mdwn b/hurd/binutils.mdwn new file mode 100644 index 00000000..97c93602 --- /dev/null +++ b/hurd/binutils.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[General_information|/binutils]] about the binutils. + +There shouldn't be any differences within the binutils between, for example, +the GNU/Hurd and GNU/Linux ports. diff --git a/hurd/building.mdwn b/hurd/building.mdwn new file mode 100644 index 00000000..7a24f70a --- /dev/null +++ b/hurd/building.mdwn @@ -0,0 +1,116 @@ +Additional to the following text, a further [[example]] has be posted. + +/!\ The following information may very well be incomplete and out-dated. + + +# Building the Hurd from Source + +If you want to build the Hurd libraries and servers (translators) yourself +instead of just using pre-built binaries, follow these instructions. + +One note before we begin: the likelihood that the compiled result will actually +do what you expect it to do is the highest if you try building from the Debian +source packages. This is especially true if you want to use your compilation +within a Debian system. + +## Getting the Source Code + +You can chose between getting the [sources from the developers's +RCS](http://www.gnu.org/software/hurd/download.html#cvs): + + $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co hurd + +... or (if you are working on a Debian system) the ones that are used for the +[current Debian hurd package](http://packages.debian.net/source/unstable/hurd): + + $ apt-get source hurd + +Please see the Debian [[running/debian/FAQ]] before using `apt-get source`. + +The unpacked source tree is around 20 MiB, and the build tree (configured with +`--disable-profile`) is around 100 MiB. + +## Preparing for the Build + +### ... on Debian systems + +Building the Hurd requires the *build-essential* and *fakeroot* packages, their +dependencies and additional packages that are specified by the source hurd +package: + + # apt-get install build-essential fakeroot + # apt-get build-dep hurd + +### ... on non-Debian systems + +[TODO] + +## Building + +### Debian `.deb` Files + +Change into the directory with the downloaded / unpacked Hurd sources, e.g. + + $ cd hurd-[TODO] + +If you want to work on the sources before building them, it's advisable to +first apply the patches the Debian hurd package additionally contains: + + $ debian/rules apply-patches + +Then edit and change whatever files you want and finally start the build +process with + + $ dpkg-buildpackage -us -uc -nc -b -rfakeroot + +The `.deb` packages will then drop out at the `../` directory. + +### Building, but not the Debian Way + +The Hurd has to be built in a separate directory: + + $ mkdir hurd-build + $ cd hurd-build + + $ [...]/hurd-[TODO]/configure --disable-profile + $ make + $ make install + +Notice that `make install` will install the Hurd in `/`, not in `/usr/local/` +or `/local/`, so your current Hurd servers will be replaced. [TODO: how to +install somewhere else.] + +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. + +If you just want to build a specific server or library, you can pass its name +to `make`: + + $ make ext2fs + $ make libtrivfs + +This will automatically build all libraries that are required to build the +requested server or library. + +### Cross Compiling + +Read about [[cross-compiling]]. + + +## RPC IDs + +[TODO: update / integrate somewhere.] + +If you want to trace the RPC calls made by some process by using `rpctrace` +command, you will also want some more human-readable output of this +command. This is achieved by generating `hurd.msgids` file that includes the +mapping between the number of the RPC call and its name: + + $ cd build/hurd + $ make hurd.msgids + $ cp hurd.msgids ~ + +Now you can use this file in the following way: + + $ rpctrace -i ~/hurd.msgids ls diff --git a/hurd/building/cross-compiling.mdwn b/hurd/building/cross-compiling.mdwn new file mode 100644 index 00000000..11afc97f --- /dev/null +++ b/hurd/building/cross-compiling.mdwn @@ -0,0 +1,261 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# `cross-gnu` + +[[Thomas_Schwinge|tschwinge]] has written a shell script for building a +complete cross-build environment for GNU/Hurd systems. + +For now, find the shell scripts at +<http://nic-nac-project.de/~schwinge/tmp/cross-gnu> and +<http://nic-nac-project.de/~schwinge/tmp/cross-gnu-env>. + + +## Using + +Read through it. Understand it. Only then use it by following the next steps. + +/!\ Be made aware that -- while it is of course possible to build a working +cross-compiler -- this is not trivial to do. You'll have to patch source +packages. See the following list about needed patches, which have not yet been +installed in the upstream repositories. + + +### Supported Versions of Source Packages + +The following ones are known to work. Others may work as well, but no +guarantee is given. Always the preferred version is listed first. + +* `src/binutils`: [[GNU_Binutils|binutils]] + + * CVS `binutils-2_18-branch` + + $ mkdir binutils-2_18-branch + $ cd binutils-2_18-branch + $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src \ + co -r binutils-2_18-branch binutils + + The sources are rooted in `binutils-2_18-branch/src/`. Also use these + commands for updating, instead of the usual `cvs update`. + + * The 2.18 release tarball from <ftp://ftp.gnu.org/gnu/binutils/> should + also be fine, as should be all other recent releases. + +* `src/gcc`: [[GNU_Compiler_Collection|gcc]] + + * SVN `gcc-4_1-branch` + + $ svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_1-branch + + Prepare: + + $ ( cd gcc-4_1-branch/ && contrib/gcc_update --touch ) + + * Recent releases of the 4.1 series from <ftp://ftp.gnu.org/gnu/gcc/> + should also be fine. + + * SVN `gcc-4_2-branch` + + $ svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_2-branch + + Prepare: + + $ ( cd gcc-4_2-branch/ && contrib/gcc_update --touch ) + + * Patches: + <http://lists.gnu.org/archive/html/bug-hurd/2007-11/msg00034.html> + + * Recent releases of the 4.2 series from <ftp://ftp.gnu.org/gnu/gcc/> + should also be fine, but need the same set of patches as the + `gcc-4_2-branch` needs. + + <!-- + GCC 4.3 has not yet been released. + * SVN `gcc-4_3-branch` + --> + * SVN `trunk` -- upcoming 4.3 series + + $ svn co svn://gcc.gnu.org/svn/gcc/trunk + + Prepare: + + $ ( cd trunk/ && contrib/gcc_update --touch ) + + * Patches: + <http://lists.gnu.org/archive/html/bug-hurd/2007-12/msg00029.html> + + <!-- + GCC 4.3 has not yet been released. + * Recent releases of the 4.3 series from <ftp://ftp.gnu.org/gnu/gcc/> + should also be fine, but need the same set of patches as the + `gcc-4_3-branch` needs. + --> + +* `src/gnumach`: [[GNU_Mach|microkernel/mach/gnumach]] + + * CVS `gnumach-1-branch` + + $ cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd \ + co -r gnumach-1-branch gnumach + $ mv gnumach gnumach-1-branch + + Prepare: + + $ ( cd gnumach-1-branch/ && autoreconf -vfi ) + +* `src/mig`: [[GNU_Mach_Interface_Generator|microkernel/mach/mig]] + + * CVS `HEAD` + + $ cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co mig + + Prepare: + + $ ( cd mig/ && autoreconf -vfi ) + +* `src/hurd`: [[GNU_Hurd|hurd]] + + * CVS `HEAD` + + $ cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co hurd + +* `src/glibc`: [[GNU_C_Library|glibc]] + + * CVS `glibc-2_7-branch` + + $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/glibc \ + co -r glibc-2_7-branch glibc + $ mv libc glibc-2_7-branch + + * Patches: + <http://lists.gnu.org/archive/html/bug-hurd/2007-11/msg00030.html> + + * Recent releases of the 2.7 series from <ftp://ftp.gnu.org/gnu/glibc/> + should also be fine, but need the same set of patches as the + `glibc-2_7-branch` needs. + +<!-- + + * CVS `HEAD` + + $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/glibc \ + co glibc + $ mv libc glibc-HEAD + + * TODO. + <http://lists.gnu.org/archive/html/bug-hurd/2007-11/msg00026.html> + +--> + +<!-- + +* `src/gdb`: [[GNU_Debugger|gdb]] + + This is optional and will only be compiled if present. + + * CVS `gdb_6_6-branch` + + $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src \ + co -r gdb_6_6-branch gdb + $ mv src gdb_6_6-branch + + Also needs some patch because of MIG changes, if I remember correctly. + + * Recent tarballs from <ftp://ftp.gnu.org/gnu/gdb/> should also work. + +--> + + +### Preparation + +Unpack the tarballs if you downloaded any. + +Create a directory where the cross build shall be rooted in and a `src` +subdirectory in there. Then create symbolic links for every of the above +packages: from `src/PACKAGE` to where you stored or unpacked it. If you don't +intend to build several cross compilers or use the source trees otherwise, you +can also directly store the source trees in `src/`. The source trees can be +shared between multiple cross build trees since the packages' build systems are +supposed not to modify the files in the source trees. Not all packages adhere +to that, but they fail to do so only for pre-processed documentation, etc. + +Either make sure that `cross-gnu-env` and `cross-gnu` are found in `$PATH` +(`~/bin/`, for example) or alternatively remember to use their full paths in +the following. + +The system you're running the script on (the *build* system) needs to have a +basic compiling environment installed, i.e., a C compiler with the basic +libraries and `make`. You might also need `flex` and `bison`. For building +recent version of GCC (e.g., the upcoming 4.3, which is not yet supported) +you'll need to have development packages of GMP and MPFR installed. + + +### Setting Up the Environment + +Do this every time you intend to use the cross compiler: + + $ ROOT=to/the/cross/build/root + $ . cross-gnu-env + +This will set several environment variables, which are later used by (a) the +`cross-gnu` script and (b) by you, the user of the cross compiler. `$TARGET` +will be set by the script, `$PATH` will be adjusted, etc. See the +`cross-gnu-env` file for all environment variables that are set, as well as +their default values. `$ROOT` will be made an absolute path if it isn't +already. + +Later, you'll be able to do things like `../configure --host="$TARGET"` and the +cross compiler will be found automatically. + + +### Creating the Cross Build Environment + +After setting up the environemt, just run `cross-gnu` and watch the messages +flow by. In the end you should see a message: *[...]/cross-gnu: Everything +should be in place now.* + + +### Makefile + +A [[Makefile]] has been written to automate the above steps. You will require +an Internet connection and atleast 1.5 GiB of hard-disk space. Just run... + + make + +... to build the toolchain. To clean up, use... + + make clean + + +### Staying Up-To-Date + +You can re-run `cross-gnu` to rebuild the parts of the sources that have +changed since the last run. This will save a lot of time compared to starting +from scratch again. Also, it is especially useful if you aren't working with +unpacked tarballs, but on CVS's branches or want to quickly get a new tool +chain with patches you applied to the source trees. However: do *not* use this +technique when doing major changes to the source trees, like switching from GCC +4.0 to GCC 4.1. + + +#### Comment + +Unfortunately the GNU Automake build system (which is used by GNU Mach's +`gnumach-1-branch`) will overwrite installed files (header files in this case +here), even if they didn't change. And because all packages' build systems are +using dependency tracking, a lot of files will be rebuilt each time `cross-gnu` +is re-run, even if the files themselves didn't change. Talk to [[tschwinge]] +if you want to work on fixing that -- it is already clear what needs to be +done, it just hasn't been done yet. + + +# References + +* <http://lists.gnu.org/archive/html/bug-hurd/2004-09/msg00030.html> diff --git a/hurd/building/cross-compiling/Makefile b/hurd/building/cross-compiling/Makefile new file mode 100644 index 00000000..7a6a9524 --- /dev/null +++ b/hurd/building/cross-compiling/Makefile @@ -0,0 +1,168 @@ +# "HurdToolchainMakefile" - a Makefile for setting up Hurd toolchain builds + +# Copyright (C) 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Written by Shakthi Kannan <shakthi.kannan@qvantel.com>. + + +## Variables +TOPDIR=. +DOWNLOADS=${TOPDIR}/downloads +ROOT=${TOPDIR}/root +SRC=${ROOT}/src +GLIBC_DIR=${SRC}/glibc +PATCH0_DIR=patch0 +PATCH1_DIR=patch1 + +## Patches +PATCH1 = 0003-2007-09-13-H.J.-Lu-hongjiu.lu-intel.com.patch \ + 0005-Hurd-specific-kernel-features.h.patch \ + 0007-2007-10-05-version-of-stat.patch.patch \ + 0008-r2425-of-debian-patches-hurd-i386-local-atomic-no-mu.patch \ + 0010-r2425-of-debian-patches-hurd-i386-local-gscope.diff.patch \ + 0012-r2425-of-debian-patches-hurd-i386-local-no-strerror_.patch \ + 0013-r2626-of-debian-patches-hurd-i386-local-tls-support.patch \ + 0014-r2591-of-debian-patches-hurd-i386-local-tls.diff.patch \ + 0015-r2630-of-debian-patches-hurd-i386-submitted-libc_onc.patch \ + 0016-Include-stdint.h.patch \ + 0017-r2598-of-debian-patches-any-local-stdio-lock.diff.patch \ + 0018-r2650-of-debian-patches-hurd-i386-submitted-strtoul.patch \ + 0019-2007-11-12-Aurelien-Jarno-aurelien-aurel32.net-Tho.patch \ + 0020-r2656-of-debian-patches-any-submitted-sched_h.diff.patch \ + 0022-2007-11-18-Roland-McGrath-roland-frob.com.patch + +PATCH0 = 0009-2007-07-22-version-of-init-first.c_vs._GCC_4.1.patch.patch \ + 0011-2007-02-08-version-of-resolv_res_send.c.patch.patch + +all: create_dir get_sources apply_glibc_patches build_all + +## Create directories +create_dir: + cd ${TOPDIR} + mkdir ${DOWNLOADS} + mkdir -p ${SRC} + +get_sources: get_cross_gnu get_binutils get_gcc get_gnumach get_mig get_hurd get_glibc + +get_cross_gnu: + @ echo " ___ _ __ ___ ___ ___ __ _ _ __ _ _ " + @ echo " / __| '__/ _ \/ __/ __|_____ / _\` | '_ \| | | |" + @ echo "| (__| | | (_) \__ \__ \_____| (_| | | | | |_| |" + @ echo " \___|_| \___/|___/___/ \__, |_| |_|\__,_|" + @ echo " |___/ " + cd ${DOWNLOADS}; \ + wget http://nic-nac-project.de/~schwinge/tmp/cross-gnu + @ echo " ___ _ __ ___ ___ ___ __ _ _ __ _ _ ___ _ ____ __" + @ echo " / __| '__/ _ \/ __/ __|_____ / _\` | '_ \| | | |_____ / _ \ '_ \ \ / /" + @ echo "| (__| | | (_) \__ \__ \_____| (_| | | | | |_| |_____| __/ | | \ V / " + @ echo " \___|_| \___/|___/___/ \__, |_| |_|\__,_| \___|_| |_|\_/ " + @ echo " |___/ " + cd ${DOWNLOADS}; \ + wget http://nic-nac-project.de/~schwinge/tmp/cross-gnu-env; \ + chmod +x cross-gnu; \ + chmod +x cross-gnu-env + +get_binutils: + @ echo " _ _ _ _ _ " + @ echo "| |__ (_)_ __ _ _| |_(_) |___ " + @ echo "| '_ \| | '_ \| | | | __| | / __|" + @ echo "| |_) | | | | | |_| | |_| | \__ \\" + @ echo "|_.__/|_|_| |_|\__,_|\__|_|_|___/" + cd ${SRC}; \ + cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src co -r binutils-2_18-branch binutils; \ + mv src binutils + +get_gcc: + @ echo " __ _ ___ ___ " + @ echo " / _\` |/ __/ __|" + @ echo "| (_| | (_| (__ " + @ echo " \__, |\___\___|" + @ echo " |___/ " + cd ${SRC}; \ + svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_1-branch; \ + mv gcc-4_1-branch gcc; \ + ( cd gcc/ && contrib/gcc_update --touch ) + +get_gnumach: + @ echo " _ " + @ echo " __ _ _ __ _ _ _ __ ___ __ _ ___| |__ " + @ echo " / _\` | '_ \| | | | '_ \` _ \ / _\` |/ __| '_ \ " + @ echo "| (_| | | | | |_| | | | | | | (_| | (__| | | |" + @ echo " \__, |_| |_|\__,_|_| |_| |_|\__,_|\___|_| |_|" + @ echo " |___/ " + cd ${SRC}; \ + cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co -r gnumach-1-branch gnumach; \ + ( cd gnumach/ && autoreconf -vfi ) + +get_mig: + @ echo " _ " + @ echo " _ __ ___ (_) __ _ " + @ echo "| '_ \` _ \| |/ _\` |" + @ echo "| | | | | | | (_| |" + @ echo "|_| |_| |_|_|\__, |" + @ echo " |___/ " + cd ${SRC}; \ + cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co mig; \ + ( cd mig/ && autoreconf -vfi ) + +get_hurd: + @ echo " _ _ " + @ echo "| |__ _ _ _ __ __| |" + @ echo "| '_ \| | | | '__/ _\` |" + @ echo "| | | | |_| | | | (_| |" + @ echo "|_| |_|\__,_|_| \__,_|" + cd ${SRC}; \ + cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co hurd + +get_glibc: + @ echo " _ _ _ " + @ echo " __ _| (_) |__ ___ " + @ echo " / _\` | | | '_ \ / __|" + @ echo "| (_| | | | |_) | (__ " + @ echo " \__, |_|_|_.__/ \___|" + @ echo " |___/ " + cd ${SRC}; \ + cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/glibc co -r glibc-2_7-branch glibc; \ + mv libc glibc + mkdir ${GLIBC_DIR}/${PATCH0_DIR} + mkdir ${GLIBC_DIR}/${PATCH1_DIR} + +get_patch0: $(PATCH0) + +get_patch1: $(PATCH1) + +$(PATCH1): + wget -r -np -nd -P ${GLIBC_DIR}/${PATCH1_DIR} http://www.schwinge.homeip.net/~thomas/tmp/glibc-patches/$@ + cd ${GLIBC_DIR}; \ + patch -p1 < ${PATCH1_DIR}/$@ + +$(PATCH0): + wget -r -np -nd -P ${GLIBC_DIR}/${PATCH0_DIR} http://www.schwinge.homeip.net/~thomas/tmp/glibc-patches/$@ + cd ${GLIBC_DIR}; \ + patch -p0 < ${PATCH0_DIR}/$@ + +apply_glibc_patches: get_patch0 get_patch1 + +build_all: + ROOT=${TOPDIR}/root ; \ + export PATH="$(PATH):$(DOWNLOADS)" ; \ + echo $$PATH ; \ + . ${DOWNLOADS}/cross-gnu-env ; \ + ${DOWNLOADS}/cross-gnu + +clean: + rm -rf downloads root *~ diff --git a/hurd/building/cross-compiling/discussion.mdwn b/hurd/building/cross-compiling/discussion.mdwn new file mode 100644 index 00000000..f75e9e3e --- /dev/null +++ b/hurd/building/cross-compiling/discussion.mdwn @@ -0,0 +1,26 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +What happens if the external link goes down? Is there any way to store files +within the wiki itself? --[[vincentvikram]] + +> You can store files in the wiki if you have direct access to the Git +> repository. + +> I'm not sure I'd like arbitrary people to be able to store files in the wiki, +> as that might be abused easily and once a file is stored in the Git +> repository, there's no clean way to get rid of it anymore. Of course, there +> are valid cases for adding raw files, then you can always send me a link and +> ask me to add that file. + +> Now, as for the `cross-gnu` shell script, as I said: it will eventually be +> made part of the Hurd CVS repository. + +> --[[tschwinge]] diff --git a/hurd/building/example.mdwn b/hurd/building/example.mdwn new file mode 100644 index 00000000..afa18d8a --- /dev/null +++ b/hurd/building/example.mdwn @@ -0,0 +1,60 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +I checked out the source code on my Ubuntu GNU/Linux system connected to the +Internet using: + + cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co hurd + +I mounted the hurd directory on Ubuntu from my GNU Hurd system connected to the +LAN through NFS: + + settrans -ac /mnt /hurd/nfs ubuntu:/home/shaks/code + +Copy the hurd directory, locally. + +For compilation, you require build-essential, libc0.3-dev, hurd-dev. I used +Debian GNU Hurd K10 CDs for installation and they are available in the first +CD. + + apt-get update + apt-get install build-essential libc0.3-dev hurd-dev + +Enter into the hurd directory and start building it: + + cd hurd + mkdir build + cd build + ../configure + make + +There is a "libiohelp needed by" error. So, do a manual compilation for +libiohelp. + + cd .. + make libiohelp + cd build + make + +There is a "libiostore needed by" error. So, do a manual compilation for +libiostore. + + cd .. + make libiostore + cd build + make + +There is a "libiohelp.so: No such file or directory" error. + +Copy libiohelp/libiohelp.so file to build/libiohelp/ and re-run make, + + make + +The executables are created in the subdirectories in build/ directory. diff --git a/hurd/concepts.mdwn b/hurd/concepts.mdwn new file mode 100644 index 00000000..e416f1e6 --- /dev/null +++ b/hurd/concepts.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +* [[Translator]] +* [[Virtual_File_System]] +* [[Authentication]] +* [[Virtualization]] +* [[Neighborhurd]] diff --git a/hurd/console.mdwn b/hurd/console.mdwn new file mode 100644 index 00000000..3895531b --- /dev/null +++ b/hurd/console.mdwn @@ -0,0 +1,278 @@ +The below is a reworked version of Marcus Brinkmann's [letter to the debian-hurd list](http://lists.debian.org/debian-hurd/2002/debian-hurd-200209/msg00054.html). It describes how to setup the new console server for the Hurd. I am testing this right now, so this document is a work in progress. + +-- [[Main/JoachimNilsson]] - 21 Jan 2003 + +Many of the shortcomings of the console are not true anymore. I've updated the page to match the state as it is in CVS. + +-- [[Main/MarcoGerards]] - 28 May 2004 + +The latest Hurd package in Debian has all that is needed to run (dunno about hurd.ti though). The native-install script sets up all the necessary nodes, so all you really need is to run: + + console -d vga -d pc_kbd --repeat=kbd -d pc_mouse --repeat=mouse \ + -d generic_speaker -c /dev/vcs + +-- [[Main/JoachimNilsson]] - 17 Apr 2005 + +Additional information about the console can be found in the [Hurd Console Tutorial](http://uwhug.org.uk/index.pl?Hurd_Console_Tutorial) + + +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="What_is_the_new_console_"> What is the new console? </a> + +**_The new Hurd console features:_** + +**A console server**, which provides a number of virtual consoles to term servers, with a full set of terminal capabilities. + +The console server supports any encoding supported by iconv, but uses Unicode internally. The default encoding is ISO8859-1, another useful variant is UTF-8. + +The console server provides an arbitrary number of virtual consoles (numbered starting from 1, but the numbers don't need to be consecutive), which are created dynamically. A virtual console is not automatically displayed, for this you need a console client program which attaches to the virtual console you want to use. + +You can attach any number of console clients to the same virtual console, and detach them at any time. + +The console server provides a scrollback buffer for each virtual console. Currently, this is about one and a half screen full in addition to the screen. This should be configurable, of course, but isn't right now. + +**libcons**, a library that makes it easy to write console clients that attach to the console server. + +The client interface of the server is quite complicated, because it is based on shared memory and broadcasts the data to potentially many clients without blocking. It also includes a notification scheme so that clients remain idle when there is no console activity. This saves cpu power (compared to the alternative which would be polling). + +**The default console client**, which you will normally use to use a virtual console in a console server. Rather than writing many similar console client programs, I decided to write only one initially and make it extensible via dynamically loaded modules called "drivers". + +The console client uses libcons, of course. There are a number of drivers that exists already: + +* The ncursesw driver. You can use this if you log in from a remote unicode-capable console to attach to the local console server and use virtual console over the telnet/ssh session or similar. The ncursesw driver contains an output, input and bell driver components, so it is the only driver you need to get full access. + +* The vga driver. The VGA driver can be used locally to display a virtual console on a VGA card device. This driver provides a number of exciting features, and all of them are available in the fast text mode, and do not require a graphical framebuffer: + +* BDF font support. Load any BDF font with a Unicode encoding and a size from 8x13 up to 9x15 (recommended). + +* Dynamic glyph allocation. You can use up to 512 glyphs at any time. This means you can display cyrillic, greek, english runes, thai, etc. often at the same time, up to 512 different glyphs on the screen in parallel. The 512 is not a fixed set, they are chosen automatically out of the font you have loaded. This means that we only need one font for all users, regardless of the locale. + +* Dynamic color allocation. Because the above 512 glyph modus is only available with a reduced amount of colors, you can use only up to 8 different colors, but which of the 16 colors are available is chosen dynamically based on the colors actually used. + +_Note:_ + +* Support for multiple fonts at the same time. The VGA driver supports italic and real bold (not bright color) mode. This will hopefully be used in emacs font lock mode and other applications. + +* The pc\_kbd driver. This is a hack for a PC eyboard with an american keymap. We all want configurable keyboard layouts of course, but I had to set priorities, and extracting xkb (so we can reuse the X keymaps) is on the TODO list. For now, this driver with a fixed US keymap is available for immediate use. Although it is only considered to be a temporary solution, it provides all features you need (except changing the keymap): + * All keys of a standard 102(?) keys keyboard, including Ctrl, LeftAlt, RightAlt, CapsLock, NumLock, Keypad, cursor block, function keys are supported and have a sensible default value. + * _LeftAlt_ + _Function key N_ switches the virtual console N. + * _LeftAlt_ + _ArrowRight_ or _ArrowLeft_ switches to previous or next virtual console. + * _RightShift_ + _PageUp_ or _PageDown_ scrolls back or forward in the scrollback buffer by half pages. + * _LeftAlt_ + _ArrowUp_ or _ArrowDown_ scroll back or forward one line. + * _LeftCtrl_ + _LeftAlt_ + _Backspace_ terminates the console client, and reverts the VGA card etc to its original state. + * _RightAlt_ + _Keypad_ enables you to directly enter unicode characters in hexadecimal numbers. 0-9 have their standard meaning, and NumLock is 0xa, Keypad `/` is 0xb, `*` is 0xc, `-` is 0xd, `+` is 0xe and the enter key at the lower right of the keypad is 0xf. Up to four digits are memorized, if you type more, the earlier ones are forgotten. This allows to cover up typing mistakes. + +_For example:_AltGr + (Keypad 4, Keypad 1) = 0x41 = 'A'.<br />AltGr + (Keypad 2, 6, 3, NumLock) = 0x263a = smiley. +You can get unicode tables from <http://www.unicode.org> + +* The generic\_speaker driver supports the speaker commonly found in PCs and other computers. It is good enough for a simple bell tone or a small melody. I have several default bell styles implemented, but currently there is no configuration option to access them at run time, sorry! Load this module to make the console beep on ^G. + +## <a name="How_do_I_install_the_new_Hurd_co"> How do I install the new Hurd console? </a> + +### <a name="Setting_up_for_older_hurd_packag"> Setting up for older hurd packages </a> + +You either need the latest .deb of the Hurd, version 20020918-1 or later, or you need current CVS sources and compile them yourself. + +Then, the console server is in `/hurd/console`, the client in `/bin/console`. The installation is painless. + +First, make some device files: + + # cd /dev + # ./MAKEDEV vcs tty1 tty2 tty3 tty4 tty5 tty6 + +The above six ttys are only suggestions. You might want to give or take a few, depending on your needs. + +You need the terminal description. This is not yet in the ncurses package, because I am not finished yet. But you can download [hurd.ti from CVS](http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/hurd/hurd/console/hurd.ti). Please add it with + + # tic -x hurd.ti + +Then you should add the terminals to ttys, so you get a login session on them at boot time. Edit the file `/etc/ttys`, and add the following lines (or similar if you made more/less ttys): + + tty1 "/libexec/getty 38400" hurd on secure trusted console + tty2 "/libexec/getty 38400" hurd on secure trusted console + tty3 "/libexec/getty 38400" hurd on secure trusted console + tty4 "/libexec/getty 38400" hurd on secure trusted console + tty5 "/libexec/getty 38400" hurd on secure trusted console + tty6 "/libexec/getty 38400" hurd on secure trusted console + +This is all. If you now reboot, you will get six virtual consoles with a login prompt on each. But of course, the console client is not started automatically yet, so you don't see them. + +### <a name="Activating_the_console"> Activating the console </a> + +Login at the normal system console, and try to attach to the console server, either with the `ncursesw` driver or with the vga/pc\_kbd driver: + + # console -d ncursesw /dev/vcs + +or + + # console -d vga -d pc_kbd -d generic_speaker /dev/vcs + +That should work. The `ncursesw` driver supports console switching via _C-w C-1_ (or 2, 3, ...) and you can exit it with _C-w x_. However, the VGA client is more suitable on the local console. + +If you want repeater support (needed for X): + + # console -d vga -d pc_kbd --repeat=kbd -d generic_speaker \ + -d pc_mouse --repeat=mouse --protocol=ps/2 -c /dev/vcs + +Available mouse protocols are: + +* `mousesystem` +* `microsoft` +* `ps/2` +* `nomouse` +* `logitech` +* `mouse7` + +### <a name="Setting_up_encoding"> Setting up encoding </a> + +The virtual consoles you are now running on are providing an ISO8859-1 environment (also known as latin1), which is good enough for the USA and some countries in Europe. If you require a different encoding for your locale (like, let's say, ISO8859-2), you can specify this as an argument to the console server. I am sorry to say that fsysopts doesn't do the trick yet, so you have to set the option with `settrans -fg`, which will _terminate all your login sessions and restart the console server_. + +To do this, _first_ exit the client. It will get disconnected anyway (and doesn't attempt to reconnnect yet in such a case). Then do a + + # settrans -fg /dev/vcs /hurd/console --encoding=ISO8859-2 + +or + + # settrans -fg /dev/vcs /hurd/console --encoding=UTF-8 + +or similar. A list of supported locales is not easily available, but you can poke into `/share/i18n/SUPPORTED` to get an idea what is expected for your locale, and you can also check out `/share/i18n/charmaps`. Theoretically all of these encodings are "supported". In the file SUPPORTED, you see the locale (what you should export in the LANG environment variable, and enable in `/etc/locale.gen`) and the corresponding encoding. + +If you actually try this, you will notice two problems: + +1. You can not enter the letters in your locale, because the keyboard doesn't have the right layout. See above. Keyboard maps come later. For now, you have to help yourself with the direct input with RightAlt. Maybe I will put a simple compose key feature in the pc\_kbd driver, so that some western locales can be used more easily. +2. If you bother to look up the unicode hex code and enter it with AltGr, the font can not display it! If you are using the ncursesw driver, do you use it while you are logged in from a working UTF-8 terminal? If not, then this is your problem. An ncurses driver for non-UTF-8 terminals is on the TODO list. But if you use the VGA driver, you need to load a different font. + +This is because by default, the vga driver just reads the VGA card memory and takes the font that is stored there. This font has a limited characterset (256 characters, many graphical symbols among that), so you won't get more than a few western characters with that. + +## <a name="Unicode_support"> Unicode support </a> + +But you want it all. You want to read Middle Old English. You want to read Thai. Your Korean spam. Georgian script. Hebrew. And you can have it. + +First you have to set the encoding to UTF-8: + + # settrans -fg /dev/vcs /hurd/console --encoding=UTF-8 + +Then you need a Unicode font. There are good ones provided by Markus Kuhn, [the UCS fonts](http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz). See also [the web page](http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html). + +Now, load the font by providing it with the `--font` option to the vga driver. I suggest only the 8x13 and the 9x15 fonts, but feel free to try others, too. Note that the VGA text mode can not really display 9 pixel wide characters. But as most characters have the ninth column empty, and the VGA text mode can display an empty column between two adjacent character cells, this trick allows us to display most of the 9x15 font correctly. So you won't notice a difference until you come to very broad characters or special symbols, where you will see that the last column is cut off. (BTW, I wrote the dynafont code carefully to still support horizontal line graphic characters properly in 9 pixel wide fonts. This is done by exploiting some special modes in the VGA hardware. This is why in 512 (256) glyph mode and 9 pixel wide fonts, you are limited to 448 (224) normal characters: 64 (32) slots are reserved for the horizontal line graphic characters so they are drawn continuously.) + +So, try the following: + + # console -d vga --font 8x13.bdf -d pc_kbd -d generic_speaker /dev/vcs + +or + + # console -d vga --font 9x15.bdf -d pc_kbd -d generic_speaker /dev/vcs + +If you are satisfied, copy your default font to `/lib/hurd/fonts/vga-system.bdf`, where it will be picked up automatically in favor to the graphic card's font. + +### <a name="More_about_fonts"> More about fonts </a> + +While we are talking about fonts, try also the 8x13O font with `--font-italic` and 8x13B or 9x15B font with `--font-bold`. You can save them in `/lib/hurd/fonts/vga-system-bold.bdf` and `/lib/hurd/fonts/vga-system-italic.bdf`, too. + +To activate those fonts on your virtual console, try the following: + + # echo `tput sitm` Hello slanted world. `tput ritm` + +and + + # echo `tput gsbom` Hello bold world. `tput grbom` + +I hope you like what you see. Imagine this in emacs font-lock mode. + +### <a name="Unicode_finally"> Unicode, finally </a> + +There are a few more steps necessary to make your Unicode environment ready: + +Install the locales package. The current version does want a newer glibc than we have in the archive, but this can be overridden with the `--force-depends` option to dpkg. The old glibc is good enough. + +Add a Unicode locale to `/etc/locale.gen`, and generate the locale information for that! For example, I am living in Germany, and normally use `de_DE` with the encoding ISO8859-1. My Unicode locale is `de_DE.UTF-8`, so I am adding that to `/etc/locale.gen`: + + de_DE.UTF-8 UTF-8 + +and rerun locale-gen: + + # locale-gen + +See also `/share/i18n/SUPPORTED`. You can also do this more conveniently with + + # dpkg-reconfigure locales + +Once you generated this, make it your default locale: + + # export LANG=de_DE.UTF-8 + +If you have also loaded the unicode font above, you are set up. Try for example to view the `examples/` files in the `ucs-fonts` package with less. + + # less fonts/examples/UTF_8-demo.txt + +You should see most of that file with the 9x15 font (a bit less with the 8x13 font). + +You should be able to do the above process with other encodings than UTF-8. But you should _always_ use a Unicode font, because the console client uses Unicode internally fo everything. + +## <a name="Application_specific_notes"> Application specific notes </a> + +If you enter unicode characters at the shell, libreadline loses track of the number of characters displayed (it is not aware of multi-byte encodings like UTF-8). This is fixed in readline 4.3 (which is not yet in Debian). + +If you use mutt, install `mutt-utf8` package. For lynx, edit `/etc/lynx.cfg`, making sure that `CHARACTER_SET` is set to `utf-8`. + +If you use other applications, try to search with google for "application-name utf8" or "application-name unicode". Often you find what you need. The issues are the same for the GNU/Hurd and GNU/Linux systems, so most of the information can be shared, except how to setup the system console to support Unicode, of course. + +The `console-server` watches for new hurdio terms (devices translated with `/hurd/term`) and adds them to `/dev/vcs` automatically. What this means is, if you create a new tty with `MAKEDEV`, and then attach something to it, it will now appear in `/dev/vcs`. When a term is disconnected from, it disappears from `/dev/vcs`. `/libexec/getty` is what is usually attached to a term. You can see this automatic adding and removing of terms from the `console-server` by typing the following: + + # cd /dev + # ls vcs/ + 1 2 3 4 5 6 + # MAKEDEV tty7 + # cat > tty7 & + [1]+ Stopped cat > tty7 + # ls vcs/ + 1 2 3 4 5 6 7 + # kill %1 + # ls vcs/ + 1 2 3 4 5 6 + +## <a name="Known_problems_and_important_mis"> Known problems and important missing features </a> + +Squeezed at the end so nobody sees it ;) + +**console server:** Is probably too lax in permission checking. Does not implement settable tab stops. Does not allow to change encoding at run time. Does not allow any other screen size but 80x25. + +Combining characters is not supported. + +**libcons/console-client:** If you have one virtual console active, and another one receives a bell character, you don't hear the bell. This is because only the active virtual console is watched for anything interesting to happen. I think that is ok, but you might be surprised if you are used to how it works on GNU/Linux. + +Copy & Paste not supported. + +**vga driver:** Does not recalculate the mode lines if the font height is changed. This makes font heights below 13 or over 16 infeasible. + +Should support other text modes (integrate svgatextmode?) + +**pc\_kbd driver:** No keyboard layout but US supported! Maybe in some cases left/right shift/ctrl/alt is allowed where both left and right should be allowed. Keyboard LEDs are only supported when using OSKIT-Mach or the CVS branch gnumach-1-branch of GNU Mach. + +**ncursesw driver:** Doesn't work properly on other terminals but UTF-8. Should not use C-w, this should be configurable. Does not support use of scroll back buffer. + +**Other programs:** Readline doesn't support multibyte encodings (4.2 and earlier). term doesn't either (all versions). + +---- + +---- + +Here's a June 2002 [status report](http://mail.gnu.org/archive/html/bug-hurd/2002-06/msg00549.html) + +In September 2002 there was a [request for testers](http://mail.gnu.org/archive/html/bug-hurd/2002-09/msg00121.html). There's been quite a bit of discussion on <bug-hurd@gnuNOSPAM.org> about updates, test results and changes. + +-- [[Main/GrantBow]] - 22 Oct 2002 + +There are several patches for the console on savannah to deal with the shortcommings described in Marcus' email. [Patches ](http://savannah.gnu.org/patch/index.php?group_id=30&set=custom&msort=0&report_id=100&advsrch=0&go_report=Apply&category_id=162&assigned_to=0&status_id=1&chunksz=50) for broadcasting the bell event, for setting other text modes and a patch to make it possible to start XFree from the console can be found on savannah. + +An [experimental plugin to load XKB keymaps](http://kilobug.free.fr/hurd/xkb-0.3.tar.gz) exists, although it is alpha quality. + +-- [[Main/MarcoGerards]] - 28 May 2004 + +Added examples that use repeaters needed by X. + +-- [[Main/OgnyanKulev]] - 18 Sep 2004 diff --git a/hurd/critique.mdwn b/hurd/critique.mdwn new file mode 100644 index 00000000..9770138e --- /dev/null +++ b/hurd/critique.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[NealWalfield]] and [[MarcusBrinkmann]] wrote a paper titled [*A Critique of +the GNU Hurd Multi-Server Operating +System*](http://walfield.org/papers/200707-walfield-critique-of-the-GNU-Hurd.pdf). +This was published in ACM SIGOPS Operating Systems Review in July 2007. This +is sometimes referred to as *the critique*. + +The paper provides a technical overview of the Hurd's +architecture and critiques some of the decisions made. diff --git a/hurd/debugging.mdwn b/hurd/debugging.mdwn new file mode 100644 index 00000000..b84c5675 --- /dev/null +++ b/hurd/debugging.mdwn @@ -0,0 +1,22 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# Strategies + +* [[GDB]] -- the GNU debugger + * [[gdb/Backtrace]]s +* [[subhurd]] -- running another Hurd system in parallel +* [[rpctrace]] -- tracing [[RPC]]s + + +# About Specific Packages + +* [[glibc]] +* [[Hurd]] diff --git a/hurd/debugging/gdb.mdwn b/hurd/debugging/gdb.mdwn new file mode 100644 index 00000000..98c31435 --- /dev/null +++ b/hurd/debugging/gdb.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The [[GNU_debugger_*GDB*|/gdb]] works on GNU/Hurd +systems as it does on other system, but has some additional [hurd-specific +features](http://sourceware.org/gdb/current/onlinedocs/gdb_19.html#Hurd%20Native) +to offer, such as [[noninvasive_debugging]] (for avoiding [[deadlock]]s), for +example. diff --git a/hurd/debugging/gdb/noninvasive_debugging.mdwn b/hurd/debugging/gdb/noninvasive_debugging.mdwn new file mode 100644 index 00000000..62179f7d --- /dev/null +++ b/hurd/debugging/gdb/noninvasive_debugging.mdwn @@ -0,0 +1,16 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Sometimes using [[GDB]] on a [[system_server|translator]] can result in a [[deadlock]]. You +can however still use GDB by using the [`set +noninvasive`](http://sourceware.org/gdb/current/onlinedocs/gdb_19.html#Hurd%20Native) +option. This indicates to GDB to not stop the program but allows you to +nevertheless examine its state. Thus, you can get [[/gdb/backtrace]]s and values of +variables (and watch them change underneath you). diff --git a/hurd/debugging/glibc.mdwn b/hurd/debugging/glibc.mdwn new file mode 100644 index 00000000..a0890fe8 --- /dev/null +++ b/hurd/debugging/glibc.mdwn @@ -0,0 +1,71 @@ +Here are some hints about how to approach testing after nontrivial changes to +glibc have been done. + +--- + +First step is having the build a glibc complete. This is actually more +difficult than one might expect, as it involves (towards the end of the build +process; unless you are cross-building, of course), that the newly created +libraries and loader actually work: they're used to run the `rpcgen` +program. If that step doesn't succeed, it'll look similar to this: + + [...] + CPP='gcc -E -x c-header' [...]/build/elf/ld.so.1 --library-path [...] [...]/build/sunrpc/rpcgen [...] + Segmentation fault + +--- + +If building glibc succeeds, the next thing to try is running the test suite, or +parts of it. + +Here is a list of known failures: + +[TODO]. + +--- + +Make sure static linking is working OK at all. The `elf/sln` program (a +stripped-down `ln` that is statically linked) in the glibc build ought to test +that. Also, static linking under various conditions will already have been +tested when running the test suite, especially in `elf/` and `dlfcn/`. + +Make sure static linking with cthreads is working. If you can get an +`ext2fs.static` compiled and linked against the new glibc, that is good. + +[TODO]. + +Then debug its startup as a normal program on your working hurd. + + $ [...]/ext2fs.static --help + [...] + +Then try its full server startup. + + $ settrans -ca node [...]/ext2fs.static <BACKEND> + $ cd node/ + [...] + +Make sure dynamic linking for servers is working. If you haven't broken the +ABI, you can just use an existing `/hurd/foobar` binary, started the way +glibc's `testrun.sh` does it. + +[TODO]: Is this the correct way to do that? + + $ settrans -ca node [glibc]/build/testrun.sh /hurd/ext2fs <BACKEND> + $ cd node/ + [...] + +--- + +Test it in a [[subhurd]]. + +--- + +Test it on a real system. + +--- + +Sources: + +* <http://lists.gnu.org/archive/html/bug-hurd/2007-02/msg00038.html> +* [[Thomas_Schwinge|tschwinge]]'s mind diff --git a/hurd/debugging/hurd.mdwn b/hurd/debugging/hurd.mdwn new file mode 100644 index 00000000..043da3e0 --- /dev/null +++ b/hurd/debugging/hurd.mdwn @@ -0,0 +1,53 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Say you want to try running file system server (*[[translator/ext2fs]]*<!--`[[translator/ext2fs]]`-->, +*[[translator/jfs]]*<!--`[[translator/jfs]]`-->, ...) against a modified version of *[[libpager]]*<!--`[[libpager]]`--> and +debug the latter one using [[GDB]]. + +Set the [[translator]] like this: + + $ settrans -fgap ↩ + jfs.img.i ↩ + /usr/bin/env ↩ + LD_LIBRARY_PATH=~tschwinge/tmp/hurd/hurd.ogi/build/libpager ↩ + "`pwd`"/jfs.obj/jfs ↩ + "`pwd`"/jfs.img + +Then, when starting GDB, start it like this (or use an equivalent method, of +course): + + $ LD_LIBRARY_PATH=~tschwinge/tmp/hurd/hurd.ogi/build/libpager ↩ + gdb ↩ + ~tschwinge/tmp/jfs/jfs.obj/jfs 15436 + GNU gdb 6.5-debian + [...] + Reading symbols from /lib/libdiskfs.so.0.3...Reading symbols from /lib/debug/lib/libdiskfs.so.0.3...done. + done. + Loaded symbols for /lib/libdiskfs.so.0.3 + Reading symbols from /devel4/tschwinge/tmp/hurd/hurd.ogi/build/libpager/libpager.so.0.3...done. + Loaded symbols for /devel4/tschwinge/tmp/hurd/hurd.ogi/build/libpager/libpager.so.0.3 + Reading symbols from /lib/libstore.so.0.3...Reading symbols from /lib/debug/lib/libstore.so.0.3...done. + done. + Loaded symbols for /lib/libstore.so.0.3 + [...] + (gdb) break pager_demuxer + Breakpoint 1 at 0x105c98d: file ../../libpager/demuxer.c, line 27. + [...] + Breakpoint 1, pager_demuxer (inp=0x12bded0, outp=0x12bbec0) at ../../libpager/demuxer.c:27 + 27 { + (gdb) list + 22 /* Demultiplex a single message directed at a pager port; INP is the + 23 message received; fill OUTP with the reply. */ + 24 int + 25 pager_demuxer (mach_msg_header_t *inp, + [...] + +Voilà. diff --git a/hurd/debugging/rpctrace.mdwn b/hurd/debugging/rpctrace.mdwn new file mode 100644 index 00000000..68edca2f --- /dev/null +++ b/hurd/debugging/rpctrace.mdwn @@ -0,0 +1,35 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +*rpctrace* is -- roughly -- an equivavlent to Linux's *strace* or Solaris' or +BSD's *truss*. It is used to trace [[remote_procedure_call|rpc]]s a process is +doing. + +See `rpctrace --help` about how to use it. + + +# Issues and Patches + +* <http://savannah.gnu.org/patch/?2104> -- don't assert that local port names + are valid +* <http://savannah.gnu.org/bugs/?3939> -- `rpctrace`d program hangs when signal + that terminates or suspends it is sent + * <http://savannah.gnu.org/patch/?1633> -- terminated with `C-c` `rpctrace`d + programs hang +* <http://savannah.gnu.org/patch/?5580> -- more readable output +* <http://savannah.gnu.org/bugs/?20612> -- heisenbug + + +# TODO + + <youpi> how to rpctrace a translator ? + <youpi> ah, just settrans /usr/bin/rpctrace... + <youpi> hum, it hung, and killing it got a Mach panic (thread in unexpected + state) ... diff --git a/hurd/debugging/subhurd.mdwn b/hurd/debugging/subhurd.mdwn new file mode 100644 index 00000000..caad950b --- /dev/null +++ b/hurd/debugging/subhurd.mdwn @@ -0,0 +1,90 @@ +# General Information + +* [[/hurd/subhurd]] + +--- + +# Debugging the Hurd Startup Process + +_one.full_ is the subhurd's root file system image and has been installed as +follows: [TODO] + +_Wx_ translates to terminal window _x_. + +W1 + + $ fsysopts one.full/ --readonly + $ sudo boot -I -d -s -D one.full/ one.full/boot/script.boot one.full.ext2 + Pausing. . . + +(In theory it shouldn't be neccessary to run the subhurd as user _root_, but in +practice [that doesn't work at the +moment](http://savannah.gnu.org/bugs/?17341).) + +W2 + + $ ps -Af + [...] + root 851 385 p4 0:00.01 boot -I -d -s -D one.full/ one.full/boot/script.boot one.full.ext2 + - 853 1 ? 0:00.00 ? + - 854 1 ? 0:00.00 ? + [...] + $ sudo gdb /var/tmp/one.full/hurd/ext2fs.static + [...] + (gdb) attach 853 + Attaching to program `/var/tmp/one.full/hurd/ext2fs.static', pid 853 + warning: Can't modify tracing state for pid 853: No signal thread + Can't fetch registers from thread 1: No such thread + +(The _boot_ program [could be modified to print out the +pids](http://savannah.gnu.org/bugs/?19254), so that one wouldn't have to fumble +with _ps_.) + +W3 + + $ sudo gdb /var/tmp/one.full/lib/ld.so.1 + [...] + (gdb) set solib-absolute-prefix /var/tmp/one.full + (gdb) attach 854 + Attaching to program `/var/tmp/one.full/lib/ld.so.1', pid 854 + warning: Can't modify tracing state for pid 854: No signal thread + Can't fetch registers from thread 1: No such thread + +W1 + + [<Enter>.] + /hurd/ext2fs.static --bootflags=-dsf --host-priv-port=38 --device-master-port=43 --exec-server-task=47 -Tdevice pseudo-root + /lib/ld.so.1 /hurd/exec + +Now that this step has been accomplished, you can set break points in GDB, etc. + +W2 + + (gdb) continue + Continuing. + warning: Can't wait for pid 853: No child processes + +W1 + + Hurd server bootstrap: ext2fs.static[pseudo-root] exec + +W3 + + (gdb) continue + Continuing. + warning: Can't wait for pid 854: No child processes + + Program received signal EXC_BAD_ACCESS, Could not access memory. + __mach_port_mod_refs (task=1, name=139802, right=1, delta=-1) + at /var/tmp/glibc-2_5-branch/build_--without-tls_--without-__thread/mach/RPC_mach_port_mod_refs.c:132 + 132 InP->Head.msgh_reply_port = __mig_get_reply_port(); + (gdb) x/i $pc + 0x168f2 <__mach_port_mod_refs+82>: call 0x151b0 <__mig_get_reply_port> + +--- + +Sources: + +* <http://www.gnu.org/software/hurd/howto/subhurd.html> +* <http://lists.gnu.org/archive/html/bug-hurd/2007-02/msg00030.html> +* [[Thomas_Schwinge|tschwinge]]'s mind diff --git a/hurd/documentation.mdwn b/hurd/documentation.mdwn new file mode 100644 index 00000000..4d431b0b --- /dev/null +++ b/hurd/documentation.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + * [[FAQ]] + + * <http://www.gnu.org/software/hurd/docs.html> diff --git a/hurd/faq.mdwn b/hurd/faq.mdwn new file mode 100644 index 00000000..aab538d9 --- /dev/null +++ b/hurd/faq.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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="GNU Hurd FAQ"]] + +[[inline +pages="hurd/faq/* and !*/discussion" +show=0 +actions=yes +rootpage="hurd/faq" postformtext="Add a new item titled:"]] diff --git a/hurd/faq/gramatically_speaking.mdwn b/hurd/faq/gramatically_speaking.mdwn new file mode 100644 index 00000000..7aa3edac --- /dev/null +++ b/hurd/faq/gramatically_speaking.mdwn @@ -0,0 +1,42 @@ +[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2008 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="Grammatically speaking, what is the Hurd?"]] + +*Hurd*, as an acronym, stands for *Hird of [[Unix]]-Replacing Daemons*. *Hird*, in +turn, stands for *Hurd of Interfaces Representing Depth*. + +We treat *Hurd* as a title rather than as a proper name: it requires an +article, as in *the Hurd*. For instance: *The ext2 filesystem is provided by +the Hurd, not by Mach.* Note that all of the following are incorrect: *Hurd*, +*HURD*, *The HURD*, and *the hurd*. + +We write *the GNU Hurd* instead of *the Hurd* when we want to emphasize that +the Hurd is a GNU package. Once this has been made clear, we usually use the +shorter form, without *GNU*. + +The whole operating system includes not only the kernel and the system servers, +but also many more programs. This system is called *GNU*, or *the GNU +operating system*. The GNU programs can also run on other operating system +kernels. We say *GNU/Hurd* when we want to put emphasis on the fact that this +is the GNU system running on top of the Hurd, and to contrast it with the +GNU/Linux system which is GNU using Linux as the kernel. + +Finally, there is *Debian GNU/Hurd*. This refers to the distribution of the GNU +system as created by the Debian developers. For example: *What do you run on +your laptop? Debian GNU/Hurd, of course.* + +The French generally write *le Hurd*--that is, they treat the name as masculine +singular, capitalized as in English. + +When we are referring to the microkernel, we say *Mach* and use it as a proper +noun. For example: *Mach uses the device drivers found in version 2.0.x of +Linux.* We sometimes say *the Mach microkernel* instead of just *Mach*. diff --git a/hurd/faq/l4.mdwn b/hurd/faq/l4.mdwn new file mode 100644 index 00000000..185c713a --- /dev/null +++ b/hurd/faq/l4.mdwn @@ -0,0 +1,24 @@ +[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2008 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="Why is there no information on the official website about the +Hurd port to L4 (Hurd/L4)?"]] + +There is an ongoing effort to port the Hurd to the L4 microkernel family. This +will take time and the port is not in a releasable state -- this is why there +is no information about the L4 port on the website for the Hurd project +<http://www.gnu.org/software/hurd> other than this FAQ entry. + +The development of Hurd/L4 is being done in the `hurd-l4` module of the Hurd +CVS repository. The `doc` directory contains a design document that is worth +reading for anyone who wishes to learn more about Hurd/L4. If you wish to +follow the development or contribute patches to Hurd/L4, please subscribe to +the [[mailing_lists/l4-hurd]] mailing list. diff --git a/hurd/faq/old-stuff.mdwn b/hurd/faq/old-stuff.mdwn new file mode 100644 index 00000000..1bcc09a0 --- /dev/null +++ b/hurd/faq/old-stuff.mdwn @@ -0,0 +1,45 @@ +In addition to the [general FAQ](http://www.gnu.org/software/hurd/docs.html#TOCfaq) there are the following typical newbie questions. (There is an [updated version](http://tuxou.ouvaton.org/hurd/) which is not official yet.) + +If you still have problems, do not hesitate to make use of the [[mailing_lists]] or the [[IRC]]. + +* **_You say GNU, don't you mean GNU/Hurd?_** + * Yes and no. GNU refers to the system as a whole, while GNU/Hurd is more specific, saying that it is the GNU system running on the Hurd -- to differentiate it from the GNU system running on Linux, GNU/Linux. Also see [[GNU/GnuNames]] + +* **_What editor can I use?_** + * `nano` is the default editor on a fresh install, not `ae`. + +* **_Why can't I get the answers I need from Hurd hackers?_** + * This [document](http://www.catb.org/~esr/faqs/smart-questions.html) may help you understand some developers attitudes and social norms. + +* **_Where are the virtual consoles I use when running Linux?_** + * You need to [use screen](http://www.gnu.org/software/hurd/faq.en.html#q4-6) instead, also available when running GNU/Linux. + * The [new console](http://lists.debian.org/debian-hurd/2002/debian-hurd-200209/msg00054.html) by Marcus Brinkmann could also be used. It supports the Alt-Fn keys for switching like in Linux. NOTE: that message has an error in the configuration steps, it says `/dev/vts` when it means `/dev/vcs`. A more up-to-date howto is [[console]]. + +* **_What is a translator?_** + * The official FAQ [answers](http://www.gnu.org/software/hurd/faq.en.html#q4-2) this question by a reference to [hurd-doc-translator](http://www.debian.org/ports/hurd/hurd-doc-translator). + +* **_Where's the sauce?_** + * It's on [Savannah](http://savannah.gnu.org). See also the [GNU Development Resources](http://www.gnu.org/software/devel.html), for more information. + +* **_What is this "libio" stuff?_** + * There was an ABI change for glibc0.3. It's recommended you reinstall your GNU/Hurd system if you run a system installed before the summer of 2002. This is a similar cause for the various Linux distributions who changed from libc5 to libc6 or glibc2 around 1998. + +* **_What is GNU Mach vs. oskit-mach?_** + * These are different versions of the Mach microkernel that supports the Hurd that runs on top of it. For more info, see [[Mach]] + +* **_What software is available for GNU?_** + * Most packages from [Debian](http://www.debian.org/) [GNU/Linux](http://www.gnu.org/gnu/linux-and-gnu.html) which aren't linux-specific ([Packages That Won't Be Ported](http://www.debian.org/ports/hurd/hurd-devel-debian)) are expected to work on GNU/Hurd too. See the database in <http://packages.debian.org/>. Programs which need pthreads, including [GNOME](http://www.gnome.org), [KDE](http://www.kde.org), [Mozilla](http://www.mozilla.org), [OpenOffice](http://www.openoffice.org), [SDL](http://www.libsdl.org), etc. are being worked on currently using Neal Walfields libpthreads. See the [[Distrib/PortingIssues]] document for some common build problems and their solutions. + * If you can't fetch a package with "apt-get install ", try building it from source: "apt-get source && cd <package\_dir> && debian/rules binary". + * As of January 2007, 50% of Debian packages have been ported on the Hurd. Of course, bug testing is welcome. + +* **_How do I initialize a serial console on the Hurd?_** + * You can try out the Serial Howto at <http://www.nongnu.org/thug/serial-howto.txt> + * For a real serial console at boot time you need to rebuild your GNUmach 1.x kernel. For more info see the Utah release notes at [http://www.cs.utah.edu/flux/mach4-i386/html/mach4-UK22.html#serial\_console](http://www.cs.utah.edu/flux/mach4-i386/html/mach4-UK22.html#serial_console) + +* **_Will GNU work in Vmware?_** + * It's highly recommended and easier to get a full image for Bochs. See [[Distrib]] + * It didn't use to, [Hurd bootstrap fails](http://lists.debian.org/debian-hurd/2002/debian-hurd-200207/msg00069.html). Vmware is not [free software](http://www.gnu.org/philosophy/free-sw.html) and it is [[Distrib/VmWare]]. We recommend to use [free](http://www.gnu.org/philosophy/free-sw.html) alternatives, like [[Distrib/BochsEmulator]]. + * A faster, more widespread and [free](http://www.gnu.org/philosophy/free-sw.html) recent alternative is [QEMU][[running/QEMU]]. You can find more informations on [[running/QEMU]]. + * If someone prefers using VMWare: + * It works with VMWare Workstation 4.0.5 build-6030. + * Running Debian GNU/HURD in VMWare works for me -- [[Main/MichaelAblassmeier]] - 03 Mar 2004 diff --git a/hurd/faq/old_faq.txt b/hurd/faq/old_faq.txt new file mode 100644 index 00000000..de76889e --- /dev/null +++ b/hurd/faq/old_faq.txt @@ -0,0 +1,562 @@ +[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2008 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]]."]]"""]] + + Frequently Asked Questions about the GNU Hurd + +This document attempts to answer the questions that most often plague +users when they are talking about, installing, using, compiling and +developing the GNU Hurd as well as its binary distribution Debian +GNU/Hurd. Be sure to read this before asking for help. + +The GNU Hurd is under active development and a stable version has not +yet been released. Be aware that: there is a lot of work yet to be +completed; you will find bugs; your system will crash. That said, there +is a lot of room for contributions at all levels: development of the +Hurd and Mach proper, porting applications, writing documentation and, +most importantly, user feedback. + +Should you have a question that is not answered by this document and you +feel that it should be, submit it and, if possible, with an answer. + +Each section is copyright its respective author(s). Permission is +granted to copy, distribute and/or modify this document under the terms +of the GNU Free Documentation License, Version 1.1 or any later version +published by the Free Software Foundation; with no Invariant Sections, +with no Front-Cover Texts and with no Back-Cover Texts. A copy of the +license is included in the file COPYRIGHT. + + Neal H Walfield + neal@cs.uml.edu + +? Installation + +?? What partition type should I use for my GNU/Hurd partitions? + +{MB} You should use an ext2 filesystem. Alternatively, you may use BSD +style ufs. The partition type number for ext2fs is 0x83 (this is the +same as in Linux), not 0x63 (GNU HURD). Thomas explains why 0x63 is the +wrong choice: + + One day we may have a new filesystem format, which would + probably be called the GNU Hurd filesystem format, and might + well use that partition code. + +Regardless, as Roland points out, it is always an error to use that code +for an ext2fs partition, + +?? How do I name partitions? + +{MB,NHW} I knew you would ask this. If I had to reduce this FAQ to only +one question, I'd choose this one. It is pretty easy, but you have to +know that there are actually several incompatibly naming convention. + +First, the Hurd: if the disk is question is a SCSI disk, you must know +the SCSI device number; if it is an IDE disk, you must know what +controller the disk is on and whether it is a master or a slave. The +Hurd uses the BSD naming convention which, is to say, disks are ordered +according to their physical location, numerically, starting from zero. +This naming scheme is quite similar to that found in Linux. There, the +master disk on the primary controller is designated as `hda' and the +slave as `hdb'. On the secondary controller, the master and the slave +are designated by `hdc' and `hdd' respectively. Under the Hurd, `hda' +would become `hd0', `hdb' would be referred to as `hd1', etc. + +In the Hurd, like in BSD, partitions are called `slices' and are +numbered starting from one. Thus, to name a particular partition, we +take the disk name, append a `s' and the partition number. Again, this +is similar to Linux except, there is no `s'. For instance, `hda1' would +become `hd0s1'. + +GRUB, the boot loader, uses a completely different nomenclature: it +probes the BIOS and appends each disk in turn to an array. Both disks +and partitions are enumerated using zero based arrays. The format is: +`hd (<disk>, <partition>)'. Thus, `hd (0, 1)' refers to the second +partition on the first drive detected by the BIOS. As Grub now has tab +completion, there is not a lot of guess work. + +?? Can I use partitions larger than 2GB? + +{MB} No, not currently. The filesystem servers need to be changed to +not map the whole store into memory, which is not too difficult. For +large files, some interfaces need to be changed, which is a bit harder +but still doable. + +?? How much swap do I need? + +{NHW} Generally, a lot; once you run out, Mach panics. I have at least +128MB of ram and 256MB of swap on all of machines running GNU/Hurd. + +?? Can I share swap space between GNU/Linux and GNU/Hurd? + +{NHW} Yes. The default pager recognises and respects Linux swap +partitions. It will also swap to a raw partition, i.e. anything that it +does not recognize as Linux swap. Therefore: BE CAREFUL. + +?? Why do I get ``Operation not permitted error''? + +{MB} You forgot to set the file system owner of the GNU/Hurd partition to +``hurd''. The Hurd uses additional information in the inodes to set +translators. To make this work, the partition must be marked as ``owned +by the Hurd''. This is normally done by passing the `-o hurd' option to +`mke2fs' when creating ext2 system from other operating systems +(filesystems created in GNU/Hurd automatically enable this option). +If you failed to do this, you can still use the `e2os' script. + +?? After `native-install' is finished, I had to write tthhiiss + wwaayy. In particular, I had to type `rreebboooott' to reboot. + +{MB} Funny, isn't it? In addition to the rescue `term' server in +`/tmp/console', another `term' server got started and is clobbing the +keyboard input. After a reboot this problem vanishes as only one `term' +server will remain. If `tar' would support translator, we would not +have this problem... Even if you don't experience this problem right +after the installation, reboot immediately so you don't hit this bug by +accident. + +? Setup + +?? How do I add a swap partition? + +{MB} A swap partition is also called a paging file. Usually, it is +sufficient to add the swap partition to `/etc/fstab', just as you would +under Linux. You can swap to a Linux swap partition and the Hurd will +honour the Linux swap signature (both versions). The Hurd will just as +happily swap to any other raw disk space and overwrite anything it +finds. So, be careful! + +If you want to swap to a file or make sure that it checks the Linux swap +signature before, you need to edit `/boot/servers.boot'. The syntax is +the partition device file name plus, optionally, the swap file inside an +ext2fs partition, followed by a space and then one of: +`$(add-raw-paging-file)', `$(add-linux-paging-file)', +`$(add-paging-file)'. The first works with any partition or file and +does not honour any swap signature or other data. The second has a +safety check and only uses the file if a Linux swap signature is found. +The third looks for a swap signature first and falls back to raw paging +if it failed to find one. This is also the default for entries in +`/etc/fstab'. + +?? How do I set up a network? + How do I set up a loopback device? + +{MB} In the former case, be sure that GNU Mach detected your network +card. Either way, you need to setup `pfinet'. Documentation can be +found at: + + http://www.debian.org/ports/hurd/hurd-doc-server#pfinet + +Don't forget to fill in `/etc/resolv.conf', `/etc/hosts', etc. + +Of course, you only need to do this if the installation routine didn't +do it for you. + +?? Can I use the GNU/Linux version of `e2fsck' on a GNU/Hurd partition? + +{MB} Yes, at least since `e2fsprogs-1.05'. Check this with `e2fsck -V' +first. + +{NHW} Do not try to defrag your partition as this utility does not know +about translators. + +?? Why are pipes not working? + +{MB} `settrans -fgc /servers/socket/1 /hurd/pflocal' should help. + +? Usage + +?? Where is the documentation? + +{NHW,MM} There are neither man pages nor info nodes for the Hurd +translators and commands. Documentation lives inside of the binaries +and can be found by passing the `--help' option to a given command. +For instance: + + # /hurd/ext2fs --help + +will tell you what types of options the ext2fs translator accepts. + +The GNU/Hurd User's Guide and the GNU Hurd Reference Manual both +provide some help about the usage of and concepts behind the GNU Hurd. +You can find them, among others, at: + + http://www.gnu.org/software/hurd/docs.html + +?? What is a translator? + +{MB} There is a text about translators available at: + + http://www.debian.org/ports/hurd/hurd-doc-translator + +Read this and ask further questions on the mailing lists. + +?? What is the login shell? + +{MB} The Hurd has the concept of a not-logged in user. This user has +neither user ids nor groups ids. This stems from the fact that the Hurd +supports uid and gid sets and one possibility is, of course, the empty +set. Rather than deny access in this case, filesystems in the Hurd offer a +fourth permission triplet (i.e. rwx) which is used to determine the +privileges for users with no credentials. This, however, needs to be +enabled on a file by file basis. By default, the `other' permission +triplet is used. + +The Hurd login shell is a shell running with neither uids nor gids. To +restrict access to your files, either enable and change the fourth +permission triplet or change the login shell of the `login' user in the +password file to `/bin/loginpr' which implements the standard login +prompt. + +?? How do I use non-US keyboard bindings? + +{NHW,FH} Take a look at: + + http://www.xs4all.nl/~mgerards/xkb8.tar.gz + +If you want a Debian package, you can add to your +'etc/apt/sources.list' + + deb http://debian.duckcorp.org/unstable/binary-hurd-i386/ ./ + +and then run + + apt-get install console-driver-xkb. + +?? How do I enable color on the console? + +{NHW} If you are using the GNU Mach microkernel, you can set your +terminal to `mach-color'. For instance: + + # export TERM=mach-color + +?? How can I enable virtual consoles? + +{AMS} This can be done by running the following command: + + console -d vga -d pc_kbd -d generic_speaker /dev/vcs + +If something went wrong, or if you just wish to exit the Hurd console +then hitting C-A-<backspace> will exit it. + +?? What is the status of X? + +{MB} It works! The packages are available at any Debian ftp mirror. +XFree86 4.0.2 is available, as are some of the v3 servers. Instructions +on how to use the packages are in the mailing list archive (link follow +later). + +?? Why does X not work? + +{MB} Try `export LD_LIBRARY_PATH=/usr/X11R6/lib'. This is a linker +issue. GNU/Hurd expects that `RPATH' is used, however, Debian takes +certain measures to avoid this. Note that this does not cut it for suid +binaries because of security implications. We expect to rectify this +by using `RUNPATH', which is specified in the new ELF standard. + +?? What are these strange pids `2' and `3'? + +{MB} Two is the kernel, three is the default pager and four is the root +filesystem. + +?? Why does `ps aux' give me strange output? + +{MB,MM} Try `ps Aux'. Indeed, under GNU/Hurd, `ps aux' doesn't list +all processes: it omits the session and group leaders, and the +processes without parent. + +?? I have a hung process that I want to kill, however, `ps' is now + hanging too. + +{MB} Interrupt it and pass it the `-M' option. + +{NHW} By default, `ps' gathers information from both the proc server and +the processes themselves (via their message port). If a process it +hung, it will not be able respond to its message port and thus, ps will +wait forever. The `-M' option instructs ps to not gather information +that would require use of the message port. + +?? Where are ... + +{MB} `fdisk' and `dmesg' are not yet ported. + +Instead of `free', use `vmstat' and `vminfo'. + +For kernel messages, read `/dev/klog' directly. Note, once you read +this, it is gone forever. + + +?? Is there a `/proc' filesystem? + +{MB} No. Maybe there will be an emulation filesystem someday for +programs that rely it. If you are wondering about the empty `/proc' +directory, this is a relict from a Debian GNU/Linux package +(specifically, `base-files'). + +You can probe for existing hardware devices with the devprobe utility. + +?? Why does the command `df' not work? + +{NHW} It does, you just have to tell it what filesystem to query. E.g. + + # df / + +?? Why are my translators dying? + +{NHW} Try passing the `-ap' flag to settrans. By default, settrans only +sets a passive translator, therefore, no output will show up on your +terminal. Using `-ap', however, sets both the active and the passive +translator which, means that the translator starts immediately and its +stderr is connected to you terminal. + +Additionally, the biggest problem is passing relative paths to passive +translators. You cannot predict what the current working directory of a +translator will be when it is setup as a passive translator. + +?? Why can I `read' a directory? + +{MB} It is important to understand that there is nothing special about a +directory under the Hurd, it is just another file. This fits in with +the translator concept where a translator can appear as a directory but +provide also as a file. + +? Trouble shooting + +?? When the APM support in the BIOS spins down my disk drives, the + Hurd is unable to wake up. What's wrong? + +{MB} APM is not supported in the current version of GNU Mach, sorry. +Please disable APM in your BIOS setup. + +?? What are these messages referring to `default pager', `paging', + and `pager request'? + +{MB} The default pager handles virtual memory allocation. If it can't +allocate a new memory page because you are out of memory, some terrible +things may happen. Whenever you get errors referring to any of these, +you either need more memory (make sure you have swap) or you have found +a memory leak. + +?? What is a gratuitous error? + +{MB} This comes from `strerror(EGRATUITOUS)'. If you check glibc's +documentation, it will say that this error code has no purpose. This, +however, is not quite true. You only get this when something terrible +happens. Thomas explains: + + More precisely `EGRATUITOUS' officially means that some server + has responded in an impossible or protocol-violating fashion. + There are some cases in the Hurd where `EGRATUITOUS' is returned + and probably something else should be chosen instead. + +If you can reproduce this error message, please report it. + +?? What does ``computer bought the farm'' mean ? + +{FH} This message is the text that corresponds to the errno code +`EIEIO'. Roland McGrath explains: + + That message is not output by any particular servers at + particular times; rather it is the perror text for the errno + code EIEIO, which is returned by various RPCs and functions + for a variety of "hopeless" error conditions. + + +?? What does ``/dev/hd0s1: MOUNTED READ-ONLY; MUST USE `fsysopts + --writable''' mean? + +{NHW} In this case, /dev/hd0s1 was not unmounted cleanly. The Hurd +will, on boot up, run ``fsck -p'' on any partitions that it finds in +/etc/fstab, so, you may want to consider adding this partition to that +file. If you are sure that the partition is fine, you can run: + + # fsysopts /home --writable + +to ask the translator sitting on /home to change from read-only to +read/write mode. Note that the command is being sent to the filesystem +and not the store (e.g. /dev/hd0s1). + +?? When GNU/Hurd crashes, GNU Mach automatically reboots. Is + there anyway I can make it pause so I can write down the error? + +{MB} Pass the `-H' option to init (add it to the boot command line), and +`init' will tell Mach to enter the kernel debugger instead to rebooting +it. At the debugger prompt (`db>'), you can type `reboot' any time to +reboot the system. + +? Porting + +?? What programs have been ported? + +{NHW} A lot, take a look at the Debian archive. Many programs, however, +do not necessarily need to be ported; they have just never been +compiled. + +?? Is porting easy? + +{NHW} Porting applications to GNU/Hurd is relatively easy assuming the +application is POSIX compliant as GNU/Hurd does its best to be a +conforming operating system. + +The most common error made by programmers is assuming the MAXPATHLEN and +PATH_MAX are defined. On most operating systems this is set to a few +thousand, however, on GNU/Hurd, there is no maximum and thus, this is +not set. The correct thing to do is to submit a patch to the upstream +author that allocates memory dynamically. + +?? How can I help? + +{NHW} A effort to compile all of the Debian packages is underway by Jeff +Bailey. Take a look at: + + http://people.debian.org/~jbailey/oasis/group/Debian/index.html + +to see what has been done and how you can help. + +? Compiling + +?? Where can I get the source? + +{AMS} Instructions on how to download the CVS tree from Savanah are +avaiable at https://savannah.gnu.org/cvs/?group=hurd + +{NHW} To get the source to the latest debian package, look on any +debian mirror. + +?? Can I cross compile? + +{NHW} Yes. If you are running Debian GNU/Linux on IA32, this is quite +easy as there is a cheap cross compiler available; all that is required +is installing the gcc-i386-gnu and mig-i386-gnu Debian packages. When +running configure, you will have to specify tools directly: + + # MIG=/usr/bin/i386-gnu-mig CC=/usr/bin/i386-gnu-gcc \ + ../src/hurd/configure ... + +If you are running another distribution, you will have to do this the +long way. You can find instructions at the Cross Compiling HOW-TO +available at: + + http://hurddocs.sourceforge.net/howto/cross.html + +Farid Hajji <farid.hajji@ob.kamp.net> also talks about his experiences +at: + + http://lists.debian.org/debian-hurd-0012/msg00062.html + +?? Any general tips? + +{NHW} Yeah, building in the source tree is untested. Try: + + # ../src/hurd/configure ... + +? Development + +?? What is OSKit-Mach? + +{NHW,FH} There are two versions of GNU Mac that are in use: GNU Mach +1.x and GNU Mach 2.x, formerly known as OSKit-Mach. The former uses +the drivers from Linux 2.0.x while the latter uses the University of +Utah's OSKit library for drivers. You can find out more about the +OSKit library at: + + http://www.cs.utah.edu/flux/oskit + +GNU Mach 2.x is usable, but some things are still missing or not +working, like the serial port and scsi drivers. This is why GNU Mach +2.0 hasn't released yet and the two versions coexist. + +?? Where is the documentation? + +{NHW} There were several books written on the Mach kernel. The +information that they contain is still mostly pertinent and should be +considered required reading for potential hackers. They can be found +at: + + http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/publications.html + +The documentation for the Hurd is quite inadequate. The starting of a +book, ``The GNU Hurd'' is in the doc directory in the Hurd source. You +can read this using: + + # info hurd + +The authoritative place is, of course, the source code; that does not, +however, mean that we would not welcome more documentation. To get +started, take a look at <hurd>/doc/navigating. + +?? How do I make sure that my code is POSIX compliant? + +{NHW} Unfortunately, you have to buy the POSIX standard from IEEE. The +Single Unix Specification version 2, a superset of POSIX, is available +for free on the Internet. Try: + + http://www.unix-systems.org/online.html + +?? Who do I submit patches to? + +{NHW} If they are against the Hurd, Mach or MiG, send a patch to the +bug-hurd mailing list. + +If they are against other packages, the Debian BTS is a good place. In +this case, be sure to advise the debian-hurd mailing list of the bug. + +?? In what format should patches for the Hurd and GNU Mach be? + +{MB} All patches should be sent in unified context diff format (option +`-u' to GNU diff). It is helpful for us if you also use the `-p' +option which includes information about the function changed by a +patch. Changes that are similar can be grouped together in one file, +but unrelated changes should be sent in seperate files. The patches +can be included in the message or as a MIME attachement. They should +not be compressed and/or archived unless they are very large, and if +they are very large it is probably better to store them on-line at +some place and only sent an URL. + +Write a ChangeLog entry for each change, following the format of the +existing files. Here is an example: + + 2000-12-02 Marcus Brinkmann <marcus@gnu.org> + + * ops.c (op_readlink): Before returning, check if the buffer + pointed to by transp is ours. If not, munmap it. + (op_read): Likewise for bp. + (op_readdir): Don't alloca a buffer here. Instead initialize + BUF and BUFSIZE to 0 and let the server (eh, MiG) do it. + munmap BUF before returning. + +The file name and the name of the function changed should always be +spelled out completely, and not abbreviated or otherwise mangled (like +foo.{c,h}), because that would make searching for all changes to a +file or function impossible. Local variable names are all +capitalized. There are two spaces between sentences. You can use +``C-x 4 a'' in Emacs to add a new ChangeLog entry. If you do that +with the mark being in a function, Emacs will automatically fill in +the file and function name for you. + +Do not send in a patch for the ChangeLog file. Rather include the +ChangeLog entries in the message that contains the patch. Patches for +ChangeLog files often conflict. + +If you have the original source tree in the directory `hurd-orig', and +the modified source tree in the directory `hurd', the following +command will produce a good patch (please make sure there are no extra +files like backups in the modified tree, or leave away the option +`-N'). You will need to collect the ChangeLog entries seperately. + + # diff -x ChangeLog -Nurp hurd-orig hurd + + +Answers were given by (in chronological order): +* {NHW} Neal H Walfield <neal@cs.uml.edu> +* {MB} Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de> +* {AMS} Alfred M. Szmidt <ams@gnu.org> +* {OK} Ognyan Kulev <ogi@fmi.uni-sofia.bg> +* {FH} Frédéric Henry <neryel@reveries.info> +* {MM} Manuel Menal <mmenal@hurdfr.org> diff --git a/hurd/faq/release.mdwn b/hurd/faq/release.mdwn new file mode 100644 index 00000000..c93ba353 --- /dev/null +++ b/hurd/faq/release.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2008 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="When will the Hurd be released?"]] + +Next year. + +Save that, read about the Hurd's [[status]]. diff --git a/hurd/faq/slash_usr_symlink.mdwn b/hurd/faq/slash_usr_symlink.mdwn new file mode 100644 index 00000000..6fa6c58d --- /dev/null +++ b/hurd/faq/slash_usr_symlink.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2008 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="Why is `/usr' a symbolic link to `.'?"]] + +The distinction between `/` and `/usr` has historical reasons. Back when [[Unix]] +systems were booted from two tapes, a small root tape and a big user tape. +Today, we like to use different partitions for these two spaces. The Hurd +throws this historical garbage away. We think that we have found a more +flexible solution called union filesystems, which allow to create virtual +filesystems which are the union of several other filesystems. However, support +for union filesystems is still in early development. diff --git a/hurd/gcc.mdwn b/hurd/gcc.mdwn new file mode 100644 index 00000000..3700b8b8 --- /dev/null +++ b/hurd/gcc.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[General_information|/gcc]] about the GCC. + +Apart from the target-specific configuration machinery, there shouldn't be any +major differences within GCC between, for example, the GNU/Hurd and GNU/Linux +ports. Especially all the compiler magic is all the same. diff --git a/hurd/getting_help.mdwn b/hurd/getting_help.mdwn new file mode 100644 index 00000000..540dc851 --- /dev/null +++ b/hurd/getting_help.mdwn @@ -0,0 +1,26 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# Essential Documentation + +* [[FAQ]] +* [[microkernel/mach/gnumach/Hardware_Compatibility_List]] + +# Forums + +Please follow these [guidelines](http://catb.org/~esr/faqs/smart-questions.html) +when asking your question. Namely: spend some time trying +to solve the problem on your own (e.g., [search the web](http://www.google.com), +use this wiki, etc.), show us that you did so when you +ask your question, and provide as many relevant details as possible +reproducing them as exactly as possible. + +* [[Mailing_lists]] +* [[IRC]] diff --git a/hurd/gettinghelp.mdwn b/hurd/gettinghelp.mdwn new file mode 100644 index 00000000..1faa94c5 --- /dev/null +++ b/hurd/gettinghelp.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=getting_help]] diff --git a/hurd/glibc.mdwn b/hurd/glibc.mdwn new file mode 100644 index 00000000..de85c03d --- /dev/null +++ b/hurd/glibc.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[General_information|/glibc]] about the glibc. + +For information about how the glibc integrates into the system, see sections +2.1 and 2.5 of the [[critique]]. + +[[Hurd-specific_API]]. + +[[Debugging_glibc|debugging/glibc]]. diff --git a/hurd/glibc/hurd-specific_api.mdwn b/hurd/glibc/hurd-specific_api.mdwn new file mode 100644 index 00000000..7333ec0d --- /dev/null +++ b/hurd/glibc/hurd-specific_api.mdwn @@ -0,0 +1,177 @@ +[[meta copyright="Copyright © 2002, 2007, 2008 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="Hurd-specific glibc API"]] + +These functions have meaning only under Hurd. They are needed to get port +names that are used in native Hurd API (the RPC calls to servers). The `.defs` +and `.h` files can be found in `/include/hurd` when all development files are +installed (Debian package `hurd-dev`.) Note that `.defs` are not included in C +programs -- they are used to produce `.h` files. + +<!-- TODO. Need to convert this to a proper table. --tschwinge --> + +<dl> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>getcwdir</b> (void);</tt></dt> + <p> + </p> + <dd>Get <tt>file_t</tt> port name of current working directory. See <tt>&lt;hurd/fs.defs&gt;</tt> and <tt>&lt;hurd/fs.h&gt;</tt>.</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>setcwdir</b> (file_t);</tt></dt> + <dd>Set current working directory.</dd> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>getcrdir</b> (void);</tt></dt> + <dd>Get <tt>file_t</tt> port name of current root directory.</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>setcrdir</b> (file_t);</tt></dt> + <p> + </p> + <dd>Set current root directory.</dd> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>file_name_lookup</b> (const char *file, int flags, mode_t mode);</tt></dt> + <dd>Open a port to FILE with the given FLAGS and MODE (see <tt>&lt;fcntl.h&gt;</tt>). The file lookup uses the current root and working directory. Returns a port to the file if successful; otherwise sets <tt>errno</tt> and returns <tt>MACH_PORT_NULL</tt>.</dd> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>file_name_lookup_under</b> (file_t startdir, const char *file, int flags, mode_t mode);</tt></dt> + <dd>Open a port to FILE with the given FLAGS and MODE (see <tt>&lt;fcntl.h&gt;</tt>). The file lookup uses the current root directory, but uses STARTDIR as the "working directory" for file relative names. Returns a port to the file if successful; otherwise sets <tt>errno</tt> and returns <tt>MACH_PORT_NULL</tt>.</dd> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>file_name_path_lookup</b> (const char *file_name, const char *path, int flags, mode_t mode, char **prefixed_name);</tt></dt> + <dd>Lookup FILE_NAME and return the node opened with FLAGS &amp; MODE (see <tt>hurd_file_name_lookup</tt> for details), but a simple file name (without any directory prefixes) will be consecutively prefixed with the pathnames in the <tt>:</tt> separated list PATH until one succeeds in a successful lookup. If none succeed, then the first error that wasn't ENOENT is returned, or ENOENT if no other errors were returned. If PREFIXED_NAME is non-NULL, then if the result is looked up directly, *PREFIXED_NAME is set to NULL, and if it is looked up using a prefix from PATH, *PREFIXED_NAME is set to malloc'd storage containing the prefixed name.</dd> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>file_name_split</b> (const char file, char **name);</tt></dt> + <dd>Split FILE into a directory and a name within the directory. The directory lookup uses the current root and working directory. If successful, stores in *NAME a pointer into FILE where the name within directory begins and returns a port to the directory; otherwise sets <tt>errno</tt> and returns <tt>MACH_PORT_NULL</tt>.</dd> + <p> + </p> + <dt><tt>file_t</tt></dt> + <dt><tt><b>directory_name_split</b> (const char *file, char **name);</tt></dt> + <p> + </p> + <dd>Split DIRECTORY into a parent directory and a name within the directory. This is the same as <tt>file_name_split</tt>, but ignores trailing slashes.</dd> + <p> + </p> + <dt><tt>FILE *</tt></dt> + <dt><tt><b>fopenport</b> (io_t port, const char *mode);</tt></dt> + <dd>Open a stream on a port. MODE is as for <tt>fopen</tt>. If successful, this consumes a user reference for PORT (which will be deallocated on fclose).</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>openport</b> (io_t port, int flags);</tt></dt> + <p> + </p> + <dd>Open a file descriptor on a port. FLAGS are as for <tt>open</tt>; flags affected by <tt>io_set_openmodes</tt> are not changed by this. If successful, this consumes a user reference for PORT (which will be deallocated on close.) See <tt>&lt;hurd/io.defs&gt;</tt> and <tt>&lt;hurd/io.h&gt;</tt>.</dd> + <p> + </p> + <dt><tt>task_t</tt></dt> + <dt><tt><b>pid2task</b> (pid_t pid);</tt></dt> + <p> + </p> + <dd>Return the task control port of process PID. On error, sets <tt>errno</tt> and returns <tt>MACH_PORT_NULL</tt>.</dd> + <p> + </p> + <dt><tt>pid_t</tt></dt> + <dt><tt><b>task2pid</b> (task_t task);</tt></dt> + <dd>Return the PID of the task whose control port is TASK. On error, sets <tt>errno</tt> and returns -1. </dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>geteuids</b> (int n, uid_t *uidset);</tt></dt> + <dd>Get the effective UID set.</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>seteuids</b> (int n, const uid_t *uidset);</tt></dt> + <dd>Set the effective UID set.</dd> + <p> + </p> + <dt><tt>auth_t</tt></dt> + <dt><tt><b>getauth</b> (void);</tt></dt> + <dd>Get port name of current authentication server. See <tt>&lt;hurd/auth.defs&gt;</tt> and <tt>&lt;hurd/auth.h&gt;</tt>.</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>setauth</b> (auth_t);</tt></dt> + <p> + </p> + <dd>Set current authentication server.</dd> + <p> + </p> + <dt><tt>process_t</tt></dt> + <dt><tt><b>getproc</b> (void);</tt></dt> + <dd>Get port name of current process server. See <tt>&lt;hurd/process.defs&gt;</tt> and <tt>&lt;hurd/process.h&gt;</tt>.</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>setproc</b> (process_t);</tt></dt> + <p> + </p> + <dd>Set current process server.</dd> + <p> + </p> + <dt><tt>mach_port_t</tt></dt> + <dt><tt><b>getcttyid</b> (void);</tt></dt> + <dd>Get the CTTY port.</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>setcttyid</b> (mach_port_t);</tt></dt> + <dd>Set the CTTY port.</dd> + <p> + </p> + <dt><tt>kern_return_t</tt></dt> + <dt><tt><b>get_privileged_ports</b> (host_priv_t *host_priv_ptr, device_t *device_master_ptr);</tt></dt> + <dd>Fetch the host privileged port and device master port from the process server.</dd> + <p> + </p> + <dt><tt>mode_t</tt></dt> + <dt><tt><b>getumask</b> (void);</tt></dt> + <dd>Get the current `umask' value without changing it (this glibc functions is available only under GNU Hurd.)</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>vpprintf</b> (io_t port, const char *format, va_list arg);</tt></dt> + <dd>Write formatted output to PORT, a Mach port supporting the i/o protocol, according to the format string FORMAT, using the argument list in ARG.</dd> + <p> + </p> + <dt><tt>thread_t</tt></dt> + <dt><tt><b>hurd_thread_self</b> (void);</tt></dt> + <dd>Return the current thread's thread port. This is a cheap operation (no system call), but it relies on Hurd signal state being set up.</dd> + <p> + </p> + <dt><tt>error_t</tt></dt> + <dt><tt><b>hurd_thread_cancel</b> (thread_t thread);</tt></dt> + <p> + </p> + <dd>Cancel pending operations on THREAD. If it is doing an interruptible RPC, that RPC will now return EINTR; otherwise, the "cancelled" flag will be set, causing the next <tt>hurd_check_cancel</tt> call to return nonzero or the next interruptible RPC to return <tt>EINTR</tt> (whichever is called first).</dd> + <p> + </p> + <dt><tt>int</tt></dt> + <dt><tt><b>hurd_check_cancel</b> (void);</tt></dt> + <p> + </p> + <dd>Test and clear the calling thread's "cancelled" flag.</dd> + <p> + </p> +</dl> diff --git a/hurd/history.mdwn b/hurd/history.mdwn new file mode 100644 index 00000000..7ee5df5a --- /dev/null +++ b/hurd/history.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +<a href="http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00718.html" target="_top">History 1997-2003</a></dt> +<dd> Personal view of Marcus Brinkmann about Hurd development in 1997-2003. diff --git a/hurd/hurd_hacking_guide.mdwn b/hurd/hurd_hacking_guide.mdwn new file mode 100644 index 00000000..0cb96f32 --- /dev/null +++ b/hurd/hurd_hacking_guide.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Originally written by Wolfgang Jährling, the [Hurd Hacking Guide](http://www.gnu.org/software/hurd/hacking-guide/hhg.html) +contains an overview of some of the Hurd's features. +Also contains a tutorial on writing your own [[translator]]. diff --git a/hurd/io_path.mdwn b/hurd/io_path.mdwn new file mode 100644 index 00000000..96e6aa58 --- /dev/null +++ b/hurd/io_path.mdwn @@ -0,0 +1,37 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +# read + + * [[glibc]]'s `read` is in `glibc/sysdeps/mach/hurd/read.c:__libc_read`. + + * That calls `glibc/hurd/fd-read.c:_hurd_fd_read()`. + + * That calls `__io_read`, which is an [[RPC]], i.e., that actually results + into the [[translator/ext2fs]] server calling + `hurd/libdiskfs/io-read.c:diskfs_S_io_read`. + + * That calls `_diskfs_rdwr_internal`, which calls + `hurd/libpager/pager-memcpy.c:pager_memcpy`, which usually basically just + tell the kernel to virtually project the memory object corresponding to the + file in the caller process's memory. No read is actually done. + + * Then, when the process actually reads the data, the kernel gets the user + page fault (`gnumach/i386/i386/trap.c:user_trap`), which calls `vm_fault`, + etc., until actually getting to `gnumach/vm/vm_fault/vm_fault_page` which + eventually calls `memory_object_data_request`, which is an [[RPC]], i.e., + that actually results into the [[translator/ext2fs]] server calling + `hurd/libpager/data-request.c:_pager_seqnos_memory_object_data_request`. + + * That calls `hurd/ext2fs/pager.c:pager_read_page`, which looks for where the + data is on the disk, and eventually calls + `hurd/libstore/rdwr.c:store_read`, which eventually calls `device_read`, + which is an [[RPC]], i.e., that actually gets into the kernel calling + `gnumach/linux/dev/glue/block.c:device_read`. diff --git a/hurd/libchannel.mdwn b/hurd/libchannel.mdwn new file mode 100644 index 00000000..d3dff162 --- /dev/null +++ b/hurd/libchannel.mdwn @@ -0,0 +1,62 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +# libchannel + +*libchannel* was accepted as a project for [[Google_Summer_of_Code|community/gsoc]] (or +just GSoC) in 2007. It was written by Carl Fredrik Hammar who was mentored by +Richard Braun. + + +## Outline + +*libchannel* was intended to be used to cleanly and efficiently +implement *channel* translators that would correspond to character +device files. In other words, translators for input devices, sound, +network and the like. + +There are many cases where one wishes to stack translators over one +another. Take networking as an example, you may wish to have a pseudo +network device that balance traffic over two real devices. + +The problem with stacking translators this way is that it's +inefficient, for every RPC to the balancer a RPC is made to each of +the real devices. Now a RPC isn't really *that* expensive, but in a +more complex example with more layers the overhead of these RPC's makes +such a stacking infeasible. + +However, by using *libchannel* a translator can provide a description +of what it does (i.e. the code and data it uses), which a translator +layered untop can fetch and use directly. Now only strictly required +RPC's needs to be sent. + + +## Result + +By the end of GSoC 2007, *libchannel* had mostly reached the initial +goals. There some code missing, most notably the code for +transferring channels via RPC, but similar code was already present in +*libstore* and can be trivially adapted for *libchannel*. It also +needed more debugging. + +Despite these minor deficiencies, the project was considered a +success, never the less. + + +## Future directions + +However, while *libchannel* matched the original specifications. It's +believed that it's too inflexible to make use of in many specific +cases and that a more general solution is desired. While the +discussion isn't over yet, it seems *libchannel* will become a support +library to implement specialized channel libraries, e.g. *libaudio* +and *libnetwork* or similar. + +So work on *libchannel* will continue, in one form or another. diff --git a/hurd/libhello_example.mdwn b/hurd/libhello_example.mdwn new file mode 100644 index 00000000..9b4640e7 --- /dev/null +++ b/hurd/libhello_example.mdwn @@ -0,0 +1,167 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Howto write a Hurd library + +Build the Hurd sources: +------------------------ + +Refer to this [[hurd/building/example]]. + +Create the library files: +---------------------- + +Create a directory, say, libhello in the Hurd sources directory. + +Create a lhello.h header file: + + /* lhello.h - Example library header file. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Shakthi Kannan <shaks@shakthimaan.com>. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + The GNU Hurd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + + #ifndef _HURD_HELLO_H + #define _HURD_HELLO_H 1 + + struct hello + { + int x; + }; + + #endif /* _HURD_HELLO_H */ + +Replace filename, year, author name and e-mail address appropriately. + +Create a lhello.c file: + + /* lhello.c - Example library .c file. + Copyright (C) 2006 + Free Software Foundation, Inc. + Written by Shakthi Kannan <shaks@shakthimaan.com>. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + The GNU Hurd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + #include "lhello.h" + + void + print_hello (void) + { + struct hello example; + example.x = 2; + printf ("foo and bar are %d words!\n", example.x); + } + +Replace header file year, author name and e-mail address appropriately. + +Create a Makefile + + # + # Copyright (C) 2006 Free Software Foundation, Inc. + # + # This file is part of the GNU Hurd. + # + # The GNU Hurd is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License as + # published by the Free Software Foundation; either version 2, or (at + # your option) any later version. + # + # The GNU Hurd is distributed in the hope that it will be useful, but + # WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + dir := libhello + makemode := library + + libname := libhello + SRCS = lhello.c + installhdrs = lhello.h + LCLHDRS = $(installhdrs) + + OBJS = $(SRCS:.c=.o) + + include ../Makeconf + +Update the Makeconf file: + +Add libhello to lib-subdirs target in the top-level Makefile in the Hurd +sources. + + cd build + ../configure + make + +Testing the library +------------------- + +Write a file, say, foo.c: + + /* foo.c */ + + #define _GNU_SOURCE + + int + main (int argc, char *argv[]) + { + print_hello(); + return 0; + } + +Static compilation and linking method: + + gcc -g -o foo foo.c -L/path/to/libhello -lhello -static + +Run the example: + + ./foo + +Compilation and dynamic linking method: + + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libhello + gcc -g -o foo foo.c -L/path/to/libhello -lhello + +where /path/to/libhello = /path/to/hurd/build/libhello + +Run the example: + + ./foo diff --git a/hurd/libnetfs.mdwn b/hurd/libnetfs.mdwn new file mode 100644 index 00000000..404ae3f0 --- /dev/null +++ b/hurd/libnetfs.mdwn @@ -0,0 +1,297 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +#libnetfs + +##What This Is + +This document is an attempt at a short overview of the main concepts +used in the process of development of translators using +*libnetfs*. You will **not** find here a detailed description of the +required callbacks (for this take a look at +<http://www.debian.org/ports/hurd/reference-manual/hurd.html>). You +will **not** find a complete example of code either (usually, +*unionfs* is suggested as an example) + +##What libnetfs Is + +*libnetfs* is a Hurd library used in writing translators providing +some virtual directory structures. For example, if you would like to +create a translator which shows a *.tar* archive in a unpacked way, +you will definitely want to use *libnetfs*. However, it is important +to understand one thing: real filesystem servers (like *ext3* and +such) do **not** use *libnetfs*, instead, they rely on *libdiskfs*, +which is, generally speaking, seriously different from *libnetfs*. + +All in all, *libnetfs* is the library you would choose when you want +to write a translator which will show a file (or a directory) in a +modified way (for example, if you'd like to show only *.sh* files or +make an archive look unpacked). As different from *libtrivfs*, using +*libnetfs*, you can show to your clients not just a single file, but a +whole directory tree. + +##How It Works: Short Description + +With the aid of *libnetfs* a translator (supposedly) publishes a +directory tree. All lookups in this directory tree are directed to the +translator and the latter is free to provide whatever (consistent) +information as the result of the lookup. Of course, all other usual +requests like reading, writing, setting a translator, etc. are +directed to the translator, too. The translator has either to +implement the required functionality in the corresponding callback or +just return an appropriate error code (for example, EOPNOTSUPP), if +the callback is compulsory. + +##The Main Concepts: Nodes + +The most fundamental thing to understand about *libnetfs* is the +notion of a **node**. Nearly always there are two types of nodes in a +*libnetfs*-based translator: + +* Generic **node**, defined in *<hurd/netfs.h>*. This node contains + information read and written by the programmer (like field + *nn_stat*), as well as some internal information (like fields + *references* and *transbox*). Of course, the programmer is free to + use these fields at will, but they should know what they are doing. + +* Custom **netnode**, defined by the programmer and containing only + the information valuable for the programmer, but not for *libnetfs*. + +The generic node is probably the most important primitive introduced +by *libnetfs*. Callbacks receive the nodes they should work with as +parameters; some of them return nodes as the result of their +operation. To some extent of certainty, a *libnetfs* node can be +perceived similarly to a filesystem node -- the building-brick out of +which everything is composed. + +As it can be seen from the definition in *<hurd/netfs.h>*, a reference +to a netnode is stored in each generic node. In a way, a netnode can +be perceived as the custom attachment to the information contained in +a generic node. The link between these is quite strong. At first this +might not look like a very important thing, but let's analyze a simple +example: you would like to show the contents of a directory in a +filtered way. As a filtering criterion you would like to use the +result of the execution of a command specified as a command line +argument to the translator. If a client looks up a 'file' in the +directory tree provided by the translator, the latter should feed the +name of the file to the filtering command and decide whether to hide +this file or not upon receiving the result. + +To avoid trouble, the translator had better use the *absolute* name of +'file'. Obviously, the translator would like to organize all of the +nodes in a hierarchy. To make things work more or less fast, it is a +reasonable decision to construct the absolute path to a node at +creation and store it inside the netnode (which, in turn, is inside +the node). However, such an approach is not a good one when using +*libnetfs*. Generally speaking, a *new* generic node is created at +each lookup, and, together with it, a new netnode is constructed. The +conclusion is that a *libnetfs* node is a rather transient phenomenon, +and when we want to store some information which is relatively +expensive to obtain, we need something more than a generic node + +netnode. At this moment most of the translators (like *unionfs*, +*ftpfs*, etc.) introduce the concept of a **light node**. + +A **light node** is a user-defined node which contains some +information expensive to obtain, which had better not be stored +directly in a netnode. All netnodes, contained in generic nodes which +resulted in lookups of the same file, share references (pointers, +actually) to a single light node. Light nodes are created when the +first attempt to lookup a file is done, and they are destroyed when no +netnodes reference them. It is very important to understand that +*libnetfs* does **not** enforce the programmer to define light +nodes. Everything can be stored within netnodes inside generic +nodes. Light nodes are just a matter of organizing data in an +efficient way. + +Probably, you are already thinking ``Why cannot *netnodes* be shared? +Why do we need yet another notion?''. The answer is that the link +between a netnode and a *libnetfs* node should be one-to-one, because +netnodes usually store information specific of *only one* node, whilst +light nodes contain information common to several nodes. If one chose +to share netnodes, one would not be able to store additional +information per a *libnetfs* node, and this is quite a serious problem +in most practical problems. + +##Why a libnetfs Node Is Not Quit a Filesystem Node + +The most demonstrative argument in this case is the definition of +*struct node* in *<hurd/netfs.h>*. If you try to find in this +definition some reference to other generic node called *parent*, or an +array of references called *children* (which would be quite classical +for a member of a hierarchy), you will fail. There are fields *next* +and *prevp*, but these are for internal use and only include the node +in an internally maintained *list*, not a tree. Surprisingly enough, +*libnetfs* does **not** manage the tree-like structure for you. You +have to do that *on you own*. This is another moment when light nodes +come triumphantly to light. Most *libnetfs*-based translators organize +their light nodes in the tree-like structure reflecting the directory +tree shown to the user. When a lookup is performed, a light node is +either created or reused (if it has already been created in a previous +lookup). The result of the lookup is a *libnetfs* node created basing +on the information contained in the found light node. + +From the point of view of a *libnetfs* programmer, light nodes are the +conceptual filesystem nodes. A translator knows who is the parent of +who *only* from studying the links between light nodes. And a light +node does contain a reference to its parent and an array of references +to children. When a translator is asked to fetch a file, it finds this +file in the tree of light nodes firstly, creates a *libnetfs* node +based on the found light node, and returns the latter as the +result. Therefore, it is not quite right to perceive *libnetfs* nodes +as filesystem nodes. Instead, the focus of attention should stay upon +light nodes. + +##How It Wors: A More Verbose Description + +At first let us see how the a *libnetfs*-based translator responds to +lookup requests. At the beginning the *netfs_attempt_lookup* callback +is called. It knows the generic *libnetfs* node corresponding to the +directory under which the lookup shall take place, the name it has to +lookup, and the information about the user requesting the lookup. This +callback is supposed to create a new *libnetfs* node corresponding to +the requested file or return an error. As it has been said before, +usually translators browse their hierarchy of light nodes to know +whether a file exists within a directory or not. Note that +*netfs_attempt_lookup* does not know the flags with which a +*file_name_lookup* call is done, what it has to do is just to provide +a new node or return an error. + +Then *netfs_validate_stat* callback is called and a node and +information about the user is passed inside. This callback is a rather +simple one: it has to assure that the *nn_stat* field of the supplied +node is valid and up to date. Translators which mirror parts of real +filesystem, like *unionfs*, usually treat the node corresponding to the +root of their node hierarchy in a specific way. The reason is that the +root node is not a mirror of a real file -- it is almost always a +directory in translators of this kind. + +The third stage is an invocation of +*netfs_check_open_permissions*. This callback is, probably, one of the +simplest in most cases. It knows some information about the user +requesting the open, about the node that is about to be returned to +the user, and about the flags supplied by the user in the call to +*file_name_lookup*. Besides that, this callback is provided with the +information whether the requested lookup ended in creating a new file +or whether the requested file already +existed. *netfs_check_open_permissions* has to decide if the user has +the right to access the resulting file under the permissions specified +in flags. It has to return either 0 or the corresponding error. + +These are the most basic steps of the lookup. Note that if the file +was requested with O_CREAT flag and *netfs_attempt_lookup* could not +locate this file, *netfs_attempt_create_file* is called. In many ways +a typical implementation of this callback might be similar to the +implementation of *netfs_attempt_lookup*. However, +*netfs_attempt_create_file* will most probably have to do less checks. + +Let's move to listing the contents of a directory. The corresponding +callback, *netfs_get_dirents* is triggered when a user invokes +*dir_readdir* upon a directory provided by the translator. The +parameters of *netfs_get_dirents* are therefore very similar to the +parameters of *dir_readdir*. Actually, translator *fakeroot* only +calls *dir_readdir* in this callback and nothing more. In translators +which need more complex handling (like filtering the contents) the +code of this is more sophisticated. Sometimes the listing of directory +entries happens in several stages: *netfs_get_dirents* may call +something like *node_entries_get*, and the latter may invoke +*dir_entries_get*. The latter function calls *dir_readdir* and +converts the result to an array of *struct dirent* +'s. *node_entries_get* converts the array of *struct dirent* 's to a +linked list and decides whether a specific file shall be included in +the result or not. Finally, *netfs_get_dirents* converts the linked +list provided by *node_entries_get* to the format of the result of +*dir_readdir* and returns the converted data to the user. The +described stages are the stages of listing directory entries in +*unionfs*, for instance. + +Other callbacks are, generally speaking, less sophisticated. For +example, when the client wants to read (write) from a node provided +by *netfs_attempt_lookup*, the callback *netfs_attempt_read* +(*netfs_attempt_write*) is triggered. Both callbacks have sets of +parameters to the corresponding *io_read* and *io_write* functions. + +While browsing the code of very many *libnetfs*-based translators, you +might notice that they define callbacks starting with +*netfs_S_*. Usually a name similar to that of one of the file +management function follows (like netfs_S_*dir_lookup*). These +callbacks are triggered when the corresponding functions are called on +files shown by the translator. Such translators override parts of the +core functionality provided by *libnetfs* to achieve better +performance or to solve specific problems. + +##Synchronization is Crucial + +A *libnetfs* programmer shall always keep in mind that, as different +from *libtrivfs*-based translators, *libnetfs*-based translators are +always multithreaded. To guard data against damage each node +incorporates a lock. Moreover, each light node usually contains a +lock, too. This happens because *libnetfs* nodes and light nodes are +loosely coupled and are often processed separately. + +##Node Cache + +Most of *libnetfs* translators organize a *node cache*. However, this +structure is not a real cache. The idea is to hold some control over +life and death of *libnetfs* nodes. The cache is usually a +doubly-linked list: each netnode contains a reference to the previous +node in the cache and a reference to the next one. When a new node is +created (for example, as a result of invocation of +*netfs_attempt_lookup*), it is registered in the cache and its number +of references is increased. It means that, by putting the node in the +cache, the translators gets hold of an extra reference to the +node. When in subsequent lookups the same nodes will be requested, the +translator can just reuse an already existing node. + +Of course, the cache is limited in size. When the cache gets +overgrown, the nodes located at the tail of the list are removed from +the cache and the references to them are dropped. This triggers their +destruction (undertaken by *libnetfs*). + +##What Files Are Usually Created + +If you take into a look at the sources *ftpfs* or *unionfs* you will +notice files with names similar to the following: + +* cache.{c,h} -- here the node implementation of the node cache + resides. + +* lib.{c,h}, dir.{c,h}, fs.{c,h} -- these contain the implementation + of some internals. For example, the function *dir_entriesget* + mentioned in the description of the process of listing directory + entries, will most probably reside in one of these files. + +* options.{c,h} -- here the option parsing mechanism is usually + placed. Argp parsers are implemented here. + +* <*translator_name*>.{c,h}, netfs.c -- the implementation of *netfs_\** + callbacks will most probably lie in these files. + +##What Netnodes and Light Nodes Usually Contain + +A **netnode** usually contains a reference to a light node, some flags +describing the state of the associated generic *libnetfs* node, and +the references to the previous and the next elements in the node +cache. + +A **light node** usually contains the name of the file associated with +this light node, the length of this name, some flags describing the +state of this light node. To make a light node fully usable in a +multithreaded program, a lock and a reference counter are almost +always incorporated in it. Since light nodes are organized in a +hierarchical way, they contain a reference to their parent, a +reference to their first child, and references to their siblings +(usually not very descriptively called *next* and *prevp*). + +##The End + +I very much hope this piece of text was at least a little +helpful. Here I tried to explain the things which I understood least +when I started learning *libnetfs* and which confused me most. Feel +free to complete this introduction :-) diff --git a/hurd/libpager.mdwn b/hurd/libpager.mdwn new file mode 100644 index 00000000..91beddfc --- /dev/null +++ b/hurd/libpager.mdwn @@ -0,0 +1,16 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Mach's [[microkernel/mach/external_pager_mechanism]]. + +Mach [[microkernel/mach/IPC]]'s [[microkernel/mach/ipc/sequence_numbering]]. + +[GNU Hurd Reference Manual: 4.2 Pager +Library](http://www.gnu.org/software/hurd/doc/hurd_5.html#SEC32). diff --git a/hurd/libstore.mdwn b/hurd/libstore.mdwn new file mode 100644 index 00000000..ab649ebc --- /dev/null +++ b/hurd/libstore.mdwn @@ -0,0 +1,33 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +`libstore` is more than just a thin layer between +[[GNU_Mach|microkernel/mach/gnumach]] devices (`hd0` for example) and the +device node below `/dev`... + +# Available Stores + +* `device`: raw device access, used for access to `hd0`, etc. +* `file`: use a common file as some kind of block device. +* `zero`: kind of an empty block device. +* `task`: mach task store backend. TODO: what's this? +* `ileave`: interleave store (striping). +* `concat`: concatenate stuff. +* `remap`: remap stuff. +* `query`: TODO: what's this? +* `copy`: TODO: what's this good for? +* `gunzip`: `gunzip` data on the fly. +* `bunzip2`: `bunzip2` data on the fly. +* `nbd`: network block device (Linux-compatible). +* `url`: typed store with URL syntax. +* `typed`: typed store (chainable stores thingy). + +At <http://www.kataplop.net/pub/info/projets> you can find some effort to make +some crypto store. diff --git a/hurd/logo.mdwn b/hurd/logo.mdwn new file mode 100644 index 00000000..b1030e50 --- /dev/null +++ b/hurd/logo.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The famous *Hurd Boxes* logo is available at +<http://www.gnu.org/graphics/hurd_mf.html>. + + +On some lonely Wednesday, Colin Leitner and [[Thomas_Schwinge|tschwinge]] +converted these four boxes from the [original METAFONT +sources](http://www.gnu.org/graphics/hurd.mf) to +[[hand-written_SVG_code|boxes-redrawn.svg]]. + +[[img boxes-redrawn.png]] + + +This symbol is also being used as a favicon for this whole wiki. + +[[img /favicon.ico]] diff --git a/hurd/logo.png b/hurd/logo.png Binary files differnew file mode 100644 index 00000000..a892b47d --- /dev/null +++ b/hurd/logo.png diff --git a/hurd/logo/boxes-redrawn.png b/hurd/logo/boxes-redrawn.png Binary files differnew file mode 100644 index 00000000..fd26a87e --- /dev/null +++ b/hurd/logo/boxes-redrawn.png diff --git a/hurd/logo/boxes-redrawn.svg b/hurd/logo/boxes-redrawn.svg new file mode 100644 index 00000000..c0a7e460 --- /dev/null +++ b/hurd/logo/boxes-redrawn.svg @@ -0,0 +1,50 @@ +<?xml version="1.0"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="20cm" height="20cm" viewBox="0 0 100 100"> + <desc> + The Hurd Boxes and Arrows logo. + + Converted to SVG by Thomas Schwinge and Colin Leitner at 09/2007. + We used the metafont original from Stephen McCamant (1997). + available on http://www.gnu.org/graphics/hurd_mf.html. + + TODO. The flection of some of the curves is different from the + original. We don't know yet how to exactly reproduce + METAFONT's ``A..B'' syntax. Also the thickness of the lines + may be a different one. Elaborate on the copyright situation + and licensing conditions. + </desc> + <defs> + <style type="text/css"> + #boxes, #arrows { + stroke: black; + stroke-width: 3; + } + + #boxes { fill: white; } + </style> + </defs> + <g transform="translate(0 100) scale(1 -1) translate(-5 5)"> + <g id="arrows" fill="none" stroke-linecap="round"> + <path d="M 40 80 Q 20 80 20 65 L 20 60"/> + <path d="M 15 65 L 20 60 L 25 65"/> + + <path d="M 50 70 Q 50 50 62.5 50 L 70 50"/> + <path d="M 65 45 L 70 50 L 65 55"/> + + <path d="M 60 20 Q 100 20 100 50 Q 100 80 65 80 L 60 80"/> + <path d="M 65 75 L 60 80 L 65 85"/> + + <path d="M 80 40 Q 80 0 50 0 Q 20 0 20 35 L 20 40"/> + <path d="M 15 35 L 20 40 L 25 35"/> + </g> + + <g id="boxes"> + <rect x="10" y="40" width="20" height="20"/> + <rect x="40" y="70" width="20" height="20"/> + <rect x="70" y="40" width="20" height="20"/> + <rect x="40" y="10" width="20" height="20"/> + </g> + </g> +</svg> + diff --git a/hurd/neighborhurd.mdwn b/hurd/neighborhurd.mdwn new file mode 100644 index 00000000..3298e07a --- /dev/null +++ b/hurd/neighborhurd.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +It is possible to run multiple instances of the Hurd +in parallel, on a single instance of Mach. Other than +performance [[crosstalk]], they are essentially isolated. +Practically, as many devices do not allow multiple +non-[[cooperating|cooperation]] users, e.g., hard drive and network +this is not currently possible. It can be overcome, +however, by [[virtualizing|virtualization]] these problematic devices. + +When extra hardware is not available, it is possible to use a +[[sub-Hurd|subhurd]]. + + +# Etymology + +*Neighborhurd* is a pun on *neighborhood*, and a stance against hierarchies. diff --git a/hurd/networking.mdwn b/hurd/networking.mdwn new file mode 100644 index 00000000..6ed031ed --- /dev/null +++ b/hurd/networking.mdwn @@ -0,0 +1,32 @@ +[[meta copyright="Copyright © 2000, 2008 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]]."]]"""]] + +For each supported `PF_*` protocol family, there is a file `/servers/socket/N` +where `N` is the numberic value fo the `PF_*` symbol. Right now +[[`PF_LOCAL`|translator/pflocal]] (a.k.a. `PF_UNIX`) and +[[`PF_INET`|translator/pfinet]] (together with +[[`PF_INET6`|translator/pfinet/ipv6]]) are supported. + +User programs open those files, and use the `socket_create` [[RPC]] to make a +new socket. With that socket, they can use the other `socket_*` RPCs and also +the `io_*` RPCs. The `socket_*` RPCs are essentially clones of the [[Unix]] +syscalls in question. + +The only exception is `sockaddrs`, which are implemented as [[ports|libports]] +instead of the opaque data arrays they are in the syscalls. You manipulate +`sockaddr` ports with the `socket_create_address`, `socket_fabricate_address`, +and `socket_whatis_address` calls. The `sockaddr` port is then used in socket +calls like `socket_connect` and `socket_accept`. + +`PF_INET` `sockaddr` ports are manipulated with `socket_create_address` from +the usual `struct sockaddr_in`. `PF_LOCAL` `sockaddr` ports are stored by +`S_IFSOCK` filesystem nodes; you find the address associated with a node with +`ifsock_getsockaddr`. The [[file_system_server|translator]] will get a +`sockaddr` to return with `socket_fabricate_address`. diff --git a/hurd/ng.mdwn b/hurd/ng.mdwn new file mode 100644 index 00000000..22613f54 --- /dev/null +++ b/hurd/ng.mdwn @@ -0,0 +1,93 @@ +Hurd-ng is an effort to build a new operating system that preserves +the main design goals of the Hurd while fixing some of the Hurd's +shortcomings. There is not yet an official roadmap or a concrete +specification; indeed, much of the work is research oriented. + +These pages try to summarize the major discussions and ideas. + + +# Why ngHurd + +This section explains the motivations behind the new design: + + * [[Issues_with_Mach]] + * [[Issues_with_L4_Pistachio]] + * [[Limitations_of_the_original_Hurd_design]] + + * [[History]] + + +# Work already done + +A [[position_paper]] by Marcus Brinkmann and Neal H. Walfield can be found. + +A draft specification of the Hurd-NG interfaces has been, but is no longer, +available. + +A [[critique]] of the original Hurd is available. + +# Subjects + +## Design processus + +* [[DesignGoals]] +* [[RequirementsForUser]] +* [[DesignPrinciples]] +* [[Philosophy]] + + +## Concepts + +* [[security]] +* [[CapabilityBasedMicrokernel]] +* [[FirstClassReceiveBuffer]] +* [[PowerBox]] +* [[WhatIsACapability]] +* [[WhatIsAConstructor]] +* [[WhatIsASpacebank]] +* [[TrivialConfinementVsConstructorVsFork]] +* [[CopyVsRevocableCopyVsMap]] +* [[SetuidVsConstructor]] +* [[HurdishApplicationsForPersistence]] +* [[WhatsInAGroup]] +* [[ThePolycastInterface]] +* [[PermissionBits]] +* [[CancellationForwarding]] + + +## Problems to solve + +* [[HowMuchConfinementDoWeWant]] +* [[SharedLibraries]] +* [[PathMax]] + + +## Implementation + +* [[ChoiceOfMicrokernel]] +* [[HurdInterafaces]] +* [[PosixLayer]] +* [[SystemStructure]] + + +## Use Cases + +_please move me somewhere better! [[SamMason]]_ + +* [[UseCaseUserFileSystem]] +* [[UseCasePrivateKeys]] + + +## Organization + +Summaries should obey the following structure: + +* if there is a consensus, it is clearly described +* if controversial points remain, there are also described after the consenus +* if no choice has been clearly made, all valid positions are descrbied +* withdrawed and invalid positions (prooved wrong, unrealistic, contradictory + to some design principle, etc.) should be described only very briefly, and + developed in a separate article + +Each time a point seems to be overly long with respect to the rest of the +article, it should be summarized in place and developed in a separate article. diff --git a/hurd/ng/cancellationforwarding.mdwn b/hurd/ng/cancellationforwarding.mdwn new file mode 100644 index 00000000..6b2977c7 --- /dev/null +++ b/hurd/ng/cancellationforwarding.mdwn @@ -0,0 +1,56 @@ +# <a name="Cancellation_forwarding"> Cancellation forwarding </a> + +## <a name="Rationale"> Rationale </a> + +When a request to a chain of one or more servers is needed from a server to process a request from its client, and the client cancels its request, there will be at least temporary resource leakage in the chain of servers. + +If the last server in the chain completes processing and gives a response to its client, there will be unnecessary CPU and memory usage from all the servers. And if one of the servers never completes, there will be permanent memory leakage. + +Timeouts are a way to avoid the permament memory leakage, at the cost of rendering the whole communication impossible above some system load, hence opening a denial of service possibility. They also only bring the duration of the memory leakage from an infinite to an arbitrary finite time that may have no relation with the operations of the servers. + +Cancellation forwarding is a mechanism that can be used to propagate, without additional overt communication, the information that initial request has been cancelled. It also bring the duration of the memory leakage to a finite time, but each server in the chain is able to use the protocol at key points of its operations (like before a costly operation), and because the protocol will not produce false positive results, it can be used at an arbitrary high frequency. The only tradeoff is between leakage time and checking overhead. + +## <a name="Protocol"> Protocol </a> + +* Each client that want to forward cancellation to its server increment the protected payload of the FCRB for which a sender's capability has been given to the server, thus invalidating the capability. +* Each server that wants to notice cancellation forwarding will either set up a watchdog, and ask the kernel to send heartbeats, or decide for deterministic check points in its operations. At each heartbeat or check point, the server checks that the reply capability to the FCRB of the client is not invalid, with a Discrim capability. + +## <a name="Example"> Example </a> + +Communication is described between 3 processes, client C and servers S and T. + +Notation: + +* FCRB->A means a FCRB whose receiver process is A + +### <a name="Successful_operation_"> Successful operation: </a> + +* C invokes a capability to S, giving S a capability c1 to a FCRB->C +* S sets up a watchdog that check that discrim.classify(c1) != clVoid +* S invokes a cap to T, giving T a cap c2 to a FCRB->S +* T sets up a watchdog that check that discrim.classify(c2) != clVoid + +( T successfully treat the request, now goes completion ) + +* T invokes c2 +* S reads the answer, and increments the PP of the FCRB->S +* S invokes c1 +* C reads the answer, and increments the PP of the FCRB->C + +### <a name="Uncomplete_operation_"> Uncomplete operation: </a> + +* C invokes a cap to S, giving S a cap c1 to a FCRB->C +* S sets up a watchdog that checks that discrim.classify(c1) != clVoid +* S invokes a cap to T, giving T a cap c2 to a FCRB->S +* T sets up a watchdog that checks that discrim.classify(c2) != clVoid + +( for any reason, C decides to stop, now goes cancellation ) + +* C increments the PP of the FCRB->C +* S watchdog notifies S of cancellation +* S increments the PP of the FCRB->S +* T watchdog notifies T of cancellation + +---- + +-- [[Main/NowhereMan]] — originally designed in April 2006 diff --git a/hurd/ng/choiceofmicrokernel.mdwn b/hurd/ng/choiceofmicrokernel.mdwn new file mode 100644 index 00000000..20ee6f05 --- /dev/null +++ b/hurd/ng/choiceofmicrokernel.mdwn @@ -0,0 +1,4 @@ +TBD + +* [[MicrokernelL4]] +* [[MicrokernelCoyotos]] diff --git a/hurd/ng/copyvsrevocablecopyvsmap.mdwn b/hurd/ng/copyvsrevocablecopyvsmap.mdwn new file mode 100644 index 00000000..0cda7e24 --- /dev/null +++ b/hurd/ng/copyvsrevocablecopyvsmap.mdwn @@ -0,0 +1,6 @@ +TBD, see: + +* <http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00274.html> +* <http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00023.html> + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/designgoals.mdwn b/hurd/ng/designgoals.mdwn new file mode 100644 index 00000000..d04007c2 --- /dev/null +++ b/hurd/ng/designgoals.mdwn @@ -0,0 +1,53 @@ +# <a name="Design_Goals"> Design Goals </a> + +## <a name="The_Position_Paper"> The Position Paper </a> + +The [[position_paper]] tries to capture technical objectives. As has been +stated by Neal in [2], these are a number of scenarios we are interested in +addressing: + +* security: programs are not users; they should be constrained according to the user's intents +* resource management + * efficiency: facilitate use of local knowledge + * soft real-time: expose virtualized resources with useful access case characteristics +* integration: safe extension of the system + +## <a name="The_original_list"> The original list </a> + +These goals have been initially proposed by Bas Wijnen [1]. The list here is a slightly modified form, I tried to incorporate the content of the mailing list discussion. It has to be noted that there is no consensus about this list. There have been objections about both the number of goals stated and specific goals themselves. + +## <a name="Essential_Goals"> Essential Goals </a> + +* stability +* robustness +* resource accountability +* confinement +* support for most legacy applications +* extensibility +* no ACLs + +### <a name="On_Extensibility"> On Extensibility </a> + +Extensibility has often been a strong argument to support the multiserver approach. Therefore, I think, it has been rated to be an essential goal in our (preliminary) list, too. However, it has been [suggested](http://citeseer.ist.psu.edu/druschel97extensible.html) that this argument is of few or no interest for a general purpose OSes: it is argued that the benefits of extensible kernels can be migrated to conventional ones by defining exactly what the extension requires. "Conventional kernel" is here probably to be interpreted as "monolithic kernel". From the above, I think the first (naive) conclusion that could be drawn would be to abandon the multiserver approach and extensibility goal. + +However, I do believe there are benefits in multiserver environments you cannot get in a monolithic one, namely enhanced security and stability through protection boundaries. Also, whilst wanting to become adopted as general purpose OS, ngHurd still strives to allow for research also, so even according to the above-referenced paper extensibility is to be one of its goals. + +Therefore, I'd want to propose to weaken the impact of extensibility on the design, by lowering it to the category "Regular Goals". -- [[TomBachmann]] - 13 Dec 2006 + +## <a name="Regular_Goals"> Regular Goals </a> + +* confinement with endogenous verification +* soft real time +* setting diverse resource distribution policies +* persistent sessions for users + +## <a name="Optional_Goals"> Optional Goals </a> + +* small memory footprint +* support for all POSIX applications +* persistence + +---- + +* [1] <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00037.html> +* [2] <http://lists.gnu.org/archive/html/l4-hurd/2007-01/msg00122.html> diff --git a/hurd/ng/designprinciples.mdwn b/hurd/ng/designprinciples.mdwn new file mode 100644 index 00000000..42faa52f --- /dev/null +++ b/hurd/ng/designprinciples.mdwn @@ -0,0 +1,39 @@ +# <a name="Design_Principles"> Design Principles </a> + +A design principle is a test that lets us **reject** things. Hopefully, when combined with other design principles, it forms a basis for making coherent and consistent decisions about design goals and system features. [1] + +## <a name="Stated_design_principles"> Stated design principles </a> + +None defined yet, but there seems to be consensus that ngHurd should be a principle-driven design. + +## <a name="Potential_design_principles"> Potential design principles </a> + +Here is an incomplete list of potential design principles for the ngHurd. It is taken from [2]. I left out some principles I think do not apply or are not in question. Feel free to add more. + +### <a name="Principles_from_the_Multics_Proj"> Principles from the Multics Project </a> + +* _Economy of mechanism_: Keep the design as simple as possible. +* _Fail-safe defaults_: Base access decisions on permission rather than exclusion. +* _Least priviledge_: Components should have no more authority than they require. +* _Least common mechanism_: Minimize the amount of shared instances in the system. + +### <a name="Commonly_accepted_principles"> Commonly accepted principles </a> + +* _Separation of policy and mechanism_ +* _Least astonishment (also known as principle of least surprise):_ The system�s behavior should match what is naively expected. +* _Complete accountability_: All real resources held by an application must come from some accounted pool. +* _Safe restart_: On restart, the system must either already have, or be able to rapidly establish, a consistent and secure execution state. +* _Reproducibility_: Correct operations should produce identical results regardless of workload. + +### <a name="Principles_specific_to_EROS"> </a> Principles specific to EROS + +* _Credible policy_: If a security policy cannot be implemented by correct application of the system�s protection mechanisms, do not claim to enforce it. +* _Explicit authority designation_: Every operation that uses authority should explicitely designate the source of the authority it is using. +* _Relinquishable authority_: If an application holds some authority, it should be able to voluntarily reduce this authority. + +---- + +See also: + +* [1] <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00120.html> +* [2] EROS: A Principle-Driven Operating System from the Ground Up diff --git a/hurd/ng/firstclassreceivebuffer.mdwn b/hurd/ng/firstclassreceivebuffer.mdwn new file mode 100644 index 00000000..30087bf2 --- /dev/null +++ b/hurd/ng/firstclassreceivebuffer.mdwn @@ -0,0 +1,3 @@ +TBD, see e.g. <http://coyotos.org/docs/ukernel/spec.html> and <http://www.coyotos.org/pipermail/coyotos-dev/2006-January/000391.html> + +-- [[TomBachmann]] - 31 Aug 2006 diff --git a/hurd/ng/history.mdwn b/hurd/ng/history.mdwn new file mode 100644 index 00000000..652bccf3 --- /dev/null +++ b/hurd/ng/history.mdwn @@ -0,0 +1,50 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The idea of using [[microkernel/L4]] as a [[microkernel]] for a +[[Hurd_system|hurd]] was initially voiced in the [[Hurd_community|community]] +by Okuji Yoshinori. He created the [[mailing_lists/l4-hurd]] mailing list in +November 2000. It does not appear that he got any further than simply +suggesting it as an alternative to [[microkernel/Mach]] and doing some reading. + +Neal Walfield started the original Hurd/L4 port while at Karlsruhe in 2002. +He explains: + +> My intention was to adapt the Hurd to exploit L4's concepts and intended +> [[design_pattern]]s; it was not to simply provide a Mach +> [[compatibility_layer]] on top of L4. When I left Karlsruhe, I no longer had +> access to [[microkernel/l4/Pistachio]] as I was unwilling to sign an NDA. +> Although the specification was available, the Karlsruhe group only [released +> their code in May +> 2003](https://lists.ira.uni-karlsruhe.de/pipermail/l4ka/2003-May/000345.html). +> Around this time, Marcus began hacking on Pistachio. He created a relatively +> complete run-time. I didn't really become involved again until the second +> half of 2004, after I complete by Bachelors degree. + +> Before Marcus and I considered [[microkernel/Coyotos]], we had already +> rejected some parts of the Hurd's design. The [[resource_management_problems]] +> were what prompted me to look at L4. Also, some of the problems with +> [[translator]]s were already well-known to us. (For a more detailed +> description of the problems we have identified, see our [[critique]] in the +> 2007 July's SIGOPS OSR. We have also written a forward-looking +> [[position_paper]].) + +> We visited Jonathan Shapiro at Hopkins in January 2006. This resulted in a +> number of discussions, some quite influential, and not always in a way which +> aligned our position with that of Jonathan's. This was particularly true of +> a number of security issues. + +A lange number of discussion threads can be found in the archives of the +[[mailing_lists/l4-hurd]] mailing list. + +> Hurd-NG, as we originally called it, was an attempt to articulate the system +> that we had come to envision in terms of interfaces and description of the +> system's structure. The new name was selected, if I recall correctly, as it +> clearly wasn't the Hurd nor the Hurd based on L4. diff --git a/hurd/ng/howmuchconfinementdowewant.mdwn b/hurd/ng/howmuchconfinementdowewant.mdwn new file mode 100644 index 00000000..1963ae73 --- /dev/null +++ b/hurd/ng/howmuchconfinementdowewant.mdwn @@ -0,0 +1,93 @@ +# <a name="How_Much_Confinement_Do_We_Want_"> How Much Confinement Do We Want? </a> + +**_NOTE:_** **I am absolutely sure this is incredibely incomplete and/or wrong.** **_This is not up to date!_** + +## <a name="Introduction"> Introduction </a> + +There has been a lot of traffic on the l4-hurd list lately. A good bit of this is related to the question this entry is about: How much confinement do we want? The idea not to implement the full confinement was (accidently?) raised by marcus, who planned to raise it _somewhen_, but not yet. + +## <a name="Terminology"> Terminology </a> + +In this section I try to sketch some terminology that came up _during_ the discussion. + +### <a name="Creator"> Creator </a> + +Creator we call the creator of the confined (constructor) object.[2] + +### <a name="Instantiator"> Instantiator </a> + +Instantiator we call the user of the confined (constructor) object. [2] + +### <a name="Encapsulation"> Encapsulation </a> + +Encapsulation means that information (including authority) cannot be extracted from a program without its consent. This is a restriction on "read in" behavior. [3] + +### <a name="Confinement"> Confinement </a> + +Confinement means that a program cannot communicate outward through unauthorized channels. This is a restriction on "write out" behavior. [3] + +### <a name="non_trivial_confinement"> non-trivial confinement </a> + +Marcus: \`\`[non-trivial confinement] is the confined constructor design pattern.'' [1] + +We speak about non-trivial confinement when creator != instantiator. [2] + +### <a name="trivial_confinement"> trivial confinement </a> + +Marcus: \`\`[trivial confinement] is what the Hurd will do'' [1] + +We speak about trivial confinement when creator == instantiator [2] + +### <a name="principle_of_user_freedom_autono"> principle of user freedom/autonomity </a> + +The principle of user freedom and autonomity means the right to use, inspect, alter and copy all resources attributed to/owned by the user.[4] + +### <a name="freedom_of_digital_information"> freedom of digital information </a> + +TBD + +## <a name="The_Positions"> The Positions </a> + +Here I try to sketch the different positions. + +### <a name="Use_and_Implement_Only_Trivial_C"> Use and Implement Only Trivial Confinement by Default </a> + +#### <a name="Pros"> Pros </a> + +* Follows the principle of user freedom +* **add more here** + +#### <a name="Cons"> Cons </a> + +* Possibly use cases for non-trivial confinement exist we cannot yet think of. +* **add more here** + +### <a name="Implement_Full_Confinement_and_U"> Implement Full Confinement and Utilize It </a> + +#### <a name="Pros"> Pros </a> + +* There are many years of experience with confinement. +* **add more here** + +#### <a name="Cons"> Cons </a> + +* It does not follow the principle of user freedom. +* **add more here** + +## <a name="Preliminary_Summary_Statements"> Preliminary Summary Statements </a> + +* [Jonathan](http://lists.gnu.org/archive/html/l4-hurd/2006-05/msg00018.html) + +## <a name="A_Try_to_Push_the_Discussion_int"> A Try to Push the Discussion into a Constructive Direction </a> + +Marcus started a challenge [5] to find a use case for non-trivial confinement that is interesting for the Hurd and cannot be implemented otherwise. The exact challenge definition can be found in the mail. + +---- + +* [1] <http://lists.gnu.org/archive/html/l4-hurd/2006-04/msg00339.html> +* [2] <http://lists.gnu.org/archive/html/l4-hurd/2006-04/msg00383.html> +* [3] <http://lists.gnu.org/archive/html/l4-hurd/2006-04/msg00415.html> +* [4] <http://lists.gnu.org/archive/html/l4-hurd/2006-05/msg00012.html> +* [5] <http://lists.gnu.org/archive/html/l4-hurd/2006-04/msg00407.html> + +-- [[TomBachmann]] - 01 May 2006 diff --git a/hurd/ng/hurdishapplicationsforpersistence.mdwn b/hurd/ng/hurdishapplicationsforpersistence.mdwn new file mode 100644 index 00000000..d785694b --- /dev/null +++ b/hurd/ng/hurdishapplicationsforpersistence.mdwn @@ -0,0 +1,5 @@ +TBD, see: + +* <http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00081.html>; summary: passive translators started by the filesystem cannot be done right and persistence makes passive translators unnecessary + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/issues_with_mach.mdwn b/hurd/ng/issues_with_mach.mdwn new file mode 100644 index 00000000..cb4de906 --- /dev/null +++ b/hurd/ng/issues_with_mach.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + * [[Resource_management_problems]] + * [[Critique]] diff --git a/hurd/ng/limitations_of_the_original_hurd_design.mdwn b/hurd/ng/limitations_of_the_original_hurd_design.mdwn new file mode 100644 index 00000000..25f03372 --- /dev/null +++ b/hurd/ng/limitations_of_the_original_hurd_design.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + * [[Critique]] diff --git a/hurd/ng/microkernelcoyotos.mdwn b/hurd/ng/microkernelcoyotos.mdwn new file mode 100644 index 00000000..cdf4e1bf --- /dev/null +++ b/hurd/ng/microkernelcoyotos.mdwn @@ -0,0 +1,9 @@ +# <a name="The_Coyotos_microkernel"> The Coyotos microkernel </a> + +[Coyotos](http://www.coyotos.org/index.html) is a microkernel and OS and the successor of EROS, that itself is the successor of KeyKOS. A more complete history can be found [here](http://www.coyotos.org/history.html). Its main objectives are to correcte some shortcomings of EROS, demonstrate that an atomic kernel design scales well, and (eventually) to completely formally verify both the kernel and critical system components by writing them in a new language called [bitc](http://www.bitc-lang.org/). [See [l4.verified](http://nicta.com.au/research/projects/l4.verified) for work on formally verifying an L4 microkernel.] + +Coyotos is an orthogonally persistent pure capability system. It uses continuation based unbuffered asynchronous IPC (actually it's synchronous IPC with asynchronous syscalls). + +TODO: explain these terms and (more important) their consequences on system design. + +The coyotos microkernel specification can be found [here](http://www.coyotos.org/docs/ukernel/spec.html) diff --git a/hurd/ng/part1ownershipandcontracts.mdwn b/hurd/ng/part1ownershipandcontracts.mdwn new file mode 100644 index 00000000..7be1ec05 --- /dev/null +++ b/hurd/ng/part1ownershipandcontracts.mdwn @@ -0,0 +1,163 @@ +# <a name="Part_1_Ownership_And_Contracts"> Part 1: Ownership And Contracts </a> + +This is the first in a series of notes that will serve to formulate my position from ground-up. The way will not be straight-forward. I can not give you one particular, technical argument that addresses all my concerns. Instead, the evaluation involves a step of personal judgement (but only one). In this note, I will explain why I believe that this is necessarily the case, what this step is and what my stance on it is. + +This mail took me 5 hours to write, which means 1.5 lines per minute. It contains only a tiny part of my argument. I hope that this removes any doubts about my sincerity to address all issues, but also makes apparent the technical constraints in doing so "immediately", as has been requested from me several times. I have to ask for patience. As everybody else, I am doing this in my spare time. + +Let me jump right in at the technical level: I claim that every relationship between two processes falls into one of four categories. These four coarse categories provide a differentiation that is sufficient for my argument: + +## <a name="Process_Relationship_Categories"> Process Relationship Categories </a> + +* 0 - It is not possible for the processes to communicate via direct IPC. + +In all other categories, it is possible for the processes to communicate via direct IPC, because one of the processes, let me call it process A, has a capability to the other process, let me call it B. + +* 1 - The collective authority of process B, immediately[1] after the time it was instantiated, is necessarily a strict subset of the collective authority hold by process A at that time. + +[1] See my challenge-email to find a definition of the window of time that gives meaning to the word "immediately" in the case where process B is instantiated indirectly or directly because of an action in process A. If process B is instantiated independent of process A, just assume that the collective authority hold by process A is the empty set. + +* 2 - The set of collective authority of process B, immediately after the time it was instantiated, minus the collective authority of process A (if it existed), is necessarily not empty. Some of the capabilities in this non-empty set provide the ability to write-out. + +* 3 - The set of collective authority of process B, immediately after the time it was instantiated, minus the collective authority of process A (if it existed), is necessarily not empty. None of the capabilities in this non-empty set provide the ability to write-out. + +This categorization does not say anything about encapsulation. However, it is to be understood from the description that in category 0, 2 and 3, process B is encapsulated. If it were not, the collective authority that is hold by A would include the authority of B by transition. In category 1, it is to be understood that process B, in principle, can not be successfully encapsulated (to see this, pay attention to the fact that process A could pre-arrange its authority so that no capability it has provides the possibility for encapsulation). + +This categories provide a complete categorization for two important system structures: The EROS/Coyotos model, which relies on categories 0, 2 and 3, while making category 1 possible. And my recursive system structure model, which relies on categories 0, 1, and 2, but rejects 3. + +## <a name="Agenda"> Agenda </a> + +This provides the basis for a goal-based analysis. The agenda can be: + +1) It has to be demonstrated that the goals of the Hurd can be met by relying on the process relationships described by 0, 1 and 2. This of course must include an analysis of the goals of the Hurd. + +2) It is useful to reason about the rejection of category 3. What do we lose by omitting it? What goals can not be achieved by the Hurd if it rejects category 3? + +This sets the background. I will start with the second item on the list, and then work my way up. It would not be unreasonable to do it the other way around: I could state the goals of the Hurd, then demonstrate that we can achieve them by using the model I described earlier, and then look at the interaction with category 3 relationships. This would be the straighter way. However, a discussion of the goals of the Hurd can be easier followed if the background is set. So, let me finish this note with some general arguments about the properties of category 3, and what the factors can be that determine how you think about it. + +## <a name="Encapsulation_and_Confinement"> Encapsulation and Confinement </a> + +What is the exact nature of the relationship between process A and process B, where communication can (and does) occur, but process B is both encapsulated and confined? To discuss this, we have to define what we mean by the nature of process relationships. Two concepts come into my mind: Ownership and contracts. What do these words mean? + +In the course of the discussion, I will make use of citations from Hegel's Philosophy of Right. I am not relying on his argumentation, it is just a convenient source for some definitions, from which I want to work. + +## <a name="Ownership"> Ownership </a> + +Ownership is not a complicated concept. You can look it up in encyclopedias or dictionaries, or you can study philosophy. Hegel defines ownership this way (Paragraph 61): + +"Since the substance of the thing which is my property is, if we take the thing by itself, its externality, i.e. its non-substantiality --- in contrast with me it is not an end in itself (see � 42) and since in my use or employment of it this externality is realised, it follows that my full use or employment of a thing is the thing in its entirety, so that if I have the full use of the thing I am its owner. Over and above the entirety of its use, there is nothing left of the thing which could be the property of another." + +A shorter definition is that ownership is the exclusive right of a person to possess, use and dispose of a thing. Note that the right must be exclusive. It must also be complete. Also note that ownership refers to human beings, not things. Things can not own other things. Paragraph 42 in Hegel's work defines: + +"What is immediately different from free mind is that which, both for mind and in itself, is the external pure and simple, a thing, something not free, not personal, without rights." + +## <a name="Contracts"> Contracts </a> + +Hegel describes the transition from ownership to contracts in paragraph 71 this way: + +"One aspect of property is that it is an existent as an external thing, and in this respect property exists for other external things and is connected with their necessity and contingency. But it is also an existent as an embodiment of the will, and from this point of view the 'other' for which it exists can only be the will of another person. This relation of will to will is the true and proper ground in which freedom is existent. --- The sphere of contract is made up of this mediation whereby I hold property not merely by means of a thing and my subjective will, but by means of another person's will as well and so hold it in virtue of my participation in a common will." + +A contract is thus an agreement among agents to hold a property by means of a common will. + +## <a name="Mediating_Actors"> Mediating Actors </a> + +In the case of confinement and encapsulation, there are not just two agents engaging in a contract, there are three (at least). There must be three, because encapsulation and confinement means that neither the party that is encapsulated, nor the party that is confined comes to hold the other parties property. So, there must be a third agent which does hold both parties property, and which implements the common will of the participants. + +To find this agent, we just have to look for somebody who comes to hold the other parties property. In computer systems without "trusted computing" components, this is the owner of the machine (and/or the system administrator). In computer systems with "trusted computing" components, the mediating agent are the people or companies designing and building the "trusted computing" hardware. + +In either case, the mediating agent uses tools to implement the common will. In either case, the mediating agent has, not exclusive, but still quite complete ownership over the property that is part of the contract (possession, use and disposal). In either case, implementation of the common will depends on the well-behaviour of the mediating agent. + +## <a name="Contract_Requires_Consent"> Contract Requires Consent </a> + +If the mediating agent is supposed to implement the common will of the participants in a contract, it needs to know what the common will is. If a participant wants to engage in a contract, it needs to know what the contract means before the participant can make a proper judgement about participation. + +In the process of entering a contract, you are giving up, at least temporarily, possession of a thing you own. This is why entering a contract requires careful consideration and explicit consent. + +## <a name="Contracts_Are_Not_Private"> Contracts Are Not Private </a> + +I can not make the transition here from the rights of individuals to the structure and legitimation of civil societies. This is the subject matter of state philosophy. However, it suffices to say that the universal rights of individuals find (often, not always) expression in the laws of the civil society, and that it is civil society which is bestowed to resolve conflicts between the perceived particular rights of individuals. + +Because civil societies exist, and we live in them, and contracts are fundamental to the function of a society, every society has extensive and complex laws about how contracts are made, and what they can entail, and what their limitations are. The German Civil Code contains 2385 articles on 433 pages, and this is only one of the many laws that has something to say about the matter. There are other laws specific to contractual labor, anti-trust, publicly traded companies, publications, etc etc. + +## <a name="A_Matter_Of_Judgement"> A Matter Of Judgement </a> + +It is now appropriate to look again at the proposed system structures in their extremes (there are shades of gray, but they have not been seriously discussed so far). + +In my model, the computer remains the property of its owner. This property right is strongly protected. The system will not allow, by default, operations that let the owner unintentionally enter into a contract between two parties. Any such contract requires explicit consent. It also requires, every time that a contract is made, to explicitly choose the mediator and scope of the contract. In other words, the owner must be explicit about his particular will that should be part of the common will of the contract. + +In the EROS/Coyotos model employing "trusted computing", only part of the computer is the property of the owner. Another part of the computer is owned by the manufacturer of the "trusted computing" component. The system will, by design, perpetually give away possession of parts of the computer to other agents, by engaging constantly in contracts with them. The nature of these contracts is built firmly into the system structure: The mediator is always the agent that designed and implemented the "trusted computing" component. The default "common will" is to alienate all rights to the property, except the right to destroy it. + +These seem to me the only serious proposals. I recognize that my model makes it harder for people to engage into contracts when they want to. In my opinion, this is justified: Negotiating and implementing a contract is a fundamental process that can not be overly simplified. In fact, in any serious business, developing the contracts between collaborating agents is a very serious and essential part of the process. Business holders are acutely aware of the risks involved in engaging into a contract, and spent significant personnel and financial resources to limit their risks. + +There may be, in principle, a system that makes it convenient for users to engage in standard contracts selectively, explicitely and safely. For this, however, the mechanisms involved must allow for a broad range of expressions that reflects the structure of the existing society, and the user must be able to decide if the contract actually reflects the common will of the involved agents. This is far beyond what we can technically achieve, at least today, maybe forever. + +## <a name="On_The_Non_Technicality_Of_The_C"> On The Non-Technicality Of The Choice </a> + +Currently, we only know about the two possible extreme positions described above. There is an outstanding description of the properties of my model, and how they can be achieved. However, my claim is that the choice between these two options can not be made on technical grounds. Each system is self-consistent and provides an adequate solution to the task that it tries to solve. + +The choice therefore comes down to a personal preference, which may either be based on personal needs, or on a speculation on the future. + +However, let me raise some cautions that illustrate why I have made my choice the way I did. These cautions do not constitute an exhaustive list of my arguments. It is not necessary for me to give an exhaustive list. In the end, what system one would prefer to use is a personal decision that everybody has to make on their own grounds. + +## <a name="On_The_Effect_Of_Perpetual_Alien"> On The Effect Of Perpetual Alienation </a> + +Hegel remarks on the effect of perpetual alienation (my terminology) (paragraph 67): + +"Single products of my particular physical and mental skill and of my power to act I can alienate to someone else and I can give him the use of my abilities for a restricted period, because, on the strength of this restriction, my abilities acquire an external relation to the totality and universality of my being. By alienating the whole of my time, as crystallised in my work, and everything I produced, I would be making into another's property the substance of my being, my universal activity and actuality, my personality." + +He then continues to add a comparison to the nature of being a slave: + +"The distinction here explained is that between a slave and a modern domestic servant or day-labourer. The Athenian slave perhaps had an easier occupation and more intellectual work than is usually the case with our servants, but he was still a slave, because he bad alienated to his master the whole range of his activity." + +It is undisputed (I hope) that computers occupy more and more of our personal life. By doing so, they start to embody significant parts of our personality. We, as domain experts, are miles ahead of the general public in this regard, and it is our obligation to foresee such developments. By losing control over our computers, we risk losing the ability to act universally. This finds correspondence in the risk of losing general-purpose computers to [[TiVo]]-ized locked down embedded systems. + +## <a name="Passive_Defense_Is_Not_Sufficien"> Passive Defense Is Not Sufficient </a> + +The passive defense against this risk is not sufficient. You may hold the opinion that the "trusted computing" component is optional. The machine owner can switch it off, and ignore it. This is true, but it is true in the same way that people are free not to click on email attachments if they do not want to risk getting a virus. Security threats, and the risk of losing the substance of one's being is probably the biggest security threat of them all, requires active defense at all levels of the computer system. + +There have already been proposals for US law to require all computers to support "trusted computing", and to enforce its use when connecting to the internet. There are other methods of coercion as well. One method is to introduce a less harmful variant of control, and then change the conditions after it is widely established. Another method is the exploitation of a monopoly, or conspirations among large companies to ensure that there is no feasible alternative. Yet another method is to spread false information on how the technique will be used. All of these techniques and more have already been used, so these are not speculations, they are facts. + +Once you accept the loss of the substance of one's being as a security threat (I am not saying you need to accept that, but if you do, you will be able to follow my argument), all the same techniques and considerations apply to this security threat as to other security threats. And it is universally recognized (I hope) that passive defense is not sufficient in the context of active security threats. + +## <a name="Radical_Paradigm_Shifts"> Radical Paradigm Shifts </a> + +The "trusted computing" model embodies radical paradigm shifts in how some people think about ownership and contracts. Richard Stallman remarks (<http://www.gnu.org/philosophy/can-you-trust.html>): + +"A previous statement by the palladium developers stated the basic premise that whoever developed or collected information should have total control of how you use it. This would represent a revolutionary overturn of past ideas of ethics and of the legal system, and create an unprecedented system of control. The specific problems of these systems are no accident; they result from the basic goal. It is the goal we must reject." + +The idea that the agent who developed or collected information should be the sole arbitrator of how the information is used by other agents is in direct conflict with several social contracts on fair use, temporal boundaries on copyright protection, obligation to preserve information (for example audits, or evidence of a crime), and more. + +In short, the mediating agent (the implementors of the "trusted computing" component) is overreaching, in direct conflict to established laws. At the same time, for most people, organizations, businesses and in fact, quite a number of governments as well, the mediating agent will be unaccountable, because not only it will be represented by large companies that have assets at their disposal comparable to some of the smaller nations on the globe, but also, because the way the technology is implemented, it will be able to convincingly deny its own involvement (also, nominally, it is the only party which could have been involved in the matter at all). + +## <a name="On_The_Imbalance_Of_Defaults"> On The Imbalance Of Defaults </a> + +In the encapsulated, confined example, the confined party risks, by default, nothing, and the encapsulated party risks, by default, all the resources that is giving up temporarily, for the whole time of the contract, without any guarantee for a result. + +This is an imbalance of defaults from which a balanced, negotiated contract is difficult to achieve. I see no reason why it should be easier or harder to achieve a balanced, negotiated contract in either system. They start from two extremes, and the right solution is somewhere in the middle. However, my system does not contain a comparable mechanism which is imbalanced by default. Instead, every agent is in the same situation. Practically, I think that a balanced contract is more likely to be the result of equal starting conditions than from unequal starting positions. + +## <a name="Conservative_Choices"> Conservative Choices </a> + +In the above sense, my model is really ultra-conservative. The only assumption is that it is the owner of the computer who should be in control over it. This is in fact, a logical tautology. I do not make any further assumptions about what should be imposed. + +## <a name="The_Choice_Of_A_GNU_Generation"> </a> The Choice Of A GNU Generation + +If you read carefully the text by RMS on <http://www.gnu.org/philosophy/can-you-trust.html> you will find out that, although the text focusses on DRM, it really anticipates a much broader class of problems. The free software movement depends on the free software philosophy, it is its heart and soul. Even if you do not subscribe to the free software philosophy, you should be able to agree with the following statement: + +Every person on earth should be able to write useful computer programs and share them with their friends without fees. + +For this, several things are required: We must have access to hardware that obeys our command. If it doesn't, or even if it only makes it very hard, we can not write programs for it. We must have access to information about how to write useful programs. For this, we must learn, and one way to learn is to observe how the programs that our friends wrote work. Also, to write programs that are useful in the real world, we must be able to reverse-engineer other proprietary programs. We must be able to publish our own, original work unencumbered by legal problems like patents. + +All of these things must be easy, or otherwise our ability to do our work is in danger. In the context of this discussion, my model supports these operations easily. The "trusted computing" model puts them at such a high risk that it threatens the mere survival of free software. + +This is something that is very important to understand. It is highly unlikely that the GNU project would accept a technology that threatens its own survival. So, if you want to propose a use case for this technology for a GNU project, you have to demonstrate more than just that there are people who want to do this. You would have to demonstrate that the benefits compensate the risk. Because the risk is very serious and very great, the compensating benefit would have to be equally big. Because this is a GNU mailing list spawned off a GNU project with the intent to write an operating system for the GNU project, I think it is appropriate to point this out. + +This does not mean that I am not, personally, interested in hearing your ideas. Furthermore, and this is also important to understand, I do not believe anymore that there is a conflict between the free software philosophy and the goal of writing a secure and useful operating system. The possibility that there might be such a conflict has been a great concern of mine in the last half year. However, once I had resolved two important use cases (suid programs and cut&paste), I was able to see what parts of the security infrastructure were actually important to me, and which parts I think are a separable concern. From there, it was not difficult to generalize to the above analysis of ownership and contracts. + +## <a name="Outlook"> Outlook </a> + +This then, is my motivation for closely examining how (1) my model can be technically described, and (2) what its properties are, and (3) what its justifying design principles are. This sets the agenda for upcoming mails, so let me insert a breaking point here. + +Thanks, Marcus + +---- + +Note: this document has an [[Part1OwnershipAndContractsAddendum]]. diff --git a/hurd/ng/part1ownershipandcontractsaddendum.mdwn b/hurd/ng/part1ownershipandcontractsaddendum.mdwn new file mode 100644 index 00000000..d64d9179 --- /dev/null +++ b/hurd/ng/part1ownershipandcontractsaddendum.mdwn @@ -0,0 +1,31 @@ +this is an addendum to my first note. It provides one more concern about the "trusted computing" model, an important clarification of the nature of my objection, and a retraction on the need for a new design principle. + +## <a name="Monoculture_Of_Service"> Monoculture Of Service </a> + +In the "trusted computing" model, it is suggested that all contracts, by default, use the same mediating agent. This introduces a single point of failure into the system architecture. It also concentrates social and political power into the hands of the mediating agent, which can (and will) be abused. + +In my model, all contracts have to be established explicitely, and there is no default mechanism. This will naturally cause people to choose a variety of contracts. For example, many contracts do not require a mediating agent at all, but the common will can be implemented by either of the involved parties. Often, there already is a suitable, local mediating agent available. + +## <a name="Quantitative_Differences_Cause_Q"> Quantitative Differences Cause Qualitative Differences </a> + +My main objection is thus that the pervasive use of the confined+encapsulated design pattern in the system architecture leads to a new qualitative difference between the systems. Every single contract in isolation may appear innocent. Their sum creates emerging behaviour that I consider a threat. + +It is an open question to me if the individual contracts indeed are innocent. In every civil society, there are some contracts that are invalid, even if you sign on to them. Some rights are well-recognized as inalienable. If such an inalienable right is contained in the confined+encapsulated design pattern or not is a difficult question that requires a much more careful analysis than I have attempted so far. + +However, even if every such individual contract is innocent, my objection still stands, because it is grounded not in the nature of the individual contract, but in the cummulative effect if it is used pervasively in the system architecture. + +In fact, it is not hard to see that if we take an individual contract of the confined+encapsulated sort, it can be straightforwardly implemented in my model with only one requirement beyond what I have already planned for: The user would need to be able to create a space bank that provides encapsulation. (Some more features are required to make it possible to create such services automatically without human inspection, but that is a minor point). However, the presence of this feature is a local property of the system architecture, not a global property. + +It is thus difficult for me to understand why it has been argued that not using this form of contract in the system architecture constitutes a de-facto ban of the ability to engage in such a contract. Quite the opposite, I think that engaging in such a contract is very well possible with only local, non-intrusive changes to the operating system to support some very specific functions. Maybe (I have not analyzed this) it does not make sense to engage in only one such contract with limited scope, maybe the very nature of the contract requires its pervasive use in the system architecture. If this is true (again, I do not know if this is true or not), this could be a first indication that this particular form of contract is not as innocent as it appears. + +## <a name="A_New_Design_Principle_"> A New Design Principle? </a> + +I have suggested before that I have formed a new design principle that provides a taxometer for the use of the confined+encapsulated design pattern. However, after having written my note I do not think that a new design principle is necessary. + +The only decision that has to be made is if the risk of losing the "substance of ones being", as it applies to the realm of one's computers, is a security threat or not. The rest follows quite logically from standard principles on how to design secure operating systems. + +The substance of my argument can thus be summarized in four simple words: + +**Ownership must be secured**. + +Thanks, Marcus diff --git a/hurd/ng/part2systemstructure.mdwn b/hurd/ng/part2systemstructure.mdwn new file mode 100644 index 00000000..0f94ff2a --- /dev/null +++ b/hurd/ng/part2systemstructure.mdwn @@ -0,0 +1,122 @@ +This is part 2 in a small series of notes explaining my opinion on what is a good system structure for the Hurd. While the ideas in part 1 motivate the system structure presented here, the feasibility of this system structure in turn justifies my opinion as presented in part 1. However, either part can also be taken individually. There will probably not be a third part. + +# <a name="Part_2_System_Structure"> Part 2: System Structure </a> + +I will start with presenting the process hierarchy, explain some abstract design patterns, and then show some specific applications. + +Note that within this document, I will limit myself to certain types of operations and features. This does not mean that the system itself, by design, contains any measures to forbid or ban other types of operations. + +## <a name="Process_Hierachy"> Process Hierachy </a> + +A process is a protection domain. The initial configuration of the machine contains one or more processes with specific, but unspecified, relationships. These processes are called the "root processes". From the initial configuration, processes can be created and destroyed. + +## <a name="Resource_Management"> Resource Management </a> + +I do not make a disctinction between data and capability pages. Both are, for the course of this discussion, memory pages. + +Processes require at the very least some memory resources to keep the process state. Memory is allocated from containers, which therefore provide an abstraction for memory reserves. It is required that one of the root processes is a server implementing container objects. + +A container provides an interface that allows to allocate and return memory frames, and to create new containers with a new reserve limit (thus, containers form a hierarchy). Any successful allocation and deallocation from such a derived container will also be accounted for in all containers from which it is derived. A container can be destroyed, which will return all memory frames allocated from it, and thus recursively destroy all containers derived from it as well. + +## <a name="Process_Creation_And_Destruction"> Process Creation And Destruction </a> + +Any process which has access to a container from which a sufficient amount of memory can be allocated, can convert this memory into a process. The process is destroyed by deallocating the memory from which it was created. + +## <a name="Filling_In_the_Gaps"> Filling In the Gaps </a> + +The above description is actually mostly complete. What is missing is the description of a somewhat unrelated feature which allows process identification, a description of what the default mechanisms are in the system to support common design patterns, and an illustration that these design patterns are sufficient. + +## <a name="Canonical_Invariances"> Canonical Invariances </a> + +By default, every process is associated with one memory container, the primary container of the process. This is the container from which the process is allocated, and from which the process does all allocations for its own needs. Primary containers are by default not shared. + +## <a name="Canonical_Process_Creation"> Canonical Process Creation </a> + +To create a new process, by default, a process, the parent, creates a new container from its primary container, allocates some memory from it and converts it into a new process, the child. It then prepares the process to get it into a runnable state. This includes the following steps: First, a special executable image (allocated from the primary container of the child) is installed into the child's address space, which runs a cooperative protocol with the parent. Then, the parent provides the primary container of the child, and any other initial state that the child should receive, to the startup code. The startup code finally installs this initial state and starts to execute it. + +It is clear from this description that the child's existance is completely determined by the parent. + +## <a name="Canonical_Process_Destruction"> Canonical Process Destruction </a> + +Process destruction can be done either cooperatively, or forcibly. The +difference corresponds approximately to the difference between SIGTERM and +SIGKILL in [[Unix]]. To destroy a process cooperatively, a request message is +sent to a special capability implemented by the child process. The child can +then begin to tear down the program, and at some time send a request back to +the parent process to ask for forced process destruction. + +Forced process destruction can be done by the parent process without any cooperation by the child process. The parent process simply destroys the primary container of the child (this means that the parent process should retain the primary container capability). + +Because container destruction works recursively, forced process destruction works recursively as well. + +## <a name="Process_Hierarchy"> Process Hierarchy </a> + +From the above description it should be clear that containers and processes are organized in the same hierarchical tree structure, where every node corresponds to a process and its primary container, and every edge corresponds to a parent-child relationship. + +## <a name="Isolation"> Isolation </a> + +The ability to subdivide the container's resource reserves provides the ability to completely isolate sibling processes in the process hierarchy. By default, two processes, where neither is an ancestor of the other process, are completely isolated. Also, an ancestor is partially isolated from its child. To overcome this isolation, the two processes need the cooperation of at least all their respective ancestors up to the first common ancestor in the tree. An example should illustrate that: + + A + / \ + B C + / \ + D E + +In this picture, A is the direct parent of B and C, and C is the direct parent of D and E. A is a common ancestor of B, C, D and E. C is a comon ancestor of D and E. The isolation is by default complete between (B C), (B D), (B E), and (D E). There is partial isolation between (A B), (A C), (A D), (A E), (C D) and (C E). The isolation properties of A are, if it is a root node, defined by the initial configuration. + +If, for example, B and D should be able to communicate, the explicit or implicit permission needs to be provided by both A and C. + +## <a name="Confinement"> Confinement </a> + +Because of the recursive nature of the process hierarchy, and because the existance of a child is completely determined by its direct parent (which existance is completely determined by _its_ direct parent, etc), processes can be confined, and the confinement extends to all their child processes as well. + +In the above example, A confines B, C, D and E. C confined D and E. Thus, B and C are only confined by A, whereas D and E are confined by A and C. + +## <a name="Meaning_Of_Words_Such_As_Secure_"> Meaning Of Words Such As Secure, Want, External, etc </a> + +Because the existance of a child process is completely defined by its parent, its understanding of what is secure, what its needs are, what is "external" to itself and what is internal, etc, is completely defined by the parent as well. It therefore does not make sense to object to the above model by claiming that the child can not do what it wants to do, because what the child wants to do is completely defined by the parent, as are its abilities to do it. It also does not make sense to object that the child can not determine if a capability it got from the parent is safe to use, because it is the parent which defines for the child if a capability is safe to use or not. + +Any such objection has, at its root, some assumption that is different from the assumptions made in this model, and thus needs to be analysed and reasoned about outside of the model. + +## <a name="Identify_Operation"> Identify Operation </a> + +An branding operation exists which, at the micro-level, allows a server process to check if a certain capability is implemented by itself. The server can then provide an identify operation to its clients, which allow the clients to check with the server if a certain capability is implemented by it. The client can then refuse to use the capability if it is not authentic. + +## <a name="Applications"> Applications </a> + +I will now describe some common applications that need to be supported, and how they can be supported in the above system structure. To make this brief, I only include applications that have any significance in the confined+isolated discussion. There are other applications (pipes, daemonization, process management), which are important to discuss, but can be solved in identical ways in both types of system structures, so I am excluding them here. + +## <a name="System_Services"> System Services </a> + +[[Unix]]-style suid applications have been proposed as one application for +alternative process construction mechanisms. However, suid applications in +Unix are, from the perspective of the parent, not confined, only isolated. +Thus, they are readily replaced by a system service that is created by the +system software, and that runs as a sibling to any user process. Only the +ability to invoke the system service needs to be given to the user, not the +ability to instantiate it. + +In fact, no gain can derived from letting the user instantiate system services. In Unix, system services run on durable resources, which the user can not revoke. Thus, the system service needs to acquire its resources from a container that is not derived from the user's primary container. + +## <a name="Cut_amp_Paste"> Cut & Paste </a> + +In "[Design of the EROS Trusted Window System](http://www.eros-os.org/papers/usenix-sec2004.ps)", Shap et al describe a uni-directional communication mechanism that can be used for a cut&paste operation in a window manager, that is guaranteed to not allow backflow of information. The main challenge to do this is format conversion, which traditionally requires negotiation between the two parties. In the mechanism proposed, confined constructors are used to allow the sending party to provide format converters that can be used by the receiving party to convert into a format it understands. + +I think that in the context of a free software operating system, and considering the threat caused by proprietary document formats, it is fully sufficient and in fact appropriate for our needs to replace this mechanism with one in which the format converters are not provided as isolated programs, but where instead at least the binary image of the format converter is provided in read-only fasion to the receiver. + +Accepting this means, in practice, that in the proposed protocol, the format converter constructor capability can be replaced by the vector of capabilities, which must be transitive read-only, which is put into the constructor by the sending party before sealing. The sending party then can instantiate these programs itself. + +This alternative mechanism breaks with the principle of least authority, because it values other principles with a higher priority. + +## <a name="Suspicious_Collaboration"> Suspicious Collaboration </a> + +Two agents in the system can collaborate suspiciously by means of a third agent. In the process, they rely on the third agent to implement the common will. This third agent can even be a constructor-like service. The validity of the service can either be established by the abovely described "Identify" operation, or, in principle, if the underlying operating system exposes the functionality of a "trusted computing" component, the two agents can even get all the guarantees and restrictions imposed by such a component. There is nothing in the system structure above that can prevent this[1]. The changes needed in the underlying operating system are purely local changes with no effect on the overall system structure. + +[1] I should add here that my analysis is limited to technical constraints. There may be further legal constraints imposed by software licenses such as the upcoming GPL v3, which draft has an anti-DRM provision. + +I said earlier that this makes it hard for me to understand why it has been said that the above system structure constitutes a "ban" on this mechanism. I believe, without having inquired further, that the reason must be that the suspicious collaboration in the above sense is a contract with limited scope. Any information that is passed from the mediating agent to either of the two parties will subsequently not be controlled further. This is in fact always true. The only difference is what the scope of the mediating agent is. + +In "locked down" computer systems, the mediating agent has a scope that extends to all of the operating system. For example, the window manager would be part of the mediating agent, and conspire with other components to not allow some information displayed to be read out or modified. Or it could reduce the quality of the information if such a read out occurs (as is required by HDCP licenses, for example). In the danger of repeating myself here, the differences that surfaced in the discussion are probably rooted in the issue of scope. The scope problem is not visible under a microsope, but is only revealed as emergent behaviour by a macroscopic analysis of the resulting system. + +Thanks, Marcus diff --git a/hurd/ng/pathmax.mdwn b/hurd/ng/pathmax.mdwn new file mode 100644 index 00000000..1ea337e9 --- /dev/null +++ b/hurd/ng/pathmax.mdwn @@ -0,0 +1,3 @@ +TBD, see <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00038.html> and [Vulnerabilities in Synchronous IPC Designs](http://citeseer.ist.psu.edu/shapiro03vulnerabilities.html) + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/permissionbits.mdwn b/hurd/ng/permissionbits.mdwn new file mode 100644 index 00000000..eac00057 --- /dev/null +++ b/hurd/ng/permissionbits.mdwn @@ -0,0 +1,3 @@ +TBD, see: <http://lists.gnu.org/archive/html/l4-hurd/2006-04/msg00231.html> + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/philosophy.mdwn b/hurd/ng/philosophy.mdwn new file mode 100644 index 00000000..1f952017 --- /dev/null +++ b/hurd/ng/philosophy.mdwn @@ -0,0 +1,8 @@ +Markus Brinkmann made the effort to sketch precisely the principles that motivate his choices about the design of the new Hurd, and particularily those affecting user freedom. + +This effort has led to a text in two parts: + +* [[Part1OwnershipAndContracts]] ([[Part1OwnershipAndContractsAddendum]]) +* [[Part2SystemStructure]] + +See also further commentary made on the l4-hurd list: <http://lists.gnu.org/archive/html/l4-hurd/2006-08/msg00123.html> diff --git a/hurd/ng/position_paper.mdwn b/hurd/ng/position_paper.mdwn new file mode 100644 index 00000000..3240a41d --- /dev/null +++ b/hurd/ng/position_paper.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[NealWalfield]] and [[MarcusBrinkmann]] wrote a paper titled [*Improving +Usability via Access Decomposition and Policy +Refinement*](http://walfield.org/papers/20070104-walfield-access-decomposition-policy-refinement.pdf). +This is sometimes referred to as *the position paper*. diff --git a/hurd/ng/powerbox.mdwn b/hurd/ng/powerbox.mdwn new file mode 100644 index 00000000..412d16d3 --- /dev/null +++ b/hurd/ng/powerbox.mdwn @@ -0,0 +1,19 @@ +# <a name="The_Powerbox"> The Powerbox </a> + +## <a name="Rationale"> Rationale </a> + +In a [[CapabilityBasedMicrokernel]], an application might be used with the very minimal set of capabilities that is needed to execute it, that is read-only access to it's libraries and files, plus maybe access to a specific IP connection or configuration directory. + +Thus when the user asks to open or save a file, the dialog used to choose the file could also serve the purpose of granting the appropriate capabilities to the application. + +This dialog is named the powerbox. + +## <a name="Links"> Links </a> + +* [Plash powerbox](http://plash.beasts.org/powerbox.html) +* [E and Cap Desk](http://www.combex.com/tech/edesk.html) +* [Polaris: Toward Virus Safe Computing for Windows XP](http://www.hpl.hp.com/personal/Alan_Karp/polaris.pdf) +* [The E Language in a Walnut](http://www.skyhunter.com/marcs/ewalnut.html#SEC45) - search for "Powerbox Capability Manager" +* [The Darpa Browser](http://www.combex.com/papers/darpa-report/html/index.html) - see Appendix 5 + +-- [[Main/NowhereMan]] - 28 Apr 2006 diff --git a/hurd/ng/requirementsforuser.mdwn b/hurd/ng/requirementsforuser.mdwn new file mode 100644 index 00000000..d23221c3 --- /dev/null +++ b/hurd/ng/requirementsforuser.mdwn @@ -0,0 +1,59 @@ +Requirements for the user tell what a computer system should look like from a user's perspective. Here are three of such requirements: + +* Awareness +* Security +* Flexibility + +# <a name="Requirements"> Requirements </a> + +<a name="AwarenessRequirement"></a> + +## <a name="Awareness"> Awareness </a> + +The user must know what the operations are he can perform in the operating system. He must also know about their consequences and relevant side effects, and what the possible results are. At any point where the system can not make the right decision automatically, the user must have the ability to influence the path chosen. + +---- + +**Awareness means that the user knows what happens.** + +---- + +<a name="SecurityRequirement"></a> + +## <a name="Security"> Security </a> + +The user must be sure that his actions have predictable consequences, even in the presence of actively hostile influence. If there is a component in the system that the user can not control, the user must be able to contain its impact, either by simply ignoring it (shielding), or by imposing restrictions (confinement). + +---- + +**Security means that the user controls what can happen _to_ his resources.** + +---- + +<a name="FlexibilityRequirement"></a> + +## <a name="Flexibility"> Flexibility </a> + +The user must have a range of options available that support him to achieve an arbitrary but well-defined goal that can be stated within the legitimate resources the user controls. + +---- + +**Flexibility means that the user controls what can happen _with_ his resources.** + +---- + +# <a name="Relationships"> Relationships </a> + +For me, Awareness is a requirement for both, security and flexibility. The options that are presented to the user must be meaningful and clear to him. Otherwise, how is he in a position to make a decision where the system can't? This does not mean that the user must be aware of every detail that goes on, but he must be aware of the higher-level consequences of all actions (and non-actions) that he performs. + +I don't know about you, but everytime some dialog box in an application I use for the first time asks me if I want to babble-gabble the froob through the bibskadenga, I just click on the biggest of the buttons presented, or the one with the nicest color, and hope for the best. So, "Awareness" is just a basic usability requirement. + +Security ensures that the action the user can undertake never have so dramatic consequences that the user loses control over his session and associated resources, at least not without explicitely and consciously requesting it (note that Awareness is required here). + +A flexible system will not achieve these goals simply by restricting the users ability to perform his tasks. It will offer the broadest range of alternatives possible, without compromising the other goals. + +---- + +Adapted from: + +* <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00242.html> diff --git a/hurd/ng/resource_management_problems.mdwn b/hurd/ng/resource_management_problems.mdwn new file mode 100644 index 00000000..856afb1a --- /dev/null +++ b/hurd/ng/resource_management_problems.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +[[microkernel/Mach]] interfaces do not allow for proper resource accounting, +when a server allocates resources on behalf of a client. + +Mach can't do a good job at resource management, as it doesn't have enough +information how resources are used: which data is important and which is +discardable, for example. + +These issues are what Neal Walfield is working on with his new kernel +[[microkernel/viengoos]]. diff --git a/hurd/ng/setuidvsconstructor.mdwn b/hurd/ng/setuidvsconstructor.mdwn new file mode 100644 index 00000000..87cce8df --- /dev/null +++ b/hurd/ng/setuidvsconstructor.mdwn @@ -0,0 +1,6 @@ +TBD, see e.g.: + +* <http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00167.html> +* <http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00203.html> + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/sharedlibraries.mdwn b/hurd/ng/sharedlibraries.mdwn new file mode 100644 index 00000000..d4969420 --- /dev/null +++ b/hurd/ng/sharedlibraries.mdwn @@ -0,0 +1,3 @@ +TBD, see <http://lists.gnu.org/archive/html/l4-hurd/2005-12/msg00034.html> + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/systemstructure.mdwn b/hurd/ng/systemstructure.mdwn new file mode 100644 index 00000000..ef069edd --- /dev/null +++ b/hurd/ng/systemstructure.mdwn @@ -0,0 +1,3 @@ +TBD, see: <http://lists.gnu.org/archive/html/l4-hurd/2006-05/msg00324.html> +(thread). Also, note that this is derived from [[Philosophy]]. See the +interface spec and the [[position_paper]] as well. diff --git a/hurd/ng/thepolycastinterface.mdwn b/hurd/ng/thepolycastinterface.mdwn new file mode 100644 index 00000000..702364cf --- /dev/null +++ b/hurd/ng/thepolycastinterface.mdwn @@ -0,0 +1,52 @@ +# <a name="The_Polycast_Interface"> The Polycast Interface </a> + +## <a name="Introduction"> Introduction </a> + +In the current Hurd, all fs objects implement both directory and file methods. This means every program that accesses a file object has to decide whether to treat it as a file or a directory. This is no problem for programs that only know about files or directories, but there is a wide range of programs that understand both files and directories simultaneously (e.g. rm -R), and they are confused when they see objects that are files as well as directories. This causes erratic behaviour. For example, "grep \*" will search through the binary content of directories (because it treats them as files). + +Sometimes, the file and directory interface are refered to as \`\`facets'' of the object. + +## <a name="The_Problem"> The Problem </a> + +The problem is **much** worse than it might look like. Consider the case where one translator might reasonably implement two or more file interfaces, like a translator that simultaneously presents a .tar.bz2 file view, a .tar.gz file view and a directory view. Then you have a fundamental semantic issue: + +_A method call in isolation has no meaning. It can only be interpreted in the context of a particular interface._ + +## <a name="A_Solution"> A Solution </a> + +The solution is simple: whenever a method is invoked, the interface has to be known. This implies two things: a) we do not use multiple inheritance and b) support for some sort of \`\`casting'' is needed. For illustration, look at the inheritence graph for an object that provides both directory and file methods: + + file dir + \ / + dir_file + +This graph can be converted into one using only single inheritence: + + poly_type + \ / + file dir + +Where **poly\_type provides the methods get\_supported\_types() and get\_facet(type) for casting: get\_supported\_types returns a list of types which this object can be viewed as. get\_facet returns a new object with a new type, but the object is, at the server side, intimately related to the original object with the original type**. + +To give another example: the translator that provides .tar.bz2, .tar.gz and dir views would use the following inheritance graph: + + poly_type + / \ + file dir + / \ + tbz_file tgz_file + +tbz\_file and tgz\_file do not provide new methods, they exist only to distinct interfaces. + +## <a name="Usability_Considerations"> Usability Considerations </a> + +In order for the polycast interface to be useful, it has to work together with legacy applications (that are unaware of it). As either the [[PowerBox]] or the shell grant authority to applications, there can be some private agreement between the user and these components on how to express different interfaces of objects. For example foo:as\_dir could designate the directory facet of objecte foo. Also, different interfaces could be bound to different different names (either automatically or explicitely) + +---- + +see also: + +* <http://lists.gnu.org/archive/html/l4-hurd/2006-02/msg00002.html> +* <http://lists.gnu.org/archive/html/l4-hurd/2006-02/msg00003.html> + +-- [[TomBachmann]] - 30 Apr 2006 diff --git a/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn b/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn new file mode 100644 index 00000000..4eeef6ee --- /dev/null +++ b/hurd/ng/trivialconfinementvsconstructorvsfork.mdwn @@ -0,0 +1,78 @@ +# <a name="About_this_page"> About this page </a> + +This page compares trivial confinement, the constructor mechanism, and POSIX fork(). First there is a short description of the process, then there is a discussion about the differences. + +This comparison is about a simple situation: there is a parent process P, which wants to spawn a child process C. We assume that P holds capabilities A and B. The end result should be that C holds a copy of A, but not of B. + +# <a name="Trivial_Confinement"> Trivial Confinement </a> + +For trivial confinement, there is a system call to create a process from some memory pages. P performs the following steps: + +* Allocate some memory and put the code image of the child into that memory. This can be done by P, or for example by the file system which then gives the resulting memory (space bank) to P. +* Perform the system call on that memory. The result is a capability to C. +* Send A to C using the returned capability. + +Note that it is up to the implementation of the system what happens with P's access to the memory which holds the child. For example, it is probably a good idea if it is at least unmapped, so it cannot accidentily write things in it. It could even be revoked, so that it can't write things in it, even if it wants to. + +# <a name="Constructor"> Constructor </a> + +With the constructor mechanism, there are programs running on the system for the purpose of starting new programs. This means that the process is split in two steps. They need not be performed by the same party, in fact they often aren't. So there are two parents, P1 and P2. The first step: + +* P1 sends a message to the meta-constructor M (a constructor to create new constructors) sending it the code image for the child (and due to the limitation of this discussion, no initial capabilities). +* In respose, M creates a C-constructor and passes a capability to it to P1. + +The second step: + +* P2 somehow receives a copy of the capability to the C-constructor. +* P2 uses the capability to tell the C-constructor it should build a new process. It provides memory and processor time for the purpose. +* The C-constructor uses a method similar to Trivial Confinement to actually create C. It passes the capability C back to P2 as a reply to the capability invocation. +* P2 passes A throught the returned capability to C. + +This mechanism is targeted at a specific use pattern, namely that a process is created once, and then spawned many times. + +# <a name="POSIX_Fork"> </a> POSIX Fork + +POSIX fork, or rather fork+exec, is how things are done on many current systems. It may be insightful to see it included in the comparison, especially for people who are new to the subject. There are two system calls, fork and exec. Fork will create a clone of the current process, including all the capabilities (that is, file descriptors) of the parent (except the ones which have explicitly been excluded). Exec is a system call which really goes to the filesystem, not the kernel (although on systems which use it, the filesystem usually resides in the kernel), and asks it to spawn a new process from the contents of a certain path in place of the caller. This passes all capabilities to the new process. The procedure is: + +* P calls fork(), creating P'. +* P' drops B. +* P' calls exec(), turning P' into C. + +# <a name="Fork_vs_the_others"> Fork vs the others </a> + +Fork is bad. The following text should convince the reader that we do not want to use fork. If it fails to do so, please write your reply to <l4-hurd@gnuNOSPAM.org>. We can then improve this text, either by using better arguments, or by saying that fork is acceptable after all. :-) + +First of all, it must be clear that we are using a capability-based system. This offers a lot of security that POSIX doesn't have. The actual solution presented below doesn really work on POSIX, because C can simply reopen all the files. After all, it is running as the same user, with all the same rights, as P. This is not the case in a capability based system. Every process needs a capability to do things. The closest to the POSIX concept of a "user" is a bunch of capabilities to all objects that the user is allowed to handle. However, even if P has all those capabilities, that doesn't mean C does as well. So for example, if P doesn't give a capability to the user's home directory (and it probably will not do that indeed, but it'll give a private part instead which C can use for files), then C cannot get access to the files in there. And so in particular, if P has a capability to ~/.ssh/id\_dsa, and it doesn't give it to C, then C cannot simply call open and get the capability from there, because the file isn't in its file system. + +The big difference between fork and the other options is capability B. B is a private capability of P. P does not want it to be passed anywhere. In all cases this is achieved. However, fork needs to be explicit about this. If P (or actually P') forgets to drop B, everything will still work (C didn't use B anyway). However, if C contains a security bug and is taken over by a cracker, then that cracker has access to B. This means that due to a simple mistake, the concequences of a compromised C are bigger than they need to be. This problem is of course even bigger if C is untrusted code in the first place, because it doesn't even need to be "taken over" then, it may simply be malicious. + +In contrast, the other two options don't pass anything by default. If there is a similar mistake there, they would forget to pass A to C. That will soon be noticed, because C actually needs A (otherwise it shouldn't receive it). So C will fail to work. This will quickly be fixed, resulting in a better program. + +## <a name="Solving_the_problem"> Solving the problem </a> + +The problem of fork+exec can be solved. It is if the default would be to not pass capabilities to the new process, but specify a list of capabilities that it should keep, or (like in the other cases) pass them over a new channel which is implicitly created during the fork. However, in that case the only difference with trivial confinement is that P' dies in the process (and thus must be created to prevent P from dying). Almost any use of exec is in practice preceded by a fork for this purpose. It would be easier to make trivial confinement the default operation and let P die directly after it in the rare case that it should. + +The only reason for continuing to use fork+exec would be that it is what existing programs do. However, they break anyway if they need to specify which file descriptors to pass. So they need to be adapted. Therefore, it's better to make the usual spawning method the primitive one, and emulate the other. + +# <a name="Trivial_Confinement_vs_Construct"> Trivial Confinement vs Constructor </a> + +Note: the following has not been extensively discussed on the mailing list, and no consensus has been reached AFAIK. This is the personal opinion of Bas Wijnen. + +The difference between trivial confinement and the constructor is one of control. With trivial confinement, P is in full control of the process (and since P is under full control of its own parent, that parent also fully controls C, and the parent's parent as well, etc. Note that the chain of parents is usually short). For example, if P is a debugger, it could choose to put some breakpoints into C before starting it. With the constructor, this control lies with P1. However, P2 is likely the one who will want to use the debugger. The constructor is explicitly designed to allow this type of control by the programmer (or system administrator) over the user. + +In the Hurd we want to enable the user to do these sort of things. We specifically don't want the administrator to use such control. So we do not need to provide the means for it in our system. (Note that not using a constructor doesn't actually guarantee that this kind of control is impossible.) + +Except for the control, there is really only one other difference, and that's address space separation. The constructor puts the code for process spawning into its own address space. This means that it cannot be corrupted by broken programs. Extending this principle would mean that every library call should be turned into a server which performs the operation for you. This is however also what trivial confinement does to a large extent anyway. + +What it doesn't do is protect the code image against bugs in P. In the constructor the trusted and well-tested constructor code is handling the image, for trivial confinement the (very possibly) buggy program P. In particular, when starting a program from a file system, with trivial confinement the operation is: + +* Ask the file system for the code, receive a capability to a space bank with a copy (on write) of it. +* Make the system call to turn it into a program. + +Now this isn't much more complicated than the constructor which does: + +* Ask the filesystem (which the constructor is part of) to spawn a new process. + +Therefore I am not so convinced that we want a constructor. It gets in the way of debugging, for example, and it doesn't really give any gain. + +-- [[BasWijnen]] - 13 Jun 2006 diff --git a/hurd/ng/usecaseprivatekeys.mdwn b/hurd/ng/usecaseprivatekeys.mdwn new file mode 100644 index 00000000..3cb65af2 --- /dev/null +++ b/hurd/ng/usecaseprivatekeys.mdwn @@ -0,0 +1,17 @@ +_Private Keys_ as used by SSH servers, clients and generally by any cryptographic software need to be stored and manipulated securely. These may get replaced with smartcards soon, but in the mean time it appears to be an interesting use case. + +All [[Unix]] systems that I am aware of do not allow secrets to be protected in +a manner that I would feel is appropiate. A users compromised web browser +could either read your private key file or talk to the very popular ssh-agent +program and get your secrets out (not sure how popular distributions are +configured, but it can be done). + +The requirements so far are: + +* The secrets should not be available to general programs +* The ability to use secrets for their intended purpose (signing/encryption/decryption/ssl streams) +* Programs using decrypted data should be, by default, confined so that the data can't escape +* Must be able to backupand restore secrets securely +* Upgrading the agent software must be possible! using the backup/restore mechanism? + +-- [[Main/SamMason]] - 11 Jan 2007 diff --git a/hurd/ng/usecaseuserfilesystem.mdwn b/hurd/ng/usecaseuserfilesystem.mdwn new file mode 100644 index 00000000..4e4fdf35 --- /dev/null +++ b/hurd/ng/usecaseuserfilesystem.mdwn @@ -0,0 +1,14 @@ +### <a name="User_Loadable_Filesystems"> User Loadable Filesystems </a> + +These appear as _translators_ in the current Hurd and something similar needs to appear in the next hurd. + +* The user should be able to dynamically add and remove translators +* For some reason it seems appropiate to have seperate namespaces (VFS's) for each user (this is quite a departure from [[Unix]]. [[SamMason]]) +* translators can be used to expose the structure of an archive file +* translators can be provide access to remote file systems + +Anything else? + +Probably not something we want to worry about now; but I'm guessing that the semantics of the new kernel will be sufficently different from Mach that some rewriting of the existing translators will be needed. From a pragmatic point of view it would be _nice_ if there wasn't too much change. + +-- [[Main/SamMason]] - 11 Jan 2007 diff --git a/hurd/ng/whatisacapability.mdwn b/hurd/ng/whatisacapability.mdwn new file mode 100644 index 00000000..f3a42dd8 --- /dev/null +++ b/hurd/ng/whatisacapability.mdwn @@ -0,0 +1,3 @@ +TBD, see e.g.: <http://www.eros-os.org/essays/capintro.html> + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/ng/whatisaconstructor.mdwn b/hurd/ng/whatisaconstructor.mdwn new file mode 100644 index 00000000..583babe9 --- /dev/null +++ b/hurd/ng/whatisaconstructor.mdwn @@ -0,0 +1,6 @@ +TBD, see: + +* <http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00157.html> +* <http://lists.gnu.org/archive/html/l4-hurd/2006-05/msg00056.html> + +-- [[TomBachmann]] - 16 May 2006 diff --git a/hurd/ng/whatisaspacebank.mdwn b/hurd/ng/whatisaspacebank.mdwn new file mode 100644 index 00000000..607501db --- /dev/null +++ b/hurd/ng/whatisaspacebank.mdwn @@ -0,0 +1,3 @@ +TBD, see e.g. <http://eros-os.org/design-notes/SpaceBank.html> or <http://eros-os.org/papers/shap-thesis.ps> + +-- [[TomBachmann]] - 31 Aug 2006 diff --git a/hurd/ng/whatsinagroup.mdwn b/hurd/ng/whatsinagroup.mdwn new file mode 100644 index 00000000..219f4ed0 --- /dev/null +++ b/hurd/ng/whatsinagroup.mdwn @@ -0,0 +1,3 @@ +TBD, see <http://lists.gnu.org/archive/html/l4-hurd/2006-03/msg00001.html> + +-- [[TomBachmann]] - 20 Jun 2006 diff --git a/hurd/open_issues.mdwn b/hurd/open_issues.mdwn new file mode 100644 index 00000000..d7dc4d99 --- /dev/null +++ b/hurd/open_issues.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2008 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="Open Issues"]] + +This is a dumping ground for open issues for the GNU Hurd. + +[[inline +pages="hurd/open_issues/* and !*/discussion" +show=0 +actions=yes +rootpage="hurd/open_issues" postformtext="Add a new item titled:"]] diff --git a/hurd/open_issues/cvs_tasks_file.mdwn b/hurd/open_issues/cvs_tasks_file.mdwn new file mode 100644 index 00000000..9a053e33 --- /dev/null +++ b/hurd/open_issues/cvs_tasks_file.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008 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]]."]]"""]] + +The canonical [tasks +file](http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/hurd/hurd/tasks?rev=HEAD&content-type=text/plain) +from the CVS archive. diff --git a/hurd/open_issues/cvs_todo_file.mdwn b/hurd/open_issues/cvs_todo_file.mdwn new file mode 100644 index 00000000..958502e1 --- /dev/null +++ b/hurd/open_issues/cvs_todo_file.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008 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]]."]]"""]] + +The canonical [TODO +file](http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/hurd/hurd/TODO?rev=HEAD&content-type=text/plain) +from the CVS archive. diff --git a/hurd/open_issues/gdb_non-stop_mode.mdwn b/hurd/open_issues/gdb_non-stop_mode.mdwn new file mode 100644 index 00000000..c302251f --- /dev/null +++ b/hurd/open_issues/gdb_non-stop_mode.mdwn @@ -0,0 +1,21 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +GNU GDB's `gnu-nat.c` doesn't support *non-stop* mode. + +Also, from <http://lists.gnu.org/archive/html/bug-hurd/2008-10/msg00045.html>, +GNU GDB's Pedro Alves: + +> I also notice that when going through the shell in non-stop mode, it would be +> more correct to resume all threads --- we don't want non-stop and its +> scheduler-locking to apply to the shell. Basically, non-stop should be off +> if there are pending execs. This was an existing issue, and doesn't affect +> linux today, so I'll just ignore that for now, as it needs more tweaking to +> fix. diff --git a/hurd/open_issues/gdb_pending_execs.mdwn b/hurd/open_issues/gdb_pending_execs.mdwn new file mode 100644 index 00000000..e9d5c6d2 --- /dev/null +++ b/hurd/open_issues/gdb_pending_execs.mdwn @@ -0,0 +1,23 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +<http://lists.gnu.org/archive/html/bug-hurd/2008-10/msg00045.html>: + +GNU GDB's Ulrich Weigand: + +> Hmm. It would appear that "set exec-wrapper" is currently broken with +> the gnu-nat.c target, right? + +GNU GDB's Pedro Alves: + +>> Yeah, it appears so. Don't know if it's possible to get rid of the local +>> pending execs handling in gnu-nat.c. An alternative would be to make +>> pending_execs a property of inferior.h:`struct inferior' instead of of +>> gnu-nat.c:`struct inf'. diff --git a/hurd/open_issues/gdb_thread_ids.mdwn b/hurd/open_issues/gdb_thread_ids.mdwn new file mode 100644 index 00000000..df4b7bbc --- /dev/null +++ b/hurd/open_issues/gdb_thread_ids.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +GNU GDB's Pedro Alves: + +> One thing [I asked +> myself](http://lists.gnu.org/archive/html/bug-hurd/2008-10/msg00045.html) +> was, if gnu-nat.c couldn't be using the port's id as thread ids instead of a +> locally auto-generated number. Maybe the thread id of the main thread would +> be preserved across execs this way diff --git a/hurd/open_issues/libfshelp_in_hurdlibs.mdwn b/hurd/open_issues/libfshelp_in_hurdlibs.mdwn new file mode 100644 index 00000000..7717cef8 --- /dev/null +++ b/hurd/open_issues/libfshelp_in_hurdlibs.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +[[libtrivfs]] seems to use [[libfshelp]], but doesn't have it listed in +`HURDLIBS`. Should change that? Same for [[libnetfs]] and [[libdiskfs]]? diff --git a/hurd/open_issues/some_todo_list.mdwn b/hurd/open_issues/some_todo_list.mdwn new file mode 100644 index 00000000..d9aab4d1 --- /dev/null +++ b/hurd/open_issues/some_todo_list.mdwn @@ -0,0 +1,119 @@ +[[meta copyright="Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008 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]]."]]"""]] + +This todo is primarily targetted at the Hurd proper +and applications that rely on the Hurd interfaces. + +* psmisc + +The tools provided by the psmisc package are linux centric. Killall and pstree, for instance, require Linux's proc file system but could just as easily use Hurd's libps. + +* tmpfs +* ppp +* unionfs/stowfs +* supermount translator + +Related: [[KnownHurdLimits]] + +From Marcus, 2002: + +* xkb driver for console (for international users) +* kbd leds in console (well, in general, Roland's new driver in oskit for that crap) +* fixing fakeroot (it's buggy) +* fixing tmpfs (it's buggy, Neal says it's Mach's fault) +* adding posix shared memory (requires the io\_close call to be implemented) +* adding posix file locking (requires the io\_close call to be implemented) +* testing + * find + various filesystems (are inode numbers for . and .. sane?) + * ext2fs with other block sizes than 4096 + * --help and --version and --usage in all programs + * I have seen ^V in some --help output, might be argp bug + * Verify that all options are documented clearly, and that no unimplemented options appear + * Is the short and long description in the help output correct? + * Is the return value of all programs correct (eg, does main() return a sane value) + * Is the suid bit correctly set for all installed programs? + * Translators + * Does settrans -g work? -fg? + * Does fsysopts work? Does setting options with fsysopts work? + * Does stat() work on all translated nodes and give proper data? + * What about chown, chmod (some translators should pass this through to the underlying node, esp in /dev!) + * Does statfs give correct data? + * Are all inode numbers and link counts correct? +* We also should have a "make check" test suite. We can add this once Jeff finished his automake patches +* pick up the other things + * pthread, definitely. Now that we are so close + * new console is basically done + * needs integration of course + * X switching support +* there is certainly more to do ... + +Wolfgang list of [Easy tasks](http://mail.gnu.org/pipermail/help-hurd/2002-July/006413.html) on July 28, 2002: + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Difficulty</strong></th> + <th bgcolor="#99CCCC"><strong>Task</strong></th> + </tr> + <tr> + <td> 0 </td> + <td> Check if all programs handle options (at least --help, --version and --usage; don't forget about the shell scripts) </td> + </tr> + <tr> + <td> 1 </td> + <td> Check if all translators handle fsysopts </td> + </tr> + <tr> + <td> 1 </td> + <td> Check if all translators respond to "settrans -g" </td> + </tr> + <tr> + <td> 1 </td> + <td> More tests of this kind </td> + </tr> + <tr> + <td> 2 </td> + <td> Fix those of the above who don't work as intended </td> + </tr> + <tr> + <td> 2 </td> + <td> Document (in doc/hurd.texi) all undocumented programs (translators as well as programs in utils/ and sutils/ and some others) </td> + </tr> + <tr> + <td> 1 </td> + <td> Find a POSIX test suite, run it on GNU/Hurd, report the results </td> + </tr> + <tr> + <td> 1 </td> + <td> Find more useful test suites to run </td> + </tr> + <tr> + <td> 3 </td> + <td> Update INSTALL-cross </td> + </tr> + <tr> + <td> 2 </td> + <td> Check if all the store classes in libstore work (we have many of them, look into the Makefile) </td> + </tr> + <tr> + <td> 4 </td> + <td> Fix those who don't work </td> + </tr> + <tr> + <td> 2 </td> + <td> Document all still undocumented store classes </td> + </tr> + <tr> + <td> 2 </td> + <td> The console is pretty new code, it told me it wants to get tested </td> + </tr> +</table> + +Where difficulty 0 means trivial and 4 means tricky; the difficulty has nothing to do with the importance. diff --git a/hurd/open_issues/wrong_reply_message_id.mdwn b/hurd/open_issues/wrong_reply_message_id.mdwn new file mode 100644 index 00000000..d9db996c --- /dev/null +++ b/hurd/open_issues/wrong_reply_message_id.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + <tschwinge> # settrans -P -a /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.10.61 -g 192.168.10.1 -m 255.255.255.0 + <tschwinge> Translator pid: 2289 + <tschwinge> Pausing... + <tschwinge> pfinet: /build/buildd/hurd-20080607/build-tree/hurd/libports/create-internal.c:115: _ports_create_port_internal: Unexpected error: (ipc/mig) wrong reply message ID. + <neal> it would be nice to print out the id when those sorts of errors occur. diff --git a/hurd/running.mdwn b/hurd/running.mdwn new file mode 100644 index 00000000..162bc9ea --- /dev/null +++ b/hurd/running.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +* [[Distrib]] - Distributions based on the Hurd +* [[microkernel/mach/gnumach/ports/Xen]] - In Xen +* [[Live_CD]] +* [[QEMU]] - In QEMU +* [[vmware]] (**non-free!**) +* [[FlashHurd]] - From a flash stick + +* [[Public_hurd_boxen]] diff --git a/hurd/running/bee.mdwn b/hurd/running/bee.mdwn new file mode 100644 index 00000000..f5eb132c --- /dev/null +++ b/hurd/running/bee.mdwn @@ -0,0 +1,6 @@ +[Bee GNU/Hurd](http://bee.es.gnu.org/) + +Castellano distribution, pkgsrc package based. [[BochsEmulator]] image +available too. They have their own +[wiki](http://es.gnu.org/cgi-bin/beewiki.pl?Wiki_Bee_GNU) and a [mailing +list](http://bee.es.gnu.org/?p=mail&l=en) (no archive). diff --git a/hurd/running/creating_image_tarball.mdwn b/hurd/running/creating_image_tarball.mdwn new file mode 100644 index 00000000..2938c79a --- /dev/null +++ b/hurd/running/creating_image_tarball.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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 redir=debian/creating_image_tarball]] diff --git a/hurd/running/debian.mdwn b/hurd/running/debian.mdwn new file mode 100644 index 00000000..f291b75b --- /dev/null +++ b/hurd/running/debian.mdwn @@ -0,0 +1,18 @@ +[[meta title="Debian GNU/Hurd"]] + +[[img logo.png]] + +- Debian [[FAQ]] -- Frequently Asked Questions +- [[After_install]] -- Do this to get networking, new console and X +- [Presentation](http://people.debian.org/~mbanck/talks/hurd_lt2004/html/) + *Debian GNU/Hurd* by [[MichaelBanck]], LinuxTag 2004 Karlsruhe +- [[Status]] +- [[Porting]] -- Helping with porting packages + * [[Patch_submission]] -- How to submit patches for build failures + +- Official page about the Debian GNU/Hurd port: [Debian GNU/Hurd](http://www.debian.org/ports/hurd/) +- [Installation Instructions](http://www.debian.org/ports/hurd/hurd-install) + - [Upgrading K11 or K14 based systems to + unstable](http://lists.debian.org/debian-hurd/2007/09/msg00007.html) +- [Archive Qualification](http://wiki.debian.org/ArchiveQualification/hurd-i386) +- [[Creating_image_tarball]] diff --git a/hurd/running/debian/BtsFiling.mdwn b/hurd/running/debian/BtsFiling.mdwn new file mode 100644 index 00000000..90f451a8 --- /dev/null +++ b/hurd/running/debian/BtsFiling.mdwn @@ -0,0 +1,52 @@ +When you encounter any GNU/Hurd related bugs in a Debian package you can fix, please use the Debian BTS (Bug Tracking System) to report them. + +Managing Debian packages and using the BTS is quite simple. If you're new to Debian, here's a short guide: + +* first of all, check [http://bugs.debian.org/<package>](http://bugs.debian.org) to ensure the problem is not in the BTS already. This is possible for packages and bug numbers. [[TWiki/InterWikis]] is a shorthand way of linking to bugs and packages from this site. i.e. [[DebianBug]]:hurd [[DebianPackage]]:oskit +* you can fetch package sources with: + + apt-get source <package> + +note: this should unpack already + +* and unpack with: + + dpkg-source -x <package>x-y_z.dsc + +* then get all dependencies: + + apt-get -y build-dep <package> + +note: if some dependencies are missing, it most probably means you have to port them first. follow this instructions recursively until done + + :) + +* Debian packages have a makefile in debian/rules, with (at least) the following targets: <dl> + <dt> build</dt> + <dd> Yup, to build </dd> + <dt> binary</dt> + <dd> Generates deb files in <code>../</code></dd> + <dt> clean</dt> + <dd> Full clean </dd> +</dl> + +* when you have a patch, send it to the BTS using the reportbug utility (or manually as explained in <http://bugs.debian.org/)>. The following parameters should be used: + + Severity: important (when the package is unbuildable or uninstallable, lower otherwise.) + Tags: sid, patch + +* be nice to the maintainers. most are friendly and cooperative, and a few could annoy you for months before applying. Be patient. + +Read <http://bugs.debian.org/> for extensive documentation on the BTS. + +-- [[Main/RobertMillan]] - 10 Jun 2002 + +---- + +Wikification & small changes. + +-- [[Main/JoachimNilsson]] - 24 Jun 2002 + +Updates with the new [[TWiki/InterWikis]] rules. + +-- [[Main/GrantBow]] - 15 Jan 2003 diff --git a/hurd/running/debian/CDNotesHome.mdwn b/hurd/running/debian/CDNotesHome.mdwn new file mode 100644 index 00000000..a154415b --- /dev/null +++ b/hurd/running/debian/CDNotesHome.mdwn @@ -0,0 +1,7 @@ +Charles, here's a place for you! As usual, you can find [more information here](http://www.debian.org/ports/hurd/hurd-cd). Past notes may be of help as well. + +---- + +It seems the building of the CDs is being passed to the University of Calicut. [Re: latest ISO images](http://lists.debian.org/debian-hurd/2007/07/msg00095.html) K 14 is the latest stable, L1 is the development version. + +-- [[Main/GrantBow]] - 24 Jul 2007 diff --git a/hurd/running/debian/CrossInstall.mdwn b/hurd/running/debian/CrossInstall.mdwn new file mode 100644 index 00000000..9a07424e --- /dev/null +++ b/hurd/running/debian/CrossInstall.mdwn @@ -0,0 +1,76 @@ +## <a name="Easy_install_with_CrossHurd"> Easy install with CrossHurd </a> + +Qurious about the Hurd? Have a 1-5 GiB partition free? Let's install GNU/Hurd on it! + +### <a name="Preparing_the_partition"> Preparing the partition </a> + +We'll assume you have a partition ready, for the sake of argument we use an example here: /dev/hda3 is the Hurd partition (type: Linux) and /dev/hda4 is the Linux swap that we'll reuse. + +First we create the Ext2 filesystem, notice the `hurd` option. + + # mke2fs -o hurd /dev/DEVICE + +Next we create a useful mountpoint and mount the partition. + + # mkdir /gnu + # mount /dev/hda3 /gnu + +### <a name="Retrieving_CrossHurd"> Retrieving CrossHurd </a> + +Unless you don't run Debian GNU/Linux download it from <http://packages.debian.org/crosshurd>, or simply apt-get the package from Testing or Unstable. + + # apt-get install crosshurd + +### <a name="Cross_installing"> Cross installing </a> + +The crosshurd package only operates in the given target directory, which is the first question asked when running the program. + + # cd /gnu + # crosshurd + +Answer the questions you get: $ What is the target directory?: `/gnu` $ Target Debian system?: gnu $ Target CPU?: i386 + +Now the program starts retrieving all the necessary base packages. + +### <a name="Preparing_to_reboot"> Preparing to reboot </a> + +When all packages have been extracted we must prepare [[GrubNotes]] for the Hurd when we reboot. Add the below entry to your `/boot/grub/menu.lst` file to boot the Hurd in single user mode (-s). Single user mode is needed only for the two reboots when running the Native Install. + + title GNU (kernel GNUmach 1.3) + root (hd0,2) + kernel /boot/gnumach.gz root=device:hd0s3 -s + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +**_Nota Bene:_** In your menu file there should be no extra white space after the back slashes. + +### <a name="Native_install"> Native install </a> + +Ah, reboot and select "GNU (kernel GNUmach 1.3)" from the Grub menu. At the prompt, setup TERM and run the native-install script. + + # export TERM=mach + # ./native-install + +When done the native install requests that you reboot once again and rerun native-install. This time you will be asked a lot of questions, see the [[Hurd/InstallNotes]] for details. + + # reboot + ... + # export TERM=mach + # ./native-install + +Done, continue setting up your system, see the [[Hurd/InstallNotes]] for more help. + +-- [[Main/JoachimNilsson]] - 22 Mar 2005 + +---- + +Jeff Bailey has set up a system where you can install a Hurd system without having to use CDs. It's another type of cross-installation method which uses Debian package management tools to get the packages required as opposed to the one single big tarball. + +As of 2005-03-22, the latest version of crosshurd is 1.7.11. It can be found at <http://packages.debian.org/crosshurd>. + +-- [[Main/PeterMelville]] - 12 Jun 2004 diff --git a/hurd/running/debian/DebianAptOffline.mdwn b/hurd/running/debian/DebianAptOffline.mdwn new file mode 100644 index 00000000..b8dc3cac --- /dev/null +++ b/hurd/running/debian/DebianAptOffline.mdwn @@ -0,0 +1,62 @@ +[[meta copyright="Copyright © 2005, 2007, 2008 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]]."]]"""]] + +# How to Installing Packages without a Network Connection from your Hurd Installation + +This procedure is based on that found in +`/usr/share/doc/apt-doc/offline.text.gz` (Debian package `apt-doc`). + +This requires having apt installed on the Host operating system. + +Put a copy of [apt.conf.offline](DebianAptOffline/apt.conf.offline) +into your Debian GNU/Hurd installations /etc/apt/ directory. + +## If you _can_ mount your Debian GNU/Hurd partition from another OS, which can connect to the Internet + +As root on the internet connected OS: + + # mount /dev/DEBIAN_GNU_HURD_PARTITON /mnt + # cd /mnt + # apt-get -c etc/apt/apt.conf.offline {update, upgrade, install foo, etc.} + +Then, reboot into your Debian GNU/Hurd installation and as root, run: + + # apt-get {update, upgrade, install foo, etc.} + +## If you _cannot_ mount your Debian GNU/Hurd partition under another OS. + +From your Debian GNU/Hurd installation run, as the root user: + + # tar cf myhurdsconf.tar /etc/apt/{apt.conf.offline,sources.list} /var/lib/dpkg/status + +Copy _myhurdsconf.tar_ to the remote system. + +This copies your apt configuration and the status of your system +(what packages are installed, which versions, etc.) + +From the remote sytem, as any user, run: + + $ mkdir myhurd + $ cd myhurd + $ tar -xf myhurdsconf.tar + $ mkdir -p var/lib/apt/lists/partial var/cache/apt/archives/partial tmp + $ apt-get -c etc/apt/apt.conf.offline {update, upgrade, install foo, etc.} + $ tar cf myhurdsconf.tar etc/apt/{apt.conf.offline,sources.list} var/ + +Copy _myhurdsconf.tar_ back to your Debian GNU/Hurd system. + +Finally, from your Debian GNU/Hurd installation as the root user: + + # mkdir tmp + # cd tmp + # tar -xf myhurdsconf.tar + # mv var/cache/apt/archives/*.deb /var/cache/apt/archives/ + # mv var/lib/apt/lists/*_* /var/lib/apt/lists/ + # apt-get {update, upgrade, install foo, etc.} diff --git a/hurd/running/debian/DebianAptOffline/apt.conf.offline b/hurd/running/debian/DebianAptOffline/apt.conf.offline new file mode 100644 index 00000000..59aed564 --- /dev/null +++ b/hurd/running/debian/DebianAptOffline/apt.conf.offline @@ -0,0 +1,23 @@ + APT + { + /* This is not necessary if the two machines are the same arch, it tells + the remote APT what architecture the Debian machine is */ + Architecture "hurd-i386"; + + Get::Download-Only "true"; + }; + + Dir + { + /* Use the disc for state information and redirect the status file from + the /var/lib/dpkg default */ + State "./var/lib/apt"; + State::status "./var/lib/dpkg/status"; + + // Binary caches will be stored locally + Cache::archives "./var/cache/apt/archives/"; + Cache "./tmp/"; + + // Location of the source list. + Etc "./etc/apt/"; + }; diff --git a/hurd/running/debian/DebianDpkgArchitecture.mdwn b/hurd/running/debian/DebianDpkgArchitecture.mdwn new file mode 100644 index 00000000..c768ff4e --- /dev/null +++ b/hurd/running/debian/DebianDpkgArchitecture.mdwn @@ -0,0 +1,27 @@ +The output of dpkg-archicture on Debian's hurd-i386 port: + +DEB\_BUILD\_ARCH=hurd-i386 + +DEB\_BUILD\_ARCH\_OS=hurd + +DEB\_BUILD\_ARCH\_CPU=i386 + +DEB\_BUILD\_GNU\_CPU=i486 + +DEB\_BUILD\_GNU\_SYSTEM=gnu + +DEB\_BUILD\_GNU\_TYPE=i486-gnu + +DEB\_HOST\_ARCH=hurd-i386 + +DEB\_HOST\_ARCH\_OS=hurd + +DEB\_HOST\_ARCH\_CPU=i386 + +DEB\_HOST\_GNU\_CPU=i486 + +DEB\_HOST\_GNU\_SYSTEM=gnu + +DEB\_HOST\_GNU\_TYPE=i486-gnu + +-- [[Main/MichaelBanck]] - 14 Jan 2006 diff --git a/hurd/running/debian/DebianIntegrationDeveloper.mdwn b/hurd/running/debian/DebianIntegrationDeveloper.mdwn new file mode 100644 index 00000000..8b34cb7b --- /dev/null +++ b/hurd/running/debian/DebianIntegrationDeveloper.mdwn @@ -0,0 +1,15 @@ +Currently, the [Debian](http://www.debian.org) Project consists of two distinct classes of people - Users and Developers. There is a [Quality Assurance](http://qa.debian.org) group that exists to try to help bridge this gap, however it is not as strong as some people would like it to be. In many ways, a DID is another name for what Debian currently classifies as QA. + +A Debian Integration Developer (DID) is a middle-person, someone to assist users and developers. From a [user](http://www.debian.org/support) perspective they answer, categorize and enhance bug reports with patches or Policy suggestions and generally help with user-level integration of multiple Debian software packages as installed. From a [developer](http://www.debian.org/devel/) perspective they update Debian specific package defaults and configuration systems. Upon reflection, this is also a group of folks that can be described as containing both Developer status (maintaining one package) and those who do not feel comfortable classifying themselves as developers. These groups share common goals. + +Besides these two perspectives, there is also a range of tasks that fall into the domain of "[Quality Assurance](http://qa.debian.org)." Tasks necessary to perform on a range of individual packages such as Policy compliance checking, debconf use, /etc/alternatives and similar debian configuration mechanisms that integrate. The Work Needed and Prospective Packages system is an important function. Questions are sometimes raised regarding the diligence or MIA status of developers, in a way, ensuring the overall quality of the debian operational infrastructure. Gathering feedback from users and developers regarding enhancements and changes to these systems. Helping to Integrate the various infrastructure groups when responding to the environment in which Debian resides in is raising the quality of the organization. Many of the tasks that exist in this grey area can be accomplished by non-packaging maintaining users if they understand how Debian and package maintenance works. + +The more I write and think about this area, the more clearly the concept of idealistic leadership is brought to mind. Yet keys to the success of Debian can be directly attributed to the lack of a centralized organizational structure and a strong set of negotiated policies. + +Software dependencies can be very complex. There is often a need for a semi-knowledgable developer (DID or QA) to understand how things work best in a coordinated manner, how best to Integrate. This is also a natural path from which to recruit new package maintainers if assistance is provided along the way. Another separate group that subscribe to a [mail list](http://lists.debian.org) and perform this extremely valuable service is [Debian-Mentors](http://lists.debian.org/debian-mentors/). + +Recognition for the significance of contribution is one reason to give this group of helpful people more courage and identity in helping the Debian project in a clearly defined and less daunting a way. The [devel](http://www.debian.org/devel) page has relevant links. There is a page describing [how you can help](http://www.debian.org/devel/join/), but (indicating the mentality) it's simply a link to the same page as the first step in the [new maintainer process](http://www.debian.org/devel/join/). Behind this first page is the real [new maintainer page](http://www.debian.org/devel/join/newmaint). There's also a [TODO list](http://www.debian.org/devel/todo/) but it's very very broad. + +Perhaps a little bit of this resides in all members of the Debian community and is an important ingredient to the project's overall success. This may be because the developers are in fact, also the users. This can be extremely demanding for new users of Debian. It does take time to come up to speed with what Debian is about, [who participates](http://www.debian.org/intro/organization) to keep it running as it does and what processes exist. The Bug Tracking System's [pseudo-package list](http://www.debian.org/Bugs/pseudo-packages) may give great insight into some processes. + +-- [[Main/GrantBow]] - 25 Feb 2004 diff --git a/hurd/running/debian/DebianPackages.mdwn b/hurd/running/debian/DebianPackages.mdwn new file mode 100644 index 00000000..7e09dce0 --- /dev/null +++ b/hurd/running/debian/DebianPackages.mdwn @@ -0,0 +1,43 @@ +There are many different systems related to Debian that are related to the efforts. Some of these target information to/from upstream developers, some to end users. Here are some useful links. + +<dl> + <dt><a href="http://qa.debian.org/developer.php" target="_top">Developer Packages Overview</a></dt> + <dd> new system! </dd> +</dl> + +<dl> + <dt><a href="http://bugs.debian.org" target="_top">Bug Tracking System</a></dt> + <dd> also see [[Distrib/BtsFiling]], use a URL like <nop>http://bugs.debian.org/<em>bug-number</em> or <nop>DebianBug:<em>number</em> in a topic using the [[TWiki/InterWikis]] format. </nop></nop></dd> +</dl> + +<dl> + <dt><a href="http://packages.debian.org" target="_top">Package lookup</a></dt> + <dd> also use a URL like <nop>http://packages.debian.org/<em>package-name</em> or <nop>DebianPackage:<em>name</em> in a topic. </nop></nop></dd> +</dl> + +<dl> + <dt><a href="http://packages.qa.debian.org" target="_top">Package Tracking System</a></dt> + <dd><nop>PTS:<em>name</em> in a topic. Email based tracking system to get notices of all package activity - used for packages that highly interest you. This is a new system for Debian and was recently <a href="http://lists.debian.org/debian-devel-announce/2002/debian-devel-announce-200201/msg00011.html" target="_top">announced</a>. </nop></dd> +</dl> + +<dl> + <dt><a href="http://www.debian.gr.jp/~kitame/maint.cgi" target="_top">Package &amp; Maintainer lookup</a></dt> + <dd> from Takuo Kitame </dd> +</dl> + +<dl> + <dt><a href="http://buildd.debian.org/" target="_top">Buildd System</a></dt> + <dd> system to compile and upload binary packages from source automatically. </dd> +</dl> + +<dl> + <dt><a href="http://db.debian.org/" target="_top">Maintainer LDAP</a></dt> + <dd> LDAP directory with the information of Debian developers. </dd> +</dl> + +<dl> + <dt><a href="http://ftp-master.debian.org/testing/update_excuses.html" target="_top">testing "update excuses"</a></dt> + <dd> not needed for Hurd yet. </dd> +</dl> + +-- [[Main/GrantBow]] - 15 Jan 2003 diff --git a/hurd/running/debian/DebianTranslatorPolicy.mdwn b/hurd/running/debian/DebianTranslatorPolicy.mdwn new file mode 100644 index 00000000..7092a761 --- /dev/null +++ b/hurd/running/debian/DebianTranslatorPolicy.mdwn @@ -0,0 +1,40 @@ +**_This page describes the Debian packaging policy for translators._** + +## <a name="Package_Naming_Scheme"> Package Naming Scheme </a> + +Candidates for package naming schemes (_foofs_ is a filesystem based translator, e.g. _tarfs_, _bar_ is a node based translator, e.g. _random_): + +* _foofs-translator_, _bar-translator_ [current favourite] + +* _foofs_, _bar_ [this will make searching somewhat more of a hassle and may easily conflict with already used package names] + +* _foofs-trans_, _bar-trans_ + +* _hurd-translator-foofs_, _hurd-translator-bar_ + +Do we need to destinguish between file system and node based translators? + +Source packages should be called whatever the tarball/cvs module says. + +## <a name="Where_to_Put_Files"> Where to Put Files </a> + +The translators should go into _/hurd_. + +## <a name="What_about_setting_passive_trans"> What about setting passive translators in _/servers_ or _/dev_? </a> + +The idea is that the package should set passive translators in its _postinst_ instructions. + +There may, however, be difficulties with that: it's perfectly valid to have two different _random_ translator packages installed (they won't conflict with each other as long as their file names don't clash), but which one should sit on _/dev/random_ and _/dev/urandom_? Debian's _alternatives system_ doesn't help here, because the translators may need different command line arguments. + +One idea is to have the _postinst_ instructions set the passive translator if there isn't already one set on the relevant node(s). + +## <a name="Short_Long_Description_Guideline"> Short/Long Description Guidelines </a> + + [packagename]: Foo translator for [doing bar]. + Foo is a GNU/Hurd translator which does [bar]. + +## <a name="Miscellaneous"> Miscellaneous </a> + +There could / should be a meta package (or even more than one) that just depends e.g. on all installable translators, so that they'll conveniently find their way into the system by just installing that meta package. + +-- [[Main/MichaelBanck]] - 10 Mar 2006 diff --git a/hurd/running/debian/GNUDebianBuildProcess.mdwn b/hurd/running/debian/GNUDebianBuildProcess.mdwn new file mode 100644 index 00000000..55a9c6aa --- /dev/null +++ b/hurd/running/debian/GNUDebianBuildProcess.mdwn @@ -0,0 +1,133 @@ +components, required and somewhat related - BEFORE you have .debs + +### <a name="Software_States"> Software States </a> + +see [Debian Policy Manual](http://www.debian.org/doc/debian-policy/). + +* Upstream source +* Debian Source Package + * Build-depends +* Debian Binary Package + * Essential - boolean, default is no/unset, see Policy [ref](http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Essential) + * Architecture - policy [ref](http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Architecture) + * Section (main, contrib, non-free, non-US/main, non-US/contrib, non-US/non-free) + * updates, security + * Subsection (admin, base, comm, contrib, devel, doc, editors, electronics, embedded, games, gnome graphics, hamradio, interpreters, kde, libs, libdevel, mail, math, misc, net, news, non-US, non-free, oldlibs, otherosfs, perl, python science, shells, sound, tex, text, utils, web, x11) + * Priority (required, important, standard, optional, extra) policy [ref](http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities) + * a particular set of packages is called the [Base System](http://www.debian.org/doc/debian-policy/ch-binary.html#s3.7) +* Source and binary package upload example from [new maintainers guide](http://www.debian.org/doc/maint-guide/ch-build.en.html) + * gentoo\_0.9.12.orig.tar.gz + * gentoo\_0.9.12-1.dsc + * gentoo\_0.9.12-1.diff.gz + * gentoo\_0.9.12-1\_i386.deb + * gentoo\_0.9.12-1\_i386.changes + +### <a name="Groups"> Groups </a> + +* software author(s) +* Debian Package Maintainers, Co-Maintainers & uploaders +* ftp-masters +* buildd admins - It seems the two primary buildd admins are Ryan Murray and James Troup. +* QA +* bug-filers +* porters for supported platforms (i386, m69k, sparc, alpha, powerpc, arm, mips, mipsel, hppa, ia64, s390) +* porters for unreleased platforms (amd64, sh) +* porters of non-linux platforms (hurd-i386, netbsd-i386, netbsd-alpha, freebsd-i386) +* International translation providers +* system administrators +* users + +### <a name="Build_Debian_Archive_amp_Debian_"> Build, Debian Archive & Debian Systems Software </a> + +* wanna-build available in the buildd [CVS](http://m68k.debian.org/buildd/getting.html) +* buildd [CVS](http://m68k.debian.org/buildd/getting.html), [statistics](http://buildd.debian.org/stats/) +* [quinn-diff](http://buildd.debian.org/quinn-diff/) with anon-CVS + * July 2002 (samosa.sh ?) hurd output [http://buildd.debian.org/quinn-diff/output/unstable/by\_priority-hurd-i386.txt](http://buildd.debian.org/quinn-diff/output/unstable/by_priority-hurd-i386.txt) + * email [reference](http://lists.debian.org/debian-hurd/2000/debian-hurd-200012/msg00168.html) +* [katie](http://ftp-master.debian.org) (was dinstall), ftp-master + * update-excuses [output](http://ftp-master.debian.org/testing/update_excuses.html) +* andrea, see wanna-build for source (no longer at <http://buildd.debian.org/andrea/> ) +* [madison](http://www.debian.org/doc/developers-reference/ch-resources.en.html#s-madison) from developer's reference +* [fakeroot](http://packages.qa.debian.org/fakeroot) +* [sbuild](http://packages.qa.debian.org/sbuild) +* [pbuilder](http://packages.qa.debian.org/pbuilder) +* turtle [reference](http://lists.debian.org/debian-hurd/2001/debian-hurd-200103/msg00328.html) +* [Package Tracking System](http://lists.debian.org/debian-devel-announce/2002/debian-devel-announce-200201/msg00011.html) (PTS) +* [Bug Tracking System](http://bugs.debian.org) (BTS) + * Release Critical mailing to <debian-devel-announce@lists.debianNOSPAM.org> +* [Work Needed and Prospective Packages](http://www.debian.org/devel/wnpp/) (WNPP) +* [Lintian](http://lintian.debian.org/) +* [apt-proxy](http://packages.qa.debian.org/apt-proxy) or [apt-cacher](http://packages.qa.debian.org/apt-cacher) +* [reportbug](http://packages.qa.debian.org/reportbug) +* [dpkg](http://packages.qa.debian.org/dpkg) +* [apt](http://packages.qa.debian.org/apt) +* grep-dctrl +* dpkg-awk + +also see appendix A [Overview of Debian Maintainer Tools](http://www.debian.org/doc/developers-reference/ap-tools.en.html) in the Developer's Reference. + +### <a name="Input_amp_Output_Files_Formats"> Input & Output Files/Formats </a> + +* sources file from an archive +* packages file from an archive +* log from build process +* lintian report +* debcheck report +* upstream related files (tar.gz, dsc [[SampleDscFile]]) +* source deb +* binary deb +* /etc/apt/sources.list file +* bug reports +* web pages +* location to upload files for incoming: ftp-master.debian.org:/org/ftp.debian.org/incoming/ or via ftp to /pub/UploadQueue/ + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Inputs</strong></th> + <th bgcolor="#99CCCC"><strong>1</strong></th> + <th bgcolor="#99CCCC"><strong>2</strong></th> + <th bgcolor="#99CCCC"><strong>3</strong></th> + <th bgcolor="#99CCCC"><strong>4</strong></th> + </tr> + <tr> + <td> </td> + <td> X </td> + <td> </td> + <td> </td> + <td> </td> + <th bgcolor="#99CCCC"><strong>1</strong></th> + </tr> + <tr> + <td> </td> + <td> </td> + <td> X </td> + <td> </td> + <td> </td> + <th bgcolor="#99CCCC"><strong>2</strong></th> + </tr> + <tr> + <td> </td> + <td> </td> + <td> </td> + <td> X </td> + <td> </td> + <th bgcolor="#99CCCC"><strong>3</strong></th> + </tr> + <tr> + <td> </td> + <td> </td> + <td> </td> + <td> </td> + <td> X </td> + <th bgcolor="#99CCCC"><strong>4</strong></th> + </tr> + <tr> + <td> </td> + <td colspan="4"> </td> + <th align="right" bgcolor="#99CCCC"><strong>Outputs</strong></th> + </tr> +</table> + +also see [[GNUDebianPackages]] for information on what you can do AFTER you have .debs. + +-- [[Main/GrantBow]] - 03 March 2004 diff --git a/hurd/running/debian/GNUDebianPackages.mdwn b/hurd/running/debian/GNUDebianPackages.mdwn new file mode 100644 index 00000000..de1798ad --- /dev/null +++ b/hurd/running/debian/GNUDebianPackages.mdwn @@ -0,0 +1,103 @@ +tools for AFTER you have .debs + +### <a name="Software_States"> Software States </a> + +* Debian Source Package +* Debian Binary Package + * Component (main, contrib, non-free, non-US, updates, security) + * Priority + * Section + * installed state - installed, half-installed, not-installed, unpacked, half-configured, config-files + +### <a name="Groups"> Groups </a> + +* bug-filers +* users + +* Debian Package Maintainers, Co-Maintainers & uploaders +* ftp-masters +* QA +* porters for supported platforms (i386, m69k, sparc, alpha, powerpc, arm, mips, mipsel, hppa, ia64, s390) +* porters for unreleased platforms (amd64, sh) +* porters of non-linux platforms (hurd-i386, netbsd-i386, netbsd-alpha, freebsd-i386) +* International translation providers +* system administrators + +### <a name="Software_amp_Systems"> Software & Systems </a> + +* dselect +* wajig +* grep-dctrl +* dpkg-awk +* [reportbug](http://packages.qa.debian.org/reportbug) +* [dpkg](http://packages.qa.debian.org/dpkg) +* [apt](http://packages.qa.debian.org/apt) + +* [apt-proxy](http://packages.qa.debian.org/apt-proxy) or [apt-cacher](http://packages.qa.debian.org/apt-cacher) +* [Package Tracking System](http://lists.debian.org/debian-devel-announce/2002/debian-devel-announce-200201/msg00011.html) (PTS) +* [Bug Tracking System](http://bugs.debian.org) (BTS) + * Release Critical mailing to <debian-devel-announce@lists.debianNOSPAM.org> +* [Work Needed and Prospective Packages](http://www.debian.org/devel/wnpp/) (WNPP) +* [katie](http://ftp-master.debian.org) (was dinstall), ftp-master + * update-excuses [output](http://ftp-master.debian.org/testing/update_excuses.html) + +### <a name="Input_amp_Output_Files_Formats"> Input & Output Files/Formats </a> + +* sources file from an archive +* packages file from an archive +* source deb +* binary deb +* /etc/apt/sources.list file +* bug reports +* web pages + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <th bgcolor="#99CCCC"><strong>Inputs</strong></th> + <th bgcolor="#99CCCC"><strong>1</strong></th> + <th bgcolor="#99CCCC"><strong>2</strong></th> + <th bgcolor="#99CCCC"><strong>3</strong></th> + <th bgcolor="#99CCCC"><strong>4</strong></th> + </tr> + <tr> + <td> </td> + <td> X </td> + <td> </td> + <td> </td> + <td> </td> + <th bgcolor="#99CCCC"><strong>1</strong></th> + </tr> + <tr> + <td> </td> + <td> </td> + <td> X </td> + <td> </td> + <td> </td> + <th bgcolor="#99CCCC"><strong>2</strong></th> + </tr> + <tr> + <td> </td> + <td> </td> + <td> </td> + <td> X </td> + <td> </td> + <th bgcolor="#99CCCC"><strong>3</strong></th> + </tr> + <tr> + <td> </td> + <td> </td> + <td> </td> + <td> </td> + <td> X </td> + <th bgcolor="#99CCCC"><strong>4</strong></th> + </tr> + <tr> + <td> </td> + <td colspan="4"> </td> + <th align="right" bgcolor="#99CCCC"><strong>Outputs</strong></th> + </tr> +</table> + +also see [[GNUDebianBuildProcess]] for tools BEFORE you have .debs + +-- [[Main/GrantBow]] - 03 March 2004 diff --git a/hurd/running/debian/GnuDebianRelationship.mdwn b/hurd/running/debian/GnuDebianRelationship.mdwn new file mode 100644 index 00000000..ede808c8 --- /dev/null +++ b/hurd/running/debian/GnuDebianRelationship.mdwn @@ -0,0 +1,32 @@ +I have hesitated in starting this page due to the sensitive nature of this relationship and the (May 2002) flame war on debian-devel and other mail lists. I believe that rather than guessing about relevant points of the discussion, the facts should be presented in a clear manner. I hope the facts presented here are accurate and precise enough to be helpful in the ongoing discussion. I have not read all messages in all relevant threads. + +This is a work in progress. Please email me directly if you have comments or suggestions. + +* Debian Advantages of Hurd [[Distrib/PortingIssues]] Efforts + * One of the first ports to non-Linux system along with \*BSD and win32. + * Official GNU system distribution. + +* Debian Disadvantages of Hurd [[Distrib/PortingIssues]] Efforts + * Perceived zealous GNU and FSF promotion. + +* Hurd Port Advantages of Debian + * Glibc use. + * Gcc use. + * Debian reputation + * Debian mirror infrastructure - ftp, both official and private. Includes bandwidth, hardware, maintenance efforts. + * Debian www infrastructure - many languages supported, mirrors. + * [Debian developer machine](http://db.debian.org/machines.cgi) infrastructure, many architectures, compile farm, buildd software. + * Many Debian Developers maintaining software packages, bug reports, porting efforts. + * Bug tracking system - BTS infrastructure + * Package infrastructure architecture capabilities are improving. dpkg update in progress. + +* Hurd Port Disadvantages of Debian + * Possible DFSG vs. Free Software compatibility issues. + * BTS Severity practices/use for unreleased ports issues. + * Debian non-parallel development issues. + * [Architecture handling](http://master.debian.org/~brinkmd/arch-handling.txt) issues. + * Linux base history with assumed Linux assumptions. + * Possible incompatibility of third party standards compliance issues. i.e. LSB, FHS, GNU Coding Standards + * Perceived zealous Debian promotion. + +-- [[Main/GrantBow]] - 22 May 2002 diff --git a/hurd/running/debian/MediaPressKitDiscuss.mdwn b/hurd/running/debian/MediaPressKitDiscuss.mdwn new file mode 100644 index 00000000..e8b1cfff --- /dev/null +++ b/hurd/running/debian/MediaPressKitDiscuss.mdwn @@ -0,0 +1,78 @@ +%TOC% + +# <a name="Media_Press_Kit"> Media / Press Kit </a> + +## <a name="Problem"> Problem </a> + +Debian awareness not as high as other Linux distributions. Some people don't take Debian seriously because of it's organizational structure. Target audience lacks education. Most current Debian users are rather skilled and sometimes PERCIEVED as arrogant. "Non-technical" participation is not fully recognized. + +## <a name="Target_Audience"> Target Audience </a> + +* non-users without any experience of Debian. + * Technically-minded people will often be convinced already of why they should use Debian +* casual users who might be interested in Debian +* ammunition for those who are campaigning to have Debian used + * With our backgrounds, we could emphasize that we can provide material in the langauge that decision-makers can understand. + +## <a name="Debian_Resources"> Debian Resources </a> + +It's important to identify and work with the existing infrastructures for this type of thing. More research about who is out there that is interested in press relations needs to be done before showing the work completed to others. + +* [Contacts](http://www.debian.org/contact) page includes <press@debianNOSPAM.org> but I don't know who's behind that alias. I'll send an email right now to find out. +* [Events team](http://www.debian.org/events/) + * Mail list [debian-events-na](http://lists.debian.org/debian-events-na) + * Mail list [debian-events-eu](http://lists.debian.org/debian-events-eu) +* Debian Weekly News [DWN](http://www.debian.org/News/weekly/) and their mail list [debian-news](http://lists.debian.org/debian-news) +* [debian-announce](http://lists.debian.org/debian-announce) and their [News page](http://www.debian.org/News/) +* [DebianPlanet.org](http://www.debianplanet.org) +* Others? + +## <a name="Solution_Goal"> Solution / Goal </a> + +* persuade people to use Debian +* give target audience realistic expectations of running GNU/Linux + * skills expected + * differences from what they already know +* educate target audience about benefits and advantages of Debian. +* give target audience realistic expectations of running Debian + * skills expected + * differences from what they already know +* background materials, "marketing collateral" + +You have proposed two documents that sound on target to me. + +<dl> + <dt>[[WhyDebian]]</dt> + <dd> A bullet list meant to give a quick answer. </dd> + <dt>[[DebianProductSheet]]</dt> + <dd> includes interesting facts </dd> +</dl> + +The third is a collection of success stories which is more of a process than a clearly defined deliverable in itself. That sounds wonderful. + +I think another active process for tracking recent news (if it doesn't already exist) should also be useful for similar purposes. + +## <a name="Result"> Result </a> + +* two documents: Why Debian? & Debian Product Sheet + * these will be documents of a Debian media/press kit + * processes to keep these documents updated over time. For example, every release. + * beginning of a central repository for info about Debian +* a web repsitory for success stories + * some kind of link or integration with current website. +* increased appreciation by official Debian organization for non-technical participation. +* increased non-technical Debian user involvement +* increased adoption of Debian GNU/Linux by users. +* consideration for using SPI funds for hiring part-time PR resources + +-- [[Main/GrantBow]] - 13 Jan 2003 + +[This article](http://www.theage.com.au/articles/2003/01/08/1041989994382.html) was in the [most recent](http://www.debian.org/News/weekly/2003/02/) version of the [Debian Weekly News](http://www.debian.org/News/weekly/). + +-- [[Main/GrantBow]] - 15 Jan 2003 + +Here are some interesting urls from [this issue](http://www.debian.org/News/weekly/2003/03/) of the Debian Weekly news: + +**Debian Presentations.** Wolfgang Borgert was [looking](http://lists.debian.org/debian-devel-0301/msg00991.html) for a set of slides on dpkg, apt-get and debconf. Javier Fern�ndez-Sanguino Pe�a [intends](http://lists.debian.org/debian-devel-0301/msg01022.html) to provide a 'presentations' section in the [Debian Documentation Project](http://cvs.debian.org/ddp/?cvsroot=debian-doc) (DDP) and has already created an [archive](http://dat.etsit.upm.es/~jfs/debian/www/ddp/slides/) of slides. Whilst the Debian web site does link to [talks](http://www.debian.org/events/talks) given by developers and some [sample slides](http://www.debian.org/events/materials/slides/), it is difficult to gather this information and publish it in a homogeneous way. Talks should be reported to <events@debianNOSPAM.org> and forwarded to him. + +-- [[Main/GrantBow]] - 22 Jan 2003 diff --git a/hurd/running/debian/SampleDscFile.mdwn b/hurd/running/debian/SampleDscFile.mdwn new file mode 100644 index 00000000..d3b7b9f8 --- /dev/null +++ b/hurd/running/debian/SampleDscFile.mdwn @@ -0,0 +1,24 @@ + -----BEGIN PGP SIGNED MESSAGE----- + Hash: SHA1 + + Format: 1.0 + Source: glibc + Version: 2.3.2.ds1-11 + Binary: libc6, libc6-s390x, locales, libc0.3-prof, libc6.1-dev, libc6-i686, libc1-pic, libc6.1-dbg, glibc-doc, libc6-dev-sparc64, libc0.3-dbg, libc6.1-pic, libc6-dbg, libc0.3, libc0.3-pic, libc6.1-prof, libc6.1, libc6-dev-s390x, libc1, libc0.3-dev, libc6-sparcv9, nscd, libc1-dev, libc6-pic, libc6-prof, libc1-prof, libc-udeb, libc6-sparc64, libc6-dev, libc1-dbg + Maintainer: GNU Libc Maintainers + Architecture: any + Standards-Version: 3.6.1.0 + Build-Depends: gettext (>= 0.10.37-1), make (>= 3.80-1), dpkg-dev (>= 1.4.1.5), debianutils (>= 1.13.1), tar (>= 1.13.11), bzip2, texinfo (>= 4.0), linux-kernel-headers (>= 2.5.999-test7-bk-9) [!hurd-i386], mig (>= 1.3-2) [hurd-i386], hurd-dev (>= 20020608-1) [hurd-i386], gnumach-dev [hurd-i386], texi2html, file, gcc-3.3, autoconf, binutils (>= 2.14.90.0.5) [!s390], binutils (>= 2.13.90.0.4-1) [s390], sed (>= 4.0.5-4), gawk, debhelper (>= 4.0.0) + Build-Depends-Indep: perl, po-debconf + Uploaders: Ben Collins , GOTO Masanori , Philip Blundell , Jeff Bailey , Daniel Jacobowitz + Files: + b982bf6ad7ebc8622d3b81d51c44b78a 13246448 glibc_2.3.2.ds1.orig.tar.gz + 2951fde13e9ba21d70d8c7e580849730 1997696 glibc_2.3.2.ds1-11.diff.gz + + -----BEGIN PGP SIGNATURE----- + Version: GnuPG v1.2.3 (GNU/Linux) + + iD8DBQFADZsWbgOPXuCjg3cRAg9LAJ9r3ioJNdzloaM4qQu3FJj2R3y7pQCeNPD+ + i03WJeMdyAhKjHGM2sRqWVk= + =37je + -----END PGP SIGNATURE----- diff --git a/hurd/running/debian/SoftwareLicensing.mdwn b/hurd/running/debian/SoftwareLicensing.mdwn new file mode 100644 index 00000000..e236fea1 --- /dev/null +++ b/hurd/running/debian/SoftwareLicensing.mdwn @@ -0,0 +1,116 @@ +There are differences betwen the [Debian Free Software Guidelines](http://www.debian.org/social_contract#guidelines) (DFSG) and [Free Software](http://www.fsf.org/philosophy/free-sw.html) as defined by the Free Software Foundation. The FSF's GNU project is the sponsor of the GNU/Hurd project. Debian GNU/Hurd is a "port" or distribution of this software. I have not yet performed a comparison between the list of acceptable DFSG licenses (if a list exists) and the acceptable Free Software [license list](http://www.gnu.org/licenses/license-list.html). (Perhaps not directly related but for reference, here's the Open Source [license list](http://www.opensource.org/licenses/index.html)) + +What will this consist of? In the end the result will need to be simply a list of packages with their license marked next to them. This will be relatively simple for those packages that use a standard license. Software that has it's own custom license will need to be categorized. + +I am thinking of ways to automatically check the licenses and to get lists of the various "Priority:" packages. I thought this list of package names would be easy to obtain. The first step is getting the list of packages. This is possible by parsing /var/lib/dpkg/available, using dpkg or using apt-cache. + +The next step is checking the licenses of the packages. There is no dpkg package field available for license. A script that checks licenses will involve using "apt-get source" to check the COPYING and/or similar files in each package. + +-- [[Main/GrantBow]] - 5 Oct 2002 + +I used the following command on an old Hurd machine to get the 22 packages with Essential in their description. I've listed them and put them in a table at the end of this topic. + + sed -e '/./{H;$!d;}' -e 'x;/Essential\:\ yes/!d' /var/lib/dpkg/status | egrep ^Package | sort + +base-files base-passwd bash bsdutils debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname hurd ncurses-base ncurses-bin perl-base sed shellutils tar textutils util-linux + +Using `base` instead of `Essential\:\ yes` above I find 64 additional packages. + +adduser alsa-base apt autoconf2.13 bug cpp-3.0 cvs debconf debconf-utils debhelper debiandoc-sgml debian-policy developers-reference exim fetchmail-common g++-3.0 gcc-3.0 gcc-3.0-base gettext gettext-base gnumach groff groff-base inetutils libc0.3 libc0.3-dev libdb2 libdb2++ libdb2-dev libdb2++-dev libdb2-util libdb3 libgdbmg1 libncurses5 libnet-perl libpam0g libpam-runtime libperl5.6 libpopt0 libpopt-dev libreadline4 libstdc++3 libstdc++3-dev libwrap0 libxaw7 man-db mawk mutt netbase passwd perl python python2.1 screen sgmltools-lite slang1 ssh tcpd texinfo xfree86-common xlibs xserver-common xterm xutils + +-- [[Main/GrantBow]] - 11 Jan 2003 + +<table border="1" cellpadding="1" cellspacing="0"> + <tr> + <td> Name </td> + <td> Compatible License? </td> + </tr> + <tr> + <td> base-files </td> + <td> </td> + </tr> + <tr> + <td> base-passwd </td> + <td> </td> + </tr> + <tr> + <td> bash </td> + <td> </td> + </tr> + <tr> + <td> bsdutils </td> + <td> </td> + </tr> + <tr> + <td> debianutils </td> + <td> </td> + </tr> + <tr> + <td> diff </td> + <td> </td> + </tr> + <tr> + <td> dpkg </td> + <td> </td> + </tr> + <tr> + <td> e2fsprogs </td> + <td> </td> + </tr> + <tr> + <td> fileutils </td> + <td> </td> + </tr> + <tr> + <td> findutils </td> + <td> </td> + </tr> + <tr> + <td> grep </td> + <td> </td> + </tr> + <tr> + <td> gzip </td> + <td> </td> + </tr> + <tr> + <td> hostname </td> + <td> </td> + </tr> + <tr> + <td> hurd </td> + <td> </td> + </tr> + <tr> + <td> ncurses-base </td> + <td> </td> + </tr> + <tr> + <td> ncurses-bin </td> + <td> </td> + </tr> + <tr> + <td> perl-base </td> + <td> </td> + </tr> + <tr> + <td> sed </td> + <td> </td> + </tr> + <tr> + <td> shellutils </td> + <td> </td> + </tr> + <tr> + <td> tar </td> + <td> </td> + </tr> + <tr> + <td> textutils </td> + <td> </td> + </tr> + <tr> + <td> util-linux </td> + <td> </td> + </tr> +</table> diff --git a/hurd/running/debian/after_install.mdwn b/hurd/running/debian/after_install.mdwn new file mode 100644 index 00000000..b795fd2b --- /dev/null +++ b/hurd/running/debian/after_install.mdwn @@ -0,0 +1,111 @@ +First steps after installation. + +So you have managed to get past the first `native-install` runs in single-user +mode? + +Time to get to work. + +[[toc ]] + + +### Get Networking Running + +[[Network]]. + +Check if your NIC was detected by GNU Mach: + + # devprobe eth0 + +`devprobe` (run as user *root*) will print `eth0` on successful detection. If +it doesn't, your NIC was not detected correctly. You can then try to do the +following (also as user *root*) for getting details: + + # cat /dev/klog > ~/klog + [Wait a second, then press `Ctrl-C'.] + +Now examine the `~/klog` file. + +If the NIC was detected: + + # settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.1.3 -g 192.168.1.1 -m 255.255.255.0 + +In order to use DHCP, you need to install the `dhcp-client` package and run `dhclient eth0` etc. + +# Setup GRUB + +You surely want grub to have a nice menu entry able to boot GNU, instead of +typing a boring arcane. There are Debian-specific scripts that may help +you. See the [[GrubNotes]] for this. + + +# Setup `apt-get` + +Sometimes getting `apt-get` to work is not straightforward. Good mirrors to +put in `/etc/apt/sources.list` are (as of Jan 2007): + + deb http://mirrors.kernel.org/debian unstable main contrib + deb-src http://mirrors.kernel.org/debian unstable main contrib + deb http://ftp.debian-ports.org/debian unreleased main + deb-src http://ftp.debian-ports.org/debian unreleased main + +`apt-get` update a couple of times if some file fails to download. + +If when doing your first `apt-get`, `dpkg` complains of missing programs, get root in a login shell (`su -`). + +Installing packages without having a network connection is described +[[Distrib/DebianAptOffline]]. + +# [[translator/Random]] + +You often need `scp` and `ssh`. There is now a `random-egd` package available which uses +a random translator by Ryan Hunter and the entropy gathering daemon as entropy source. + +See [[Translator/random]] for more information. + +# [[Console]] + +The latest Hurd package in Debian, plus the `native-install` script, creates +all necessary device nodes and other magic. You just need to edit +`/etc/default/hurd-console` to tune the parameters and tell it to start at +bootup. + +You can also call the Hurd console manually with the proper arguments: + + console -d vga -d pc_kbd --repeat=kbd -d pc_mouse --repeat=mouse \ + -d generic_speaker -c /dev/vcs + + cd /dev + ln -s cons/kbd . + ln -s cons/mouse . + + +# [[Hurd/DebianXorg]] + +You first must have setup the virtual console. See above. + +Assuming you've installed WindowMaker and have tried running `startx` already: + + [/etc/xorg.conf] + + Section "Module" + # Load "dri" + # Load "speedo" + . + . + . + EndSection + + Section "InputDevice" + Identifier "Configured Mouse" + Driver "mouse" + Option "CorePointer" + Option "Device" "/dev/mouse" + Option "Protocol" "osmouse" + EndSection + +Make sure not to have the `Emulate3Buttons` and `ZAxisMapping` settings set, as +they lead to problems with e.g. dragging windows around. + +# What about package XYZ? + +See if you can find a useful tip in [[package_troubleshooting]]. diff --git a/hurd/running/debian/creating_image_tarball.mdwn b/hurd/running/debian/creating_image_tarball.mdwn new file mode 100644 index 00000000..977f2b1d --- /dev/null +++ b/hurd/running/debian/creating_image_tarball.mdwn @@ -0,0 +1,21 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +The following [[anonftpsync-ports]] is used to create a local Debian GNU/Hurd +repo. You will need atleast 12G of disk space. Change the +"TO=/home/foo/rsync-debian-ports" to your desired target directory. + +Run it using: + + sudo sh anonftpsync-ports + +In /home/foo/rsync-debian-ports, you will find the following directories: + + base dists indices pool pool-hurd-i386 project diff --git a/hurd/running/debian/creating_image_tarball/anonftpsync-ports b/hurd/running/debian/creating_image_tarball/anonftpsync-ports new file mode 100644 index 00000000..0988dbde --- /dev/null +++ b/hurd/running/debian/creating_image_tarball/anonftpsync-ports @@ -0,0 +1,180 @@ +#! /bin/sh +set -e + +# This script originates from http://www.debian.org/mirror/anonftpsync +# modified by Martin Zobel-Helas <zobel@debian.org>, 2005-01-16 +# these modifications are published under the terms of the GNU GPL +# Modifications: +# + some more documentation about variables +# + added ARCH_EXCLUDE +# + mirror in a safe way, first /pool, then /dists and the rest +# modified by Aurelien Jarno <aurel32@debian.org>, 2007-12-02 +# these modifications are published under the terms of the GNU GPL +# + modifications to mirror debia,-ports.org +# Version: $Id: anonftpsync,v 1.18 2005/10/28 15:25:54 aba Exp $ + + +# Note: You MUST have rsync 2.0.16-1 or newer, which is available in slink +# and all newer Debian releases, or at http://rsync.samba.org/ + +# Set the variables below to fit your site. You can then use cron to have +# this script run daily to automatically update your copy of the archive. + +# Don't forget: +# chmod 744 anonftpsync + +# TO is the destination for the base of the Debian mirror directory +# (the dir that holds dists/ and ls-lR). +# (mandatory) + +TO=/home/foo/rsync-debian-ports + +# RSYNC_HOST is the site you have chosen from the mirrors file. +# (http://www.debian-ports.org/mirrors) +# (mandatory) + +RSYNC_HOST=rsync.debian-ports.org + +# RSYNC_DIR is the directory given in the "Packages over rsync:" line of +# the mirrors file for the site you have chosen to mirror. +# (mandatory) + +RSYNC_DIR=debian/ + +# LOGDIR is the directory where the logs will be written to +# (mandatory) + +LOGDIR=/var/log/rsync-debian-ports + +# ARCH_EXCLUDE can be used to exclude a complete architecture from +# mirrorring. Please use as space seperated list. +# Possible values are: +# armel hurd-i386 kfreebsd-amd64 kfreebsd-i386 +# +# There is one special value: source +# This is not an architecture but will exclude all source code in /pool +# +# eg. +# ARCH_EXCLUDE="hurd-i386" +# +# With a blank ARCH_EXCLUDE you will mirror all availible architectures +# (optional) + +ARCH_EXCLUDE="armel kfreebsd-amd64 kfreebsd-i386 m68k" + +# EXCLUDE is a list of parameters listing patterns that rsync will exclude. +# The following example would exclude mostly everything: +#EXCLUDE="\ +# --exclude binary-hurd-i386/ --exclude binary-kfreebsd-i386/ +# --exclude *_hurd-i386.deb --exclude *_knetbsd-i386.deb \ +# --exclude stable/ --exclude testing/ --exclude unstable/ \ +# --exclude source/ \ +# --exclude *.orig.tar.gz --exclude *.diff.gz --exclude *.dsc \ +# --exclude /base/ --exclude /bochs/ --exclude /obsolete/ \ +# " + +# With a blank EXCLUDE you will mirror the entire archive. +# (optional) + +EXCLUDE="--exclude binary-kfreebsd-i386/ --exclude *_knetbsd-i386.deb \ + --exclude source/ --exclude *.orig.tar.gz --exclude *.diff.gz \ + --exclude /bochs/ --exclude /obsolete/ \ + --exclude *kfreebsd* --exclude *m68* --exclude *sh* \ + " + +# MAILTO is the address to send logfiles to; +# if it is not defined, no mail will be sent +# (optional) + +MAILTO= + +# There should be no need to edit anything below this point, unless there +# are problems. + +#-----------------------------------------------------------------------------# + +# Check for some environment variables +if [ -z $TO ] || [ -z $RSYNC_HOST ] || [ -z $RSYNC_DIR ] || [ -z $LOGDIR ]; then + echo "One of the following variables seems to be empty:" + echo "TO, RSYNC_HOST, RSYNC_DIR or LOGDIR" + exit 2 +fi + +if ! [ -d ${TO}/project/trace/ ]; then + # we are running mirror script for the first time + mkdir -p ${TO}/project/trace +fi + +# Note: on some non-Debian systems, hostname doesn't accept -f option. +# If that's the case on your system, make sure hostname prints the full +# hostname, and remove the -f option. If there's no hostname command, +# explicitly replace `hostname -f` with the hostname. +HOSTNAME=`hostname -f` + +LOCK="${TO}/Archive-Update-in-Progress-${HOSTNAME}" + +# Exclude architectures defined in $ARCH_EXCLUDE +for ARCH in $ARCH_EXCLUDE; do + EXCLUDE=$EXCLUDE"\ + --exclude binary-$ARCH/ \ + --exclude disks-$ARCH/ \ + --exclude installer-$ARCH/ \ + --exclude Contents-$ARCH \ + --exclude Contents-$ARCH.gz \ + --exclude *_$ARCH.deb \ + --exclude *_$ARCH.udeb \ + --exclude pool-$ARCH/" + if [ "$ARCH" == "source" ]; then + SOURCE_EXCLUDE="\ + --exclude *.tar.gz \ + --exclude *.diff.gz \ + --exclude *.dsc " + fi +done + +# Logfile +LOGFILE=$LOGDIR/debian-mirror-ports.log + +# Get in the right directory and set the umask to be group writable +# +cd $HOME +umask 002 + +# Check to see if another sync is in progress +if lockfile -! -l 10800 -r 0 "$LOCK"; then + echo ${HOSTNAME} is unable to start rsync, lock file exists + exit 1 +fi +# Note: on some non-Debian systems, trap doesn't accept "exit" as signal +# specification. If that's the case on your system, try using "0". +trap "rm -f $LOCK > /dev/null 2>&1" exit + +set +e + +# First sync /pool-* +rsync --recursive --links --hard-links --times --verbose \ + $EXCLUDE $SOURCE_EXCLUDE \ + $RSYNC_HOST::$RSYNC_DIR/pool-* $TO >> $LOGFILE 2>&1 +result=$? + +if [ 0 = $result ]; then + # Now sync the remaining stuff + rsync --recursive --links --hard-links --times --verbose --delete-after \ + --exclude "Archive-Update-in-Progress-${HOSTNAME}" \ + --exclude "project/trace/" \ + --exclude "/pool-*/" \ + $EXCLUDE \ + $RSYNC_HOST::$RSYNC_DIR $TO >> $LOGFILE 2>&1 + + date -u > "${TO}/project/trace/${HOSTNAME}" +else + echo "ERROR: Help, something weird happened" | tee -a $LOGFILE + echo "mirroring /pool-* exited with exitcode" $result | tee -a $LOGFILE +fi + + +if ! [ -z $MAILTO ]; then + mail -s "debian ports archive synced" $MAILTO < $LOGFILE +fi + +savelog $LOGFILE diff --git a/hurd/running/debian/faq.mdwn b/hurd/running/debian/faq.mdwn new file mode 100644 index 00000000..f4b607bf --- /dev/null +++ b/hurd/running/debian/faq.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2007 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="Debian GNU/Hurd FAQ"]] + +See also the [[Hurd_FAQ|hurd/FAQ]] and [[after_install]]. + +[[inline +pages="hurd/running/debian/faq/* and !*/discussion" +show=0 +actions=yes +rootpage="hurd/running/debian/faq" postformtext="Add a new item titled:"]] diff --git a/hurd/running/debian/faq/2_gib_partition_limit.mdwn b/hurd/running/debian/faq/2_gib_partition_limit.mdwn new file mode 100644 index 00000000..aed47445 --- /dev/null +++ b/hurd/running/debian/faq/2_gib_partition_limit.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2007, 2008 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="2 GiB Partition Limit"]] + +The 2 GiB limit has been removed in Debian GNU/Hurd. diff --git a/hurd/running/debian/faq/512_mib_ram_limit.mdwn b/hurd/running/debian/faq/512_mib_ram_limit.mdwn new file mode 100644 index 00000000..462ba73d --- /dev/null +++ b/hurd/running/debian/faq/512_mib_ram_limit.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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="512 MiB RAM Limit"]] + +GNU Mach does not cope well with lots of memory. Newer versions of the Debian +`gnumach` package will limit themselves to around 1 GiB of memory. If you have +an older version, or still experience problems with `vmstat` (see above) +reported much less memory than you have, the best is to limit the memory it can +see via GRUB's `upppermem` feature. Add `uppermem 786432` to GRUB's Hurd entry +in `menu.lst`. diff --git a/hurd/running/debian/faq/apt_umount.mdwn b/hurd/running/debian/faq/apt_umount.mdwn new file mode 100644 index 00000000..4a3b2dd2 --- /dev/null +++ b/hurd/running/debian/faq/apt_umount.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2007, 2008 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="apt: unmount cdroms"]] + +You can add a shell script umount so that apt can automatically unmount cdroms. + + #!/bin/sh + # Filename: /usr/bin/umount + + settrans -fg "$@" + +Give executable permission to the script. + + # chmod +x /usr/bin/umount + +In `/etc/fstab` add a trailing `/` after cdrom like `/cdrom/` since apt uses a +traing `/`. diff --git a/hurd/running/debian/faq/bad_hypermeta_data.mdwn b/hurd/running/debian/faq/bad_hypermeta_data.mdwn new file mode 100644 index 00000000..eedb461d --- /dev/null +++ b/hurd/running/debian/faq/bad_hypermeta_data.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +If you get the error `bad hypermeta data` when trying to mount an ext3 +partition from GNU/Linux, that is usually because the file system has not been +unmounted cleanly (maybe GNU/Linux got suspended to disk) and the Hurd cannot +mount it as ext2 without checking. Either boot back into GNU/Linux and unmount +it or you can try to run `fsck.ext3` from GNU/Hurd directly. diff --git a/hurd/running/debian/faq/debugging_inside_glibc.mdwn b/hurd/running/debian/faq/debugging_inside_glibc.mdwn new file mode 100644 index 00000000..d28eccd7 --- /dev/null +++ b/hurd/running/debian/faq/debugging_inside_glibc.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +To get [[debugging]] information for glibc, you need to install the +`libc0.3-dbg` package. At the place [[debugging/GDB]] looks for debugging +symbols by default (`/usr/lib/debug/lib/`), Debian's `libc0.3-dbg` stores only +frame unwind information. If you want to step into glibc while debugging, you +need to add `LD_LIBRARY_PATH=/usr/lib/debug` to GDB's environment. If that +still does not work, try `LD_PRELOAD=/usr/lib/debug/libc.so.0.3` instead. You +can add to GDB's environment via `set env FOO bar` from the GDB command line. + +It seems that this is no longer needed with the Debian glibc 2.5 packages, but +I may as well be wrong. Have to check that again. diff --git a/hurd/running/debian/faq/debugging_translators.mdwn b/hurd/running/debian/faq/debugging_translators.mdwn new file mode 100644 index 00000000..e87513c4 --- /dev/null +++ b/hurd/running/debian/faq/debugging_translators.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +In order to [[debug|debugging]] translators and being able to step into glibc +during it, you need the `hurd-dbg` and `libc0.3-dbg` packages installed. Then +start the translator like `settrans -P /foo /usr/bin/env +LD\_LIBRARY\_PATH=/usr/lib/debug /hurd/foofs`. The `-P` option will make it +pause and you will be able to attach [[debugging/GDB]] to the process. + +Is starting the translator like this really needed? diff --git a/hurd/running/debian/faq/dev_random.mdwn b/hurd/running/debian/faq/dev_random.mdwn new file mode 100644 index 00000000..0043699e --- /dev/null +++ b/hurd/running/debian/faq/dev_random.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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="/dev/random"]] + +There is no random device by default as no secure implementation has been +finished yet. An easy (but very insecure) work-around is to copy a binary file +like `/bin/bash` to `/dev/random` and `/dev/urandom`. diff --git a/hurd/running/debian/faq/df.mdwn b/hurd/running/debian/faq/df.mdwn new file mode 100644 index 00000000..be0df444 --- /dev/null +++ b/hurd/running/debian/faq/df.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +There is no `/etc/mtab`, so just running `df` will yield an error. Pass `df` a +path like `df /` or `df ./` to see the disk usage of that particular file +system. diff --git a/hurd/running/debian/faq/free_memory.mdwn b/hurd/running/debian/faq/free_memory.mdwn new file mode 100644 index 00000000..c5c28d2d --- /dev/null +++ b/hurd/running/debian/faq/free_memory.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Run `vmstat` to see memory and swap usage. diff --git a/hurd/running/debian/faq/hurd_console.mdwn b/hurd/running/debian/faq/hurd_console.mdwn new file mode 100644 index 00000000..3d5a6035 --- /dev/null +++ b/hurd/running/debian/faq/hurd_console.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Edit `/etc/default/hurd-console` to configure the Hurd console and enable it on +bootup. See [[console]] for further information about the Hurd console. diff --git a/hurd/running/debian/faq/kernel_logs.mdwn b/hurd/running/debian/faq/kernel_logs.mdwn new file mode 100644 index 00000000..0962f3aa --- /dev/null +++ b/hurd/running/debian/faq/kernel_logs.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The kernel logs are written to `/dev/klog`. Run `cat /dev/klog > foo` as root +and hit `ctrl+c` after a few seconds to catch the logs. You can do this only +once and do not do this in single-user mode (where `ctrl+c` does not work). diff --git a/hurd/running/debian/faq/other_repositories.mdwn b/hurd/running/debian/faq/other_repositories.mdwn new file mode 100644 index 00000000..d824f779 --- /dev/null +++ b/hurd/running/debian/faq/other_repositories.mdwn @@ -0,0 +1,16 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +If you want to use the `apt-get source` facility, make sure that +`/etc/apt/sources.list` contains a line like + + deb-src http://ftp.de.debian.org/debian unstable main + +... replacing _de_ with your homeland's code. diff --git a/hurd/running/debian/faq/ps_hangs.mdwn b/hurd/running/debian/faq/ps_hangs.mdwn new file mode 100644 index 00000000..d2ffefeb --- /dev/null +++ b/hurd/running/debian/faq/ps_hangs.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +If `ps` hangs, try `ps -M` which might still work. diff --git a/hurd/running/debian/faq/reporting_bugs.mdwn b/hurd/running/debian/faq/reporting_bugs.mdwn new file mode 100644 index 00000000..5abac5ce --- /dev/null +++ b/hurd/running/debian/faq/reporting_bugs.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Please try to reproduce bugs which are not obviously Hurd-specific on Debian +GNU/Linux and then file them there. + +If you find a genuine issue in Debian GNU/Hurd, please file it in our Alioth +bug tracker at +<http://alioth.debian.org/tracker/?atid=411594&group_id=30628&func=browse> +If you find a bug in the Hurd or GNU Mach themselves, either file a bug against +the respective Debian packages, or directly at +<http://savannah.gnu.org/bugs/?group=hurd> diff --git a/hurd/running/debian/faq/sata_disk_drives.mdwn b/hurd/running/debian/faq/sata_disk_drives.mdwn new file mode 100644 index 00000000..929c08f0 --- /dev/null +++ b/hurd/running/debian/faq/sata_disk_drives.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +GNU Mach does not support SATA disk drives (/dev/sda etc. in GNU/Linux) natively, so using device:sd0s1 will not work, sd* devices are for SCSI drives only. The only way to get those drives to work is to put them into compatibility mode in the BIOS, if such an option exists. GNU Mach will then recognize them as hda etc. diff --git a/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn b/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn new file mode 100644 index 00000000..e98b5e03 --- /dev/null +++ b/hurd/running/debian/faq/sshd_only_works_for_root_logins.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Privilege seperation does not work with Hurd currently. You need to explicitely +set `PrivilegeSeparation` to `no` in `/etc/ssh/sshd_options`, just commenting out +the entry will not work as it is on by default. Also make sure you have +`/dev/random`, see below. diff --git a/hurd/running/debian/faq/xserver-common.mdwn b/hurd/running/debian/faq/xserver-common.mdwn new file mode 100644 index 00000000..5cf0ec11 --- /dev/null +++ b/hurd/running/debian/faq/xserver-common.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +You need to run `dpkg-reconfigure xserver-common` and select `Anybody` for +starting X as there is no way to detect console users currently. diff --git a/hurd/running/debian/logo.png b/hurd/running/debian/logo.png Binary files differnew file mode 100644 index 00000000..068d9584 --- /dev/null +++ b/hurd/running/debian/logo.png diff --git a/hurd/running/debian/package_troubleshooting.mdwn b/hurd/running/debian/package_troubleshooting.mdwn new file mode 100644 index 00000000..829af8e3 --- /dev/null +++ b/hurd/running/debian/package_troubleshooting.mdwn @@ -0,0 +1,52 @@ +This page reports known Hurd-specific bugs, quirks and corresponding solutions and workarounds with Debian GNU/Hurd package installation and working. + +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="Dpkg_wants_external_programs_"> Dpkg wants external programs? </a> + +It may be that dpkg wants external GNU/Linux-specific programs that it can't found or that just don't exist on the Hurd. You can trick dpkg by copying and running this script as root: + + #!/bin/bash + ln -s /sbin/ldconfig /bin/ldconfig + ln -s /bin/true /bin/update-rc.d + ln -s /bin/true /bin/start-stop-daemon + ln -s /bin/true /bin/install-info + ln -s /bin/true /bin/update-alternatives + +## <a name="SSH_not_working"> </a> SSH not working + +You must set up the [[translator/random]] device first. + +## <a name="An_X_package_hangs_at_startup_wi"> An X package hangs at startup without error messages </a> + +Observed with GTK programs like xchat, synaptic, inkscape. It is an issue with libpthread that (as of 04 Feb 2007) is still unresolved. Sorry. + +## <a name="Borked_fonts_on_GTK_app"> </a> Borked fonts on GTK app + +This is related to issues in Pango. + +* Install pango-dev package +* Run as root: + + pango-querymodules > /etc/pango/pango.modules + +## <a name="Installing_a_package_seems_to_ha"> Installing a package seems to hang forever </a> + +There are various reasons for this. + +* If interrupting the process with ctrl-c gives a line like that: + + File "/usr/lib/python2.4/os.py", line 723, in urandom + bytes += read(_urandomfd, n - len(bytes)) + KeyboardInterrupt + +it is the random device fault. Follow the [[translator/random]] guide. If you already did, try _anyway_ to detach and reattach the translators. + +## <a name="Cannot_compile_even_trivial_C_pr"> Cannot compile even trivial C programs </a> + +Check to have installed the following: + + apt-get install build-essential + apt-get install libc-dev diff --git a/hurd/running/debian/patch_submission.mdwn b/hurd/running/debian/patch_submission.mdwn new file mode 100644 index 00000000..0a1bfb3f --- /dev/null +++ b/hurd/running/debian/patch_submission.mdwn @@ -0,0 +1,55 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +If you fixed a Debian package which *FTBFS* (fails to build from source), you +should submit the patch so that all users can profit from your work. + +If it is not a Debian-specific patch, you should strongly consider submitting +the patch upstream for inclusion. This applies even more so if it is a GNU +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). + +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 +either use the reportbug tool, or just simple mail. In any case, you should +follow these guidelines: + + * The submission address is <submit@bugs.debian.org>. + * The mail's subject (which will become the bug's title) should be + `SOURCE-PACKAGE: FTBFS on hurd-i386: REASON`. + * The first lines of the mail's body (the so-called *pseudo-header*): + * `Severity: important` -- not *serious*. + * `Version: VERSION` -- the version of the source package in unstable. + * `Tags: patch` -- as/if you include a ready-to-be-applied patch. + * `User: debian-hurd@lists.debian.org` + * `Usertags: hurd` + +In the bug description, mention that the package fails to build on hurd-i386 +and (if possible) quote the failure. If possible, point to the failing build +log from <http://buildd.debian-ports.org/build.php> or elsewhere. + +Then, explain the failure (Debian maintainers usually do not know much about +Hurd-specific failures), and attach the patch. + +The patch should be in unidiff form. + +If the package uses a patch system, it is preferable to submit the patch in a +ready-to-use form (e.g. as a *dpatch*), but this is not required. Also, try to +keep the patch small, e.g., do not submit a 100 KiB autotools diff for a +one-line change in `configure.in` or a `Makefile.am`, but in this case mention +that autotools need to be rerun and let the maintainer choose (you can suggest +you would file a complete diff if the maintainer prefers). + +Last but not least, try to be courteous. diff --git a/hurd/running/debian/porting.mdwn b/hurd/running/debian/porting.mdwn new file mode 100644 index 00000000..7ca91d37 --- /dev/null +++ b/hurd/running/debian/porting.mdwn @@ -0,0 +1,37 @@ +[[meta copyright="Copyright © 2007, 2008 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="Debian packages that need porting"]] + +Approximately half of the Debian archive has been compiled successfully on the +Hurd, however, many programs fail to build for various reasons. + +A [list of build failures including error +messages](http://unstable.buildd.net/buildd/hurd-i386_Failed.html) can be +found, as well as a [preliminary +analysis](http://lists.debian.org/debian-hurd/2007/07/msg00000.html) of them. + +It might be a good idea to record your intention to port something either in +the list below or in the [Alioth task +tracker](http://alioth.debian.org/pm/task.php?group_project_id=34&group_id=30628&func=browse) +so other people do not do duplicated work. + +Aside from the Alioth task tracker, here is a list of some packages (the +important ones, as they're, e.g., blocking other packages from being built) +that need someone to work on them. + +When you have a patch to submit, please adhere to the [[patch_submission]] +guidelines. + +[[inline +pages="hurd/running/debian/porting/* and !*/discussion" +show=0 +actions=yes +rootpage="hurd/running/debian/porting" postformtext="Add a new item titled:"]] diff --git a/hurd/running/debian/porting/adduser.mdwn b/hurd/running/debian/porting/adduser.mdwn new file mode 100644 index 00000000..3d243dd9 --- /dev/null +++ b/hurd/running/debian/porting/adduser.mdwn @@ -0,0 +1,26 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +`adduser` does work as expected, but what are these error messages? + + $ sudo adduser foo + Adding user `foo' ... + Adding new group `foo' (1002) ... + posix_spawn() error=1073741826 + posix_spawn() error=1073741826 + posix_spawn() error=1073741826 + Adding new user `foo' (1002) with group `foo' ... + posix_spawn() error=1073741826 + posix_spawn() error=1073741826 + posix_spawn() error=1073741826 + posix_spawn() error=1073741826 + Creating home directory `/home/foo' ... + Copying files from `/etc/skel' ... + [...] diff --git a/hurd/running/debian/porting/gcc.mdwn b/hurd/running/debian/porting/gcc.mdwn new file mode 100644 index 00000000..12982253 --- /dev/null +++ b/hurd/running/debian/porting/gcc.mdwn @@ -0,0 +1,50 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +For GCC trunk: + +Debian package has patches (for 4.3). Some have been forwarded upstream. (And +have been ignored.) [[Thomas_Schwinge|tschwinge]] is working on getting them +integrated. + + * [\[meta-bug\] bootstrap bugs for + \*-gnu\*](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21824) + + * [\[4.2/4.3/4.4 Regression\] GNU Hurd bootstrap error: 'OPTION\_GLIBC' + undeclared](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28102) + + * [Tool chain configuration: GNU/\* sharing stuff with + GNU/Linux](http://gcc.gnu.org/ml/gcc/2007-11/msg00289.html) + + * [\[PATCH\] GNU/Hurd target + configuration](http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00344.html) + + * [build system: gcc\_cv\_libc\_provides\_ssp and + NATIVE\_SYSTEM\_HEADER\_DIR](http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html) + + * [-fstack-protector shouldn't use TLS in freestanding + mode](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29838) + + * [Port libgcc's configury for + \*-\*-gnu\*](http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00315.html) + + +Additionally: + + * `libgcc/configure.ac` [might + need](http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00315.html) to be + aligned for us to the `*linux*` cases. As well as at the end of + `libgcc/config.host`. Check. + + checking whether decimal floating point is supported... no + checking whether fixed-point is supported... no + + * Also in other places: configure fragments that have `*linux*` cases + might/should often contain those for us (and GNU/k*BSD) as well. diff --git a/hurd/running/debian/porting/git-core.mdwn b/hurd/running/debian/porting/git-core.mdwn new file mode 100644 index 00000000..568ad966 --- /dev/null +++ b/hurd/running/debian/porting/git-core.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Depends on [[libdbd-sqlite3-perl]]. + +Does build, but has test-suite problems (only where libdbd-sqlite3-perl is +involved, it seems): + + [...] + DBD::SQLite::db table_info failed: database is locked(5) at dbdimp.c line 271 at /media/data/home/tschwinge/tmp/git-core/git-core-1.5.6.5/t/../ + git-cvsserver line 2783, <STDIN> line 17. + Can't call method "fetchall_hashref" on an undefined value at /media/data/home/tschwinge/tmp/git-core/git-core-1.5.6.5/t/../git-cvsserver line + 2783, <STDIN> line 17. + [...] + +Stopping the test-stuite (`C-c`), doing a `touch build-arch-stamp`, followed by +re-running `dpkg-buildpackage` with `-nc` will yield an installable `deb` +package. diff --git a/hurd/running/debian/porting/libdbd-sqlite3-perl.mdwn b/hurd/running/debian/porting/libdbd-sqlite3-perl.mdwn new file mode 100644 index 00000000..b5fdd14d --- /dev/null +++ b/hurd/running/debian/porting/libdbd-sqlite3-perl.mdwn @@ -0,0 +1,26 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Does build, but has test-suite problems: + + t/02cr_table............ok 1/4DBD::SQLite::db do failed: database is locked(5) at dbdimp.c line 271 at t/02cr_table.t line 10. + DBD::SQLite::db prepare failed: database is locked(5) at dbdimp.c line 271 at t/02cr_table.t line 11. + Can't call method "execute" on an undefined value at t/02cr_table.t line 12. + t/02cr_table............dubious + Test returned status 118 (wstat 30208, 0x7600) + DIED. FAILED tests 2-4 + Failed 3/4 tests, 25.00% okay + t/03insert..............ok 1/11DBD::SQLite::db do failed: database is locked(5) at dbdimp.c line 271 at t/03insert.t line 6. + # Failed test 2 in t/03insert.t at line 6 + [...] + +Stopping the test-stuite (`C-c`), doing a `touch build-stamp`, followed by +re-running `dpkg-buildpackage` with `-nc` will yield an installable `deb` +package. diff --git a/hurd/running/debian/porting/pth.mdwn b/hurd/running/debian/porting/pth.mdwn new file mode 100644 index 00000000..4424fe82 --- /dev/null +++ b/hurd/running/debian/porting/pth.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + <azeem> seems pth still doesn't work + <bddebian> Doesn't build or doesn't work? + <azeem> both + <azeem> some configure test keep grinding the CPU, same for the test suite + <azeem> which apparently runs pth_init() and never returns diff --git a/hurd/running/debian/porting/runit.mdwn b/hurd/running/debian/porting/runit.mdwn new file mode 100644 index 00000000..395dd14d --- /dev/null +++ b/hurd/running/debian/porting/runit.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +The `runit` package doesn't work, even its test suite doesn't finish. + +[[Thomas_Schwinge|tschwinge]] once was having a look at that, but this very +report is just from his memory, and his memory is dim... The problem *might* +either be a time stamping issue (which might be fixed by now) or it *might* be +the `select` call failing issue we're seeing from time to time. Or something +else. diff --git a/hurd/running/debian/status.mdwn b/hurd/running/debian/status.mdwn new file mode 100644 index 00000000..95e48edc --- /dev/null +++ b/hurd/running/debian/status.mdwn @@ -0,0 +1,4 @@ +Debian GNU/Hurd is currently an official, non-releasing Debian port. I.e., there is no testing or stable distribution. + + - [Build daemon/archive status](http://unstable.buildd.net/buildd/hurd-i386_stats) + - [Number of registered users](http://buildd.net/cgi/archvote.phtml) diff --git a/hurd/running/distrib.mdwn b/hurd/running/distrib.mdwn new file mode 100644 index 00000000..fc42e862 --- /dev/null +++ b/hurd/running/distrib.mdwn @@ -0,0 +1,140 @@ +* [[Debian]] +* [[Gentoo]] +* [[Bee]] +* [[GNU]] + + +# Issues + +<dt>[[SoftwareLicensing]]</dt> +<dd> The copyright and license information for software that is distributed with the Hurd software is important. Debian has it's DFSG guidelines. Other distributions will need to address these same issues. </dd> + +[[GnuDebianRelationship]] + + +## <a name="Installation"> Installation </a> + +<dl> + <dt> Install Instructions</dt> + <dd> Currently, <a href="http://www.debian.org/ports/hurd/hurd-install" target="_top">Debian's installation instructions</a> are the most up-to-date. [[Hurd/InstallNotes]] is an errata companion document with more helpful hints that have not yet been incorporated. </dd> +</dl> + +<dl> + <dt>[[CrossInstall]]</dt> + <dd> Another way to install a system. </dd> +</dl> + +<dl> + <dt> Release Information</dt> + <dd> About the latest CD release. Includes errata, known bugs and fixes. See [[CDNotesHome]] and [[TarballNotesHome]] for summaries </dd> +</dl> + +<dl> + <dt>[[GrubNotes]]</dt> + <dd> A quick reference and explanation. There's also a topic for the new [[GrubConf]]. </dd> +</dl> + +<dl> + <dt>[[InstallTips]]</dt> + <dd> Info on how to install without a cd drive or linux installed as well as a few tips. </dd> +</dl> + +Another installation method is using an emulated environment. The [[BochsEmulator]] was originally the recommended virtual machine solution, however most have switched over to QEMU, as it runs faster. + +* [[hurd/running/QEMU]] - A guide on how to use QEMU to run the hurd. +* [[BochsFAQ]] - Common questions you should read. +* [[VmWare]] - Why using it is discouraged. + +<dl> + <dt> Debian Installer</dt> + <dd> Work has been started by James Morrison and Glenn <nop>McGrath to [[PortDebootstrap]]. There is also a [[NewDebianInstaller]]. Why should Hurd folks care? It's important because this is the next generation installer that is intended to be used by all ports when Sarge is released. </nop></dd> +</dl> + + +# Using + +Debian [[debian/after_install]] instructions are a must-read to prepare an +usable system. + +[[debian/Package_troubleshooting]] reports known bugs, quirks and workarounds +about getting applications to work (if possible). + + +# For Developers + +<dl> + <dt>[[SavannahProjects]]</dt> + <dd> Savannah is a CVS &amp; Bug system evolved from a free version of the code that powers <a href="http://sf.net" target="_top">sourceforge.net</a>. It has forked and been slightly modified for use by FSF, GNU and non-GNU projects. Actual Development takes place here. There is also a <a href="http://savannah.gnu.org/people/?group=hurd" target="_top">help wanted</a> list. </dd> +</dl> + +<dl> + <dt>[[PortingIssues]] FAQ</dt> + <dd> What does it take to move a piece of Debian packaged software to the GNU/Hurd port? </dd> +</dl> + +<dl> + <dt>[[BuildingTheHurd]]</dt> + <dd> A summary by the Gentoo folks, thanks <a href="http://cvs.gentoo.org/~avenj/" target="_top">Jon Portnoy</a> - <a href="mailto:avenj@gentooNOSPAM.org">avenj@gentooNOSPAM.org</a></dd> +</dl> + +<dl> + <dt> Debain Infrastructure</dt> + <dd> Testing is critical in helping the development effort. Bugs (defect reports) can be filed against the Debian software package in which they are found. [[BtsFiling]] tells how to file a Debian bug report. [[DebianPackages]] has some information about how Debian splits the software into packages and some references. There is a buildd autobuilder compiling the Debian Sid archive software for the GNU/Hurd port. [[BuilddStatus]] includes information on the buildd &amp; turtle efforts. </dd> +</dl> + +<dl> + <dt><a href="http://hurd.she.kicks-ass.org:8084/uninstallable/" target="_top">Uninstallable packages</a></dt> + <dd> Many packages depend on these uninstallable packages. So building one of them will allow other to be build too. </dd> +</dl> + +<dl> + <dt> Technical References</dt> + <dd> There are many standards and documents that might be applicable for those interested in developing software. </dd> +</dl> + +* GNU [Coding Standards](http://www.gnu.org/prep/standards.html) +* [[TestSuites]] - Posix, Perl, results feedback, etc. +* [docs and papers](http://www.gnu.org/software/hurd/docs.html) +* [[SystemAPILimits]] +* [[CodeAnnouncements]] - Recent coding projects related to the Hurd + +<dl> + <dt> Debian <a href="http://www.debian.org/devel/" target="_top">Developer's Corner</a></dt> + <dd> The following references are provided as a starting point for those interested in helping to package software for Debian GNU/Hurd and Debian GNU/Linux. </dd> +</dl> + +* [Policy Manual](http://www.debian.org/doc/debian-policy/) +* Developer's [Reference](http://www.debian.org/doc/developers-reference/) +* New Maintainers [Guide](http://www.debian.org/doc/maint-guide/) +* There are many Debian email lists + +<dl> + <dt> Debian Todo</dt> + <dd> Packages needing attention. A possible use of this site could be to help track similar needs via [[HurdWnpp]]. This is not yet implemented. </dd> +</dl> + +<dl> + <dt>[[GnuDistributionRumors]]</dt> + <dd> There are some discussions and several rumors circulating about creating a completely new distribution, not using a Debian architecture. </dd> +</dl> + +# Misc. + +<dl> + <dt> Why a separate section of the website for this?</dt> + <dd> There are fundamentally different issues about distributions compared with coding. Distributions are concerned with final default configurations of packaged software and system integration as they use many software packages and help give users a sense of using an OS "product." </dd> +</dl> + +<dl> + <dt>[[WhyDebian]]</dt> + <dd> A one page document focused on Debian aimed at users to answer their question "Why Debian?" </dd> +</dl> + +<dl> + <dt>[[DebianProductSheet]]</dt> + <dd> Technical description of Debian aimed at those interested in Debian. </dd> +</dl> + +* [Misc. Docs @Etherhogz](http://www.etherhogz.org/doc/) (broken) +* [Ognyan Kulev Collection](http://debian.fmi.uni-sofia.bg/~ogi/hurd/links/index.html) of links (unsupported) +* [2000 Jim Franklin Collection](http://angg.twu.net/the_hurd_links.html) of links diff --git a/hurd/running/gentoo.mdwn b/hurd/running/gentoo.mdwn new file mode 100644 index 00000000..89d5d9cf --- /dev/null +++ b/hurd/running/gentoo.mdwn @@ -0,0 +1,8 @@ +* [Archived try at a Gentoo GNU/Hurd](http://www.mundurat.net/ggh/) + +Unofficial port to Gentoo and the portage system. It was +[announced](http://forums.gentoo.org/viewtopic.php?t=41939&postdays=0&postorder=asc&start=0) +March 17, 2003 in the Gentoo forums. There's a #gentoo-irc channel similar to +[[IRC]]. At present (May 2005), there's no activity and Eric Olinger has not +the time to maintain this distri. + diff --git a/hurd/running/gnu.mdwn b/hurd/running/gnu.mdwn new file mode 100644 index 00000000..2ae2f2ca --- /dev/null +++ b/hurd/running/gnu.mdwn @@ -0,0 +1,84 @@ +[[img logo.png]] + +# <a name="The_GNU_Operating_System"> </a> The GNU Operating System + +The GNU Operating System, or GNU System as it is more commonly known, will be a +complete [[Unix]]-like operating system composed entirely of [free +software](http://www.gnu.org/philosophy/free-sw.html). The creation of the GNU +System is one of the goals of the [GNU Project](http://www.gnu.org/), which was +[launched in 1983](http://www.gnu.org/gnu/initial-announcement.html) by +[Richard Stallman](http://www.stallman.org/). + + + +[[gnu/GNU]]. + +It is our wish and goal to establish a new direction for the GNU system distribution. To that end, this page will begin setting some direction. This was spawned by several discussions over a few days on the Hurd mailing lists and IRC. + +This is not intended to detract from Debian GNU/Hurd and we should help them where we can. + +I really want this to be more of a community driven effort in the spirit of say Ubuntu. We all have different motivations and skill levels but we need a common goal to get this system going. + +These are just some quick notes I am making late at night. Lets clean this up. + +## <a name="Motivations"> Motivations </a> + +1. There is a possibility that Debian drops support for GNU/Hurd. +2. Other GNU/Linux distributions do not support the Hurd infrastructure well. +3. Benefitting from the Hurd design and using a microkernel. +4. Freedom. + +## <a name="Community"> Community </a> + +1. Lets establish some ground rules. +2. We need infrastructure + * Wiki for community documentation + * Mailing lists like gnu-system-discuss exists for mostly technical items + * IRC channels like #hug and ##hurd + * Perhaps less formal and less intimidating channels and mailing lists would involve broader parts of the community +3. We need a community vision and direction. + * Lets work together for a common goal + * Lets establish goals and priorities and get resources on them. (More later) + * Major goal to create a system making full use of Hurd features? + * We should never hesitate to throw away existing stuff whenever it hinders us to make good use of Hurd features + * However, we should try to reuse existing stuff (from Debian for example) as long as it doesn't limit our possibilities or impose considerable overhead + * Lets have fun. It's GNU and it's important but let's enjoy ourselves. + +## Download + + * Official GNU snapshot <http://www.update.uu.se/~ams/GNU> + * Extended GNU distribution <http://i-hug.sarovar.org/downloads/GNU/extended/> + +## <a name="Tools"> Tools </a> + +1. Developer Needs + * RPC Trace +2. Installer + * Native installer would be preferred but we can bootstrap GNU/Linux for now if necessary +3. Package Management + * There is a proposal to use stowfs. Let's get this going and test it out. Can it be made to work? How long will it take? + * Repository for packages + * Probably we can host it on the GNU servers + * Bug / Issue tracking + * Probably we should set up a Savannah project + * How to handle experimental patches to the core packages (Hurd, Mach, libc etc.) that are not in official CVS yet? + +## Resources + + * [[Universal_package_manager]] + * How to [[set_up_GNU|setup]] and archiver for GNU + * [[Create_an_image]] + +## <a name="Todo"> Todo </a> + +1. AMS had made a GNU release. We can try it and test it to good use. We can fix broken things in it, and enhance it. + * The snapshot is very old. Probably better to build something from current stuff, even if it means more work + * ams said that he would like to get a new snapshot out that would be on a Live CD and using stowfs. I think what we need to do is start using/fixing GNU System Creator (GSC) to build packages for this effort. +2. GNU is all about freedom AND ease of use. So, given installers are by nature quite complex, how should we install GNU on users's computers? I think ams's GSC comes into play here, maybe ams or sdschulze could (re-)write specifications of GSC. +3. Until we have an installer ready, we could go the Gentoo-like route, and have every part manually installed. A good installation documentation may help. Our next milestone may be just this (in case ams hasn't already done it): + * have a good installation document out, with all the required packages hosted at gnu.org or savannah.org + * get stowfs working +4. Maybe try to use hacked Debian packages until we get native ones? +5. Move on, start coding, documenting, packaging. + +I tried refactoring this page, but didn't get far. -- [[Main/AaronHawley]] - 18 Feb 2006 diff --git a/hurd/running/gnu/create_an_image.mdwn b/hurd/running/gnu/create_an_image.mdwn new file mode 100644 index 00000000..42379f45 --- /dev/null +++ b/hurd/running/gnu/create_an_image.mdwn @@ -0,0 +1,97 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Creating a bootable qemu image from a root filesystem and bootloader + +1. Create a hard disk image + + qemu-img create -f qcow <imagename.img> <size>G + +2. Use a live CD (better to have a lighter OS like system rescue CD to make the + process faster) and the image created to boot. + + qemu -cdrom /dev/cdrom -hda <imagename.img> -boot d + +3. Once system is booted use a partition editing tool (like fdisk, cfdisk, + parted, gparted, qtparted ...) to partition the image. + + cfdisk + + create the necessary partitions (root and swap partitions boot, home ... if + required) + +4. Create a file syatem for the root partiotion + + mke2fs /dev/hda1 + +5. Mount the partition + + mkdir disk + mount /dev/hda1 disk + +6. Copy the file system from the host machine to the mounted directory (use a + compressed file system to make the copying faster) + + Grab the GNU spapshot from ams' site + <http://www.update.uu.se/~ams/home/slask/GNU/> + + scp <user>@<host>:<path to the compressed file system> disk + +7. Uncompress the files + + cd disk + tar -jxvf <compressed filesystem> + +8. Unmount the mounted partition + + cd .. + umount disk + +9. power off the guest OS. + + poweroff + +10. To make the file syatem bootable download a grub floppy image + + <http://hurd.in/pub/Hurd/HurdOnVMware/grub.img> + +11. Run qemu to boot into your brand new system + + qemu -hda <hard disk image.img> -fda grub.img -boot a + +Happy Hacking !! + + +Make your new system boot from the hard disk + +1. Mount your grub image + + mkdir floppy + mount -t ext2 -o loop grub.img floppy + +2. Use previous steps 2 and 5 to boot from a liveCD and mount the partition + + cd disk/boot + scp -r <user>@<host>:<path to mounted floppy image directory>/boot/grub + +3. Poweroff the guest + + poweroff + +4. Boot new system using floppy image previous step 11 + + use install to hard disk option if you used the above grub image + + or go to grub command line and type + + root (hd0,0) + setup (hd0) + + Now you have a bootable system image. Enjoy Maadi !! diff --git a/hurd/running/gnu/discussion.mdwn b/hurd/running/gnu/discussion.mdwn new file mode 100644 index 00000000..7a96803b --- /dev/null +++ b/hurd/running/gnu/discussion.mdwn @@ -0,0 +1,19 @@ +## <a name="GNU_Web_Meta_Discussion"> </a> GNU Web Meta Discussion + +Where did you get that logo? Maybe it's the color but it looks very elegant compared to <http://www.gnu.org> + +-- [[Main/GrantBow]] - 23 Oct 2002 + +I did it myself. Somewhat inspired by another GNU artwork, but completely hand made in the Gimp. + +I'm working on a cool Mach logo as well. Inspiration is the old Atari arcade game M.A.C.H. 3. :-) + +-- [[Main/JoachimNilsson]] - 29 Oct 2002 + +What do you feel about the new copyright notice at the bottom of this web? + +I'm afraid that I will have to add another page to the edit process to actually enforce this stuff. Perhaps I can combine the old Preview with this copyright assignment, what do you think? + +Oh, btw. It seems RMS is right. At least according to Swedish law (as far as I've checked) transfer/assignment of copyright can be made the way he describes. The user has to select a checkbox or press a button to accept the copyright assignment each time. But as long as that is done we don't have to have any other form of "legal contract" between the users and the FSF. + +-- [[Main/JoachimNilsson]] - 29 Oct 2002 diff --git a/hurd/running/gnu/gnu.mdwn b/hurd/running/gnu/gnu.mdwn new file mode 100644 index 00000000..2a3629d7 --- /dev/null +++ b/hurd/running/gnu/gnu.mdwn @@ -0,0 +1,29 @@ +[[img logo.png]] + +## <a name="GNU_FSF_amp_RMS"> </a> GNU, FSF & RMS + +GNU stands for GNU's Not [[Unix]]. It is a project announced in 1983 by +[[RichardStallman]] (RMS). The Free Software Foundation +([FSF](http://www.fsf.org/fsf/fsf.html)) was founded in 1985 to act as a parent +organization for GNU and many other projects. GNU and some non-GNU projects +are now hosted on the [Savannah](http://savannah.gnu.org) platform similar to +SourceForge.net. + +<dl> +<dt>[[History]]</dt> +<dd> Background information about the GNU Project. </dd> +<dt>[[Names]]</dt> +<dd> A page describing the name GNU itself and it's usage. </dd> +<dt>[[Manifesto]]</dt> +<dd> A founding document that still influences the system's technical design and moral philosophy. </dd> +<dt> FAQ Link</dt> +<dd> What is the relation between <a href="http://www.gnu.org/software/hurd/faq.en.html#q1-2" target="_top">GNU and Hurd</a>? </dd> +<dt> Assisting</dt> +<dd> If you would like to help the GNU movement visit the official site at <a href="http://www.gnu.org" target="_top">http://www.gnu.org</a>. </dd> +<dt>[[SoftwareProjects]]</dt> +<dd> Information about other GNU projects. </dd> +<dt><a href="http://lists.gnu.org/mailman/listinfo/gnu-system-discuss" target="_top">gnu-system-discuss</a></dt> +<dd> Mailing list for discussion about the GNU system. </dd> +</dl> + +[[TODO]]. diff --git a/hurd/running/gnu/history.mdwn b/hurd/running/gnu/history.mdwn new file mode 100644 index 00000000..f321c961 --- /dev/null +++ b/hurd/running/gnu/history.mdwn @@ -0,0 +1,7 @@ +The GNU project has a long history. For software projects, it is exceptionally long. For social movements it is quite short. Although, its history is incomplete, and is being made now (to which you could contribute). + +* [Announcement](http://www.gnu.org/gnu/initial-announcement.html): The original announcement made in 1983 by [[RichardStallman]]. +* [The GNU Project](http://www.gnu.org/gnu/gnu-history.html): A summary by [[RichardStallman]]. +* [History of the GNU Project](http://www.gnu.org/gnu/thegnuproject.html): About the GNU Project, by [[RichardStallman]]. + +Page started from links at [[GNU]]. -- [[Main/AaronHawley]] - 17 Feb 2006 diff --git a/hurd/running/gnu/logo.png b/hurd/running/gnu/logo.png Binary files differnew file mode 100644 index 00000000..50c392cf --- /dev/null +++ b/hurd/running/gnu/logo.png diff --git a/hurd/running/gnu/manifesto.mdwn b/hurd/running/gnu/manifesto.mdwn new file mode 100644 index 00000000..c2a3294f --- /dev/null +++ b/hurd/running/gnu/manifesto.mdwn @@ -0,0 +1,5 @@ +Written early in the life of the GNU project, the GNU manifesto still influences the design of the GNU system. + +* [The GNU Manifesto](http://www.gnu.org/gnu/manifesto.html) + +Started page. -- [[Main/AaronHawley]] - 17 Feb 2006 diff --git a/hurd/running/gnu/names.mdwn b/hurd/running/gnu/names.mdwn new file mode 100644 index 00000000..fcab6a11 --- /dev/null +++ b/hurd/running/gnu/names.mdwn @@ -0,0 +1,8 @@ +The GNU stands for GNU's Not [[Unix]]. It is a project as described in [[GNU]]. + +What can be confusing is the usage. GNU can stand for: + +* an entire system as envisioned in 1983. GNU/Hurd is a synonym. +* GNU components when used with the Linux kernel: GNU/Linux This term has been adopted by the [Debian project](http://www.debian.org) but is not recognized as widely as the FSF would like. + +-- [[Main/GrantBow]] - 03 Mar 2004 diff --git a/hurd/running/gnu/richardstallman.mdwn b/hurd/running/gnu/richardstallman.mdwn new file mode 100644 index 00000000..d6688850 --- /dev/null +++ b/hurd/running/gnu/richardstallman.mdwn @@ -0,0 +1,6 @@ +Richard Stallman (or ''RMS'') is the found of the GNU project, the Free Software Foundation and author of numerous GNU software packages. More useful information about Richard is available from his Wikipedia entry or his personal Web site. + +* [Wikipedia: Richard Stallman](http://en.wikipedia.org/wiki/Richard_Stallman/): Entry at Wikipedia +* [Stallman dot org](http://www.stallman.org/): Personal Web site. + +Page started. This seems like the appropriate Wiki to have the page. -- [[Main/AaronHawley]] - 17 Feb 2006 diff --git a/hurd/running/gnu/setup.mdwn b/hurd/running/gnu/setup.mdwn new file mode 100644 index 00000000..6ff32630 --- /dev/null +++ b/hurd/running/gnu/setup.mdwn @@ -0,0 +1,84 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Setup is very easy (You need a GNU/Linux system to install GNU, we are developing an installer for GNU and if you want to help us join us on [[http://lists.gnu.org/mailman/listinfo/gnu-system-discuss][gnu-system-discuss]]), just follow these steps ... + +## Step 1: Find a home for GNU + +create a partition with minimum of 800 MB (if you want to install programs later you might need to allocate more space) + +It comes with GNU Emacs 21.4, gcc 4.0, gdb 6.3, parted, wget and many more + +Note: 2GB limit for partitions is no more there, it is fixed + +## Step 2: Create GNU Hurd filesystem on the partition + + # mke2fs -o hurd /dev/hdd6 + +## Step 3: Grab a snapshot of the GNU + +from <http://www.update.uu.se/~ams/home/slask/GNU/> or Extended GNU from <http://i-hug.sarovar.org/downloads/GNU/extended/> + +## Step 4: Extract the snapshot to the newly created partition + + # mount /dev/hdd6 /mnt + # cd /mnt + # tar -jxvf <path to downloaded location>/GNU--2006-01-08.tar.bz2 + +Wait for the extraction to complete, depending on the system configuration the time varies. The compressed image is 178MB and it uncompresses to about 750MB + +## Step 5: Configure grub to boot GNU + +This can be tricky since the partition naming is different for linux, grub and hurd + +My configuration look like this ... + + title GNU (also known as GNU/Hurd)(Single user) + root (hd0,5) + kernel /boot/gnumach.gz root=device:hd3s6 -s + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + + title GNU (also known as GNU/Hurd)(Multi-user) + root (hd0,5) + kernel /boot/gnumach.gz root=device:hd3s6 + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + + grub linux hurd + hd0,5 hdd6 hd3s6 + +If you have only one harddisk it will be hd0 for grub wherever you connect it. +But linux and hurd names depend on whether you connect it as primary master +(hda or hd0), primary slave (hdb or hd1) [this is my cdrom drive], secondary + master (hdc or hd2) or secondary slave (hdd or hd3) [this is my precious +Maxtor 2GB hard disk]. + +The partition naming of hurd is similar to BSD slices. hda1 is hd0s1, hda2 is + hd0s2 ... + +In my case the root device is hd0s6 (hdd6) + +## Step 6: Now boot into your brand new GNU System. + +It will do some initial setup and you will get a prompt. +Now reboot into your configured GNU System. + + # reboot + +## Step 7: Start using your GNU system + +Here is the GNU/Hurd users guide. It starts from the basics. <http://www.gnu.org/software/hurd/users-guide/using_gnuhurd.html> + +*Warning! : It is not yet ready for normal use, it is a developer's release.* + +So when you encounter bugs report it to bug-hurd@gnu.org + +Join us on gnu-system-discuss <http://lists.gnu.org/mailman/listinfo/gnu-system-discuss> to help finish the GNU System. diff --git a/hurd/running/gnu/softwareprojects.mdwn b/hurd/running/gnu/softwareprojects.mdwn new file mode 100644 index 00000000..4790c5c9 --- /dev/null +++ b/hurd/running/gnu/softwareprojects.mdwn @@ -0,0 +1,8 @@ +Some of the GNU software effects the Hurd development directly or indirectly. Here's a place for notes about these changes. The official sources are the GNU software [Directory](http://www.gnu.org/directory/) (sponsored by the UN!), [Projects](http://www.gnu.org/projects/), [Packaging](http://www.gnu.org/software/packaging/) and [savannah](http://savannah.gnu.org/) pages, but this page is for Hurd related notes about them. + +<dl> + <dt> GCC</dt> + <dd> deb packages of gcc-{3.2,3.3} are available for testing from <a href="http://people.debian.org/~mbanck/hurd-gcc-4.0/" target="_top">http://people.debian.org/~mbanck/hurd-gcc-4.0/</a> ./ </dd> +</dl> + +* [[Universal_package_manager]] and archiver for GNU diff --git a/hurd/running/gnu/todo.mdwn b/hurd/running/gnu/todo.mdwn new file mode 100644 index 00000000..e2dc2e89 --- /dev/null +++ b/hurd/running/gnu/todo.mdwn @@ -0,0 +1,6 @@ +There are varying things to be done for the operating system requiring a variety of effort, and skills. The following are todo lists with a focus on meeting needs for releasing the GNU system. + +* [Alfred Szmidt's todo list](http://lists.gnu.org/archive/html/gnu-system-discuss/2006-06/msg00056.html) - Post to gnu-system-discuss on 21 Jun 2006. +* [Hurd Task list](http://savannah.gnu.org/task/?group=hurd) - Maintained on the GNU Savannah list. + +Page started. -- [[Main/AaronHawley]] - 29 Jun 2006 diff --git a/hurd/running/gnu/universal_package_manager.mdwn b/hurd/running/gnu/universal_package_manager.mdwn new file mode 100644 index 00000000..009b26bf --- /dev/null +++ b/hurd/running/gnu/universal_package_manager.mdwn @@ -0,0 +1,153 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Mission + +"To enable the GNU System to install packages of any format like rpm, deb, +ebuild... so that GNU System will be able to use softwares packaged by projects like Debian and Gentoo" + +## Features + +Basically all package management schemes follow similar approach, it will have a single binary archive containing the actual software and some metadata like packages it requires, what all it provides ... So when we install an rpm package this tool will help rpm tool to recognise the packages installed by stow and it will be stowed instead of the normal rpm way of installing in /usr. + +There can be both aproaches + + * Re-implement rpm, dpkg... to recognise stow as backend instead of its own data store. In that case we will have to re implement, apt-rpm, yum ... + * Implement a translator which reads stow and show it as an rpm data store for yum, deb data store for apt-get ... + +One goal is obviously choice of packaging and hence availability of more packages. Also this gives maintainers a chioce to continue builing packages for GNU in the format they are already familiar with. The second goal is to demonstrate the flexibility GNU offers in implementing functionality in filesystems (open/read/write interface). + +## Why? + + * The GNU Hurd provides a lot of advanced features and functionalities. We aim to exploit those features. + * Combining translators with UnionFS gives a very exciting package manager. + * We could use the good features of existing packaging systems like deb, rpm, ebuilds, ports ... plus unionfs and hurd translator is a compelling combination. + +With the increased flexibility in implementing filesystems as per the requirements, we can implement the functionality similar to apt-get, emerge or yum... (dependency tracking, versions tracking...) in the filesystem itself. + +## What? + + * Have a basic filesystem based package manager + * Write translators to convert between GNU's packaging format and the existing one's like rpm, deb ... + +## How? + + * Installtion of a package is just drag the pacakage (be it a tgz, rpm, deb or an exe) and drop it to the package manager. + + * apt-cache search vim --> ls -al /packages/meta/ |grep vim + * apt-get install vim --> install vim + +Just a sample script. + + $ cd /packages/meta/vim/current/depends + $ for i in `ls *` + $ do + $ if [ -f /packages/binary/$i ] + $ then + $ echo "$i is installed" + $ else + $ install $i + $ fi + $ done + +The same can be achieved using any of the languages or front ends or even manual copying. + +If all the dependencies are there + + $ cp -r /ftp/ftp.gnu.org/packages/binary/vim/7.0 /packages/binary/vim/7.0 + +## Implementation Details + +Lets take the example of rpm, it is simply a cpio archive with software and +meta data as its contents. Just extract it to stow directory with a name +package-version. When apt-get or yum asks for information about already +installed packages read the stow tree and return back the requested data. + +Same case for ebuild. We can provide these details to any packaging system +in the way it wants using a translator. So support for a new format is +just writing the new translator. + +## Initial idea + +A bit complex than the earlier scheme but it is more exciting and we can look at this schem seriously once we have the simple scheme working. + +All packages are installed at +`/packages/binary/<packagename>/<packageversion>`. + +For eaxmple vim 6.4 version can be installed from source like + + # cd vim64 + # ./configure --prefix=/packages/binary/vim/6.4 + # make + # make install + +Now if you have another vim version, say 7.0 then just follow the steps + + # cd /packages/source/vim + # CP /<pathtovimtarball>/vim-7.0.tar.bz2 + # tar -jxvf vim-7.0.tar.bz2 + # mv vim70 7.0 + # ./configure --prefix=/packages/binary/vim/7.0 + # make + # make install + +You have 2 versions of vim and how can you sepcify which one is the current version? You can symlink the current version to select the version you would like to see as default + + # ln -s /packages/binary/vim/7.0 /packages/vim/current + +## Metadata: /packages/meta + +Dependency information is stored as a symbolic link to the required packages in a subdirectory called depends. + +## Requirement + +We will require unionfs support if we chose to go through path 2 (which is what I like because we can really show off with translators.) + + * Developing status - planning + * Near term goal - implement stow backend for dpkg + * High priority task - make unionfs work on boot. Mail from AMS to gnu-system-discuss on problem statement <http://www.mail-archive.com/gnu-system-discuss@gnu.org/msg00198.html> + +## Developer Guidelines. + + * GNU coding standards <http://www.gnu.org/prep/standards/> + + +## FAQ - Frequently asked questions + + 1. How can I join this project? + +OK. I will give you steps. + +i. Install a GNU System by folowing [[these_instructions|setup]] + +ii. Read about GNU Design <http://www.gnu.org/software/hurd/hurd-paper.html> + +iii. Read about translators <http://www.debian.org/ports/hurd/hurd-doc-translator> + +iv. Try out these cool [[translator_examples|translator/examples]] + +v. Add your name below and give a shout in the list. + + +## Comments?? + +Add your comments here + +## Interesting? + +To join the project just list your name below. + + 1. PraveenA + 2. IsaacPraveen + 3. VikramVincent + 4. MaheshM + 5. Nidhin Raghavan + 6. Ajish.B + 7. Ambili.B diff --git a/hurd/running/live_cd.mdwn b/hurd/running/live_cd.mdwn new file mode 100644 index 00000000..f8727118 --- /dev/null +++ b/hurd/running/live_cd.mdwn @@ -0,0 +1,18 @@ +You can download a gzipped iso of a Hurd Live CD at +<http://www.superunprivileged.org/hurd/live-cd/>. + +The Superunpriveleged crew also offers a tiny Hurd Live CD that is under 10 +MiB: <http://www.superunprivileged.org/hurd/tiny-cd/> + +Use it like this: + + $ qemu -cdrom hurd-tiny-cd-20060722.iso + +These [[wikipedia LiveCD]]s should be useful for those who want to try out the +Hurd before they commit to installing it on their hard disks. In addition to +that, the bootable Hurd CDs should enable us to have a native installer instead +of relying on Linux. + + +* [[RequirementsForLiveCD]] +* [[BuildingHurdLiveCD]] diff --git a/hurd/running/qemu.mdwn b/hurd/running/qemu.mdwn new file mode 100644 index 00000000..7e4816f5 --- /dev/null +++ b/hurd/running/qemu.mdwn @@ -0,0 +1,180 @@ +This page discusses things for [[Unix]] systems, there is a separate page for +[[Microsoft_Windows]] systems. + + +# Readily Available Images + +[Official Debian GNU/Hurd QEMU +image](http://ftp.debian-ports.org/debian-cd/K16/debian-hurd-k16-qemu.img.tar.gz) + +(!) Note that the following are unofficial images: they have been prepared by +volunteers and may not have been tested extensively. + +<!--* [Disk image](http://www.numenor.art.pl/balrog/hurd/) with an installation of + [[Debian_GNU/Hurd|running/debian]].--> + +* [Disk image](http://draketo.de/dateien/hurd/bab-hurd-qemu-2008-10-29.img.tar.bz2) + with a short intro on translators. Just start it with 'qemu *disk_image.img*'. + It should work without any of the configuration below. -[[community/weblogs/ArneBab]] + +<!--* [Announcement](http://lists.debian.org/debian-hurd/2007/09/msg00000.html) of another image. - The link in the email doesn't work anymore, too old. //--> + + +# What is Needed to create a QEMU image + +1. First thing is to install [[/QEMU]]. +2. A [grub](http://www.gnu.org/software/grub/) boot disk for the floppy disk image needed for booting. The [0\.97 version](ftp://alpha.gnu.org/gnu/grub/grub-0.97-i386-pc.ext2fs) works fine. I downloaded it an renamed to `floppy.img`. Alternatively, the Debian grub-disk package (up till version 0.97-28) is fine as well. +3. You will need a [Debian/Hurd installation CD](http://www.debian.org/ports/hurd/hurd-cd). K16 works fine. + + +# Installing Debian/Hurd with QEMU + +First off you will need to create a disk image using `qemu-img`. I have set mine to 2 gigabytes, although you should be able to get away with less(Currently, the maximum disk image size one can create with QEMU is 4.5G). + + $ qemu-img create hd0.img 2G + +Next you will want to start up QEMU and begin the installation process. The first time you run it you will want to use the `-boot d` option to boot off the cdrom. + + $ qemu -hda hd0.img -cdrom debian-K16-hurd-i386-CD1.iso -fda floppy.img -boot d + +Now at his point do the regular install using `hd0` as your harddrive. Partition it and install the base system. Once you have finished installing the base system select the reboot option as this will ensure the disk is properly un-mounted. When the Debian CD menu comes up again simply close QEMU. + +Now run your image with floppy booting (`-boot a`) and finish the install (`./native-install` .. etc). + +**Important:** Older versions on gnumach needed that the `-M isapc` was passed to qemu. This is not needed anymore. + +Also see another text about how to [[gnu/create_an_image]] for the +[[GNU_system|gnu]]. + + +# Transferring Files + +## Mounting Disk Image on Host + +You may wish to mount your disk image on your host system to transfer files. To do this you will first need to find the offset of the partition you wish to mount. + + # fdisk -ul hd0.img + ... + 128 heads, 63 sectors/track, 0 cylinders, total 0 sectors + Units = sectors of 1 * 512 = 512 bytes + + Device Boot Start End Blocks Id System + hd0.img1 * 63 3515903 1757920+ 83 Linux + hd0.img2 3515904 4193279 338688 82 Linux swap / Solaris + +Now take the number of sectors for the beginning of the partition and multiply it by the sector size. My partition starts at sector 63 and I have a sector size of 512 therefor my offset is 32256. + + # mount -o loop,offset=32256 hd0.img /mnt/diskimage + +## Having QEMU create *virtual FAT disk images* + +[Manual](http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC24). + +QEMU has a facility to create FAT file systems on-the-fly: + + qemu [...] -hdc fat:[somewhere] + +The Hurd [[`fatfs`_translator|translator/fatfs]] currently is read-only, but +for testing executables (etc.) that is enough. And it is much easier than +loop-mounting the file systems images. (Also you don't need `root' rights.) + + +# Networking in QEMU + +Some further notes about [[networking]] and home hints about +[[networking/sharing_files]]. + +## Internet Access + +If you just want to access the internet from within QEMU, you can setup pfinet for QEMU's user-networking: + + # settrans -afgp /servers/socket/2 /hurd/pfinet -i eth0 -a 10.0.2.15 -g 10.0.2.2 -m 255.255.255.0 + # echo "nameserver 10.0.2.3" > /etc/resolv.conf + +(See also <http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC30>.) + +Outgoing internet connections should just work then. + +If you want to connect from the host system to the Hurd system running in QEMU, you need to setup something more advanced, like bridged networking. + + +## Bridged Networking + +### What is Needed + +1. Your Linux kernel will need 802.1d Ethernet Bridging support and TUN/TAP device driver support. +2. You will need to install [bridge-utils](http://bridge.sourceforge.net). + + +### Setting Up the Host Bridge + +You need to setup a bridge on the host first. This assumes `eth0` is down. I have modified my hosts network startup scripts to automatically setup a bridge, you may want to do this also. + + # brctl addbr br0 + # ifconfig eth0 0.0.0.0 promisc up + # brctl addif br0 eth0 + +At this point you will need to setup `br0` as you would normally `eth0` (`dhcpcd br0` for example). + +### The qemu-ifup Script + +This script gets called when QEMU starts and will attach the tun device to the bridge. QEMU will look for this file at `/etc/qemu-ifup` and that is where I keep mine. + + #!/bin/sh + sudo ifconfig $1 0.0.0.0 promisc up + sudo brctl addif br0 $1 + + +### Setting up the Network in the Hurd + +Now it is time to start-up your QEMU Hurd system and get networking going in there. + +**Important:** Remember you may need to use the `-M isapc` or `-isa` flag if using an older version of the gnumach package. + + $ qemu -hda hd0.img -cdrom debian-K9-hurd-i386-CD1.iso -fda floppy.img -boot a -net nic -net tap + +Once you have logged in as `root` run the `pfinet` translator with values that apply to your network. Think of your QEMU client as another computer in your network. + + # settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a xxx.xxx.xxx.xxx -g xxx.xxx.xxx.xxx -m xxx.xxx.xxx.xxx + +That should do it! Do not forget to edit/update `/etc/resolv.conf` to get DNS working. + + +# Related Links + +These are links that users may find helpful. + +Debian [[debian/after_install]] -- good source of information pertaining to your +system after installation. + +[[Image_for_L4]] -- a QEMU image for the Hurd/L4 project. + +<http://eyeside.net/hurd/Hurd-on-QEMU.html> + + +# TODO + +[[IRC]], #hurd, 2007-07-04. + + <azeem-uni> so, is there a way to use a Debian GNU/Hurd partition (/dev/hda6) with qemu directly? + <tschwinge> Don't dare to do that, please. + <tschwinge> It will lead to inconsistencies. + <tschwinge> Because the Linux kernel thinks that it has complete control over the disk, or something. + <tschwinge> In theory you could run something like ``-hda /dev/hda'', having GRUB installed on there to offer you to boot your Hurd system from hda6 and that will even work, but then don't get the idea to stop qemu, mount that partition on your Linux system and restart qemu. That's where I got lots of inconsistencies then, afterwards. + <azeem-uni> it's probably the same problem as having that partition mounted, suspending to disk, booting into it in the Hurd, and resume Linux + <neal> right + <tschwinge> That's a different problem. + <tschwinge> Then the partitoon is still mounted. + <neal> no, I think it is basically the same problem + <tschwinge> The file system stuff is cached in the kernel. + <neal> you have data that has not been written to disk yet + <tschwinge> Right. + <neal> and neither is prepared for the resource to be shared + <tschwinge> In the azeem-uni scenarion the data is on the file system layer and in my scenarion it's some disk block caching inside the Linux kernel, I guess. + <azeem-uni> anyway, do you guys think if I use -hda /dev/hda and tell Grub to boot off /dev/hda6, that the rest of hda should be fine, right? + <azeem-uni> maybe adding -snapshot makes it totally safe + <neal> azeem: Should be fine. + <tschwinge> Yes. + +The problem is actually that the linux block cache doesn't make any consistency between /dev/hda and /dev/hda6, so if you give /dev/hda to qemu, qemu writings won't be consistent with mounting /dev/hda6 in linux. You can give /dev/hda6 directly to qemu and it will be fine. + diff --git a/hurd/running/qemu/image_for_l4.mdwn b/hurd/running/qemu/image_for_l4.mdwn new file mode 100644 index 00000000..515f51bc --- /dev/null +++ b/hurd/running/qemu/image_for_l4.mdwn @@ -0,0 +1,376 @@ +This page is initially taken from <http://perso.ens-lyon.fr/alexandre.buisse/hurd.html> with the following signature: + +> 04-02-2005 Alexandre Buisse +> +> Send any comments or ameliorations to <Nattfodd@gmailNOSPAM.com> + +---- + +This is a howto on how to get a working image of Hurd/L4 with qemu, on ia32 arch. + +# <a name="1_Floppy_image"> 1. Floppy image </a> + +You will need the following : + +* automake 1.7 (or greater) +* autoconf 2.53 (or greater) +* grub +* the CVS version of hurd-l4, which you can retrieve from the savannah server: `cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co hurd-l4` +* two flavours of Pistachio, the L4 kernel, which can be found at <http://www.l4ka.org/projects/pistachio/download.php>. Take the demodisk for ia32 (`pistachio-ia32-0.4-demodisk.bin.bz2`), we'll checkout the CVS later (the 0.4 tarball isn't recent enough). + +We will begin with the hurd itself (these steps are taken from the `README`). + + $ cd hurd-l4 + $ autoreconf -f -i -s + +You shouldn't have any warnings with this autoreconf. If that is not the case, it probably hasn't used the good version of automake or autoconf. For instance, on Gentoo Linux, you must set WANT\_AUTOCONF to 2.5 and WANT\_AUTOMAKE to 1.7. + + $ ./configure --enable-maintainer-mode --prefix=/l4 + $ make + $ make install + $ mkdir /l4/boot + $ install -s laden/laden /l4/boot + $ install -s wortel/wortel /l4/boot + $ install -s physmem/physmem /l4/boot + $ install -s task/task /l4/boot + $ install -s deva/deva /l4/boot + $ install -s ruth/ruth /l4/boot + +Now we'll prepare the Pistachio kernel : + + $ cd .. + $ cvs -d:pserver:guest:guest@cvs.l4ka.org:/public-cvs login + $ cvs -z3 -d:pserver:guest@cvs.l4ka.org:/public-cvs co pistachio + $ cd pistachio + +We must apply some patchs for it to work properly with The Hurd. They are located in `hurd-l4/README`: + + $ patch -p1 < ../hurd-l4/README + +We will first compile sigma0 (and some other tools) : + + $ cd user + $ autoreconf -f -i -s + $ mkdir BUILDDIR + $ cd BUILDDIR + +We need to change the linkbase of sigma0 : + + $ ../configure --with-s0-linkbase=0x40000 --prefix=/l4 + $ make + $ make install + +And now the kernel itself : + + $ cd ../../kernel + +You can use any builddir as long as the directory doesn't yet exist. + + $ make BUILDDIR=/tmp/pistachio-build + $ cd /tmp/pistachio-build + $ vi Makeconf.local + +You should modify the first three lines to : + + ARCH=ia32 + CPU=i586 + PLATFORM=pc99 + +now run: + + $ make menuconfig + +Set the options as they fit you but for qemu to work, you must have the following hardware : + + IA32 Basic Architecture + Pentium1 Processor Type + +You can now: + + $ make + +You should obtain a file named ia32-kernel into your build directory. + + $ cp ia32-kernel /l4/boot + $ cp /l4/libexec/l4/sigma0 /l4/boot + +We now have to modify a little bit the demodisk to use the kernel and servers we just obtained : + + $ mkdir qemu + $ mkdir qemu/image + $ cd qemu + $ cp ~/pistachio-ia32-0.4-demodisk.bin.bz2 . + $ bunzip2 pistachio-ia32-0.4-demodisk.bin.bz2 + $ mount -o loop pistachio-ia32-0.4-demodisk.bin image + $ cd image/boot + $ cp /l4/boot/* . + $ cd grub + $ vi menu.lst + +Your should edit `menu.lst` to make it look like : + + title GNU Hurd on L4 + kernel /boot/laden -D -o serial,uart1,speed=9600 + module /boot/ia32-kernel + module /boot/sigma0 + module /boot/wortel -D -o serial,uart1,speed=9600 + module /boot/physmem + module /boot/task + module /boot/deva + module /boot/task + module /boot/ruth + +The two -D are intended for debug, you can delete them if you want. It is possible that filenames are limited to 8 characters, check your image/boot directory for ia32-kernel. If it has been renamed into ia32-ker, modify the according line in menu.lst + +When you start qemu, you will have two windows : the shell from which you launched it and a VGA window. You can interact with L4 in both windows (switching with the `config/console` command in the debugger). You can choose to have wortel and laden output to the serial device (the shell), which is default behaviour, or to VGA (change `-o serial,urt1,speed=9600` by `-o vga` in your menu.lst). + +The image is now ready : + + $ cd ../../../ + $ umount image + +We can launch qemu: + + $ qemu -dummy-net -serial stdio -fda pistachio-ia32-0.4-demodisk.bin -boot a + +Congratulations, you just booted Hurd/L4 ! To start the Kernel Debugger, press `ESC`. To switch the KDB mode from character (I find it unusable) to command line, type + + > c + /conf> m + +# <a name="2_Disk_Image"> 2. Disk Image </a> + +Everything went fine, and Hurd/L4 should have shown you a nice boot on our floppy image. Our next step will be to make banner run and show us its nice ASCII Art on this brand new OS. + +However, there is one problem : banner linked with the libc weights about 6MB, and we only have a 1.44MB floppy. We will then begin with making an image of a whole hard disk instead of a simple floppy. + +We still will work with qemu, of course, but we'll also use Bochs to install Grub on the image (I have not yet tried with qemu). + +To begin with, some mathematics. We'll make a 30MB image but you can adapt this value to your need. A disk is made of heads, cylinders and sectors (we won't go in detail about what these really mean). A sector has a constant size of 512 bytes and there are at most 255 heads and 63 sectors. The total size of a disk is C \* H \* S \* 512. We'll use the maximum capacity for S and 16 sectors and that will give us how much cylinders we need : C = E(30,000,000 / (16 \* 63 \* 512)) = 58. The exact size of our image will then be : 58 \* 16 \* 63 \* 512 = 29,933,568 bytes and we will have 58 \* 16 \* 63 = 58464 pieces of 512 bytes. + +Let's create it : we use the magic command `dd` on the special device which contain an infinity of 0. + + $ dd if=/dev/zero of=hurd_l4.img bs=512 count=58464 + 58464+0 records in + 58464+0 records out + +We will mount it in loopback : + + $ losetup /dev/loop0 hurd_l4.img + +We need now to have it recognized as a hard disk : + + $ 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 + content won't be recoverable. + + Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) + + Command (m for help): + +We should create a new primary partition (press: `'n'`, `'p'`, `'1'`, default, default) and toggle it bootable (`'a'`, `'1'`). Now, if you press `'p'`, you should see something like : + + Command (m for help): p + + Disk /dev/loop0: 29 MB, 29933568 bytes + 16 heads, 63 sectors/track, 58 cylinders, total 58464 sectors + Units = sectors of 1 * 512 = 512 bytes + + Device Boot Start End Blocks Id System + /dev/loop0p1 * 63 58463 29200+ 83 Linux + +If everything is fine (especially check the `Start` and `End` fields), you can press `'w'` to write the table on the disk: + + Command (m for help): w + The partition table has been altered! + + Calling ioctl() to re-read partition table. + + WARNING: Re-reading the partition table failed with error 22: Invalid argument. + The kernel still uses the old table. + The new table will be used at the next reboot. + Syncing disks. + +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 + +Now comes time to format it into a decent filesystem : + + $ mke2fs /dev/loop0 + mke2fs 1.35 (28-Feb-2004) + Filesystem label= + OS type: Linux + Block size=1024 (log=0) + Fragment size=1024 (log=0) + 7328 inodes, 29200 blocks + 1460 blocks (5.00%) reserved for the super user + First data block=1 + 4 block groups + 8192 blocks per group, 8192 fragments per group + 1832 inodes per group + Superblock backups stored on blocks: + 8193, 24577 + + Writing inode tables: done + Writing superblocks and filesystem accounting information: done + + This filesystem will be automatically checked every 22 mounts or + 180 days, whichever comes first. Use tune2fs -c or -i to override. + +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/ + +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 + +We will make a grub bootimage and boot it with bochs : + + $ cat stage1 stage2 > grubboot.img + +Copy the following into `.bochsrc` (replace the parts in caps by the right info) : + + config_interface: textconfig + display_library: x + romimage: file=/usr/share/bochs/BIOS-bochs-latest, address=0xf0000 + megs: 32 + vgaromimage: /usr/share/bochs/VGABIOS-elpin-2.40 + floppya: 1_44=PATH_TO_YOUR_GRUBBOOT_IMAGE, status=inserted + ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 + ata1: enabled=0, ioaddr1=0x170, ioaddr2=0x370, irq=15 + ata0-master: type=disk, path="PATH_TO_YOUR_DISK_IMAGE", cylinders=NUMBER_OF_CYLINDERS, heads=16, spt=63 + newharddrivesupport: enabled=1 + boot: a + + log: /dev/stdout + panic: action=ask + error: action=report + info: action=report + debug: action=ignore + debugger_log: - + com1: enabled=1, dev=/dev/ttyS0 + vga_update_interval: 300000 + keyboard_serial_delay: 250 + keyboard_paste_delay: 100000 + floppy_command_delay: 500 + ips: 1000000 + mouse: enabled=0 + private_colormap: enabled=0 + fullscreen: enabled=0 + screenmode: name="sample" + keyboard_mapping: enabled=0, map=/usr/share/bochs/keymaps/x11-pc-fr.map + i440fxsupport: enabled=0 + +And start Bochs with this configuration : + + $ bochs -qf .bochsrc + +When asked, choose `5. begin simulation`. It is possible that you enter first into a debugger, answer `'c'` to make it continue. You should see a grub commandline. Tell it to install grub on the disk : + + grub> root (hd0,0) + Filesystem type is ext2fs, partition type 0x83 + + grub> setup (hd0) + Checking if "/boot/grub/stage1" exists... yes + Checking if "/boot/grub/stage2" exists... yes + Checking if "/boot/grub/e2fs_stage1_5" exists... yes + Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded + Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2/boot/grub/menu.lst"... succeeded. + Done. + +Quit by pressing `^C q` in the shell from which you launched bochs. Our image is now ready. Copy all the releving files in `mnt/boot` like for the floppy and then umount it and launch qemu : + + $ cp /l4/boot/* mnt/boot/ + $ umount mnt + $ qemu -serial stdio -dummy-net -hda hurd_l4.img -boot c + +# <a name="3_Running_Banner"> 3. Running Banner </a> + +Still under construction but you should have no problems following `hurd-l4/libc/README` now that the hdd image works. + +---- + +-- [[Main/OgnyanKulev]] - 05 Feb 2005 + +I didn't bother to licence it as it is so small, but consider it is under some sort of creative commons that allows redistribution and modification. <br /> -- Alexandre Buisse < <nattfodd@gmailNOSPAM.com> > + +-- [[Main/JoachimNilsson]] - 05 Feb 2005 + +Comments from Marcus Brinkmann: + +> Thanks a lot for that. Some comments: +> +> $ ../configure --with-s0-linkbase=0x40000 --prefix=/l4 +> +> I'd recommend to explain how to use `--without-com0` here (or whatever it is called, don't remember) to choose VGA output, or how to configure the serial port. If you use vga, no `-o` option to laden and wortel should be used so you get all output on vga (but of course you can also mix it, whatever you want). +> +> Serial 1 is currently going to be used for remote debugging of userland apps. +> +> QEMU supports up to four serial ports, I use: `-serial stdio` and `-serial pty` and then I get the debugging output and kernel debugger in the terminal I started qemu in, and can use the pty for remote debugging with gdb (the latter doesn't work yet). +> +> Next: +> +> You should modify the first three lines to : +> ARCH=ia32 +> CPU=i586 +> PLATFORM=pc99 +> +> I never did that. I did change the menu item Processor Type to Pentium1 though. Maybe it has the same effect (and then your document would be a bit redundant here). +> +> Somebody should at some point document all those menu options, some are quite useful for debugging! +> +> Thanks, Marcus + +-- [[Main/OgnyanKulev]] - 05 Feb 2005 + +I've been doing this sort of thing (See also `info grub` for making bootable eltorito grub cd ISOs): + + $ cd /usr/src/controlled/qemu-images + $ ls -R l4 + ls -R l4 + l4: + boot deva ia32-kernel laden physmem sigma0 task wortel + + l4/boot: + grub + + l4/boot/grub: + menu.lst stage2_eltorito + + $ cd /usr/src/controlled/qemu-images # dir above "l4" dir. + $ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ + -boot-load-size 4 -boot-info-table \ + -o /usr/src/controlled/qemu-images/l4.iso l4 + + $ qemu -boot d -cdrom /usr/src/controlled/qemu-images/l4.iso + +-- [[Main/DerekDavies]] - 07 Feb 2005 + +You don't need a compiler targeting the Hurd. The above works with a compiler targeting Linux which are quite a bit easier to find. By adding "--target=i686-unknown-linux-gnu" to my configure line, I was able to cross compile hurd-l4 from Cygwin. + +-- [[Main/MichaelAdams]] - 22 Feb 2005 + +A bootable CD iso image is now available at <http://gnuppix.org> + +-- [[Main/ChristopheDevine]] - 03 Mar 2005 + +Included the anonymous password in the CVSROOT for L4. + +-- [[Main/NowhereMan]] - 19 Mar 2005 + +I was able to use qemu instead of bochs to install grub on the new disk image. Just use: + + qemu -dummy-net -serial stdio -fda grubboot.img -hda hurd_l4.img -boot a + +and then the commands to type in the grub shell are the same. + +-- [[Main/MatteoSettenvini]] - 05 May 2005 diff --git a/hurd/running/qemu/microsoft_windows.mdwn b/hurd/running/qemu/microsoft_windows.mdwn new file mode 100644 index 00000000..736adf62 --- /dev/null +++ b/hurd/running/qemu/microsoft_windows.mdwn @@ -0,0 +1,52 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Welcome, This document is for getting you started in a few minutes. + +1. Install Qemu for Windows + + The executable can be downloaded from + <http://free.oszoo.org/ftp/qemu/win32/release/> Doble click on the + installer and follow the instructions. + +2. Obtain Qemu image + + * Debian GNU/Hurd qemu image can be downloaded from + <http://www.numenor.art.pl/balrog/hurd/>, but also see the main + [[QEMU]] page. + * Uncompress the image and rename it to debian-hurd-for-qemu.img (.img is + the only thing that matters, you can chose any name) Note: .img is for + QEMUMenu.bat, which saves you from remembering the command line options + of qemu and helps you change the settings (like chosing different + images, allocating RAM for the guest OS ...) interactivly. + * Copy this file to the directory where you installed Qemu. + +3. Start Qemu + + Double click the QEMUMenu.bat and enter the number to chose between images. + +4. Qemu short cuts + + * ctrl alt - to exit grab from qemu, get mouse cursor out from the qemu + window + * ctrl alt f - full screen + * ctrl alt 2 - qemu contrl console, use this to change devices + (eg. changing cdrom), send keys to the guest (for example if you want + to send ctrl alt del to the guest type "sendkey ctrl-alt-del" ... type + "help" for a listing of all the options. + * ctrl alt 1 - Hurd login console + +## QEmu Image Hangs on Boot +The Debian GNU/Hurd K16 QEmu image hangs during the boot process. You may have better luck by converting the image to qcow format + + ..\qemu-0.9.0-x86\qemu-img.exe convert debian-hurd-k16-qemu.img -O + qcow debian-hurd-k16-qemu.qcow + ..\qemu-0.9.0-x86\qemu.exe -L ..\qemu-0.9.0-x86 -m 512 -hda + debian-hurd-k16-qemu.qcow -localtime -M pc diff --git a/hurd/running/qemu/networking.mdwn b/hurd/running/qemu/networking.mdwn new file mode 100644 index 00000000..8014e303 --- /dev/null +++ b/hurd/running/qemu/networking.mdwn @@ -0,0 +1,43 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## User mode network + +This is the default networking option for qemu. This does not require root +previleges. If you have DHCP running it will take the ip as 10.0.2.15 + +You can setup an ip 10.0.2.* +Gateway is 10.0.2.2 +Name server is 10.0.2.3 +Netmask is 255.255.255.0 + +You can setup the pfinet translator with the command + + $ settrans -fgap /servers/socket/2 /hurd/pfinet -a 10.0.2.15 -g 10.0.2.2 -m 255.255.255.0 + +Configure nameserver in /etc/resolve.conf + + nameserver 10.0.2.3 + +Setup a proxy with the command + + $ export http_proxy="http://<proxy.com>:<port>" + +Note: you can add this to your /etc/profile file so that every time you don't +have to setup this. + +If you are using a direct connection to internet install a proxy server on the +host os and use this. (I was not able to use it without proxy) + +You might be able to do it using iptables, some clues +<http://sujith-h.livejournal.com/9520.html> + +Use scp,ftp... to transfer files (also see +[[hurd/running/debian/faq#index2h1]]), read about [[sharing_files]]. diff --git a/hurd/running/qemu/networking/sharing_files.mdwn b/hurd/running/qemu/networking/sharing_files.mdwn new file mode 100644 index 00000000..c0bd99e2 --- /dev/null +++ b/hurd/running/qemu/networking/sharing_files.mdwn @@ -0,0 +1,38 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# SCP + +Setup OpenSSH server on host system. + +* Copying files from Guest to Host + + $ scp <file> <user>@<host>: + +* Copying files from Host to Guest. + + $ scp <user>@<host>:<file> + +Use scp -r for copying directories. + + +# FTP + +Setup ftp server (like proftpd) on the host. + +* Use ftp client from GNU inetutils + + $ ftp <host> + + Use mget to copy files from host and mput to copy files to the host. + +* The GNU way - setup an ftp translator + + $ settrans -ac ftp/<host> /hurd/ftpfs <username>:<password>@<host>:<path> diff --git a/hurd/running/vmware.mdwn b/hurd/running/vmware.mdwn new file mode 100644 index 00000000..0f15939e --- /dev/null +++ b/hurd/running/vmware.mdwn @@ -0,0 +1,56 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Installation + +Use <http://www.easyvmx.com/> web based tool to create vmx configuration files +which can be used with VMware player (which is a freeware). If you have a +VMware workstation or server you don't have to do this step. + +Note: I have tried it with K10 version of Debian GNU/Hurd on VMware running on +a Debian GNU/Linux machine. + +You can get more information about obtaining Debain GNU/Hurd CDROMS from +<http://www.us.debian.org/ports/hurd/hurd-cd>. + +Insert the first cdrom and proceed with the installation as per the +installation guide <http://www.us.debian.org/ports/hurd/hurd-install>. + +## VMware specific notes: + +You will need a grub floppy image to boot GNU/Hurd. I have attached a copy of +it with this document. You can also download it from here +<http://www.update.uu.se/~ams/home/slask/GNU/grub.img>. + +When you reboot the machine after the base tar ball is extracted (first reboot) +press 'Esc' key while VMware start up and set removable devices as the fisrt +boot device. + +Select "GNU (Also known as GNU/Hurd)" ie, the first option and press 'e' to +edit the grub menu and go to second line and press 'e' again to change +/boot/gnumach to /boot/gnumach.gz. + +Add a link to /boot/gnumach from /boot/gnumach.gz so that you don't have to +edit grub every time you boot. + + # ln -s /boot/gnumach.gz /boot/gnumach + +Or mount the floppy image and change it. + + # mkdir /media/floppy + # mount -o loop <path-to-grub.img> /media/floppy + +Edit /media/floppy/boot/grub/menu.lst with your favorite text editor and change +/boot/gnumach to /boot/gnumach.gz. + +## After install tweaks + +Start using GNU, here is +<http://www.gnu.org/software/hurd/users-guide/using_gnuhurd.html>. diff --git a/hurd/running/vmware/discussion.mdwn b/hurd/running/vmware/discussion.mdwn new file mode 100644 index 00000000..65179cec --- /dev/null +++ b/hurd/running/vmware/discussion.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +I find that this is all quite quick to try and that I can run through the +./native-install and reboot cycle twice OK. However, at that point the +installed Hurd boots up but fails to display a login prompt. This is the case +for both K10 and K14 using VMware Workstation 5.0.0 under Windows XP. Maybe +I'm doing something wrong but it is hard to see what. I'd be interested to +know more precisely what other people find does work. + +--IanMiller - 01 Apr 2007 diff --git a/hurd/settrans.mdwn b/hurd/settrans.mdwn new file mode 100644 index 00000000..e4383961 --- /dev/null +++ b/hurd/settrans.mdwn @@ -0,0 +1,37 @@ +[[meta copyright="Copyright © 2002, 2004, 2005, 2007, 2008 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]]."]]"""]] + +The `settrans` command is used to attach a [[translator]] (server) to a given +[[file_system_node|virtual_file_system]]. + +`settrans` is commonly used like this: + + $ settrans -fgap *NODE* *TRANSLATOR SETTING* + + * `fg`, **f**orce any existing translator to **g**o away from that node. + * `ap`, start an ***a**ctive translator*, and also establish a ***p**assive + translator* setting. + +*Active translator* means that the operating system starts the translator +immediately and *passive translator* in turn means that the settings are +instead saved in the file system node, and then, when programs access the node +by, for example, sending an [[RPC]], the Hurd will transparently start the +server to handle the request. + + +Help on settrans can be obtained by passing it the `--help` option. + +Likewise, help on a specific translator can be gotten by invoking it from the +command line with the same argument, e.g.: + + $ /hurd/pfinet --help + +As there can be a lot of output, consider piping this through a pager. diff --git a/hurd/status.mdwn b/hurd/status.mdwn new file mode 100644 index 00000000..a84d7c45 --- /dev/null +++ b/hurd/status.mdwn @@ -0,0 +1,36 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The Hurd team doesn't create hurd-only releases, but instead relies +on a distribution done by folks from **Debian**. + +That Debian version closely tracks the progress of the Hurd +(and often includes many new features), +so little would be gained by creating an official pure Hurd release. + +The Debian GNU/Hurd [[distribution|running/debian]] offers **livecds and qemu images** +to test-drive the Hurd in a real life system with access to about +50% of the Debian software archive. + +The most recent version of the Debian port at the time of writing +is **Debian GNU/Hurd K16**. + + +That said, the last official release of the Hurd +without the Debian parts was 0.2 done in 1997. + +New official releases will be done, as soon as +the Hurd is sufficently stable and feature +complete. If an official release of the Hurd were made +now, people would try the Hurd and be disappointed. People +already expect delays; to disappoint them in this way as +well would be unfortunate. Moreover, it would lessen the +possibility that they would want to try the Hurd again in the future. + diff --git a/hurd/subhurd.mdwn b/hurd/subhurd.mdwn new file mode 100644 index 00000000..8816e312 --- /dev/null +++ b/hurd/subhurd.mdwn @@ -0,0 +1,122 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +A sub-Hurd is like a [[neighbor_Hurd|neighborhurd]], however, makes use of some +resources provided by another Hurd. For instance, backing store and the +console. + +Sub-hurds are extremely useful for debugging core servers as it is possible to +attach to them with gdb from the parent +([[debugging_via_subhurds|debugging/subhurd]]). This avoids deadlock, e.g., +when the instance of gdb stops the server but requires its use. (Note: it is +possible to use [[debugging/gdb/noninvasive_debugging]], but this is less +flexible.) + + +# Howto + +## Preparing + +To run a subhurd, you need an additional partition with an installed Hurd +system. In principle, you can also use your main partition in read-only mode; +but this obviously will create severe limitations. Usually, you will want a +complete independant system. + +The system for the subhurd is a normal Hurd installation, which could just as +well run standalone. You can use any of the various possible installation +methods, or reuse an existing installation if you already have several. If +using [[Debian_GNU/Hurd|running/debian]], the easiest is probably to use +[[running/debian/crosshurd]], which you can run directly from your main Hurd to +set up another Hurd on a different partition, without ever rebooting. (You can +run the `native-install` step from a chroot or already in a subhurd.) + + +## Booting + +To boot the subhurd, you need a boot script. For historical reasons, usually +`/boot/servers.boot` is used. (Originally, this was also used to boot the main +Hurd, using "serverboot". Nowadays, this isn't used for the main boot anymore, +as GRUB can directly load all the necessary modules.) + +However, the canonical `/boot/servers.boot` file is no longer distributed with +[[Debian_GNU/Hurd|running/debian]]. Here is a slightly adopted version: + + # Boot script file for booting GNU Hurd. Each line specifies a file to be + # loaded by the boot loader (the first word), and actions to be done with it. + + # First, the bootstrap filesystem. It needs several ports as arguments, + # as well as the user flags from the boot loader. + /hurd/ext2fs.static --bootflags=${boot-args} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -Tdevice ${root-device} $(task-create) $(task-resume) + + # Now the exec server; to load the dynamically-linked exec server program, + # we have the boot loader in fact load and run ld.so, which in turn + # loads and runs /hurd/exec. This task is created, and its task port saved + # in ${exec-task} to be passed to the fs above, but it is left suspended; + # the fs will resume the exec task once it is ready. + /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + + ## default pager + #/dev/sd0b $(add-paging-file) + +/!\ It's very important not to introduce spurious line breaks, so be very +careful when copying! All the options following `ext2fs.static` have to be on +a single line. + +Now actually booting the subhurd is a simple matter of issuing (as root): + + boot servers.boot /dev/hd0s6 + +(Replace `hd0s6` by the name of your partition for the subhurd.) + +/!\ The partition must be unmounted (or mounted read-only) before you boot from +it! + +(In theory it shouldn't be neccessary to run the subhurd as user `root`, but in +practice [that doesn't work at the +moment](http://savannah.gnu.org/bugs/?17341).) + +Now the subhurd should boot just like a normal Hurd started directly from GRUB, +finally presenting a login prompt. The `boot` program serves as proxy for the +subhurd, so you can control it from the terminal where you issued the boot +command. + +To exit the subhurd, issue `halt` or `reboot`. This should exit it cleanly, +but for some reason it doesn't always work; sometimes it will output various +errors and then hang. If that happens, you need to kill the subhurd processes +manually from a different terminal. + + +## Using + +In the subhurd, you can do basically all the same things as in the main Hurd. + +You can even set up networking: Just invoke `settrans` on the +`/servers/socket/2` as usual inside the subhurd, only using a different local +IP than in the main Hurd. This way, the subhurd will be able to communicate to +the outside world with its own IP -- allowing for example to do `apt-get` +inside the subhurd, or to `ssh` directly into the subhurd. + +If you want to access the subhurd processes from the outside, e.g. for +[[debugging_purposes|debugging/subhurd]] (or to get rid of a subhurd that +didn't exit cleanly...), you need to find out how main Hurd PIDs correspond to +subhurd processes: the subhurd processes appear in the main Hurd (e.g. if doing +`ps -e`) as unknown processes, and vice versa, but the PIDs are different! To +find out which process is which, you can simply compare the order -- while the +numbers are different, the order should usually match. Often it also helps to +look at the number of threads (e.g. using `ps -l`), as many servers have very +characteristic thread counts. + + +# Further Info + +Read about using a subhurd for [[debugging_purposes|debugging/subhurd]]. + +Roland's [tutorial](http://www.gnu.org/software/hurd/howto/subhurd.html) on +setting up sub-hurds. diff --git a/hurd/toolchain.mdwn b/hurd/toolchain.mdwn new file mode 100644 index 00000000..e94029ba --- /dev/null +++ b/hurd/toolchain.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +* [[binutils]] +* [[GCC]] +* [[glibc]] + +Before beginning to work on the inner parts of the GNU/Hurd toolchain, it's +always profitable to also know how things are done on other systems. Compare, +for example, how things are done differently for GNU/Hurd than they are done +for GNU/Linux. diff --git a/hurd/translator.mdwn b/hurd/translator.mdwn new file mode 100644 index 00000000..b9952931 --- /dev/null +++ b/hurd/translator.mdwn @@ -0,0 +1,186 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +A translator is simply a normal program acting as +an object server and participating in the Hurd's +distributed [[virtual_file_system]]. It is so-called +because it typically exports a file system +(although need not: cf. [[auth]], [[proc]] +and [[pfinet]]) and thus translates object invocations +into calls appropriate for the backing store +(e.g., ext2 file system, nfs server, etc.). + +A translator is usually registered with a specific file system node by using +the [[`settrans`|settrans]] command. + +Translators do not require any special privilege +to run. The privilege they require is simply +that to access the indiviudal resources they use. +This is primarily the [[backing_store]] and the node +they attach to. Typically, a translator can +only be attached to a node by the node's owner. +On [[Unix]] this is not possible because file systems +and the virtual file system are implemented in the +kernel and thus have absolute access to the machine. +As the protocols do not require any special privilege +to implement, this is not an issue on the Hurd. + +To learn how to write a translator, read the code! +It is well documented, in particular, the header files. +The [[Hurd_Hacking_Guide]] also has a tutorial. + +Also there is an [[writing/example]] about how to write a simple translator. + +See some [[examples]] about how to use translators. + + +# Existing Translators + +* [[pfinet]] +* [[pflocal]] +* [[hostmux]] +* [[storeio]] +* [[ext2fs]] +* [[fatfs]] +* [[magic]] +* [[mboxfs]] +* [[unionfs]] +* [[xmlfs]] +* ... + + +# Translators Being Under Development + +* [[random]] +* [[emailfs]] -- email as a filesystem +* [[cvsfs]] +* [[tmpfs]] +* [[procfs]] +* ... + + +# Translator wishlist + +* FUSE(fuse.sourceforge.net/) compatilbility library. : just modify FUSE apps a and compile little to work as translator :-) + +* File Finder. (uses find, grep, a combination or a custom command (htdig, mp3 info) + * Files found will be available under one directory and then can be used like a normal directory + * usefull to generate Albums, Share only resulting files over the et, etc.. + * The filefinder can be scheduled or can be connected over some ipc like dbus to the VFS system if any to keep a watch for new files. + +* GNOKII, BitPim and openobex as translators + * grep through your SMSs! + * share your addressbook! + * "Attach" that funny SMS/MMS to your email. + * "svn commit" your joke collection :-D + +* Real Language Translator [[br]] + * cat /usr/translator/de-en/usr/share/doc/something.txt should take /usr/share/doc/something.txt , submit it to google's website and bring back results. + +* Mozilla Bookmarks = del.ici.ous + * Need more explanation ? ;-) + +* <http://hnb.sf.net> + * having a directory structure for a file can allow to "svn commit" the hnb document in a more "node-safe" manner, thus allowing multiple people to work on the same hnb document. + * This must be fairly easy as HNB can already export to XML and XMLfs already exists. + +* DavFS + * Just setup a 'WebDav share' as a directory. The implimentation of the protocol is already available in nautilus and konqueror. + +* Compiled form of your project + * you have your project in /somedir/project with source in /somedir/project/src .. /somedir/project/bin should always have the compiled version.. is it possible? + * The source has to have a MakeFile. + * creating /somedir/project/bin-somearch should aotomatically crosscompile + * Seems feasible for a small project. + +* Report generation FrameWork - an idea to be hugged by app developers..not kernel developers. + * You have financial data in some Spreadsheet like format in /yourFinance directory + * You add report templates to /yourFinance/repTemplates + * Once you save data in /yourFinance the next cat /yourFinance/reports/areportname will give you an uptodate report. + * This will be usefull for any purpose including serving by static page web servers, sharing over samba/nfs/ftp etc.! + * The advantage is any save to the spreadsheet will update the report.. not just from one software. + +* SVN (Subversion suite) + * like [[cvsfs]]. /svndir/version/version-no should automatically have subversion + * I think it is nice to write a generalised version control system framework library which will help in writing version control translators and other tools easily. + +* Flexi-acls + * First of all - Can this be done? : A translator bound to a directory must be able to access the contents of the directory which would have been accessible in the absence of the translator.. + * This will enable to wirte translators that can implement custom "Access Control Lists". Just imagine having advanced ACLs even if underlying FileSystem is dumb! Imagine changing the type of ACLs implemented with Just two commands - one to unattach previous translator and the next to attach a different ACL translator! The ACLs themselves may be stored in a different directory + +* The translator manager! + * Some translators will need to be inserted automatically - like for eg: hardware drivers .. + * Each hardware translator will pubish its capabilities. + * The "top" translator will query the capabilities of different hardware and match capabilities with the "slave" translators. That is it's only Job. + * The control is then handed over to the slave translator. + * The ranking not only looks who can handle the "most" capabilites of the hardware. If it finds that multiple translators can handle the same hardware, It will use other parameters to choose between them.. like may be the size in memory? The revision date? Stability (inferred from version number)? And to go to the extreme, the profiling data of the driver ;-P + * Advantage : The best driver wins! + +* An eg. Skip it if you understood the above :-): + * You have a driver that can handle VGA + SVGA + Super3d acceleration + Particle graphics + Works for nvidea card. + * You have a driver that can handle SVGA + VGA . + * You have a driver that can handle VGA. + * Case 1: Your card: A VGA card with some extra fonts.. + * First the VGA driver will be quireied .. ok can handle essential capability. + * Next SVGA driver: can handle but has extra module.. unnecassary weight . + * The Nvidia driver: can handle , but again unnecassary weight : ruled out. + * Winner : VGA driver: + * Case 2: Your card An SVGA card: + * First the VGA driver will be quireied .. ok can handle one essential capability. + * Next SVGA driver: can handle essential and one extra capability no extra weight.. + * The Nvidia driver: can handle , but unnecassary weight : ruled out. + * Winner : SVGA driver.. + * Case 3 : You have an VGA .. but no VGA driver .. then the SVGA driver would win. + +* Sound Server + * /ahsa - stands for Advanced HURD sound architecture :-) Just a temporary name .. for fun. + * /ahsa/out - directory wich will hold "plug"s where apllications come and join the server .. see below. + * /ahsa/out/mixer - main mixer + * /ahsa/out/nextfree - the file when "cat"ed gives the number of the next free plug + * /ahsa/plugins/ - info about available plugins + * /ahsa/out/[1..n]/ - dynamically generated directories for applications to plug on.. + * /ahsa/out/[1..n]/data this is where you should do a "cat somerawsoundfile>/ahsa/out/`cat /ahsa/nextfree`/data" + * /ahsa/out/[1..n]/plugins - the plugin stack .. volume is also a plugin.. + * /ahsa/out/[1..n]/plugins/[1..m]/ - echo "plugin param1 param2 param3" > /ahsa/out/[1..n]/plugins/`cat /ahsa/out/[1..n]/plugins/nextfree`/add + * /ahsa/out/[1..n]/plugins/[1..m]/params/{param1.. paramn} + * /ahsa/out/[1..n]/data.out - can be catted to get data processed through the server + * /ahsa/in - similar to /ahsa/out .. with except for an extra file to choose input devices. + * /ahsa/devs/{1..n} - devices detected .. can be dynamic .. there are usb soundcards and and midi devices. + * /ahsa/out/[1..n]/plugins/[1..m]/0/params/dev + * Dont get tempted for :/ahsa/out/[1..n]/params/{rate, channels, and other stuff} + * that goes into /ahsa/out/[1..n]/plugins/0/params if /ahsa/out/[1..n]/plugins/0/detected == "headerless audio" + * There are a lot more things I can continue about the "sound server" .. The Ideas simply dont seem to exhaust.. + * Some features/advantages + * set output's translator plugin as ordinary text -- have text to speech conversion done by sound server! + * Create and apply plugin presets by simply copying directories! + * Me getting dizzy thinking of the zillion more advantages. + * If you are really doing some ordinary output , all you need to do is "cat" data into next free "plug" and everything will be autodetected including the format of the data and sent to the final sound "merge"r + * Dizzy ... + +* /usr/share/menu !!!! extension for package management idea .. + * cat mymenuitem.menu >> /usr/share/menu/menu + * cat /usr/share/menu/debian/kde ... :-) + +* Spam/Malware Control + * /usr/antimalware/ - put your mail here.. it will automatically be scanned. when finished it will vanish from here .. + * /usr/antimalware/clean - ... and pop out from here + * /usr/antimalware/malware - or here. + +* NetDevice + * !JustImagine(tm)... settrans -ac /netdevices /hurd/netdevfs - [ host | net ] + * One can access device files remotely + * This could be acheived by allowing translators talk to one another over a network + * This will need translators to catch and handle ioctls (if there is such a thing in HURD). + * The device server which will listen to requests from the translators can be run even on a Linux machine!!! + * !JustImagine(tm)... accessing the crwriter/webcam on that GNU/Linux machine on the network using cdrecord of your local hurd machine! + * !JustImagine(tm)... running GNU/HURD on a minimalistic GNU/Linux(but with all the drivers) through a specially modified and optimised Qemu. The device server runs on the host machine, and the client translators access over the virtual network created by Qemu. You got most of the drivers for free! + +* Emacs File VFS + * I came to know from my Emacs loving friend that there are lots of VFS handlers in Emacs.. I was wondering if there can be translator which can tap into these Emacs VFS handlers. diff --git a/hurd/translator/cvsfs.mdwn b/hurd/translator/cvsfs.mdwn new file mode 100644 index 00000000..0dd682bf --- /dev/null +++ b/hurd/translator/cvsfs.mdwn @@ -0,0 +1,52 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Setting up cvsfs on GNU/Hurd - A step by step process + +### Description of cvsfs + +cvsfs is a virtual ([[libnetfs]] based) filesystem allowing you to mount +remotely located CVS modules into your local filesystem. The version +controlled files will appear to you just like regular ones. If you just want +to view one file (or a small bunch) you furthermore save a lot of network +bandwidth since only these files will be downloaded. The usual way to do so +would be to check out the whole tree and deleting it after using. + +## Step by Step process in installing cvsfs + +Download and prepare the source files from the CVS repositiory and build them. + + $ cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/hurdextras co cvsfs + $ cd cvsfs/ + $ autoreconf -i + $ ./configure + $ make + $ make install + +Set up the translator and start grazing. + + $ mkdir -p cvsfs_test + $ settrans -a cvsfs_test /hurd/cvsfs cvs.sourceforge.net /cvsroot/projectname modulename + +Example to mount the cvsfs module on hurdextras to a local directory. + + $ mkdir cvs.d + $ settrans -ac cvs.d/cvsfs /hurd/cvsfs cvs.savannah.nongnu.org sources/hurdextras cvsfs + +Now change to that directory and start using ls, emacs, and whatever you feel +like. :-) + +Happy Hacking. + + +## References + + * <http://www.nongnu.org/hurdextras/> + * <http://cvs.sv.nongnu.org/viewcvs/*checkout*/cvsfs/README?root=hurdextras> diff --git a/hurd/translator/emailfs.mdwn b/hurd/translator/emailfs.mdwn new file mode 100644 index 00000000..04b58f33 --- /dev/null +++ b/hurd/translator/emailfs.mdwn @@ -0,0 +1,287 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# How cool it would be if the email becomes similar to snail mail? + +## Let see how the snail mail works + +* You write the letter with a pen and paper +* You write the "To" address +* Post it -> Put it in a Post Box + +## How Email works + +* You have your email client (and there comes the limitation, you can't use + your favourite editor) +* Fill in destination email address +* Send it (May be a send button or a keyboard shortcut) + +## What are the problems + +If you want to use a wordprocessor for sending email, it should implement a +feature like mail merge, suppose it doesn't have such a feature then? You copy +and paste it to your email client and if it doesn't support HTML? Well you have +work arounds for all these, but how cool it would be if you have something like +this: + +* You create a file, use any wordprocessor or text editor. +* Right click and see the properties +* Set the "To" field +* Drag it to the Post Box icon on your panel next to Trash + +## How can we implement it? + +An SMTP translator which uses extended atributes + +## Comments + +IRC Logs about the discussion on #hurd + +<!-- That smileys are rendered the wrong way below is a ikiwiki bug. --> + +>>>>>>> 5384ccd0a47e900fbdae993143110538248517a2:emailfs.mdwn + + <manuel>j4v4m4n: isn't the HHG a good enough libtrivfs tutorial? + <manuel> the problem I have with mail, blog, ..., translators is that you want to save mails before sending them, so you can't edit directly into the translator + <j4v4m4n> manuel, may be we want a simpler one, all of us are beginners except AB + <manuel> they're not stream-based so unless you save it into memory and wait for "sync" to send mails, it doesn't seem well suited + <manuel> who's AB? + <j4v4m4n> manuel, create any file with your favourite editor and copy it to the directory where SMTP translator is sitting + <j4v4m4n> manuel, Anand Babu + <manuel> sure, but how is that better than sending it via the "mail" command then? + <manuel> except it's less hype, of course. + <j4v4m4n> manuel, http://savannah.gnu.org/users/ab + <j4v4m4n> manuel, it would be cool :-) + <manuel> still not convinced :) + * schlesix (n=thomas@xdsl-81-173-230-219.netcologne.de) has joined #hurd + <j4v4m4n> manuel, set up SMTP translator on the desktop and may be add it next to the Trash :-) + <j4v4m4n> manuel, have a nice postbox icon + <j4v4m4n> manuel, drag your files to it + <j4v4m4n> manuel, it would be closer to the real world and snail mail + <bvk> j4v4m4n: To whom do they go? + <manuel> bvk: the file must be preformatted, probably + <j4v4m4n> bvk, in snail mail you will write to address on top of the envelop, right? + <manuel> j4v4m4n: yeah well, it could make sense in a desktop envronment + <j4v4m4n> bvk, here we can have it as the first line of the file + <manuel> not sure + <bvk> j4v4m4n: i never used snail :( + <j4v4m4n> manuel, that is what I have in mind + * j4v4m4n like snail mail that email + <manuel> bvk: you never sent a mail via snail mail?! :) + * j4v4m4n like snail mail more than email + <bvk> manuel: nope :( whats that btw? + <j4v4m4n> manuel, or why not have it as the file property itself?? + <bvk> manuel: you know its first time i hear it *snail mail* :(( + <j4v4m4n> bvk, the normal mails which a postman delivers :-) + <j4v4m4n> manuel, you create a file text, open document or whatver format + <manuel> j4v4m4n: I'm quite sure it'd make things more complicated in the end, using file properties, dragging files etc. + <j4v4m4n> manuel, righ click and see properties and set the to field + <bvk> Oh, these english words... :X + <j4v4m4n> manuel, we can use the xtended atributes + <j4v4m4n> manuel, which really showcase the power of hurd + <j4v4m4n> manuel, it becomes closer to the real world + <bvk> actually, is X working on hurd? + <j4v4m4n> bvk, well it used to work and the new Xorg release has som + <j4v4m4n> bvk, well it used to work and the new Xorg release has some broken packages + <j4v4m4n> bvk, if you use an old snapshot repository it will work (xorg 6.9) + * marco_g (n=marco@gnu/the-hurd/marco) has joined #hurd + <marco_g> hi + <j4v4m4n> marco_g, hi + * bvk watching MIT lecture video on 'structure and interpretation of computer programs' + <manuel> bvk: yeah, X was ported on GNU/Hurd five-six years ago or so + <j4v4m4n> manuel, see http://hurd.in/bin/view/Main/EmailFS + <j4v4m4n> manuel, add your comments, if you like + <manuel> j4v4m4n: how would you convert the .odt to a mail? + <j4v4m4n> manuel, attachment + <manuel> with an empty mail? + <manuel> that won't get through *most* spam filters :) + <j4v4m4n> manuel, or may be convert it to HTML + <manuel> well converting it to text or HTML would require a set of rules to convert from any format to text/HTML, like a2ps has (some sort of mailcap file) + <j4v4m4n> manuel, it can be flexible, a parameter to the translator as to what should be done with each formats + <manuel> and there's no convenient way to convert ODT to text AFAIK, you need to use ooffice with a batch program, which you need to provide too + <manuel> well that's really complex + <j4v4m4n> manuel, well how will you send me a CD by post? + <j4v4m4n> manuel, or say a bed? + <j4v4m4n> manuel, courier or parcel, right? so attachment is fine + <manuel> sure but you'll add a note saying "this is a bed from Praveen" + <ness> why not add a note to such a mail + <ness> you could even move multiple files simultaneously to the mail translator + <manuel> hm + <manuel> so how is the translator supposed to know that all the files I move are to be sent in a single mail and not on separate mails? + <manuel> and how'll you be able to add a note to such a mail? I mean, of course you can set it on the xattr but that's quite strange (the attachment is supposed to be an attr of the mail, not the other way) and not convenient at all + <manuel> I'm quite sure using a MUA is still easier + <ness> you could move a complete directory to the mail trans + <ness> (and the desktop icon can do this transparently) + <manuel> hmm so you have to create a directory, write a text file on it (with a special filename, I guess, since you could also have text files as attachments) and add the attachments to the directory + <manuel> and then drag & drop it + * manuel thinks things are getting more and more complicated :) + <ness> the special file name or attribute thing is right + <ness> but you not necisirily need to create a dir + <ness> s/necisirily/necessarily/ + <ness> you just drag 'n' drop multiple files to the icon + <manuel> and how is the translator supposed to know they are dragged at the same time and not one after the other? + <ness> I do not know if it is viable + * antrik (n=olaf@port-212-202-210-130.dynamic.qsc.de) has joined #hurd + <manuel> AFACS, dragging multiple files just make the desktop issue multiple rename() + <moritz> manuel: however the desktop handles that - it would be a rather easy thing to fix, i guess. + * schlesix has quit (Remote closed the connection) + <manuel> moritz: how is the desktop supposed to handle that? + <moritz> if this mail translator approach, is primarily to be used in desktop environments, one could implement the whole thing on the desktop environment layer, not with Hurd translators. + <moritz> manuel: i think it would be rather easy for the desktop to distinguish between actions like "ONE file is dragged" and "MULTIPLE files are dragged". + * schlesix (n=schlesix@xdsl-81-173-230-219.netcologne.de) has joined #hurd + <manuel> oh yeah, but then you loose the transparency, and there's no point in making it a translator. I think we agree on that :) + <moritz> i see rather little point in making it a translator anyway, since only god knows wether we have similar concept to translators in hurd-ng. + <manuel> yeah sure, but praveen wasn't planning it for HurdNG AIUI + <moritz> in that case it would probably be toy project. fine. + <moritz> i need to do some maths. see you. + <manuel> hmm well, you can't write anything else than toy projects, then + <ness> moritz: you shouldn't be too sure about success of ngHurg + <ness> it is an experiment + <antrik> sdschulze: ping + * antrik has quit (Remote closed the connection) + * antrik (n=olaf@port-212-202-210-130.dynamic.qsc.de) has joined #hurd + * bddebian (n=bdefrees@71.224.172.103) has joined #hurd + <j4v4m4n> manuel, This is a lot of input, let me sink these all first :-) + <bddebian> Heya folks + <schlesix> heya bddebian! + <j4v4m4n> it is ofcoures a "nice to have" feature. + <j4v4m4n> These are quite intersting inputs as well + <bddebian> Hi schlesix + <j4v4m4n> manual in the real wprld how will you send multiple things, say you want to send a CD and a bed + <j4v4m4n> manuel, you will package it (files) and then one parcel containing all these things (folder) + <manuel> j4v4m4n: well you want to make sending emails easier than sending real mails :-) + <j4v4m4n> manuel, it won't substitute MUAs + <j4v4m4n> manuel, we need it as the backend + <diocles> geekoe: You asked about GFS yesterday; well, glibc compiled. :) I've not done much more after that. + <antrik> regarding mail translator: take a look at Plan9, they have been doing it for years + <j4v4m4n> manuel, sorry not MUA I meant MTA + * syamajala (n=syamajal@c-24-147-61-120.hsd1.ma.comcast.net) has joined #hurd + <manuel> ah yes sure, but MUA will still be easier to use afaics + <j4v4m4n> manuel, people who are used to Windows say GNU/Linux is tough to use + <j4v4m4n> manuel, but when they start with GNOME or KDE they don't have any issues + <j4v4m4n> antrik, that is a great info I will look into it + <j4v4m4n> manuel, sorry not MUA I meant MTA + * syamajala (n=syamajal@c-24-147-61-120.hsd1.ma.comcast.net) has joined #hurd + <manuel> ah yes sure, but MUA will still be easier to use afaics + <j4v4m4n> manuel, people who are used to Windows say GNU/Linux is tough to use + <j4v4m4n> manuel, but when they start with GNOME or KDE they don't have any issues + <j4v4m4n> antrik, that is a great info I will look into it + <ness> j4v4m4n: they do it quite differently + <manuel> this doesn't answer to the basic question: how is it better than what we have now + <j4v4m4n> manuel, it is different, better is always debatable + <j4v4m4n> manuel, GNOME might work for but some doesn't use X at all + <j4v4m4n> manuel, whether it is good will be depending on the implemetation + <Jeroen> people who used to GNU/Linux say Windows is tough to use + <Jeroen> +are + <unlink> GNU/Linux is at least tougher to say + <Jeroen> no, people have less experience with GNU/Linux + <manuel> "to say", Jeroen + <j4v4m4n> manuel, better and easier are always relative + <j4v4m4n> manuel, there a lot of people still using mutt when you have thunderbird + <manuel> well because they have reasons to say mutt is easier than thunderbird + <Jeroen> the only thing is that you've to learn a few shortcuts when you want to use mutt, you can't just click around + <j4v4m4n> manuel, exactly + <j4v4m4n> manuel, consider this, you want to send a document across to someone + * Blackmore has quit (Read error: 104 (Connection reset by peer)) + * koollman has quit (Remote closed the connection) + <j4v4m4n> manuel, now you open a MUA add the attachment send it + * koollman (n=samson_t@gsv95-1-82-233-13-27.fbx.proxad.net) has joined #hurd + <j4v4m4n> manuel, if you just have to drag it to an icon, would that be easier? + * Casanova (n=prash@unaffiliated/casanova) has joined #hurd + <j4v4m4n> manuel, chmod +to:manuel@somehost doc.pdf ; cp doc.pdf postbox/ + <Jeroen> yeah + <Jeroen> chmod is for setting permissions... + <j4v4m4n> manuel, I am not sure how to set xattr + <manuel> well, setfattr + <Jeroen> well + <j4v4m4n> manuel, ok + <Jeroen> how do you type your subject? + <Jeroen> and there message itself? + <Jeroen> s/there/the/ + <Jeroen> how do you encrypt+sign it with pgp? + <manuel> j4v4m4n: well the problem is still the same you know. OK for to/subject : they'd be extended attributes. but how do you type the message itself? + <antrik> I don't think using xattr for such stuff is a good idea + <antrik> after all, it's not a property of the document + <j4v4m4n> antrik, we can use it only on a particular directory on which our translator sit + <j4v4m4n> manuel, create a folder + <manuel> that'd mean mkdir message; ln -s doc.pdf message/; cat >message/message <<EOF; setfattr -n to -v mmenal@hurdfr.org; setfattr -n subject -v document; mv message postbox + <antrik> the reason why having translators for such stuff is that this way you have a generic service for sending mail, whether you use it through a special UI (MUA), directly with file commands, from a script, or from some other program that just sends mails as a side functionality + * mheath has quit (Connection reset by peer) + <j4v4m4n> manuel, that looks scary :-( + <manuel> not sure it's easier than "mutt; m; mmenal@hurdfr.org; document; >typing the message<; a; doc.pdf; y" + <antrik> manuel: it is easier in some situations + <antrik> (and again, I would not use xattr for such stuff) + <j4v4m4n> manuel, now how do you use mutt on GNOME? + <antrik> in fact, Plan9 explicitely does *not* have any xattr and stuff + <manuel> antrik: well xattr on the directory that represents the message is not illogical + * mheath (n=mheath@c-67-182-231-23.hsd1.co.comcast.net) has joined #hurd + <j4v4m4n> antrik, may be we can think of some other way if you don't wanna xattr + <manuel> j4v4m4n: well I just used the CLI because it's easier to describe, but try to explain the steps in a GUI and you'll see it's the same problem + <j4v4m4n> manuel, right click on desktop -> create folder -> drag the files to the folder -> set attributes to the folder-> drag it to postbox + <j4v4m4n> manuel, it is quite logical step + <manuel> sure, but how is it easier than click on the MUA icon -> create mail -> drag the files to the mail window ; type the attrbutes + contents ; click on send mail + <manuel> looks quite similar to me :-) + <j4v4m4n> manuel, or if you already have the folder just drag it + <kilobug> a POP or IMAP translator would be more useful IMHO (but well, I didn't read all the backlog, so I may be off topic) + <j4v4m4n> manuel, you don't have a MUA here :-) just files and folders + <kilobug> to read mails, I mean + <j4v4m4n> kilobug, that is even easier IMAP->mabox and then mboxfs + <manuel> j4v4m4n: well you have a MUA : that's the translator + <j4v4m4n> kilobug, mboxfs is already available + <j4v4m4n> kilobug, I think someone already wrote IMAP to mbox as well but couldn't find it + <kilobug> j4v4m4n: well, imapfs could work both way, writing changes on the imap server too ;) + <antrik> manuel: the difference is not how it is used; the difference is how it is implemented + <antrik> manuel: if you have a generic mail translator, you have most functionality already there with the file manager; all you need to add is some scripts for better comfort + <antrik> j4v4m4n: the way I would do it (and I guess Plan9 does, though I haven't checked) is either having a file in the mail directory with the headers, or a subdirectory with a single file for each header (probably the latter) + <j4v4m4n> antrik, that would make it too complicated IMHO, it would be close to how it is for snail mail + <antrik> j4v4m4n: I don't see how this would be more complicated than xattr + <j4v4m4n> manuel, you can write your own scripts to automate it for whatver way you want + * azor (n=azor@62-43-135-201.user.ono.com) has joined #hurd + <manuel> antrik: having the functionality in the filesystem is useful because programs can use this functionality without patching; the protocol to use the mail translator is so specific that you either need to be a real user (but then a MUA is a lot more useful) or have a patched program (but then you could use a lib) + <j4v4m4n> antrik, right clicking a file and setting u p to and subject seems easier that creating more files + <antrik> j4v4m4n: I don't think so. maybe it is in gnome, but than I'd consider it a shortcoming of gnome + <antrik> j4v4m4n: in shell "cat foo@example.invalid headers/to" is about as simple as you can get + <manuel> > + <antrik> erm... I mean echo + <antrik> and >, yes + <antrik> sorry + * yoj (n=jao@200.163.8.72) has joined #hurd + <manuel> "echo foo@example.invalid > headers/to" is not easier than "setfattr -n to -v foo@example.invalid" AFAICS. + <antrik> echo foo@example.invalid >headers/to + * yoj (n=jao@200.163.8.72) has left #hurd + * yoj (n=jao@200.163.8.72) has joined #hurd + <kilobug> manuel: it is a tiny bit if your "foo@example.invalid" is the output of a command, mycomplexcommand > headers/to is a bit easier than setfattr -n to -v `mycomplexcommand` + <kilobug> manuel: but it's the same for a value you type directly + <antrik> manuel: objectively it is not simpler, but it uses a generic mechanism users now well, instead of obscure xattr stuff + <antrik> know well + <j4v4m4n> antrik, ok we can think of that, but how about a desktop user? + abeaumont andar antrik arnau azeem azor + <j4v4m4n> antrik, he has to use more clicks and more head aches + <j4v4m4n> antrik, just right click and add to address and subject just you write on the envelop + <kilobug> j4v4m4n: that's good ! it makes him buy more medicine, drug corporations will sponsor you then ! + * kilobug runs away + * j4v4m4n chases kilobug + <j4v4m4n> kilobug, better way would be making outlook run on GNU :-) + <marco_g> Or GNU on outlook \o/ + * yoj (n=jao@200.163.8.72) has left #hurd + <kilobug> this channel is becoming insnae :p + <j4v4m4n> kilobug, or is it the members ?? :-) + <marco_g> I agree with kilobug, we should stop those weirdos here :-/ + * whr` (i=whr@acy238.neoplus.adsl.tpnet.pl) has joined #hurd + <antrik> hm... anyone have the marcus quote at hand? + <j4v4m4n> i got to go as well + <j4v4m4n> bye + <kilobug> bye j4v4m4n + +## Interesting?? + +Join the project -- Add yourself to the list below + +* [[Praveen A]] diff --git a/hurd/translator/examples.mdwn b/hurd/translator/examples.mdwn new file mode 100644 index 00000000..b9f145e3 --- /dev/null +++ b/hurd/translator/examples.mdwn @@ -0,0 +1,93 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Setting up translators - HowTo + +Translators can be got from hurd-extras <http://www.nongnu.org/hurdextras/> + + cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/hurdextras co <modulename> + +* httpfs translator + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ settrans -a tmp/ /hurd/httpfs www.hurd-project.com/ + +or + + $ settrans -a tmp/ /hurd/httpfs www.hurd-project.com/ --proxy=<proxy> --port=<port> + $ cd tmp/ + $ ls -l + +* ftpfs translator + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ settrans -cgap ftp /hurd/hostmux /hurd/ftpfs / + $ cd ftp + ftp$ ls + ftp$ cd ftp.fr.debian.org + ftp/ftp.fr.debian.org $ ls + +* tarfs translator + +You can use tarfs to mount (almost) any tar file: + + $ settrans -ca a /hurd/tarfs -z myfile.tar.gz + $ settrans -ca b /hurd/tarfs -y myfile.tar.bz2 + $ settrans -ca c /hurd/tarfs myfile.tar + +You can even use it to create new tar files: + + $ settrans -ca new /hurd/tarfs -cz newfile.tar.gz + $ cp -r all my files new/ + $ syncfs new + +This is not as fast as `tar czvf newfile.tar.gz all my files` but at least, it's more original. ;) + +* cvsfs translator + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ settrans -ac cvsfs_testing /hurd/cvsfs cvs.savannah.nongnu.org /sources/hurdextras + $ cd cvsfs_testing + +* pfinet translator -- configuring your network interface + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ settrans -fgca /servers/socket/2 /hurd/pfinet -i <interface> -a <ip address> -m <subnet mask> -g <gateway ip> + +* Console translator -- setting up virtual consoles + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ console -d vga -d pc_mouse -d pc_kbd -d generic_speaker /dev/vcs + +* iso9660fs translator -- 'mounting' your cdrom + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ settrans -ac /cdrom /hurd/iso9660fs /dev/<cdrom device file> + +* ext2fs translator -- 'mounting' an ext2fs partition + +<!-- Prevent ikiwiki / Markdown rendering bug. --> + + $ settrans -ac /linux /hurd/ext2fs /dev/<partition device file> + +* unionfs translator + +To join "foo/" "bar/" and "baz/" in the directory "quux/", just do: + + $ settrans -capfg quux/ /hurd/unionfs foo/ bar/ baz/ + +If you want to join even quux/ contents in the union itself, add -u as a translator argument. +You can add filesystems at run-time with the fsysopts command. diff --git a/hurd/translator/ext2fs.mdwn b/hurd/translator/ext2fs.mdwn new file mode 100644 index 00000000..cfa8c997 --- /dev/null +++ b/hurd/translator/ext2fs.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The `ext2fs` translator from the upstream Hurd code base can only handle file +systems with sizes of less than roughly 2 GiB. + +A patch exists to lift this limitation (and is being used in the +[[Debian_GNU/Hurd_distribution|running/debian]]), but it introduces 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/fatfs.mdwn b/hurd/translator/fatfs.mdwn new file mode 100644 index 00000000..b534b97e --- /dev/null +++ b/hurd/translator/fatfs.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The current `fatfs` translator is read-only. diff --git a/hurd/translator/hostmux.mdwn b/hurd/translator/hostmux.mdwn new file mode 100644 index 00000000..5fab2dc5 --- /dev/null +++ b/hurd/translator/hostmux.mdwn @@ -0,0 +1,31 @@ +Multiplexes arbitrary host names, making access to many differnt host fast and easy. + +For each host accessed via a directory an new translator is started with the hostname as option. Say, /hostmuxdemo should let you access your favourite host with your translator mytranslatorfs. + +<code>**ls /hostmuxdemo/mybox/**</code> would give the result of mytranslatorfs applied to host mybox. + +## <a name="Usage"> Usage </a> + +Hostmux takes translator options as argument and (in the easiest case ) starts the translator with the given arguments and the hostname as the last argument. + +### <a name="ftpfs"> ftpfs </a> + +ftpfs is a good example, that is even very usefull. With hostmux and ftpfs you can access anonymous ftp via the filesystem, sparing out complicate use of a ftp client. + +We assume you want to access the ftp root at all servers. The example host is ftp.yourbox.com. + +Usermux is called via <code>**settrans -fgap /ftp /hurd/hostmux /hurd/ftpfs /**</code> . + +* <code>**-fg**</code> makes settrans try hard to remove an existing old translator from <code>**/ftp**</code> +* <code>**ap**</code> sets an active translator (starts the translator) and a passive translator (stores translator information in the filesystem with which an active translator can be started on access of this node) +* <code>**/ftp**</code> is where we want to set the translator +* <code>**/hurd/hostmux**</code> is obviously our hostmux translator that will be started at <code>**/ftp**</code> and handle filesystem operations on <code>**/ftp**</code> and everything below (like <code>**/ftp/ftp.yourbox.com/pub/**</code>) +* <code>**/hurd/ftpfs /**</code> is the argument to hostmux. + +When <code>**/ftp**</code> is accessed, the first directory is interpreted as hostname and a new translator is set up with the <code>**hostmux**</code> arguments: + +<code>**ls /ftp/ftp.yourhost.com/pub/**</code> lets hostmux start a new traslator <code>**/hurd/ftpfs / ftp.yourhost.com**</code> and serve it via <code>**/ftp/ftp.yourhos t.com/**</code> as directory. Subsequent the directory <code>**pub/**</code> on <code>**/ftp.yourhost.com/**</code> can be accessed via the new created translator. + +You can see the new created translator in the process list: <code>**ps ax | grep ftpsfs**</code> . You shoud see <code>**/hurd/ftpfs / ftp.yourhost.com**</code> . + +-- [[Main/PatrickStrasser]] - 13 Jul 2004 diff --git a/hurd/translator/magic.mdwn b/hurd/translator/magic.mdwn new file mode 100644 index 00000000..f6d0494b --- /dev/null +++ b/hurd/translator/magic.mdwn @@ -0,0 +1,21 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 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]]."]]"""]] + +The magic translator provides `/dev/fd`. + + $ showtrans /dev/fd + /hurd/magic --directory fd + +The `/dev/fd` directory holds the open file descriptors for your current +process. You can't see them with `ls -l /dev/fd/` but you can see them +individually like this: + + $ ls -l /dev/fd/0 + crw--w---- 1 bing tty 0, 0 Nov 19 18:00 /dev/fd/0 diff --git a/hurd/translator/mboxfs.mdwn b/hurd/translator/mboxfs.mdwn new file mode 100644 index 00000000..be959d0b --- /dev/null +++ b/hurd/translator/mboxfs.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +<http://www.nongnu.org/hurdextras/#mboxfs> diff --git a/hurd/translator/pfinet.mdwn b/hurd/translator/pfinet.mdwn new file mode 100644 index 00000000..a8da45d7 --- /dev/null +++ b/hurd/translator/pfinet.mdwn @@ -0,0 +1,35 @@ +[[meta copyright="Copyright © 2002, 2004, 2005, 2007, 2008 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]]."]]"""]] + +To configure Internet connectivity, the `pfinet` (*Protocol Family Internet*) +[[translator]] must be configured. This is done using the +[[`settrans`|settrans]] command, for example like this: + + # settrans -fgap /servers/socket/2 /hurd/pfinet ↩ + -i eth0 -a 192.168.0.50 -g 192.168.0.1 -m 255.255.255.0 + +The argument `/server/socket/2` is the node that the translator is to be +attached to. This is followed by the translator program to run and any +arguments to give it. + +There, `-i`, `-a`, `-g` and `-m` are, quite obviously, the (Mach) device to +use, the IP address, the gateway and netmask. + +--- + +To make DNS lookups work, you'll also have to properly configure the +`/etc/resolv.conf` file, for example by copying it over from your GNU/Linux +installation. + +--- + + * [[Implementation]]. + * [[IPv6]]. diff --git a/hurd/translator/pfinet/implementation.mdwn b/hurd/translator/pfinet/implementation.mdwn new file mode 100644 index 00000000..08a29280 --- /dev/null +++ b/hurd/translator/pfinet/implementation.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2000, 2008 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]]."]]"""]] + +The `pfinet` server is a hacked Linux internet implementation with a glue layer +translating between the Hurd [[RPC]]s and the middle layer of the Linux +implementation. diff --git a/hurd/translator/pfinet/ipv6.mdwn b/hurd/translator/pfinet/ipv6.mdwn new file mode 100644 index 00000000..37fabcb7 --- /dev/null +++ b/hurd/translator/pfinet/ipv6.mdwn @@ -0,0 +1,60 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[Stefan_Siegl|stesie]] has added IPv6 support to the pfinet [[translator]]. +This was [Savannah task #5470](http://savannah.gnu.org/task/?5470). + + +# Implementation + +Because the IPv4 and IPv6 protocols are +quite related to each other (think of mapped IPv4 addresses, etc.), there is no +separate [[server|translator]] for IPv6 but support for the latter has been +incorporated into the common pfinet. Unfortunately it's a little bit clumsy +now to set the [[translator]] up, since it has to be bound to +*/servers/socket/2* (like before) as well as */servers/socket/26* (for IPv6). + +To achieve this, you can tell pfinet to install [[active_translators|active]] +on specified nodes, using **-4** and **-6** options. This is, you have to +install a [[passive_translator|passive]] on */servers/socket/2* that also binds +the IPv6 port and vice versa. + + +# Examples + +Normal IPv4 network setup, address 192.168.7.23/24 and gateway 192.168.7.1. +IPv6 address shall be assigned using IPv6 auto-configuration. + + settrans -fgp /servers/socket/2 ↩ + /hurd/pfinet -6 /servers/socket/26 ↩ + -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1 + settrans -fgp /servers/socket/26 ↩ + /hurd/pfinet -4 /servers/socket/2 ↩ + -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1 + +Quite the same, but with static IPv6 address assignment: + + settrans -fgp /servers/socket/2 ↩ + /hurd/pfinet -6 /servers/socket/26 ↩ + -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1 ↩ + -A 2001:4b88:10e4:0:216:3eff:feff:4223/64 -G 2001:4b88:10e4::1 + settrans -fgp /servers/socket/26 ↩ + /hurd/pfinet -4 /servers/socket/2 ↩ + -i eth0 -a 192.168.7.23 -m 255.255.255.0 -g 192.168.7.1 ↩ + -A 2001:4b88:10e4:0:216:3eff:feff:4223/64 -G 2001:4b88:10e4::1 + + +# Binaries + +For your convenience -- this work is not yet available in the Debian packages +-- binaries of a patched (multicast reception) GNU Mach kernel (including +default driver set and debugging support) and a stripped pfinet translator +(named `pfinet6` here) are being provided at +<http://brokenpipe.de/GnuHurd/pfinet6/> diff --git a/hurd/translator/pflocal.mdwn b/hurd/translator/pflocal.mdwn new file mode 100644 index 00000000..c1d4ac2b --- /dev/null +++ b/hurd/translator/pflocal.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2000, 2008 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]]."]]"""]] + +The implementation of the `pflocal` server is in the `pflocal` directory, and +uses [[`libpipe`|libpipe]] (shared code with the [[named_pipe|fifo]] +implementation). diff --git a/hurd/translator/procfs.mdwn b/hurd/translator/procfs.mdwn new file mode 100644 index 00000000..eb07a8f6 --- /dev/null +++ b/hurd/translator/procfs.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +<http://www.nongnu.org/hurdextras/#procfs> + + * [[`ps`|procps]] + * [[`top`|top]] + * [[`htop`|htop]] + * `gtop` + * [[`killall`|killall]] + * `pkill` + * ... diff --git a/hurd/translator/procfs/htop.mdwn b/hurd/translator/procfs/htop.mdwn new file mode 100644 index 00000000..5228c702 --- /dev/null +++ b/hurd/translator/procfs/htop.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + open("/proc/stat", O_RDONLY) = 3 + open("/proc/meminfo", O_RDONLY) = 3 + open("/proc/stat", O_RDONLY) = 3 + open("/proc", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 3 + open("/proc/1/task", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 4 + open("/proc/1/status", O_RDONLY) = 4 + open("/proc/1/statm", O_RDONLY) = 4 + open("/proc/1/stat", O_RDONLY) = 4 + open("/proc/1/cmdline", O_RDONLY) = 4 + open("/proc/2/task", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 4 + open("/proc/2/status", O_RDONLY) = 4 + open("/proc/2/statm", O_RDONLY) = 4 + open("/proc/2/stat", O_RDONLY) = 4 + open("/proc/2/cmdline", O_RDONLY) = 4 + [...] diff --git a/hurd/translator/procfs/killall.mdwn b/hurd/translator/procfs/killall.mdwn new file mode 100644 index 00000000..99790a36 --- /dev/null +++ b/hurd/translator/procfs/killall.mdwn @@ -0,0 +1,23 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + open("/proc/stat", O_RDONLY) = 3 + open("/proc/self/stat", O_RDONLY) = 3 + open("/proc/uptime", O_RDONLY) = 3 + open("/proc/sys/kernel/pid_max", O_RDONLY) = 4 + open("/proc/meminfo", O_RDONLY) = 4 + open("/proc", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 + open("/proc/1/stat", O_RDONLY) = 6 + open("/proc/1/status", O_RDONLY) = 6 + open("/proc/1/cmdline", O_RDONLY) = 6 + open("/proc/2/stat", O_RDONLY) = 6 + open("/proc/2/status", O_RDONLY) = 6 + open("/proc/2/cmdline", O_RDONLY) = 6 + [...] diff --git a/hurd/translator/procfs/procps.mdwn b/hurd/translator/procfs/procps.mdwn new file mode 100644 index 00000000..99790a36 --- /dev/null +++ b/hurd/translator/procfs/procps.mdwn @@ -0,0 +1,23 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + open("/proc/stat", O_RDONLY) = 3 + open("/proc/self/stat", O_RDONLY) = 3 + open("/proc/uptime", O_RDONLY) = 3 + open("/proc/sys/kernel/pid_max", O_RDONLY) = 4 + open("/proc/meminfo", O_RDONLY) = 4 + open("/proc", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 + open("/proc/1/stat", O_RDONLY) = 6 + open("/proc/1/status", O_RDONLY) = 6 + open("/proc/1/cmdline", O_RDONLY) = 6 + open("/proc/2/stat", O_RDONLY) = 6 + open("/proc/2/status", O_RDONLY) = 6 + open("/proc/2/cmdline", O_RDONLY) = 6 + [...] diff --git a/hurd/translator/procfs/top.mdwn b/hurd/translator/procfs/top.mdwn new file mode 100644 index 00000000..f0030d61 --- /dev/null +++ b/hurd/translator/procfs/top.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + open("/proc/stat", O_RDONLY) = 3 + open("/proc/sys/kernel/pid_max", O_RDONLY) = 3 + open("/proc", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 3 + open("/proc/1/stat", O_RDONLY) = 4 + open("/proc/1/statm", O_RDONLY) = 4 + open("/proc/2/stat", O_RDONLY) = 4 + open("/proc/2/statm", O_RDONLY) = 4 + [...] diff --git a/hurd/translator/random.mdwn b/hurd/translator/random.mdwn new file mode 100644 index 00000000..afb76953 --- /dev/null +++ b/hurd/translator/random.mdwn @@ -0,0 +1,70 @@ +[Savannah task #5130: random translator](http://savannah.gnu.org/task/?5130) + +See the attached [[mbox.bz2]] containing all the emails concerning this topic +which I was able to gather from public archives. (!) This is not up-to-date +anymore, as [[MichaelCasadevall]] is currently working on this. + +# Description + +Sources of entropy are for example disk access latencies or keystroke patterns +or behavior on networks. This suggests that for implementing a random +translator a kernel part is needed as well, to gather that entropy. That +kernel part would then export the gathered entropy via a kernel device, named +perhaps `entropy`. + +# Setup Pseudo Random Devices + +Stuck getting SSH to work? You need a pseudo random generator (PRG). + +There are several solutions to the lack of `/dev/random` and `/dev/urandom`, +but they are not yet in the default installation. + +* Marcus' work can be downloaded at + [random.tar.gz](ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/random.tar.gz). + (Identical to <http://kilobug.free.fr/hurd/random-64.tar.gz>?) + * [A patch](http://mail.gnu.org/pipermail/bug-hurd/2002-August/010248.html) + that was probably already incorporated from August 14, 2002. + * Clemmitt Sigler [reported + success](http://lists.gnu.org/archive/html/help-hurd/2002-10/msg00076.html) + October 11, 2002 and Marcus [described + some](http://lists.gnu.org/archive/html/help-hurd/2002-10/msg00081.html) of + the internals. + +* [Entropy Gathering Daemon](http://egd.sourceforge.net/). + * [request for packaging](http://bugs.debian.org/145498). + +* [OSKit Entropy + Patch](http://lists.gnu.org/archive/html/bug-hurd/2003-01/msg00000.html) from + Derek Davies - Jan 2003. + * See also [this page](http://www.ddavies.net/oskit-entropy/). + * Note that this patch can (and should) be used with this [OSKit NIC + patch](ftp://flux.cs.utah.edu/flux/oskit/mail/html/oskit-users/msg01570.html). + +* [Sune Kirkeby's incomplete port of the Linux /dev/\{,u\}random device + driver](http://ibofobi.dk/stuff/hurd-entropy/) + * [The files](http://download.ibofobi.dk/hurd-entropy/), including a [patch + for GNU + Mach](http://download.ibofobi.dk/hurd-entropy/gnumach-entropy.diff.bz2). + +* Quick and dirty way: + + sudo cp /bin/bash /dev/random + sudo ln -s random /dev/urandom + +--- + +# Setup Tips + +Here are some tips on how to actually setup the two random devices using +Kilobugs' [random-64 server](http://kilobug.free.fr/hurd/random-64.tar.gz). +His tarball is a complete Hurd server including a pre-built binary - so you +don't need GCC or magic fingers for this! :) + +After untaring the package you copy the random binary to the `/hurd` +directory. Then you setup the translators for random and urandom. + + # settrans -c /dev/random /hurd/random \ + --seed-file /var/run/random-seed --secure + # settrans -c /dev/urandom /hurd/random \ + --seed-file /var/run/urandom-seed --fast + # chmod 0644 /dev/random /dev/urandom diff --git a/hurd/translator/random/mbox.bz2 b/hurd/translator/random/mbox.bz2 Binary files differnew file mode 100644 index 00000000..a9a4d4a6 --- /dev/null +++ b/hurd/translator/random/mbox.bz2 diff --git a/hurd/translator/storeio.mdwn b/hurd/translator/storeio.mdwn new file mode 100644 index 00000000..49d70e1b --- /dev/null +++ b/hurd/translator/storeio.mdwn @@ -0,0 +1,30 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +`storeio` is a *translator for devices and other stores*. + +It relies heavily on [[libstore]]. + + +# Examples + +You can make a file's content available as some block device (where `foo` is +the name of the file to map): + + settrans -ca node /hurd/storeio -T file foo + +You can even `ungzip` files on the fly (`bunzip2` is available as well): + + settrans -ca node /hurd/storeio -T gunzip foo.gz + +You can use the *typed store*, to create filter chains (of course this example +is kind of useless since you could use the `gunzip` store directly): + + settrans -ca node /hurd/storeio -T type gunzip:file:foo.gz diff --git a/hurd/translator/stowfs.mdwn b/hurd/translator/stowfs.mdwn new file mode 100644 index 00000000..022e3d5e --- /dev/null +++ b/hurd/translator/stowfs.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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 redir=unionfs#stowfs]] diff --git a/hurd/translator/tmpfs.mdwn b/hurd/translator/tmpfs.mdwn new file mode 100644 index 00000000..6d10c163 --- /dev/null +++ b/hurd/translator/tmpfs.mdwn @@ -0,0 +1,22 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +`tmpfs` is a file system server for temporary data storage without using a real +(permanent) [[backing_store]]. + +It is based on [[libdiskfs]]. + +It's not working correctly at the moment. + +[[inline +pages="hurd/translator/tmpfs/*" +show=0 +actions=yes +rootpage="hurd/translator/tmpfs" postformtext="Add a new item titled:"]] diff --git a/hurd/translator/tmpfs/notes_bing.mdwn b/hurd/translator/tmpfs/notes_bing.mdwn new file mode 100644 index 00000000..2392bd61 --- /dev/null +++ b/hurd/translator/tmpfs/notes_bing.mdwn @@ -0,0 +1,98 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +1. to run tmpfs as a regular user, /servers/default-pager must be executable by + that user. by default it seems to be set to read/write. + + $ sudo chmod ugo+x /servers/default-pager + + Then I get this error: + + tmpfs: /build/mbanck/hurd-20060825/build-tree/hurd/tmpfs/dir.c:62: diskfs_get_directs: Assertion `__builtin_offsetof (struct tmpfs_dirent, name) >= __builtin_offsetof (struct dirent, d_name)' failed. + +2. i rearranged the struct tempfs_dirent in tmpfs.h to line up with the struct + dirent. now the assert passes at line 62 of dir.c passes. + + struct tmpfs_dirent + { + struct tmpfs_dirent *next; + struct disknode *dn; + + char padding[3]; + uint8_t namelen; + char name[0]; + }; + + now ls works on an empty directory. + you can touch files, and run `ls' on them. + mkdir, rmdir works too. + fsysopts works + df works + +3. creating a symlink fails. + + old patch to get symlinks working: + + http://www.mail-archive.com/bug-hurd@gnu.org/msg11844.html + --- node.c.orig 2005-07-24 09:56:39.000000000 -0400 + +++ node.c 2005-07-24 09:55:46.000000000 -0400 + @@ -330,6 +330,7 @@ + create_symlink_hook (struct node *np, const char *target) + { + assert (np->dn->u.lnk == 0); + + np->dn_stat.st_size = strlen (target); + if (np->dn_stat.st_size > 0) + { + const size_t size = np->dn_stat.st_size + 1; + @@ -337,6 +338,7 @@ + if (np->dn->u.lnk == 0) + return ENOSPC; + memcpy (np->dn->u.lnk, target, size); + + np->dn->type = DT_LNK; + adjust_used (size); + recompute_blocks (np); + } + @@ -380,8 +382,6 @@ + error_t + diskfs_truncate (struct node *np, off_t size) + { + - if (np->allocsize <= size) + - return 0; + + if (np->dn->type == DT_LNK) + { + @@ -392,6 +392,9 @@ + return 0; + } + + + if (np->allocsize <= size) + + return 0; + + + assert (np->dn->type == DT_REG); + + if (default_pager == MACH_PORT_NULL) + + now symlinks work. + +4. can't write data to a file + + +--- + +miscellaneous notes: + +`diskfs_disk_name` could be `NULL`, but it is `"swap"` + +using `default_pager_object_set_size (np->dn->u.reg.memobj, size);` to truncate and grow. + +why are our blocks 512? shouldn't it something else? or at least settable? +or does [[libdiskfs]] demand this? + +`diskfs_get_filemap_pager_struct (struct node *np)` returns null. +shouldn't it return `default_pager`? diff --git a/hurd/translator/tmpfs/notes_various.mdwn b/hurd/translator/tmpfs/notes_various.mdwn new file mode 100644 index 00000000..90636b61 --- /dev/null +++ b/hurd/translator/tmpfs/notes_various.mdwn @@ -0,0 +1,212 @@ +[[meta copyright="Copyright © 2005, 2006, 2007, 2008 + 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]]."]]"""]] + + <antrik> hde: what's the status on tmpfs? + <hde> Broke + <hde> k0ro traced the errors like the assert show above to a pager problem. + See the pager cannot handle request from multiple ports and tmpfs sends + request using two differ ports, so to fix it the pager needs to be hacked + to support multiple requests. + <hde> You can enable debugging in the pager by changing a line from dprintf + to ddprintf I can tell you how if you want. + <antrik> and changing tmpfs to use a single port isn't possible?... + <hde> antrik, I am not sure. + <hde> IIRC k0ro was saying it cannot be changed and I cannot recall his + reasons why. + <sdschulze> antrik: Doing it the quick&dirty way, I'd just use an N-ary + tree for representing the directory structure and mmap one new page (or + more) for each file. + <hde> sdschulze, What are you talking about? + <sdschulze> hde: about how I would implement tmpfs + <hde> O + <azeem> sdschulze: you don't need to reimplement it, just fix it :) + <sdschulze> azeem: Well, it seems a bit more difficult than I considered. + <sdschulze> I had assumed it was implemented the way I described. + <hde> O and the assert above gets triggered if you don't have a + default-pager setup on /servers/default-pager + <hde> the dir.c:62 assert that is. + <azeem> hde: you sure? I think I have one + <hde> I am almost sure. + <azeem> mbanck@beethoven:~$ showtrans /servers/default-pager + <azeem> /hurd/proxy-defpager + <azeem> isn't that enough? + <hde> It is suppose to be. + <hde> Try it as root + <hde> I was experiecing alot of bugs as a normal user, but according to + marcus it is suppose to work as root, but I was getting alot of hangs. + <azeem> hde: same issue, sudo doesn't work + <hde> sucky, well then there are alot of bugs. =) + <azeem> eh, no + <azeem> I still get the dir.c assert + <sdschulze> me too + <sdschulze> Without it, I already get an error message trying to set tmpfs + as an active translator. + +--- + + <hde> I think I found the colprit. + <hde> default_pager_object_set_size --> This is were tmpfs is hanging. + <hde> mmm Hangs on the message to the default-pager. + +--- + + <hde> Well it looks like tmpfs is sending a message to the default-pager, + the default-pager then receives the message and, checks the seqno. I + checked the mig gen code and noticed that the seqno is the reply port, it + this does not check out then the default pager is put into a what it + seems infinte condition_wait hoping to get the correct seqno. + <hde> Now I am figuring out how to fix it, and debugging some more. + +--- + + <marco_g> hde: Still working on tmpfs? + <hde> Yea + <marco_g> Did you fix a lot already? + <hde> No, just trying to narrow down the reason why we cannot write file + greater then 4.5K. + <marco_g> ahh + <marco_g> What did you figure out so far? + <hde> I used the quick marcus fix for the reading assert. + <marco_g> reading assert? + <hde> Yea you know ls asserted. + <marco_g> oh? :) + <hde> Because, the offsets changed in sturct dirent in libc. + <hde> They added 64 bit checks. + <hde> So marcus suggested a while ago on bug-hurd to just add some padding + arrays to the struct tmpfs_dirent. + <hde> And low and behold it works. + <marco_g> Oh, that fix. + <hde> Yup + <hde> marco_g, I have figured out that tmpfs sends a message to the + default-pager, the default-pager does receive the message, but then + checks the seqno(The reply port) and if it is not the same as the + default-pagers structure->seqno then she waits hoping to get the correct + one. Unfortantly it puts the pager into a infinite lock and never come + out of it. + <marco_g> hde: That sucks... + <marco_g> But at least you know what the problem is. + <hde> marco_g, Yea, now I am figuring out how to fix it. + <hde> Which requires more debugging lol. + <hde> There is also another bug, default_pager_object_set_size in + <hde> mach-defpager does never return when called and makes tmpfs hang. I + <hde> will have a closer look at this later this week. + +--- + + <hde> Cool, now that I have two pagers running, hopefully I will have less + system crashes. + <marcus> running more than one pager sounds like trouble to me, but maybe + hde means something different than I think + <hde> Well the other pager is only for tmpfs to use. + <hde> So I can debug the pager without messing with the entire system. + <hde> marcus, I am trying ti figure out why diskfs_object_set_size waits + forever. This way when the pager becomes locked forever I can turn it + off and restart it. When I was doing this with only one mach-defpager + running the system would crash. + <marcus> hde: how were you able to start two default pagers?? + <hde> Well you most likely will not think my way of doing it was correct, + and I am also not sure if it is lol. I made my hacked version not stop + working if one is alreay started. + +--- + + <hde> See, the default-pager has a function called + default_pager_object_set_size this sets the size for a memory object, + well it checks the seqno for each object if it is wrong it goes into a + condition_wait, and waits for another thread to give it a correct seqno, + well this never happens. + <hde> Thus, you get a hung tmpfs and default-pager. + <hde> pager_memcpy (pager=0x0, memobj=33, offset=4096, other=0x20740, + size=0x129df54, prot=3) at pager-memcpy.c:43 + <hde> bddebian, See the problem? + <bddebian> pager=0x0? + <hde> Yup + <hde> Now wtf is the deal, I must debug. + <hde> -- Function: struct pager * diskfs_get_filemap_pager_struct + <hde> (struct node *NP) + <hde> Return a `struct pager *' that refers to the pager returned by + <hde> diskfs_get_filemap for locked node NP, suitable for use as an + <hde> argument to `pager_memcpy'. + <hde> That is failing. + <hde> If it is not one thing it is another. + <bddebian> All of Mach fails ;-) + <hde> It is alot of work to make a test program that uses libdiskfs. + +--- + + <bing> to run tmpfs as a regular user, /servers/default-pager must be + executable by that user. by default it seems to be set to read/write. + <bing> $ sudo chmod ugo+x /servers/default-pager + <bing> you can see the O_EXEC in tmpfs.c + <bing> maybe this is just a debian packaging problem + <bing> it's probably a fix to native-install i'd guess + +--- + + <bing> tmpfs is failing on default_pager_object_create with -308, which + means server died + <bing> i'm running it as a regular user, so it gets it's pager from + /servers/default-pager + <bing> and showtrans /servers/default-pager shows /hurd/proxy-defpager + <bing> so i'm guessing that's the server that died + +--- + + <bing> this is about /hurd/tmpfs + <bing> a filesystem in memory + <bing> such that each file is it's own memory object + <andar> what does that mean exactly? it differs from a "ramdisk"? + <bing> instead of the whole fs being a memory object + <andar> it only allocates memory as needed? + <bing> each file is it's own + <bing> andar: yeah + <bing> it's not ext2 or anything + <andar> yea + <bing> it's tmpfs :-) + <bing> first off, echo "this" > that + <bing> fails + <bing> with a hang + <bing> on default_pager_object_create + <andar> so writing to the memory object fails + <bing> well, it's on the create + <andar> ah + <bing> and it returns -308 + <bing> which is server died + <bing> in mig-speak + <bing> but if i run it as root + <bing> things behave differently + <bing> it gets passed the create + <bing> but then i don't know what + <bing> i want to make it work for the regular user + <bing> it doesn't work as root either, it hangs elsewhere + <andar> but it at least creates the memory object + <bing> that's the braindump + <bing> but it's great for symlinks! + <andar> do you know if it creates it? + <bing> i could do stowfs in it + +--- + + <antrik> bing: k0ro (I think) analized the tmpfs problem some two years ago + or so, remember?... + <antrik> it turns out that it broke due to some change in other stuff + (glibc I think) + <antrik> problem was something like getting RPCs to same port from two + different sources or so + <antrik> and the fix to that is non-trivial + <antrik> I don't remember in what situations it broke exactly, maybe when + writing larger files? + <bing> antrik: yeah i never understood the explanation + <bing> antrik: right now it doesn't write any files + <bing> the change in glibc was to struct dirent + <antrik> seems something more broke in the meantime :-( + <antrik> ah, right... but I the main problem was some other change + <antrik> (or maybe it never really worked, not sure anymore) diff --git a/hurd/translator/unionfs.mdwn b/hurd/translator/unionfs.mdwn new file mode 100644 index 00000000..7eee5245 --- /dev/null +++ b/hurd/translator/unionfs.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +<http://www.nongnu.org/hurdextras/#unionfs> + + +<a name="stowfs"></a> +# `stowfs` + +... is a special mode of `unionfs`. diff --git a/hurd/translator/writing/example.mdwn b/hurd/translator/writing/example.mdwn new file mode 100644 index 00000000..170812ad --- /dev/null +++ b/hurd/translator/writing/example.mdwn @@ -0,0 +1,303 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Data User-Server Translator Example + +The code examples were written by Anand Babu. + +We have a data.h header file, a data.defs file, a data-user.c, data-server.c +sources files and a Makefile. + +data.h: +------- + + #ifndef _data_user_ + #define _data_user_ + + /* Module data */ + + #include <mach/kern_return.h> + #include <mach/port.h> + #include <mach/message.h> + + #include <mach/std_types.h> + #include <mach/mach_types.h> + #include <device/device_types.h> + #include <device/net_status.h> + #include <sys/types.h> + #include <sys/stat.h> + #include <sys/statfs.h> + #include <sys/resource.h> + #include <sys/utsname.h> + #include <hurd/hurd_types.h> + + /* Routine data_set_value */ + #ifdef mig_external + mig_external + #else + extern + #endif + kern_return_t S_data_set_value + #if defined(LINTLIBRARY) + (data_port, value) + mach_port_t data_port; + int value; + { return S_data_set_value(data_port, value); } + #else + ( + mach_port_t data_port, + int value + ); + #endif + + /* Routine data_get_value */ + #ifdef mig_external + mig_external + #else + extern + #endif + kern_return_t S_data_get_value + #if defined(LINTLIBRARY) + (data_port, value) + mach_port_t data_port; + int *value; + { return S_data_get_value(data_port, value); } + #else + ( + mach_port_t data_port, + int *value + ); + #endif + + #endif /* not defined(_data_user_) */ + +data.defs: +---------- + + /* Definitions for data interface + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + The GNU Hurd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + subsystem data 45000; + + #include <hurd/hurd_types.defs> + + #ifdef STACK_IMPORTS + STACK_IMPORTS + #endif + + /* intr-rpc.defs defines the INTR_INTERFACE macro to make the generated RPC + stubs send-interruptible, and to prefix them with `hurd_intr_rpc_'. */ + INTR_INTERFACE + + /* set integer value to data */ + routine data_set_value ( + data_port: mach_port_t; + value: int); + + /* get integer value from data */ + routine data_get_value ( + data_port: mach_port_t; + out value: int); + +data-user.c: +------------ + + #include <stdio.h> + #include <hurd.h> + #include <hurd/hurd_types.h> + #include "data.h" + + #ifndef _GNU_SOURCE + #define _GNU_SOURCE + #endif + + int + main(int argc, char *argv[]) + { + int value=0; + mach_port_t data_server_port; + + data_server_port = file_name_lookup ("/tmp/trans", 0, 0); + printf ("data_server_port [%u]\n", data_server_port); + S_data_set_value (data_server_port, 99); + S_data_get_value (data_server_port, &value); + printf ("data->get_value: [%d]\n", value); + + return 0; + } + +data-server.c: +-------------- + + #ifndef _GNU_SOURCE + #define _GNU_SOURCE + #endif + + #include <stdio.h> + #include <getopt.h> + #include <errno.h> + #include <sys/stat.h> + #include <error.h> + + #include <hurd/ports.h> + #include <hurd/hurd_types.h> + #include <hurd/trivfs.h> + + #include "data.h" + + extern boolean_t S_data_server + (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP); + + int trivfs_fstype = FSTYPE_MISC; + int trivfs_fsid = 0; + int trivfs_support_read = 0; + int trivfs_support_write = 0; + int trivfs_support_exec = 0; + int trivfs_allow_open = 0x00; + int trivfs_protid_nportclasses = 0; + int trivfs_cntl_nportclasses = 0; + + int data_value; + + int demuxer (mach_msg_header_t *inp, mach_msg_header_t *outp) + { + return (S_data_server(inp,outp)||trivfs_demuxer(inp,outp)); + } + + void trivfs_modify_stat (struct trivfs_protid *cred, io_statbuf_t *st) + { + } + error_t trivfs_goaway (struct trivfs_control *fsys, int flags) + { + exit (0); + } + + kern_return_t S_data_set_value (mach_port_t data_port, int value) + { + data_value = value; + return 0; + } + + kern_return_t S_data_get_value (mach_port_t data_port, int *value) + { + *value = data_value; + return 0; + } + + int + main(int argc, char *argv[]) + { + int err; + mach_port_t bootstrap; + struct trivfs_control *fsys; + + if (argc > 1) + { + fprintf(stderr, "Usage: settrans [opts] node %s\n", program_invocation_name); + exit (1); + } + + task_get_bootstrap_port (mach_task_self (), &bootstrap); + if (bootstrap == MACH_PORT_NULL) + error(2, 0, "Must be started as a translator"); + + /* Reply to our parent */ + err = trivfs_startup (bootstrap, 0, 0, 0, 0, 0,&fsys); + mach_port_deallocate (mach_task_self (), bootstrap); + if (err) { + return (0); + } + + ports_manage_port_operations_one_thread (fsys->pi.bucket, demuxer, 0); + + return 0; + } + +Makefile: +--------- + + CC = gcc + MIG = mig + CFLAGS = -Wall -g -D_GNU_SOURCE + LDFLAGS = -lthreads -lports -ltrivfs -lfshelp -lshouldbeinlibc + INCLUDES = -I. + LCHDRS = + MIGCOMSFLAGS = -prefix S_ + OBJS = $(SRCS:.c=.o) + TAGS = etags.emacs21 + + all: data-server data-user + tags: + $(TAGS) $(SRCS) $(LCHDRS) + + stubs: data.defs + $(MIG) $(MIGCOMSFLAGS) -server dataServer.c -user dataUser.c $^ + data-server: data-server.c dataServer.c + $(CC) $^ $(CFLAGS) $(INCLUDES) $(LDFLAGS) -o $@ + data-user: data-user.c dataUser.c + $(CC) $^ $(CFLAGS) $(INCLUDES) -o $@ + clean: + rm -f *.o data-server data-user + + start: data-server data-user + settrans -ac /tmp/trans data-server + ps -x | grep data-server + end: + settrans -fg /tmp/trans + +Building +-------- + +Do + + make stubs + +to create the dataUser.c and dataServer.c files generated by mig. Create the +executables using: + + make all + +Testing +------- + +Start the data-server translator using: + + settrans -ac /tmp/trans data-server + +You can check if it is running using + + ps -x | grep data-server + +Run the data-user executable to get the resultant output. + +You can remove the translator using: + + settrans -fg /tmp/trans + +To remove the built files use: + + make clean + +Happy Hacking! diff --git a/hurd/translator/xmlfs.mdwn b/hurd/translator/xmlfs.mdwn new file mode 100644 index 00000000..cff15f59 --- /dev/null +++ b/hurd/translator/xmlfs.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +<http://www.nongnu.org/hurdextras/#xmlfs> diff --git a/hurd/virtual_file_system.mdwn b/hurd/virtual_file_system.mdwn new file mode 100644 index 00000000..2902a26e --- /dev/null +++ b/hurd/virtual_file_system.mdwn @@ -0,0 +1,27 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Path names are resolved using a distributed protocol. +No single entity is responsible for the resolution of +path names. A file system server (a [[translator]]) +attaches to translators (`fs.defs:file_set_translator`). + +When a process resolves an aboslute path, it queries +its root file system server by invoking the `fs.defs:dir_lookup` +method in the capability in its root directory slot. The +file system server resolves as much as it knows about locally +and when it encounters a translator, it replies to the client +indicating how much it resolved and where to continue its +lookup. This continues until the name is fully resolved +or an error occurs. The same happens for relative path +names but a different capability is used. + +For a more detailed explanation of the protocol, look at the section +2.2 of the [[critique]]. diff --git a/hurd/virtualization.mdwn b/hurd/virtualization.mdwn new file mode 100644 index 00000000..dfd6c375 --- /dev/null +++ b/hurd/virtualization.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Olaf Buddenhagen has written a text about how [[/virtualization]] is applicable +within Hurd systems: +<http://tri-ceps.blogspot.com/2007/10/advanced-lightweight-virtualization.html> diff --git a/ibac.mdwn b/ibac.mdwn new file mode 100644 index 00000000..5247c297 --- /dev/null +++ b/ibac.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +IBAC stands for identity-based access control. +In this access control scheme, access to a resource +is based on identity of the caller. This is often +problematic as when a program acts on behalf of +another, access is authorized based on its own +identity rather than that of the caller. + +See also [[ABAC]]. diff --git a/idl.mdwn b/idl.mdwn new file mode 100644 index 00000000..60e3fea6 --- /dev/null +++ b/idl.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +An IDL is an interface definition language. The most well-known is +CORBA. An IDL compiler takes a specification and generates stubs +that hide the transport details. In the case of [[microkernel/mach/MIG]], this +hides the marshalling and unmarshalling of parameters according +to [[microkernel/Mach]]'s semantics. diff --git a/index.mdwn b/index.mdwn new file mode 100644 index 00000000..2081f205 --- /dev/null +++ b/index.mdwn @@ -0,0 +1,133 @@ +[[img logo.png alt="[] HURD-Wiki"]] + +Welcome to the **new** GNU Hurd wiki! + +**There is a huge bunch of unpolished stuff on here, please help us to tidy +things up!** Comments about how that could be tackled are best posted onto +this page's [[discussion]] subpage. + +---- + +This site focuses on providing user-centric and update-able (and hopefully the +most current) information regarding the status and development of the +GNU project's GNU operating system. There are many areas to comment on the +core component (the Hurd) and other very closely related but distinct projects. +This is an all volunteer effort intended to supplement the [official Hurd +site](http://hurd.gnu.org/). + + +[[toc ]] + +<!-- If you're rendering this page and the output looks garbled from here on, +then you've hit <http://bugs.debian.org/421843>. Installing the markdown +package from Debian experimental fixed this for me. --> + + +## Breaking News + +* 2008-09-19: We had 4 slots in the Google Summer of Code 2008 - [[check_the_results|community/gsoc]]! + +## Contributing + +To help the Hurd you can for example (from high level stuff to the inner core) + +* [[Contribute_to_this_wiki|contributing/wiki]], +* [[Run_a_GNU/Hurd_system|index#run]], and help others get their systems running, +* [[Port_applications|hurd/running/debian/porting]] to work in Hurd, +* Write [[translators|hurd/translator]] to extend the Hurd, +* Work on the [[Hurd_on_Mach|contributing#hurd_on_mach]], or +* Help to port the Hurd [[to_a_modern_microkernel|contributing#hurd_on_modern_microkernel]]. + +Read about ways to contribute [[in_more_detail|contributing]]. + + +## Getting Help + +There are a couple of different [[Hurd_FAQs|hurd/FAQ]]. +There are a number of [[IRC_channels|IRC]] and several +different [[mailing_lists]] with searchable archives. + +Before asking a question on a mailing list or on IRC, first, please try to +answer your own question using a search engine and reading the introductory +information. If you have done this and you cannot find the answer to your +question, feel free to ask on a mailing list or on IRC. + +<a name="run"> </a> +## Running the Hurd + +The most functional distribution of the Hurd is the one provided by Debian. +Find more information about it at the +[Debian GNU/Hurd website](http://www.debian.org/ports/hurd/hurd-install). + +There are [[various_possibilities|hurd/running]] of running a GNU/Hurd system. + +And this wiki is living proof of the usability of the Hurd, as it is served by a +Debian GNU/Hurd system. More people using GNU in production can be found on +[[Hurd/WhoRunsGNU]]. + +## What is the Hurd? + +The [[Hurd]] is GNU's replacement for the various UNIX and Linux kernels. + +The Hurd is firstly a collection of protocols formalizing how different +components may interact. The protocols are designed to reduce the mutual +[[trust]] requirements of the actors thereby permitting a more +[[extensible|Extensibility]] system. These include interface definitions +to manipulate files and directories and to resolve path names. This allows +any process to implement a file system. The only requirement is that it +have access to its backing store and that the principal that started it +own the file system node to which it connects. + +The Hurd is also a set of servers that implement these protocols. The +servers run on top of [[microkernel/Mach]] and use Mach's +[[microkernel/mach/IPC]] mechanism to transfer information. + +The word *Hurd* is commonly used to refer to one of the following: + + * the Hurd software that runs on top of a [[microkernel]] (most precisely) + * a machine running the [[Debian_GNU/Hurd|hurd/running/debian]] distribution + * the [GNU Hurd](http://hurd.gnu.org/) project including related dependent + projects + * HIRD of UNIX Replacing Daemons (arguably) + * HIRD is an acronym for HURD Interfaces Representing Depth (arguably) + +The [[Hurd]] supplies the last major software component needed for a complete +[[GNU]] operating system as originally conceived by Richard M. Stallman (RMS) +in 1983. The GNU vision directly drove the creation and has guided the +evolution of the [Free Software Foundation](http://www.fsf.org/), the +organization that is the home of the [GNU project](http://www.gnu.org/gnu/). + +[[Hurd/HurdNames]] + + +## Current Status + +There has not yet been an official 1.0 release. The Hurd is developed by a few +volunteers in their spare time. The project welcomes any assistance you can provide. +Porting and development expertise is still badly needed in many key areas. + +Functional systems are installable in a dual-boot configuration. Development +systems are currently mostly based on the [[Debian_GNU/Hurd|hurd/running/debian]] port +sponsored by the [Debian project](http://www.debian.org/). + +Community resources for related projects focus around the official website +<http://hurd.gnu.org/>, this site at <http://www.bddebian.com/~wiki/>, the +[[mailing_lists]] and the [[IRC_channels|IRC]]. + +If you want to see the current discussions in the Hurd project, please have a look at +the [bug-hurd mailinglist archives](http://lists.gnu.org/pipermail/bug-hurd/). + +[[hurd/Status]] + + +## How is this site arranged? + +The menu on the upper right corner provides a rough structuring about the +available content. Just follow those topics and explore the wiki. + +Further information about this site and how it was created can be found in the +[[wiki_colophon]]. + +---- + +This wiki is powered by [ikiwiki](http://ikiwiki.info/). diff --git a/index/discussion.mdwn b/index/discussion.mdwn new file mode 100644 index 00000000..aec8711d --- /dev/null +++ b/index/discussion.mdwn @@ -0,0 +1,66 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# TODO + +Please add your comments here about what you think needs to be done on the wiki. + + +## What to Add + + <azeem-uni> tschwinge: so, first plan: don't mention www.d.o/ports/hurd on the wiki + <azeem-uni> but transfer that information to the wiki, and keep it uptodate there + <azeem-uni> and proabably make links to that on w.d.o + + + <azeem-uni> tschwinge: also a top-level "How can I help Hurd development" paragraph would be nice + + +we have "how to set-up Hurd consoles" and "how to set up Xorg in Hurd" but we do not have any +general after-installation problems page e.g. networking problem, upgrade problem. later +with that information we can make a page named: Technical FAQs. --[[arnuld]] + + +I'd like an RSS or Atom feed of the changes to the Wiki. Is there a way that there could be one? -- ThomasThurman + +> I'm discussing this with upstream. It is not as trivial as one might think, +> as it -- I suppose -- means rendering the RecentChanges page to static HTML, +> but I also don't see why it shouldn't be possible. --[[tschwinge]] + +>> This has now been done, see [[recent_changes]]. --[[tschwinge]] + +> Upstream, Joey Hess, says that the RecentChanges page *is not static for +> speed reasons mostly*. What we can do -- which is also what [[ikiwiki]] [is +> doing](http://ikiwiki.info/download/) -- is that *commits to this git +> repository are fed into [CIA](http://cia.vc/), and can be browsed, subscribed +> to etc on its [project page](http://cia.vc/stats/project/ikiwiki)*. I'll try +> to take care about that. --[[tschwinge]] + + +## How to Rearrange + +[[Hurd]] and [[Distrib]] are a messy conglomeration of everything and should be +cleaned and re-ordered. --[[tschwinge]] + + +The three of [[Xfree86]], [[DebianX]], [[DebianXorg]] should be merged into +one. + + + <azeem> tschwinge: maybe we should discuss wiki page naming policies WRT Debian + <azeem> I'd rather have something like /Debian, /DebianInstall, /DebianFAQ, /DebianInstallCrosshurd etc. + <azeem> than the current distrib + + +What to do with [[GNU]]? --[[tschwinge]] + + +Someone could work on getting us some nice style-sheets; see [[local.css]]. +--[[tschwinge]] diff --git a/ipc.mdwn b/ipc.mdwn new file mode 100644 index 00000000..7c0e16b2 --- /dev/null +++ b/ipc.mdwn @@ -0,0 +1,34 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +IPC stands for interprocess communication. + +On [[Unix]], interprocess communication can be achieved using pipes. +This is inefficient for large amounts of data as the data must be +copied. This is generally not a problem as most services are +provided by the Unix kernel and Unix is not designed to be +[[extensible|extensibility]]. + +[[Microkernel]] systems, on the other hand, are generally composed +of many components. As components are separated by their respective +[[address_space]] boundaries, unlike the kernel, they cannot arbitrarily +examine and modify the caller's state. The advantage is that if the +protocol is carefully designed, the callee cannot cause the caller +any [[destructive_interference]] thereby removing the need for the +caller to [[trust]] the callee thus reducing the former's [[tcb]]. +When done systematically, this can increase the system's [[robustness]]. +To this end, microkernels provide richer IPC semantics that include +the ability to transfer [[capabilities|capability]] and to use [[virtual_memory]] +[[mechanism]]s to copy data. + + +# See Also + +* [[RPC]] diff --git a/irc.mdwn b/irc.mdwn new file mode 100644 index 00000000..6e97c7df --- /dev/null +++ b/irc.mdwn @@ -0,0 +1,61 @@ +[[meta title="IRC"]] + +While all official development takes place on the mailing lists and the Savannah trackers, +a lot of discussions are had on IRC as well. Everybody is welcome to join and follow these channels, but please +respect the below guidelines if you want to participate. + +# Asking Questions + +Please follow these [guidelines](http://catb.org/~esr/faqs/smart-questions.html) +when asking your question. Namely: spend some time trying +to solve the problem on your own (e.g., [search the web](http://www.google.com), +use this wiki, etc.), show us that you did so when you +ask your question, and provide as many relevant details as possible +reproducing them as exactly as possible. + +# Staying On-Topic + +Please try to stay on topic. + +* emacs vs. vi **is not** on topic +* If it is appropriate for a **slashdot comment**, it's **not appropriate** + here +* why GNU sucks is **off-topic** +* when the next release of the Hurd will be **is inappropriate** +* you should not advocate your favorite **GNU/Linux** ditribution + +# Pasting Logs + +Sometimes providing a log or some other excerpt of text can +help solve a problem or answer a question. **Do not** paste +the log in the channel itself. Instead use a +[paste bin](http://paste.debian.net). + +# Rich Text + + +Don't use it. Don't use colors. Don't use bold. Don't use emphasis. + +# Greeting + +If you never contribute to the discussion, there is no need +to always greet the channel when you enter and before leave. + +# Channels + +All Hurd IRC channels are hosted on [Freenode.net](http://freenode.net/). + +* #hurd - The official Hurd IRC channel. Some of the Hurd developers and users hang out there, and discussions about GNU Hurd, GNU/Hurd and +Debian GNU/Hurd are had there. + +Local user channels include: + +* #hurd-it - Italian +* #hurd-es - Spanish +* #hurdfr - French +* #hurd-de - German +* #hurd.in - Indian regional languages(but primarily English) + +# Channel logs + +* [#hurd logs](http://richtlijn.be/~larstiq/hurd/) diff --git a/isolation.mdwn b/isolation.mdwn new file mode 100644 index 00000000..f43ae3d6 --- /dev/null +++ b/isolation.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +When two [[principal]]s cannot affect each other, they are said to +be isolated from one another. Strictly speaking, if two principals +are isolated from one another, there is no way for one to know +whether the other exists: all interactions with the environment +do not expose proof of the existence or non-existence of the +other. + +Typically, principals are isolated from one another with +respect to a particular property. Common properties include +information-flow (security) and performance. diff --git a/license.mdwn b/license.mdwn new file mode 100644 index 00000000..c70c1948 --- /dev/null +++ b/license.mdwn @@ -0,0 +1,6 @@ +[[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]]."]] diff --git a/liedtke.mdwn b/liedtke.mdwn new file mode 100644 index 00000000..ca55eaf3 --- /dev/null +++ b/liedtke.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Liedtke is the father of [[microkernel/L4]]. diff --git a/local.css b/local.css new file mode 100644 index 00000000..4b631f8e --- /dev/null +++ b/local.css @@ -0,0 +1,157 @@ +/* ikiwiki local style sheet + + Copyright © 2007, 2008 Free Software Foundation, Inc. + + 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''. */ + +/* + * Someone else please work on this stuff -- someone who knows to make it + * actually look good... Some examples are available at + * <http://ikiwiki.info/css_market/>. --tschwinge + */ + +/* TODO. I'm incapable, but have ideas, so... + + (1) On web-edit pages like + <http://www.bddebian.com/cgi-bin/wiki-ikiwiki.cgi?page=index&do=edit> I'd + like to have the whole page fit into the web browser frame, so that no + scrollbars show up in the browser and all of header, text editing box, + copyright assignment notice, buttons and footer are visible at once, without + having to scroll. This means that the text editing box should be resized in + height as needed (within limits, of course). --tschwinge + + (2) `.pagecopyright' and `.pagelicense' should get the spacing between them + removed and should get some margins. +*/ + + +body +{ + font-family: "Bitstream Vera Sans", sans-serif; + margin: 2px; + padding: 1em; +} + +hr +{ + height: 1px; + border-style: none; + background-color: black; + /* No idea, if this is ``just'' a Firefox bug (looks fine without the + * following statement in konqueror), but it for sure inhibits the `hr's from + * being shifted to the right. */ + margin-left: 0px; +} + +pre +{ + margin-left: 3em; + font-weight: bold; + padding: 0.5em; +} + +/* Format these elements table-like with the background of the upper element + shinig through between the cells. TODO. This is currently achieved with + ``border: white''. */ +.pagedate, +.pagecopyright, +.pagelicense +{ + display: table-cell; + border-left: solid 7px white; + border-right: solid 7px white; +} + +/* Nullify the paragraph tag following ``License:''. */ +.pagelicense p +{ + display: inline; +} + +.header +{ + padding: 0.5em; + background-color: #f0f0f0; +} + +.actions +{ + background-color: #f0f0f0; +} + +#sidebar +{ + background-color: #f0f0f0; +} + +.pagedate, +.pagecopyright, +.pagelicense +{ + background-color: #f0f0f0; + font-size: small; +} + +/* Used in `.templates/editpage.tmpl'. */ +.copyright_assignment_notice +{ + background-color: #f0f0f0; + font-size: small; +} + + +/* Variable width. */ +#sidebar +{ + width: auto; + /* ikiwiki's default for `width'. */ + min-width: 20ex; +} + +/* Less indentation for list items. */ +#sidebar ul +{ + padding-left: 2ex; +} +#sidebar ul ul +{ + padding-left: 2.5ex; +} +/* Make the logo appear centered */ +#sidebar img { + display: block; + margin-left: auto; + margin-right: auto; +} + +.table_style_1 +{ + text-align: left; + font-size: small; + + border-width: thin; + border-style: solid; + border-collapse: collapse; + empty-cells: show; +} + +.table_style_1 th +{ + vertical-align: top; + + border-width: thin; + border-style: solid; +} + +.table_style_1 td +{ + vertical-align: top; + + border-width: thin; + border-style: dotted; +} diff --git a/logo.png b/logo.png Binary files differnew file mode 100644 index 00000000..2090f9db --- /dev/null +++ b/logo.png diff --git a/mailing_lists.mdwn b/mailing_lists.mdwn new file mode 100644 index 00000000..66ae1f58 --- /dev/null +++ b/mailing_lists.mdwn @@ -0,0 +1,107 @@ +# On Posting + +Before asking a question on a list, first make an effort to find the answer +to your question. When you ask your question, (1) be details, and (2) demonstrate +that you have made an effort, e.g., "I am having trouble frobbing the foo. I +searched the web and only found information regarding how to frob a bar, but +that seems unrelated." + +List etiquette is to cc the sender and anyone **actively** involved in the +discussion. Some people don't like this and they set their reply-to header +appropriately. Respect this. + +It is rarely appropriate to cc multiple lists. Sometimes it is. In that case, +do so. If in doubt, don't; just choose the single most appropriate list. + +When replying to others, please don't top-post and trim the existing text to +quote only the sections you're actually replying to. See [[wikipedia +Posting_style]] for further reading, especially [[wikipedia +Posting_style#Inline_replying]]. + +Also see these general notes about [[community/communication]]. + + +# Main Lists + +The lists are [[unmoderated]] and most of them are hosted on +<http://lists.gnu.org/>. Try to post to the appropriate mailing list. + +Some of the Hurd user groups listed on [[community]] also host additional +mailing lists. + +<!-- TODO. Need some real ikiwiki way of adding such anchors. --> + +<a name="bug-hurd"></a> +## bug-hurd + +<http://lists.gnu.org/mailman/listinfo/bug-hurd> + +Technical discussion and bug reports; main development list. + +<a name="hurd-devel"></a> +## hurd-devel + +<http://lists.gnu.org/mailman/listinfo/hurd-devel> + +Low-traffic developers list. This list is *moderated* and *restricted*. +Subscribe to [[hurd-devel-readers]] instead. + +<a name="hurd-devel-readers"></a> +### hurd-devel-readers + +<http://lists.gnu.org/mailman/listinfo/hurd-devel-readers> + +This list is a read-only mirror of [[hurd-devel]]. In contrast to subscribing +to the latter, everyone is free to subscribe to this read-only list. + +<a name="help-hurd"></a> +## help-hurd + +<http://lists.gnu.org/mailman/listinfo/help-hurd> + +Hurd-specific questions; for users of the Hurd. + +<a name="web-hurd"></a> +## web-hurd + +<http://lists.gnu.org/mailman/listinfo/web-hurd> + +Discussion of the <http://hurd.gnu.org/> website and this wiki. + +<a name="l4-hurd"></a> +## l4-hurd + +<http://lists.gnu.org/mailman/listinfo/l4-hurd> + +Discussion regarding a possible [[design_successor|hurd/ng]] to the Hurd. + +<a name="debian-hurd"></a> +## debian-hurd + +<http://lists.debian.org/debian-hurd/> + +Discussion around and questions regarding the +[[Debian_GNU/Hurd|hurd/running/debian]] distribution. + +<a name="gnu-system-discuss"></a> +## gnu-system-discuss + +<http://lists.gnu.org/mailman/listinfo/gnu-system-discuss> + +Discussion about the [[GNU_system|hurd/running/gnu]]. + + +# Spam + +GNU mailing lists used to have no spam filtering applied -- everyone was +allowed to post, the lists were completely unmoderated. This resulted in +getting the lists spammed very much, as you can see in the web archives. If +you're interested in getting hold of (mostly) spam-free mboxes, then talk to +[[Thomas_Schwinge|tschwinge]]. Also [[read_about|unmoderated]] the +spam-rejection techniques being used today. + + +# Related + + * [[IRC]] + * [[Trackers]] diff --git a/mailing_lists/bug-hurd.mdwn b/mailing_lists/bug-hurd.mdwn new file mode 100644 index 00000000..11d4dfd1 --- /dev/null +++ b/mailing_lists/bug-hurd.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#bug-hurd]] diff --git a/mailing_lists/debian-hurd.mdwn b/mailing_lists/debian-hurd.mdwn new file mode 100644 index 00000000..4df9e593 --- /dev/null +++ b/mailing_lists/debian-hurd.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#debian-hurd]] diff --git a/mailing_lists/gnu-system-discuss.mdwn b/mailing_lists/gnu-system-discuss.mdwn new file mode 100644 index 00000000..30f22eab --- /dev/null +++ b/mailing_lists/gnu-system-discuss.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#gnu-system-discuss]] diff --git a/mailing_lists/help-hurd.mdwn b/mailing_lists/help-hurd.mdwn new file mode 100644 index 00000000..ee7bc5e1 --- /dev/null +++ b/mailing_lists/help-hurd.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#help-hurd]] diff --git a/mailing_lists/hurd-devel-readers.mdwn b/mailing_lists/hurd-devel-readers.mdwn new file mode 100644 index 00000000..bb2b2fb3 --- /dev/null +++ b/mailing_lists/hurd-devel-readers.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#hurd-devel-readers]] diff --git a/mailing_lists/hurd-devel.mdwn b/mailing_lists/hurd-devel.mdwn new file mode 100644 index 00000000..63299691 --- /dev/null +++ b/mailing_lists/hurd-devel.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#hurd-devel]] diff --git a/mailing_lists/l4-hurd.mdwn b/mailing_lists/l4-hurd.mdwn new file mode 100644 index 00000000..1c326586 --- /dev/null +++ b/mailing_lists/l4-hurd.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#l4-hurd]] diff --git a/mailing_lists/unmoderated.mdwn b/mailing_lists/unmoderated.mdwn new file mode 100644 index 00000000..14a407b1 --- /dev/null +++ b/mailing_lists/unmoderated.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +In fact the lists *are* moderated for users that post from not-subscribed email +addresses. However, this moderation should be transparent to the poster, you +only might notice some additional delay until your message shows up on the +list, as it has to be handled manually. Note that this is a one-time delay, as +the address will be added to a white-list, so that further messages from the +same sending address will get through immediatelly. + +So, to initiate a discussion you do not need to subscribe to the mailing list +in question. And people are very much encouraged to maintain the CC +recipients, so that you'll also receive replys to your message. diff --git a/mailing_lists/web-hurd.mdwn b/mailing_lists/web-hurd.mdwn new file mode 100644 index 00000000..7a1abeb2 --- /dev/null +++ b/mailing_lists/web-hurd.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists#web-hurd]] diff --git a/mailinglists.mdwn b/mailinglists.mdwn new file mode 100644 index 00000000..709b1771 --- /dev/null +++ b/mailinglists.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=mailing_lists]] diff --git a/mechanism.mdwn b/mechanism.mdwn new file mode 100644 index 00000000..c0a6b02c --- /dev/null +++ b/mechanism.mdwn @@ -0,0 +1,32 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The Collaborative International Dictionary of English v.0.48 +defines a mechanism as: + +> The series of causal relations that operate to produce an +> effect in any system; as, the mechanism of a chemical +> reaction. + +This is, a mechanism is a function that produces some result. +As mechanisms determine the type of result, they necessarily +impose some [[policy]] (rules). Mechanisms that are referred +to as policy-free are those that minimally impose policy. + +A process can be used to encapsulate a program instance. On [[Unix]], +a process is associated with a UID. This UID, in part, determines +what the process is authorized to do. On a [[microkernel]], +the policy that controls what resources a process may access +are realized separately. This may achieved through the use of +UIDs, however need not. Thus, the processes mechanism on such +microkernels impose less policy than on Unix. A process is not +policy free as it is possible to use other mechanisms to +encapsulate a program instance, e.g., [[SFI]] and tainting +ala [[Asbestos]]. diff --git a/microkernel.mdwn b/microkernel.mdwn new file mode 100644 index 00000000..fb39458f --- /dev/null +++ b/microkernel.mdwn @@ -0,0 +1,35 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[Liedtke]] explains in [On Microkernel Construction](http://l4ka.org/publications/paper.php?docid=642) +that a microkernel attempts to minimize the mandatory part of the operating +system by providing the minimal number of [[mechanism]]s that +maximize the flexibility of implementation (by imposing minimal +[[policy]]) while allowing the efficient implementation of the +remainder of the system. + +The idea of a microkernel as explained above was first explored +by Per Brinch-Hansen in 1970 in +[The Nucleus of a Multiprogramming System](http://brinch-hansen.net/papers/1970a.pdf). + +Other notable microkernels include [[Hydra]], [[KeyKOS]], [[Eros]] and [[L4]]. + +An [introduction](http://www.cs.cornell.edu/Info/People/ulfar/ukernel/ukernel.html) by +Úlfar Erlingsson and Athanasios Kyparlis (from 1996) to microkernel concepts. + +[[Research]]. [[Viengoos]]. + +[[Microkernels_for_beginners|for_beginners]]. + +A 2002 article about [[microkernel_FUD|FUD]] (Fear, Uncertainty, Doubt). + +[[FAQ]]. + +[[Mach]]. diff --git a/microkernel/faq.mdwn b/microkernel/faq.mdwn new file mode 100644 index 00000000..0e129095 --- /dev/null +++ b/microkernel/faq.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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=Microkernel FAQ"]] + +[[inline +pages="microkernel/faq/* and !*/discussion" +show=0 +actions=yes +rootpage=microkernel/faq" postformtext="Add a new item titled:"]] diff --git a/microkernel/faq/multiserver_microkernel.mdwn b/microkernel/faq/multiserver_microkernel.mdwn new file mode 100644 index 00000000..da690425 --- /dev/null +++ b/microkernel/faq/multiserver_microkernel.mdwn @@ -0,0 +1,26 @@ +[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2008 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 a Multiserver Microkernel?"]] + +A Microkernel has nothing to do with the size of the kernel. Rather, it refers +to the functionality that the kernel provides. It is generally agreed that +this is; a set of interfaces to allow processes to communicate and a way to +talk to the hardware. *Software drivers*, as we like to call them, are then +implemented in user space as servers. The most obvious examples of these are +the TCP/IP stack, the ext2 filesystem and NFS. In the case of the Hurd, users +now have access to functionality that, in a monolithic kernel, they could never +use, but now, because the server runs in user space as the user that started +it, they may, for instance, mount an FTP filesystem in their home directory. + +For more information about the design of the Hurd, read the paper by Thomas +Bushnell, BSG: [Towards a new strategy on OS +design](http://www.gnu.org/software/hurd/hurd-paper.html). diff --git a/microkernel/for_beginners.mdwn b/microkernel/for_beginners.mdwn new file mode 100644 index 00000000..aed436e8 --- /dev/null +++ b/microkernel/for_beginners.mdwn @@ -0,0 +1,32 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# Concepts + +A [[microkernel]] implements a minimal number of abstractions +that facilitate the realization of operating system services. + +[[Mach's_concepts|mach/concepts]] are documented here. + +Read OSF's Kernel Principles. Find it under the +[[mach/documentation]] link. + +# Exercises + +Mach's API is documented in OSF's Kernel API book. Find it +under the [[mach/documentation]] link. Skim it to get an idea +of how the API looks and then try the following exercises: + +Send messages using Mach's IPC mechanism +([detailed description](http://walfield.org/pub/people/neal/papers/hurd-misc/mach-ipc-without-mig.txt)). + +Implement your own pager. Write a server that synthesizes +content on the fly and have a client map the object into its +address space and print out the file. diff --git a/microkernel/fud.mdwn b/microkernel/fud.mdwn new file mode 100644 index 00000000..68794e69 --- /dev/null +++ b/microkernel/fud.mdwn @@ -0,0 +1,21 @@ +[[meta copyright="Copyright © 2002 Wolfgang Jährling and Jeroen Dekkers"]] +[[meta license="Verbatim copying and distribution of this entire article is +permitted in any medium, provided this notice is preserved."]] + +# The Microkernel Experiment is Going On + +by [Wolfgang Jährling](mailto:wolfgang@pro-linux.de) and [Jeroen Dekkers](mailto:jeroen@dekkers.cx) + +This article is a response to an [earlier article](http://www.linuxjournal.com/node/6105/print) by Miles Nordin in Linux Journal, where he expressed his personal feelings about microkernels and monolithic kernels. We will try to present a different point of view. Of course, we are also biased, as we are both young hackers who try to turn [the GNU Hurd](http://www.gnu.org/software/hurd/) into a software useful for everyday-work; for those who don't know it (yes, we're abusing this article as an advertisement): The Hurd is a collection of Daemons, currently running on top of the Mach microkernel and providing a replacement for the Unix kernel together with the GNU C Library. + +Miles Nordin claimed that microkernels are dead already. But this is not completely true. The first generation of microkernels, which were in fact no real microkernels, are dead. But there is a new generation, which uses a radically different strategy than the original (so-called) microkernels. Thus, microkernels are still a research topic, and today they look more promising than ever before. By now, this is just something we claim, but read on, and you'll find out why we do so. + +Out of our own experience, we can confirm that the first generation microkernel Mach is quite slow, but being microkernel independent is one of the goals of the Hurd and people are already working on porting the Hurd from Mach to the second generation microkernel L4. Those new second generation kernels aren't as slow as Mach and we think that one should not talk about the performance of microkernel based systems without having read at least some of the papers on L4. The L4 people did some interesting benchmarks, which indicate that one can get a lot of performance by making a microkernel really small. How is this supposed to work? Well, the microkernel provides very primitive, highly optimized operations, and applications use them to implement whichever way of interprocess communication is apropriate for them in an efficient way. By deciding this on a per-case basis, you get optimal performance for all applications. + +But L4 takes this even further. For example, you can have schedulers in userspace. Therefore you can use a scheduler which is optimized for the specific tasks your system performs. With the Linux kernel, different schedulers are only possible by using a different source tree, thus you cannot switch at run-time and/or have different schedulers for different groups of processes. + +Of course, microkernels still have some problems, mainly because we are bound to today's technology, and current processors have not been designed with microkernels in mind. On a processor that is not optimized for systems with monolithic kernels, where the currently still problematic overhead of context switches would vanish, microkernels would get another performance boost. This sounds like an excuse, but it is intended as a reminder about the fact that the problem is not the general concept of microkernels. However, the L4 people have done a lot of good hacks to work around all this and have reached reasonable performance already. + +All this could be discussed in arbitrary detail, but we won't do that now, as we have more urgent things to do than reacting on FUD about microkernels. So we will conclude by saying that it is too easy to claim that one design is fast and the other one is slow, but everything depends on how exactly a system is designed and implemented. Maybe microkernels will eventually turn out to be slower in almost any case; we doubt that, but who knows? But even then, a microkernel based system will offer enough other advantages so that people will prefer to use it in some cases. But on the other hand, history has shown that new concepts seldom replace old ones completely, but rather establish themselfes in addition to the old ones, therefore we will have the opportunity to argue about which concept is best at least for another couple of years.. or decades? + +If you are interested in research about the performance of microkernel based systems, visit <http://www.l4ka.org> and <http://os.inf.tu-dresden.de/L4/> diff --git a/microkernel/mach.mdwn b/microkernel/mach.mdwn new file mode 100644 index 00000000..078b531f --- /dev/null +++ b/microkernel/mach.mdwn @@ -0,0 +1,18 @@ +[[img logo.png]] + +Mach is a so-called first generation [[microkernel]]. It is the +microkernel currently used by the [[Hurd]]. + +* [[Documentation]] +* [[Concepts]] +* [[History]] ([Torvalds, Tanenbaum Debate](http://www.dina.dk/~abraham/Linus_vs_Tanenbaum.html)) + +# Implementations + +* [[GNUMach]] +* [[Mach/OskitMach]] - A Once Successor of Mach based on OSKit +* [Apple's Darwin](http://developer.apple.com/darwin/) ([API](http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/index.html)) (**non-free**) + +# Related + +* [[Mach_Interface_Generator|mig]] diff --git a/microkernel/mach/concepts.mdwn b/microkernel/mach/concepts.mdwn new file mode 100644 index 00000000..04dbb1c6 --- /dev/null +++ b/microkernel/mach/concepts.mdwn @@ -0,0 +1,6 @@ +[[Mach]] is a first-generation [[microkernel]]. Mach's basic abstractions +include [[address_space]]s in the form of [[task]]s, execution contexts in the +form of [[thread]]s, [[IPC]], [[capabilities|capability]] in the form of [[port]]s, and +[[memory_object]]s, which enable Mach's [[external_pager_mechanism]]. + +Mach's [[API]] is well-[[documented|documentation]]. diff --git a/microkernel/mach/discussion.mdwn b/microkernel/mach/discussion.mdwn new file mode 100644 index 00000000..589e302d --- /dev/null +++ b/microkernel/mach/discussion.mdwn @@ -0,0 +1,23 @@ +## <a name="Maintenance_of_the_Mach_web"> Maintenance of the Mach web </a> + +**_Old discussions:_** [[WIKIHOMEURLMachTOPICrev13]] + +Interesting, for consistency sake I'll think about making your changes you made on the right hand side to the other web WebHome pages. I guess it's not critical that they are identical, but I was trying to keep them identical if possible. I also wanted it to be "light" enough feature wise that it doesn't overpower the page. You've added back a few of the features, so we obviously differ in how important you and I think these features are. That's OK, I'll think about it some more and we'll see what happens. + +Oh, I see you added back [[WebTopicList]] and [[WebPreferences]]. I purposely removed [[WebPreferences]] from the lists on the right because it has nothing to do with navigation. I also didn't think that people actually use topic names to navigate. If they do they could search for them. Keeping the number to four items instead of six and keeping the descriptions concise makes a big difference when I view the page. + +(goes off to think more...) + +and eat... ;-) + +-- [[Main/GrantBow]] - 29 Dec 2002 + +**_Reasons for my change:_** + +1. [[WebTopicList]] is a lot quicker than the [[WebIndex]] - brings down the load times and the load of the server +2. [[WebPreferences]] - users might be curious to see what can be modified. Changes should of course only be made in their home topics, like in %WIKIUSERNAME%. However, the [[WebPreferences]] can serve as an inspiration. Therefore we should perhaps make sure only the [[Main/TWikiAdminGroup]] members can alter the \*Preferences topics. +3. If you look closely I've also reordered the links. Shorter names first and long ones last, I tried to keep the descriptions brief and in proportional length as well. + +I don't know about you, but keeping the number of items to four rather than six doesn't really matter to me. The text is quite small and if it's the space we're after the [[WebStatistics]] does take up more than the navigation links. + +-- [[Main/JoachimNilsson]] - 29 Dec 2002 diff --git a/microkernel/mach/documentation.mdwn b/microkernel/mach/documentation.mdwn new file mode 100644 index 00000000..fe870386 --- /dev/null +++ b/microkernel/mach/documentation.mdwn @@ -0,0 +1,24 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + + - [Meet Mach](http://www.stepwise.com/Articles/Technical/MeetMach.html), a + summary of Mach's history and main concepts. + + - OSF's [Kernel Interface (ps)](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_interface.ps) + [Kernel Interface (pdf)](http://shakthimaan.com/downloads/hurd/kernel_interface.pdf) + + - OSF's [Kernel Principles (ps)](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_principles.ps) + [Kernel Principles (pdf)](http://shakthimaan.com/downloads/hurd/kernel_principles.pdf) + + - [Porting and Modifying the Mach 3.0 Microkernel](http://shakthimaan.com/downloads/hurd/Porting%20and%20Modifying%20the%20Mach%203.0%20Microkernel.pdf) + + - [An IO System for Mach](http://shakthimaan.com/downloads/hurd/An%20IO%20System%20for%20Mach.pdf) + + - [A Programmers' Guide to Mach System Call](http://shakthimaan.com/downloads/hurd/A.Programmers.Guide.to.the.Mach.System.Calls.pdf) diff --git a/microkernel/mach/external_pager_mechanism.mdwn b/microkernel/mach/external_pager_mechanism.mdwn new file mode 100644 index 00000000..608b6581 --- /dev/null +++ b/microkernel/mach/external_pager_mechanism.mdwn @@ -0,0 +1,181 @@ +[[meta copyright="Copyright © 2002, 2007, 2008 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]]."]]"""]] + +Mach provides a so-called external pager [[mechanism]]. This +mechanism serves to separate *managing memory* from *managing +content*. Mach does the former while user space tasks do the +latter. + + +# Introduction + +In Mach, a task's [[Mach/AddressSpace]] consists of references +to [[Mach/MemoryObjects]]. A memory object is designated using +a [[port]] (a port is just a [[capability]]) and +implemented by a normal process. + +To associate a memory object with a portion of a task's +address space, vm\_map is invoked a capability designating +the task and passing a reference to the memory object +and the offset at which to install it. (The first time +a task maps an object, Mach sends an initialization message +to the server including a control capability, which it uses +to supply pages to the kernel.) This is essentially +the same as mapping a file into an address space on [[Unix]] +using mmap. + +When a task faults, Mach checks to see if there is a memory +object associated with the fault address. If not, the task +is sent an exception, which is normally further propagated +as a segmentation fault. If there is an associated memory +object, Mach checks whether the corresponding page is in core. +If it is, it installs the page and resumes the task. Mach +then invokes the memory object with the memory\_object\_request +method and the page to read. The memory manager then fetches +or creates the content as appropriate and supplies it to +Mach using the memory\_object\_supply method. + + +# Creating and Mapping a Memory Object + +The following illustrates the basic idea: + +> ________ +> / \ +> | Mach | +> \________/ +> /| / |\ \ +> (C) vm_map / / m_o_ready (E)\ \ (D) memory_object_init +> / |/ (F) return \ \| +> ________ ________ +> / \ -----> / \ +> | Client | (A) open | Server | +> \________/ <----- \________/ +> (B) memory_object + +(A) The client sends an "open" rpc to the server. + +(B) The server creates a memory object (i.e., a port receive right), adds +it to the port set that it is listening on and returns a capability (a port +send right) to the client. + +(C) The client attempts to map the object into its address space using +the vm\_map rpc. It passes a reference to the port that the server gave +it to the vm server (typically Mach). + +(D) Since Mach has never seen the object before, it queues a +memory\_object\_init on the given port along with a send right (the +memory control port) for the manager to use to send messages to the +kernel and also as an authentication mechanism for future +interactions: the port is supplied so that the manager will be able to +identify from which kernel a given memory\_object\_* IPC is from. + +(E) The server dequeues the message, initializes internal data +structures to manage the mapping and then invokes the +memory\_object\_ready method on the control object. + +(F) The kernel sees that the manager is ready, sets up the appropriate +mappings in the client and then replies to the vm\_map rpc indicating +success. + +There is nothing stopping others from playing "the kernel." This is +not a security problem: clients must [[trust]] the server from whom they +obtain memory objects and also the servers with whom they share +the object. Multiple memory managers are a reality that should be +dealt with gracefully: they are useful for network transparent +mappings etc. + + +# Resolving Page Faults + +> (G) Client ________ +> resumed / \ +> | Mach | +> (A) Fault +----|------+ | \ (B) m_o_request (C) store_read +> ____|___ \_____|__/ |\ \| ________ _________ +> / +---\-------+ \ / \ / \ +> | Client | (F) | Server |<===>| storeio | +> \________/ m_o_supply \________/ \_________/ +> (E) return data | ^ +> | | (D) device_read +> v | +> ________ +> / Device \ +> | Driver | +> \________/ +> | ^ +> | | +> v +> ____________ +> / Hardware \ + +(A) The client does a memory access and faults. The kernel catches +the fault and maps the address to the appropriate memory object. It +then invokes the memory\_object\_request method on the associated +capability. (In addition to the page to supply, it also supplies the +control port so that the server can determine which kernel +sent the message.) + +(B) The manager dequeues the message. On the Hurd, this is translated +into a store\_read: a function in the libstore library which is used to +transparently manage block devices. The storeio server starts off as +a separate process, however, if the server has the appropriate +permission, the backing object can be contacted directly by the +server. This layer of indirection is desirable when, for instance, a +storeio running as root may want to only permit read only access to a +resource, yet it cannot safely transfer its handle to the client. In +this case, it would proxy the requests. + +(C) The storeio server contacts, for instance, a device driver to do +the read. This could also be a network block device (the NBD server +in GNU/Linux), a file, a memory object, etc. + +(D) The device driver allocates an anonymous page from the default +pager and reads the data into it. Once all of the operations are +complete, the device returns the data to the client unmapping it from +its own address space at the same time. + +(E) The storeio transfers the page to the server. The page is still +anonymous. + +(F) The manager does a memory\_object\_supply transferring the page to +the kernel. Only now is the page not considered to be anonymous but +managed. + +(G) The kernel caches the page, installs it in the client's virtual +address space and finally, resumes the client. + + +# Paging Data Out + +> Change manager Pager m_o_return store_write +> \ _________ (B) __(A)__ (C) ________ (D) _______ +> S | / Default \ / \ / \ / \ +> W |<=>| Pager |<=>| Mach |==>| server |<=>| storeio |<=> +> A | \_________/ \________/ \________/ \_______/ +> P | +> / + +(A) The paging [[policy]] is implemented by Mach: servers just implement +the [[mechanism]]. + +(B) Once the kernel has selected a page that it would like to evict, it +changes the manager from the server to the default pager. This way, +if the server does not deallocate the page quickly enough, it cannot +cause a denial of service: the kernel will just later double page it +to swap (the default pager is part of the [[tcb]]). + +(C) Mach then invokes memory\_object\_return method on the control +object. The server is expected to save the page free it in a timely +fashion. The server is not required to send a response to the kernel. + +(D) The manager then transfers the data to the storeio which +eventually sends it to disk. The device driver consumes the memory +doing the equivalent of a vm\_deallocate. diff --git a/microkernel/mach/gnumach.mdwn b/microkernel/mach/gnumach.mdwn new file mode 100644 index 00000000..d45549f5 --- /dev/null +++ b/microkernel/mach/gnumach.mdwn @@ -0,0 +1,30 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +GNU Mach is currently used by the GNU [[Hurd]]. + +GNU Mach remains compatible with [[Mach]] 3.0. + +The majority of GNU Mach's [[device_driver]]s are from Linux 2.0. They were +added using glue code, i.e., a Linux [[emulation]] layer in Mach. + +GNU Mach runs on x86 machines. See the +[[hardware_compatibility_list]] and information about +[[ports]] to other architectures. + + +# Development + +* [[Building]] +* [[Debugging]] +* [[Boot_Trace]] +* [[Projects]] + * [[Rules]] + * [[Open_Issues]] diff --git a/microkernel/mach/gnumach/boot_trace.mdwn b/microkernel/mach/gnumach/boot_trace.mdwn new file mode 100644 index 00000000..a08384f0 --- /dev/null +++ b/microkernel/mach/gnumach/boot_trace.mdwn @@ -0,0 +1,222 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +`if NCPUS > 1` stuff is not being considered so far. + + +> i386/i386at/boothdr.S: \_start + +> i386/i386at/boothdr.S: boot\_entry + +>> i386/i386at/model\_dep.c: c\_boot\_entry + +>>> i386/i386at/boothdr.S: discover\_x86\_cpu\_type + +>>> i386/i386at/model\_dep.c: i386at\_init + +>>>> i386/i386/pic.c: picinit + +>>>> i386/i386at/model\_dep.c: mem\_size\_init + +>>>> i386/intel/pmap.c: pmap\_bootstrap + +>>>> i386/i386/gdt.c: gdt\_init + +>>>> i386/i386/idt.c: idt\_init + +>>>> i386/i386at/int\_init.c: int\_init + +>>>> i386/i386/ldt.c: ldt\_init + +>>>> i386/i386/ktss.c: ktss\_init + +>>> kern/startup.c: setup\_main + +>>>> kern/debug.c: panic\_init + +>>>> kern/printf.c: printf\_init + +>>>> kern/sched\_prim.c: sched\_init + +>>>>> kern/sched\_prim.c: wait\_queue\_init + +>>>>> kern/processor.c: pset\_sys\_bootstrap + +>>>>> kern/ast.c: ast\_init + +>>>> vm/vm\_init.c: vm\_mem\_bootstrap + +>>>>> vm/vm\_resident.c: vm\_page\_bootstrap + +>>>>>> vm/vm\_resident.c: pmap\_startup + +>>>>> kern/zalloc.c: zone\_bootstrap + +>>>>> vm/vm\_object.c: vm\_object\_bootstrap + +>>>>>> vm/vm\_external.c: vm\_external\_module\_initialize + +>>>>> vm/vm\_map.c: vm\_map\_init + +>>>>> vm/vm\_kern.c: kmem\_init + +>>>>> i386/intel/pmap.c: pmap\_init + +>>>>> kern/zalloc.c: zone\_init + +>>>>> kern/kalloc.c: kalloc\_init + +>>>>> vm/vm\_fault.c: vm\_fault\_init + +>>>>> vm/vm\_resident.c: vm\_page\_module\_init + +>>>>> vm/memory\_object.c: memory\_manager\_default\_init + +>>>> ipc/ipc\_init.c: ipc\_bootstrap + +>>>>> ipc/ipc\_table.c: ipc\_table\_init + +>>>>> ipc/ipc\_notify.c: ipc\_notify\_init + +>>>>> ipc/ipc\_hash.c: ipc\_hash\_init + +>>>>> ipc/ipc\_marequest.c: ipc\_marequest\_init + +>>>> vm/vm\_init.c: vm\_mem\_init + +>>>>> vm/vm\_object.c: vm\_object\_init + +>>>> ipc/ipc\_init.c: ipc\_init + +>>>>> kern/ipc\_host.c: ipc\_host\_init + +>>>>>> kern/ipc\_host.c: ipc\_pset\_init + +>>>>>> kern/ipc\_host.c: ipc\_pset\_enable + +>>>>>> kern/ipc\_host.c: ipc\_processor\_init + +>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL + +>>>> kern/timer.c: init\_timers + +>>>> kern/mach\_clock.c: init\_timeout + +>>>> kern/xpr.c: xprbootstrap + +>>>> kern/time\_stamp.c: timestamp\_init + +>>>> kern/mach\_clock.c: mapable\_time\_init + +>>>> i386/i386at/model\_dep.c: machine\_init + +>>>>> device/cons.c: cninit + +>>>>> i386/i386/fpu.c: init\_fpu + +>>>>> linux/dev/init/main.c: linux\_init + +>>>>>> linux/dev/arch/i386/kernel/irq.c: init\_IRQ + +>>>>>>> linux/dev/arch/i386/kernel/irq.c: reserve\_mach\_irqs + +>>>>>> linux/dev/kernel/sched.c: linux\_sched\_init + +>>>>>> linux/dev/init/main.c: calibrate\_delay + +>>>>>> linux/dev/glue/kmem.c: linux\_kmem\_init + +>>>>>> linux/src/drivers/pci/pci.c: pci\_init + +>>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_init + +>>>>>>> linux/src/drivers/pci/pci.c: scan\_bus + +>>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_fixup + +>>>>>> linux/dev/glue/net.c: linux\_net\_emulation\_init + +>>>>>> linux/dev/drivers/block/genhd.c: device\_setup + +>>>>>>> linux/dev/glue/block.c: blk\_dev\_init + +>>>>>>>> linux/src/drivers/block/ide.c: ide\_init + +>>>>>>>> linux/dev/drivers/block/floppy.c: floppy\_init + +>>>>>>> linux/src/drivers/scsi/scsi.c: scsi\_dev\_init + +>>>>>>> linux/dev/net/core/dev.c: net\_dev\_init + +>>>>>> linux/pcmcia-cs/glue/pcmcia.c: pcmcia\_init + +>>>>> i386/i386at/autoconf.c: probeio + +>>>>> i386/i386at/model\_dep.c: inittodr + +>>>>> i386/intel/pmap.c: pmap\_unmap\_page\_zero + +>>>> kern/task.c: task\_init + +>>>>> kern/syscall\_emulation.c: eml\_init + +>>>> kern/thread.c: thread\_init + +>>>>> i386/i386/pcb.c: pcb\_module\_init + +>>>>>> i386/i386/fpu.c: fpu\_module\_init + +>>>>>> i386/i386/iopb.c: iopb\_init + +>>>> kern/thread\_swap.c: swapper\_init + +>>>> kern/sched\_prim.c: recompute\_priorities + +>>>> kern/mach\_factor.c: compute\_mach\_factor + +>>>> kern/startup.c: start\_kernel\_threads + +[...] + +>>>> kern/startup.c: cpu\_launch\_first\_thread + +>>>>> i386/i386at/model\_dep.c: startrtclock + +>>>>>> i386/i386/pit.c: clkstart + +>>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL + +>>>>> i386/i386/pcb.c: load\_context + +[...] + +> kern/startup.c: start\_kernel\_threads + +> Threads get created. + +>> kern/sched\_prim.c: idle\_thread + +>> One for each CPU. + +>> kern/thread.c: reaper\_thread + +>> kern/thread\_swap.c: swapin\_thread + +>> kern/sched\_prim.c: sched\_thread + +>> [...] + +>> kern/bootstrap.c: bootstrap\_create + +>> [...] + +>> vm\_pageout + +>> Does not return. diff --git a/microkernel/mach/gnumach/building.mdwn b/microkernel/mach/gnumach/building.mdwn new file mode 100644 index 00000000..27573b64 --- /dev/null +++ b/microkernel/mach/gnumach/building.mdwn @@ -0,0 +1,114 @@ +Additional to the following text, a further [[example]] has be posted. + + +# Building [[GNUMach]] from Source + +If you want to build the [[GNUMach]] kernel yourself instead of just using a +pre-built binary, follow these instructions. + +The unpacked source tree is around 20 MiB, and the build tree (with all drivers +enabled) is around 50 MiB. + +## Getting the Source Code + +### Developers's RCS + +See [here](http://www.gnu.org/software/hurd/gnumach-download.html#cvs). + + $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co -r gnumach-1-branch gnumach + +(Most probably you want to get hold of the *GNU Mach 1 branch* and not the +trunk, which is also what we've done above.) + +You then have to create the automatically generatable files: + + $ ( cd gnumach && autoreconf --install ) + +### What Debian is currently using + +See [here](http://packages.debian.net/source/unstable/gnumach). + + $ apt-get source gnumach + +Please see the Debian [[running/debian/FAQ]] before using `apt-get source`. + +## Preparing for the Build + +### ... on Debian systems + +Building GNU Mach requires the *build-essential* and *fakeroot* packages, their +dependencies and additional packages that are specified by the source gnumach +package: + + # apt-get install build-essential fakeroot + # apt-get build-dep gnumach + +### ... on non-Debian systems + +Apart from the case that you only want to install GNU Mach's header files (see +below), building GNU Mach requires you to have the Mach Interface Generator +installed. See [[building_MIG|mig/building]] about how to do that, then come +back here. + +Additionally, building GNU Mach requires a C compiler, a standard C library and +your favourite flavor of awk (gawk) and GNU make. + +## Building and Installing + +### ... Debian `.deb` files + +Change into the directory with the downloaded / unpacked GNU Mach sources, e.g. + + $ cd gnumach-20050801 + +Start the build process with + + $ dpkg-buildpackage -us -uc -b -rfakeroot + +[[GNUMach]] is now building. To use the new kernel, you must install the +resulting `.deb` package which is located one directory above the build +directory and has a similar name as the build directory, e.g. + + # dpkg -i ../gnumach_20050801-4_hurd-i386.deb + +You can now reboot your computer and enjoy the new kernel. + +### [TODO] + +GNU Mach should be built in a separate directory: + + $ mkdir gnumach-build + $ cd gnumach-build + +Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure +it: + + $ [...]/gnumach-1-branch/configure [TODO] + +Build the kernel image: + + $ make gnumach.gz + +Optionally run the (tiny) test suite: + + $ make check + +You can then install and use `gnumach.gz`. + +[TODO.] + +### Installing only the Header Files + +GNU Mach should be built in a separate directory: + + $ mkdir gnumach-build + $ cd gnumach-build + +Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure +it: + + $ [...]/gnumach-1-branch/configure --prefix= + +Install the header files into e.g. `~/gnu/include/`: + + $ make DESTDIR=~/gnu install-data diff --git a/microkernel/mach/gnumach/building/example.mdwn b/microkernel/mach/gnumach/building/example.mdwn new file mode 100644 index 00000000..6da05c5b --- /dev/null +++ b/microkernel/mach/gnumach/building/example.mdwn @@ -0,0 +1,54 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Compiling GNU Mach microkernel + +Host development system is IBM T41 running Debian Sarge 3.1r0a GNU/Linux. + +* gcc version: 3.3.5 +* GNU sed version: 4.1.2 +* GNU make version: 3.8 +* mig version: 1.3-4 + +Obtained gnumach-1-branch sources from cvs: + + export CVS_RSH="ssh" + cvs -z3 -d:ext:anoncvs@ savannah.gnu.org:/cvsroot/hurd co -r gnumach-1-branch gnumach + +Obtained mig_1.3-4_i386.deb from +http://www.hadrons.org/~guillem/debian/pool/main/mig/. Installed it using dpkg: + + dpkg -i mig_1.3-4_i386.deb + +Entered into the gnumach sources and did the following for compilation: + + mkdir build + cd build + ../configure --host=i386-unknown-gnu0.2 --build=i586-pc-linux-gnu \ + --enable-kdb --enable-ide + make + +The kernel file is created in the build directory. Move it to /boot on the +testing x86 system Hurd partition. Rename it as gnumach1 and compress it: + + mv kernel gnumach1 + gzip gnumach1 + +Add a new entry on the testing machine /boot/grub/menu.lst to boot the new +kernel. + + title GNU Hurd K10 Compiled gnumach + kernel (hd0,3)/boot/gnumach1.gz root=device:hd2s4 -s + module (hd0,3)/hurd/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) + module (hd0,3)/lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +Reboot into the new compiled mygnumach1.gz kernel! diff --git a/microkernel/mach/gnumach/debugging.mdwn b/microkernel/mach/gnumach/debugging.mdwn new file mode 100644 index 00000000..fa2a9d42 --- /dev/null +++ b/microkernel/mach/gnumach/debugging.mdwn @@ -0,0 +1,68 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Mach has a built-in kernel debugger. +[Manual](http://www.gnu.org/software/hurd/gnumach-doc/Kernel-Debugger.html). + + +When you're [[running_a_system_in_QEMU|hurd/running/qemu]] you can directly +[use GDB on the running +kernel](http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC36). + + +Alternatively you can use an approach like this one: add the following code +snippet to `device/ds_routines.c`'s `ds_device_open` function, right at the top +of the function, and modify the code as needed. + + void D (char *s) + { + switch (s[0] - '0') + { + case 0: + printf ("Hello from %s!\n", __FUNCTION__); + break; + case 1: + printf ("%s: Invoking task_collect_scan.\n", __FUNCTION__); + extern void task_collect_scan (void); + task_collect_scan (); + break; + default: + printf ("No idea what you want me to do.\n"); + break; + } + } + + if (name && name[0] == 'D') + D (name + 1); + +Then boot your system and do something like this: + + # devprobe D0 + Hello from D! + # devprobe D1 + D: Invoking task_collect_scan. + # devprobe D2 + No idea what you want me to do. + +This is especially useful if you need to manually trigger some stuff inside the +running kernel, as with the *D1* example. + + +If you're doing real low level debugging, you might want to put variations of +the following snipped into the code, this code will write a `#` character at +line `[LINE]`, column `[COLUMN]` on the screen: + + *((char *) 0xb8000 + 2 * ([LINE] * 80 + [COLUMN])) = '#'; + halt_cpu (); + +The call of `halt_cpu` will -- as the name suggests -- halt the system +afterwards. This might be what you want or it might not, but it is needed at +some place when running the kernel inside QEMU, as QEMU somehow decides not to +update its display buffer anymore under certain conditions. diff --git a/microkernel/mach/gnumach/hardware_compatibility_list.mdwn b/microkernel/mach/gnumach/hardware_compatibility_list.mdwn new file mode 100644 index 00000000..09882467 --- /dev/null +++ b/microkernel/mach/gnumach/hardware_compatibility_list.mdwn @@ -0,0 +1,111 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# CPU Architecture + +GNU Mach current only supports the `x86` (alias `ia32` or `i386`) architecture. + +`amd64`/`ix64` should work in `32-bit` compatibility mode. However, in practice +`amd64` systems seem to be troublesome more often than not. This is probably +related to the same (chipset-related) problems we often see with recent +machines; but it seems that `amd64` ones use problematic chipsets particularily +often. So far we haven't heard of similar problems with Intel's eqivalent +`ix64` (or `EM64T` as it used to be called) -- but maybe that just means fewer +people tried running the Hurd on such machines :-) + +Support for running GNU Mach (and a complete GNU/Hurd system) in a +[Xen](http://www.cl.cam.ac.uk/research/srg/netos/xen/) `domU` (again on `x86` +only) is [[being_worked_on|ports/xen]]. + +Read about further [[ports]]. + +# Memory + +GNU Mach will use a maximum of 1 GiB of RAM. If your system has more, +the surplus will silently be ignored. (In past times, this would hinder GNU +Mach from booting at all, but this has been fixed, so you no longer need to +apply GRUB's `uppermem` directive.) + +# Video Cards + +Debian distributes a version of [X.org](http://x.org/). If your video card driver +depends on a special kernel interface such as that provided by +the `agpgart` kernel module for the Linux kernel, then your video +card will only be supported by the VESA driver. + +Using an internal i815 videocard [won't +work](http://lists.debian.org/debian-hurd/2007/12/msg00007.html) (at least when +using the specialized driver), because of [missing AGP GART support in GNU +Mach](http://lists.debian.org/debian-hurd/2007/12/msg00011.html). + +# Sound + +No sound cards are supported at this time. + +# USB 1.1/2.0 + +USB is not supported at this time. + +However, USB-type keyboards and mice may (and have been reported to) work +nevertheless, given that the hardware / BIOS is doing emulation to the +supported legacy interfaces. + +# IEEE 1394 (Firewire) + +IEEE 1394 is not supported at this time + +# Storage + +All common IDE drives should work. Some drive geometries do not work, +e.g. drives with hundreds of GiB of storage space. If you find a specific IDE +drive that does not work, make a note of the model and technical specifications +here. + +[[toggle id="SATA" text="SATA drives may work in compatibility mode."]] +<!-- Sure? --[[tschwinge]] --> + +[[toggleable id="SATA" text=""" +This is how booting a [[GNU/Hurd_system|hurd]] will typically fail if GNU Mach +couldn't connect to the hard disk, e.g., in a SATA system without IDE +compatibility mode: + + start (hd0,3)/hurd/ext2fs.static: (hd0,3)/hurd/ext2fs.static + device:hd0s4: No such device or address + +There *may* be an option in the system's BIOS setup to configure enabling such +a compatibility mode. +"""]] + +# Device Drivers + +[GNU Mach Reference Manual, +Configuration](http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html) +contains a list of device drivers that are included in GNU Mach and elaborates +on the hardware devices they support. + +# User Success Reports + +These boards are known to work. Gnumach/Hurd has been installed and run on these board successfully. + +* ASUS P2B motherboard with an Intel PII 450MHz CPU with Intel Pro/100 NIC in PCI slot +* Intel SE-440BX motherboard +* VIA EPIA-M Mini-ITX motherboard with VIA Nehemiah C3 1Ghz processor. Onboard NIC (VIA Rhine) works good. +* Compaq Deskpro ENS, Pentium3 (666 MHz upgraded to 1 GHz), Intel i815 chipset, chipset integrated NIC (detected twice, but works fine with eth0; trying to access eth1 confuses the driver and makes the system unusable), Matrox Mystique 220 (PCI) graphics card. Also works with rtl8029 (NE2000 PCI) NIC when onboard NIC disabled in BIOS setup. +* Abit BX6 Rev. 2.0 with Celeron 400, after disabling "memory hole at 15MB" option in BIOS setup. (Otherwise, Mach detects only 15MiB of RAM, making Hurd run *extremely* slow and instable.) Should also work with PentiumII or Pentium3. + +# User Failure Reports + +Some people couldn't get these hardware combinations to work with Hurd. + +Note: The Debian GNU/Hurd installer actually runs on Linux, so it (almost) always works. The critical bit is booting after installation. + +* ASUS P5A motherboard and AMD K6-2 333MHz CPU - doesn't boot +* ASUS P2B-LS motherboard with an Intel PII-MMX 400 MHz CPU - this board had a defective onboard NIC (that could not be disable in BIOS) and working 3COM Etherlink III NIC in a PCI bus slot. This combination worked with GNU/Linux. The 3COM NIC is known to work with the Hurd. However, while gnumach/Hurd will boot on this system, it is confused by the defective onboard NIC and unable to use the 3COM NIC. Attempting to start networking generates a continous stream of eth0 and eth1 reset messages on the console that renders the system unusable. +* ASrock 775Twins-HDTV with a Pentium D 810 (533 MGz FSB/2600GHz core -- information no longer present on intel's site). Doesn't boot. diff --git a/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn b/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn new file mode 100644 index 00000000..69ca3190 --- /dev/null +++ b/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn @@ -0,0 +1,4 @@ +Further information may still be found on +<http://www.nongnu.org/thug/gnumach_hardware.html> +and could perhaps be incorporated into that page. +--[[tschwinge]] diff --git a/microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn b/microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn new file mode 100644 index 00000000..8c67e3e0 --- /dev/null +++ b/microkernel/mach/gnumach/hardwarecompatibilitylist.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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 redir=hardware_compatibility_list]] diff --git a/microkernel/mach/gnumach/open_issues.mdwn b/microkernel/mach/gnumach/open_issues.mdwn new file mode 100644 index 00000000..433ec3ef --- /dev/null +++ b/microkernel/mach/gnumach/open_issues.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2008 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="Open Issues"]] + +This is a dumping ground for open issues for GNU Mach. + +[[inline +pages="microkernel/mach/gnumach/open_issues/* and !*/discussion" +show=0 +actions=yes +rootpage="microkernel/mach/gnumach/open_issues" postformtext="Add a new item titled:"]] diff --git a/microkernel/mach/gnumach/ports.mdwn b/microkernel/mach/gnumach/ports.mdwn new file mode 100644 index 00000000..00cdee8c --- /dev/null +++ b/microkernel/mach/gnumach/ports.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + + * x86. This is the main port. + * [PowerPC](http://www.pjbruin.dds.nl/hurd/). Is not in a usable state. + * Alpha. Was once started, but isn't in a usable state either. + + * [[Xen]] diff --git a/microkernel/mach/gnumach/ports/xen.mdwn b/microkernel/mach/gnumach/ports/xen.mdwn new file mode 100644 index 00000000..cdb4e2de --- /dev/null +++ b/microkernel/mach/gnumach/ports/xen.mdwn @@ -0,0 +1,84 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[toc ]] + +## Xen dom0, PAE-disabled hypervisor + +/!\ Since GNU Mach doesn't handle PAE yet, you'll need a PAE-disabled hypervisor. + +On Debian Lenny, for example, you can install xen-hypervisor-3.2-1-i386-nonpae. + +This also means that you'll currently need a PAE-disabled `dom0`. +[[Stefan_Siegl|stesie]] is providing a PAE-disabled Linux kernel image at +<http://brokenpipe.de/GnuHurd/XEN/>. + +You can either get binaries at <http://youpibouh.thefreecat.org/hurd-xen/> or build them yourself. + +- Copy `gnumach-xen` and `hurd-modules` to your dom0 /boot. +- Copy `hurd` into `/etc/xen`, edit it for fixing access to your hurd / and swap + +## GNU/Hurd system + +/!\ You need an already installed GNU/Hurd system. + +If you have a free partition, you can fdisk to type 0x83, create a filesystem using: + + sudo mke2fs -b 4096 -I 128 -o hurd /dev/sda4 + +Replace /dev/sda4 with your partition. Install and use crosshurd to setup a GNU/Hurd system on this partition. + +## /etc/xen/hurd configuration + +Here is a sample /etc/xen/hurd configuration + + kernel = "/boot/gnumach-xen" + memory = 256 + disk = ['phy:sda4,hda,w'] + extra = "root=device:hd0" + vif = [ '' ] + ramdisk = "/boot/hurd-modules" + +Suggestions about [[networking_configuration]] are available. + +If you need stable MAC addresses, use a syntax like `vif = [ +'mac=00:16:3e:XX:XX:XX, bridge=br0' ]`. + +## Running Hurd with Xen + +To run Hurd with Xen, use: + + xm create -c hurd + +and gnumach should get started. Proceed with native-install. + + export TERM=mach + ./native-install + +- If `xm` complains about networking (`vif could not be connected`), it's Xen scripts' fault, see Xen documentation for how to configure the network. The simplest way is network-bridge with fixed IPs (note that you need the bridge-utils package for this). You can also just disable networking by commenting the vif line in the config. +- If `xm` complains `Error: (2, 'Invalid kernel', 'xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry\n')`, you most probably have a PAE-enabled hypervisor, and you just need to install and boot non-PAE hypervisor and kernel. + +## Building from sources + +If you want to generate these images, first get the `gnumach-1-branch-Xen-branch` branch from gnumach CVS. +Then look for "Ugly" in `kern/bootstrap.c`, how to generate `hurd-modules` is explained there, and you'll have to fix `EXT2FS_SIZE` and `LD_SO_SIZE` by hand. +Then use + + ./configure --enable-platform=xen + make + +The current `hurd-modules` was built from the debian packages `hurd 20070606-2` and `libc0.3 2.6.1-1`. +/!\ This means that when using this image, your GNU/Hurd system also needs to be a glibc version 2.6-based one! + +--- + +[[Internals]]. + +[[GNU_Savannah_task 5468]], [[GNU_Savannah_task 6584]]. diff --git a/microkernel/mach/gnumach/ports/xen/internals.mdwn b/microkernel/mach/gnumach/ports/xen/internals.mdwn new file mode 100644 index 00000000..09e707ea --- /dev/null +++ b/microkernel/mach/gnumach/ports/xen/internals.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +The port does use Xen's para-virtualized interface for device (ide, network, +etc.) access. + +[[Virtualization]]. diff --git a/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn b/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn new file mode 100644 index 00000000..71a72bac --- /dev/null +++ b/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn @@ -0,0 +1,105 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +[[toc ]] + +The Xen dom0 infrastructure provides for a bridged networking setup using shell +scripts to configure the bridging device properly and attach the domUs' virtual +interfaces to the bridge. However, we've [seen +problems](http://lists.gnu.org/archive/html/bug-hurd/2008-08/msg00023.html) +when using this approach, so to [solve these +issues](http://lists.gnu.org/archive/html/bug-hurd/2008-09/msg00071.html), +instead suggest the following configuration method (to achieve the same thing). + +This is for a Debian dom0. + +# */etc/network/interfaces* + +Comment out everything referencing your physical devices. Add this: + + auto br0 + iface br0 inet dhcp + bridge_ports regex (eth|vif).* noregex + +... or if you want to do the manual configuration dance: + + auto br0 + iface br0 inet static + bridge_ports regex (eth|vif).* noregex + address 192.168.10.60 + netmask 255.255.255.0 + [...] + +This needs a version of the `bridge-utils` package more recent than the current +Debian stable one ([[debbug 405215]]). (It's trivial to rebuild the `dpkg` of, +e.g., the Debian testing one on Debian stable.) + +# */etc/xen/xend-config.sxp* + +Make sure that only `(network-script network-dummy)` and `(vif-script +vif-bridge)` are activated and all other `(network-script network-WHATEVER)`, +respective `(vif-script vif-WHATEVER)` are commented out. + + +# Sample configuration files on Debian Lenny + +## /etc/xen/hurd on dom0 + + kernel = "/boot/gnumach-xen" + memory = 256 + disk = ['phy:sda5,hda,w'] + extra = "root=device:hd0" + vif = [ 'mac=00:16:3e:00:00:00, bridge=br0' ] + ramdisk = "/boot/hurd-modules" + +/dev/sda5 is an extended partition. br0 is bridge interface on dom0. + +## /etc/xen/xend-config.sxp on dom0 + + (network-script 'network-bridge netdev=br0') + (dom0-min-mem 196) + (dom0-cpus 0) + (vncpasswd '') + +## /etc/network/interfaces on dom0 + + auto br0 + iface br0 inet static + address 192.168.1.211 + network 192.168.1.0 + netmask 255.255.255.0 + broadcast 192.168.1.255 + gateway 192.168.1.1 + bridge_ports eth1 + +eth1 is the interface that is connected to the Internet on the LAN: + +## Doing settrans on domU + + settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.1.210 -g 192.168.1.1 -m 255.255.255.0 + +## /sbin/ifconfig on dom0 + + br0 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33 + inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0 + inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:14187 errors:0 dropped:0 overruns:0 frame:0 + TX packets:9214 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:936563 (914.6 KiB) TX bytes:746184 (728.6 KiB) + + eth1 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33 + inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:34339 errors:0 dropped:0 overruns:0 frame:0 + TX packets:18526 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:3019251 (2.8 MiB) TX bytes:1453672 (1.3 MiB) diff --git a/microkernel/mach/gnumach/projects.mdwn b/microkernel/mach/gnumach/projects.mdwn new file mode 100644 index 00000000..9ace6270 --- /dev/null +++ b/microkernel/mach/gnumach/projects.mdwn @@ -0,0 +1,129 @@ +[[meta copyright="Copyright © 2005, 2006, 2007, 2008 +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]]."]]"""]] + +This page is a place to keep track of ideas about things that may be improved +in GNU Mach, so that it'll evolve to a reliable microkernel for The Hurd, both +in terms of stability and performance. If you find anything missing here, +please feel free to add a entry with a short description. + +If you want to help with any of the task (thanks!), please send a mail to +*[[mailing_lists/bug-hurd]]* stating what task you wish to work on, +so that no duplicate efforts end up. + +# Active Branches + + * `gnumach-1-branch` is the main branch. + + * `gnumach-1-branch-Xen-branch` is a branch created by Samuel Thibault for + working on a [[ports/Xen]] port. + + * `gnumach-1-branch-gdb-branch` is a branch created by Michael Casadevall for + working on [[GDB_stubs]]. + + +# Task List + + * [[Clean_up_the_code]] + + * [[Open_Issues]] + + * Update the core architecture and drivers + + * Check what NetBSD, FreeBSD and Linux do with their host specific code + (i486, PPC, Sparc, ...). And if it might be wise to take that and use + it in GNU Mach. There is no need to worry about purely internal API's, + but the external ones shouldn't require any major changes. + + * Write a list of all functions provided by the host dependant code in + GNU Mach that gets used in the non-host specific code (kernel, IPC and + VM). + + * Once we have decided what the new internal API should look like, make a + list of the new API and the old one, and try to make things as + compatible as possible, but not at the expense of anything. + + * Implement Migrating Threads + + * Migrating Threads (MT) could improve IPC performance and making easier + the work of the scheduler. For more information, check + <http://www.usenix.org/publications/library/proceedings/sf94/ford.html> + + * Improve the external pagers interface + + * Implement read-ahead (huge I/O improvements expected). + + * Making this interface synchronous should improve I/O performance + significantly, without (almost) any drawbacks (we also get some + advantage from MT's). + + * Implement more paging eviction policies, so they fit better with usual + behaviour of the pagers. + + * Implement resource accounting for external pagers. + + * VM + + * Put it on user level (?) + + * Clean up the mess. + + * Provide a fast way to read/write from/to a memory object. + + * Simplify/normalise the code. + + * Simplify the IPC Semantics + + * There are a lot of things in GNU Mach's IPC that we don't need. Track + down those things, and get rid of them without requiring many changes + in the Hurd (the changes will affect MiG, but that is OK). + + * Temporary mappings for Client-Server memory transfers + + * Extend Mach's IPC to provide some kind of object which can represent a + range of memory that can temporarily be mapped into the servers address + space for sending/receiving data. This would allow us to avoid + excessive memory copies. + + * Find a new way to work with unaligned memory. + + * GDB remote debugging support + + * Implement support for GDB debugging via serial line and/or network. + Maybe this can be done together with the host-specific work above. + + See [[GDB_stubs]]. + + * Make it run as a [[UNIX]]/Linux executable. + + * Neal: + + <neal> here's a fun project: port the mach interface to Linux + <neal> (e.g., via kernel modifications) + <neal> or, to posix/glibc + <neal> (mmap, some minimal ptrace, etc.) + + * From the [Hurd bits at + sourceforge.net](http://sourceforge.net/projects/hurd): + <http://hurd.cvs.sourceforge.net/hurd/gnumach-otop/>, started by John + Tobey. Last time touched in 2003. Status completely unknown. + + * [README](http://hurd.cvs.sourceforge.net/hurd/gnumach-otop/README?view=markup) + + +# Wish List + + * Interface for userspace non-critical drivers. + + * Sound Support + + * WLAN support (ipw2200) with WEP/WPA + + * ACPI support diff --git a/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn b/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn new file mode 100644 index 00000000..875bb8cd --- /dev/null +++ b/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn @@ -0,0 +1,121 @@ +[[meta copyright="Copyright © 2005, 2006, 2007, 2008 + 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]]."]]"""]] + +# Restructure the tree in a sane way + +Merge `linux/src` and `linux/dev`. But only if using a sane RCS, so leave it +as-is for now. Also, a bunch of (header) files from there may probably be +discarded. + + +# Remove dead files from the GNU Mach source tree + +For *exported* files (via `make install`), the plan is to first stick some +`#error This file is scheduled for removal. Write to <bug-hurd@gnu.org> if you +have a reason to have it kept available.` into them, and then actually remove +them after some months. + +For some of the internal header files (containing function prototypes and the +like), it might actually be useful to use them. (And then get rid of a bunch +of `extern ...` statements in other files.) + +This following list was assembled by putting such a `#error ...` line into each +of the `gnumach-1-branch`'s header files (exported and internal; save the +`linux/` ones (only internal) for simplicity), and then trying to build GNU +Mach until this would succeed again (by removing offending `#error ...`s), and +afterwards using the set of exported files for building a cross toolchain +(again still removing offending `#error ...`s). A very crude and imprecise +method. + +So, additionally to the list given below, there may actually be a bunch of +further files (also exported ones) that serve no real value, but are being +`#include`d through one way or another. + +* [[source_gnumach-1-branch ddb/db_expr.h]] + + Currently used, but copyright violation? Rewrite? + +* [[source_gnumach-1-branch ddb/db_print.h]] + + Copyright violation? Currently unused, but could be used in principle (or + be rewritten, to avoid the copyright oddity). + +* [[source_gnumach-1-branch ddb/tr.h]] + + Copyright violation. Unused. Remove. + +* [[source_gnumach-1-branch device/dev_master.h]] + + Might be usable for SMP? Remove otherwise. + +* [[source_gnumach-1-branch i386/i386/kttd_machdep.h]] + +* [[source_gnumach-1-branch i386/i386/sched_param.h]] + +* [[source_gnumach-1-branch i386/include/mach/i386/cthreads.h]] + + Was probably once exported, but is no longer. + +* [[source_gnumach-1-branch i386/include/mach/i386/ioccom.h]] + + Exported. + +* [[source_gnumach-1-branch include/device/audio_status.h]] + + Exported. + +* [[source_gnumach-1-branch include/device/tape_status.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/alert.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/boot.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/macro_help.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/multiboot.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/profil.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/profilparam.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/exec/a.out.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach_debug/pc_info.h]] + + Currently not exported, but was probably once meant to be. + +* [[source_gnumach-1-branch kern/act.h]] + +* [[source_gnumach-1-branch kern/refcount.h]] + +* [[source_gnumach-1-branch kern/shuttle.h]] + + +# Remove dead functions, variables, etc. from source files + + +# Rewrite ugly code diff --git a/microkernel/mach/gnumach/projects/gdb_stubs.mdwn b/microkernel/mach/gnumach/projects/gdb_stubs.mdwn new file mode 100644 index 00000000..9a11a82b --- /dev/null +++ b/microkernel/mach/gnumach/projects/gdb_stubs.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + * <http://lists.gnu.org/archive/html/bug-hurd/2008-04/msg00103.html> + + * [ChangeLog.gdb](http://cvs.savannah.gnu.org/viewvc/gnumach/ChangeLog.gdb?root=hurd&view=markup&pathrev=gnumach-1-branch-gdb-branch) diff --git a/microkernel/mach/history.mdwn b/microkernel/mach/history.mdwn new file mode 100644 index 00000000..a8951737 --- /dev/null +++ b/microkernel/mach/history.mdwn @@ -0,0 +1,64 @@ +# <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +# <a name="Early_beginnings"> Early beginnings </a> + +Mach has quite a history. Everything actually started at the University of Rochester in 1975. It was invented to demonstrate how operating systems could be built using a modular design where processes communicated using message passing, even across networks. The system was called the Rochester Intelligent Gateway and ran on a 16 bit mini computer called Eclipse from Data General. + +One of the engineers behind the project was Richard Rashid. In 1979 he moved his socks to Carnegie Mellon University to continue his research on message passing operating systems. The result emerged in 1981 and was called Accent. + +Accent kept running at CMU until 1984 but was by then being run over by +[[UNIX]]. Rashid then decided to use an early embrace strategy and started +designing the third generation OS project called Mach. By making Mach +compatible with UNIX, Mach was supposed to gain a lot of available UNIX +software. + +Mach was a vast improvement over Accent. It incorporated parts commonly used today, such as: threads, better IPC, multiprocessor support and an advanced VM system. + +At the time of Mach's conception, DARPA was seeking a multiprocessor (MP) capable OS and found Mach. With money from the Dept. of Defense, 4.2BSD support was added, to bloat the kernel; but most of all, to add complete UNIX compatibility. + +Now enters the UNIX war. + +UNIX was owned by AT&T which controlled the market almost completely. Industry giants such as IBM, DEC and H got together and formed the Open Software Foundation, OSF. In an effort to conquer market share, OSF took the Mach 2.5 release and made it the OSF/1 system. By that time Mach contained a lot of BSD and AT&T code but the OSF hoped that it would be able to take control of the rudder with OSF/1. What happens after that is a story better told by someone else ... + +In 1989 CMU decided to revamp Mach. They removed the bloat and put the UNIX emulation in user space making the Mach 3.0 release -- the pure Mach release. + +Later on support for Mach 3.0 at CMU vaned and the project was taken over by the University of Utah. The FLUX group started the Mach4 project. An ambitious project which included complete rewrite of the x86 support code and integration of Linux 2.0 drivers. That's right, Linux awoke around 1991 so this makes it apx. 1994. + +# <a name="GNU_Mach_and_OSKit_Mach"> </a> GNU Mach and OSKit-Mach + +GNU Mach is based on Mach4 from University of Utah, which in turn is based on Mach3 from Carnegie-Mellon University. The last release of Mach4 was the [UK22 release](http://www.cs.utah.edu/flux/mach4-i386/html/mach4-UK22.html). + +The OSKit was what evolved when the Mach4 project at University of Utah was dropped. The people involved wanted to reuse the work they had put into Mach in the form of hardware support and drivers. + +The oskit-mach version of GNU Mach was presented in November 1999 by Roland McGrath. <http://mail.gnu.org/pipermail/bug-hurd/1999-November/003554.html> The purpose of the port was to get better hardware support through new drivers and platform code available in the OSKit. + +On May 27 2002, after the Gnumach 1.3 release, Roland McGrath merged OSKit-Mach onto the HEAD of CVS making it the Gnumach 2.x mainline. + +Meanwhile, OSKit became unmaintained, thus posing more of a burden on than being helpful in GNU Mach development. Consequently, as of March 2006, nobody is working on OSKit Mach, or trying to use it. + +In 2005 Gianluca Guida started a different attempt to use the osenv interface with minimal changes to GNU Mach 1.x, thus allowing use of the generic driver interface while importing as little of the umaintained OSKit code as possible. However, there turned out to be serious problems with OSKit, so this attempt was abandoned as well. + +Today, GNU Mach development focuses on the 1.x branch again -- see also this +list of [[gnumach/projects]]. + +# <a name="Status_of_the_project"> Status of the project </a> + +GNU Mach 1.3 was released in May 2002, and features advanced boot script support, support for large disks (>= 10GB) and an improved console. + +GNU Mach is used as the default microkernel in the GNU/Hurd system. It is compatible with other popular Mach distributions. The device drivers for block devices and network cards are taken from Linux 2.0.x kernel versions (plus some backports of more recent drivers), so most newer hardware is not supported. + +As of March 2006 a GNU Mach 1.4 release is planned, focusing on code cleanup. It is meant to serve as a starting point for more radical future changes while maintaining 1.4.x as a stable branch. + +---- + +Copyright (C) 2001 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA + +Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. + +-- [[Main/JoachimNilsson]] - 24 Oct 2002 + +Apple's Macintosh OSX (OS 10.x) is based on [Darwin](http://www.apple.com/macosx/technologies/darwin.html). _"Darwin uses a monolithic kernel based on [[TWiki/FreeBSD]] 4.4 and the OSF/mk Mach 3."_ Darwin also has a [Kernel Programming](http://developer.apple.com/techpubs/macosx/Darwin/General/KernelProgramming/About/index.html) Book. + +-- [[Main/GrantBow]] - 22 Oct 2002 diff --git a/microkernel/mach/ipc.mdwn b/microkernel/mach/ipc.mdwn new file mode 100644 index 00000000..889fac2f --- /dev/null +++ b/microkernel/mach/ipc.mdwn @@ -0,0 +1,22 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[General_information|/ipc]] about IPC. + +An IPC is sent by invoking a [[port]]. <!-- Isn't this wording a bit strange? +``IPC is sent'' --tschwinge --> + +[[Sequence_numbering]]. + +[The Unofficial GNU Mach IPC beginner's guide](http://www.nongnu.org/hurdextras/ipc_guide/ipc_guide.html) + +# See Also + +* [[RPC]] diff --git a/microkernel/mach/ipc/sequence_numbering.mdwn b/microkernel/mach/ipc/sequence_numbering.mdwn new file mode 100644 index 00000000..7c1f68e4 --- /dev/null +++ b/microkernel/mach/ipc/sequence_numbering.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Mach's [[IPC]] mechanism allows for getting access to a message's sequence +number. + +This can be used for serializing requests in a multithreaded environment. + +* [GNU Mach Reference Manual: 4.2.6 Message + Receive](http://www.gnu.org/software/hurd/gnumach-doc/Message-Receive.html) +* [GNU Mach Reference Manual: 4.3.6 Receive + Rights](http://www.gnu.org/software/hurd/gnumach-doc/Receive-Rights.html) diff --git a/microkernel/mach/logo.png b/microkernel/mach/logo.png Binary files differnew file mode 100644 index 00000000..94951acf --- /dev/null +++ b/microkernel/mach/logo.png diff --git a/microkernel/mach/mig.mdwn b/microkernel/mach/mig.mdwn new file mode 100644 index 00000000..c620420a --- /dev/null +++ b/microkernel/mach/mig.mdwn @@ -0,0 +1,13 @@ +[[img logo.png]] + +The Mach Interface Generator (MIG) is an [[IDL]] compiler. Based on an +interface definition, it creates stubs to [[invoke]] object methods +and to demultiplex incoming messages. These stubs conveniently hide +the details of Mach's [[IPC]] machinery. + +GNU MIG is fully compatible with OSF MIG. + +* MIG's [homepage](http://www.gnu.org/software/hurd/mig.html) +* [[Documentation]] +* [[Building]] - Building (and obtaining) MIG +* [[Open_Issues]] diff --git a/microkernel/mach/mig/building.mdwn b/microkernel/mach/mig/building.mdwn new file mode 100644 index 00000000..ee299166 --- /dev/null +++ b/microkernel/mach/mig/building.mdwn @@ -0,0 +1,71 @@ +# <a name="Building_the_Mach_Interface_Gene"> Building the Mach Interface Generator from Source </a> + +If you want to build the Mach Interface Generator yourself instead of just using a pre-built package, follow these instructions. + +## <a name="Getting_the_Source_Code"> Getting the Source Code </a> + +You can chose between getting the [sources from the developers's rcs](http://www.gnu.org/software/hurd/mig-download.html#cvs): + + $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co mig + +... or (if you are working on a Debian system) the ones that are used for the [current Debian mig package](http://packages.debian.net/source/unstable/mig): + + $ apt-get source mig + +Please see the Debian [[running/debian/FAQ]] before using _apt-get source_. + +The unpacked source tree is around 1 MiB, and the build tree also is around 1 MiB. + +## <a name="Preparing_for_the_Build"> Preparing for the Build </a> + +### <a name="_on_Debian_systems"> ... on Debian systems </a> + +Building the Mach Interface Generator requires the _build-essential_ and _fakeroot_ packages, their dependencies and additional packages that are specified by the source mig package: + + # apt-get install build-essential fakeroot + # apt-get build-dep mig + +### <a name="_on_non_Debian_systems"> ... on non-Debian systems </a> + +Building the Mach Interface Generator requires a C compiler, a standard C library (with corresponding header files) and your favourite flavor of awk (gawk), yacc (bison), lex (flex) and make. + +Additionally, you need to have GNU Mach's header files installed. See [[mach/gnumach/building]] about how to do that, then come back here. + +## <a name="Building_and_Installing"> Building and Installing </a> + +### <a name="_a_deb_file"> ... a _.deb_ file </a> + +Change into the directory with the downloaded / unpacked MIG sources (_mig-1.3.1.99_): + + $ cd mig-1.3.1.99 + +Start the build process: + + $ dpkg-buildpackage -us -uc -b -rfakeroot + +You can then install / distribute the _.deb_ file which will drop out one directory above the current one. + +### <a name="_TODO_"> [TODO] </a> + +The Mach Interface Generator has to be built in a separate directory: + + $ mkdir mig-build + $ cd mig-build + +Find the root directory where you installed GNU Mach's header files and where you now intend to install the Mach Interface Generator (_~/gnu_) and the path to your Mach Interface Generator sources (\_[...]/mig) and configure it: + + $ GNU=~/gnu + $ TARGET_CPPFLAGS=-I"$GNU"/include [...]/mig/configure --prefix="$GNU" + +Build and install the Mach Interface Generator into _$GNU_, i.e. _~/gnu/_ in our example: + + $ make all install + +To make your _mig_ binary easily available, you should append something like the following to e.g. your _~/.bash\_profile_: + + PATH=~/gnu/bin:$PATH + export PATH + +If you already have e.g. _~/bin_ in your _$PATH_, you could also create a symbolic link: + + $ ln -s ~/gnu/bin/mig ~/bin/ diff --git a/microkernel/mach/mig/dealloc.mdwn b/microkernel/mach/mig/dealloc.mdwn new file mode 100644 index 00000000..1ed9d52b --- /dev/null +++ b/microkernel/mach/mig/dealloc.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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 redir=documentation#dealloc]] diff --git a/microkernel/mach/mig/discussion.mdwn b/microkernel/mach/mig/discussion.mdwn new file mode 100644 index 00000000..fdab3a45 --- /dev/null +++ b/microkernel/mach/mig/discussion.mdwn @@ -0,0 +1,17 @@ +Created + +-- [[Main/JoachimNilsson]] - 29 Oct 2002 + +The logo seems very programmer friendly as this web topic is intended. + +-- [[Main/GrantBow]] - 15 Nov 2002 + +There's little traffic here and little content. Perhaps we should just remove this web? It seemed like a good idea to create it when we split the others off... + +-- [[Main/GrantBow]] - 22 Dec 2002 + +Maybe, but not yet. Let's keep it for a while longer - say, three months. 1st April 2003. If the traffic still is low then we move the Mig topics to the Mach web ... + +...Mig = **Mach** Interface Generator. + +-- [[Main/JoachimNilsson]] - 22 Dec 2002 diff --git a/microkernel/mach/mig/documentation.mdwn b/microkernel/mach/mig/documentation.mdwn new file mode 100644 index 00000000..8c977e55 --- /dev/null +++ b/microkernel/mach/mig/documentation.mdwn @@ -0,0 +1,77 @@ +[[meta copyright="Copyright © 2002, 2003, 2005, 2007, 2008 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]]."]]"""]] + +This is a small collection of links to external documents describing the *Mach +Interface Generator* used by GNU Mach. + + +# MIG and C Thread Programming + +A tutorial which demonstrates the use of the C Threads library primitives in +writing a multithreaded program and the use of the Mach Interface Generator +(MIG) to generate remote procedure calls for interprocess communication. Like +its companion tutorial, it is based on the Mach 2.5 system. However, the +concepts are applicable to Mach 3.0 user level programming. + +Linda R. Walmer and Mary R. Thompson. *A Programmer's Guide to the Mach User +Environment*. [PostScript +](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.ps), +[Doc](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.doc). +February 1988. School of Computer Science, Carnegie Mellon University. + +An ftp directory containing the [mig programming +examples](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig_example) +for this tutorial. + +Slides to Rich Drave's talk on MIG, on November 21, 1991: +[PostScript](ftp://ftp.cs.cmu.edu//afs/cs/project/mach/public/doc/unpublished/internals_slides/Mig/root.ps), +[TeX](ftp://ftp.cs.cmu.edu//afs/cs/project/mach/public/doc/unpublished/internals_slides/Mig/slides.tex). + + +# Roots + +Mig is an implementation of a subset of the Matchmaker **language**. + +"Matchmaker is a language for specifying and automating the generation of +multilingual interprocess communication interfaces. MIG is an interim +implementation of a subset of the Matchmaker language that generates C and C++ +remote procedure call interfaces for interprocess communication between Mach +tasks." + +Richard P. Draves, Michael B. Jones, Mary R. Thompson, *MIG - THE MACH +INTERFACE GENERATOR*. +[ps](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.ps), +[doc](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.doc). +November 1989. Department of Computer Science, Carnegie-Mellon University. + + +# Related Work + +See the citations about [Mach and matchmaker: kernel and language support for +objectoriented distributed +systems](http://citeseer.ist.psu.edu/context/93073/0). "M. B. Jones and +R. F. Rashid, *Mach and matchmaker: kernel and language support for +objectoriented distributed systems*, Proceedings of the Conference on +Object-Oriented Programming Systems, Languages, and Applications, October 1986, +pp. 67--77." + + +# Further Relevant Documentation + + * The [GNU Mach Reference + Manual](http://www.gnu.org/software/hurd/docs.html#manuals), espacially + [Chapter 4, Inter Process + Communication](http://www.gnu.org/software/hurd/gnumach-doc/Inter-Process-Communication.html), + which, for example, explains how the <a name="dealloc">`dealloc` flag</a> + works in [Chapter 4.2.4, + Memory](http://www.gnu.org/software/hurd/gnumach-doc/Memory.html) + + * MIG *in action*: [[hurd/io_path]]. diff --git a/microkernel/mach/mig/logo.png b/microkernel/mach/mig/logo.png Binary files differnew file mode 100644 index 00000000..cdfec179 --- /dev/null +++ b/microkernel/mach/mig/logo.png diff --git a/microkernel/mach/mig/open_issues.mdwn b/microkernel/mach/mig/open_issues.mdwn new file mode 100644 index 00000000..2d870695 --- /dev/null +++ b/microkernel/mach/mig/open_issues.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2008 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="Open Issues"]] + +This is a dumping ground for open issues for GNU MIG. + +[[inline +pages="microkernel/mach/mig/open_issues/* and !*/discussion" +show=0 +actions=yes +rootpage="microkernel/mach/mig/open_issues" postformtext="Add a new item titled:"]] diff --git a/microkernel/mach/mig/open_issues/duplicate_inclusion_guards.mdwn b/microkernel/mach/mig/open_issues/duplicate_inclusion_guards.mdwn new file mode 100644 index 00000000..93347759 --- /dev/null +++ b/microkernel/mach/mig/open_issues/duplicate_inclusion_guards.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +E.g., both `/usr/include/hurd/process.h` and +`/usr/include/hurd/process_request.h` use `_process_user_` as an inclusion +guard. This leads to problems when both are needed, as is the case in +[[GDB]]'s `gdb/gnu-nat.c`. diff --git a/microkernel/mach/port.mdwn b/microkernel/mach/port.mdwn new file mode 100644 index 00000000..77b1372f --- /dev/null +++ b/microkernel/mach/port.mdwn @@ -0,0 +1,41 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Mach ports are [[capabilities|capability]]. + +A Mach port is a kernel queue. Each port has associated with +it a receive right and one or more send and send-once rights. +A queue can hold a number of messages. Once the queue is full, +the send blocks until their is space to enqueue the message +(this is interruptible via a timeout mechanism). + +A receive right designates a queue and authorizes the holder to +dequeue messages from the queue, and to create send and send-once +rights. + +Send and send-once rights designate a queue and authorize the +hold to enqueue messages (in the case of a send-once right, +a single message). Enqueuing a message is equivalent to +[[invoke|invoking]] a capability. + +Send and receive rights are named using local names. Each +task has associated with it a port [[address_space]]. A ports +are addressed via this table. Each task thus has its own +private [[naming_context]] for ports. + +Ports can be [[delegate]]d in an [[IPC]] message. When the +receiver dequeues the message, the right is made available +to it. + +A [[thread]] can only block receiving on a single port. To work +around this, the concept of a port set was introduced. A receive +right can be added to (at most) one port set. When a thread +receives from a port set, it dequeues from any of the ports that +has a message available. diff --git a/microkernel/mach/rpc.mdwn b/microkernel/mach/rpc.mdwn new file mode 100644 index 00000000..ecef86ee --- /dev/null +++ b/microkernel/mach/rpc.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[General_information|/rpc]] about RPC. + +Uses Mach's [[IPC]] [[mechanism]]. + +Stub code generated by [[MIG]]. diff --git a/microkernel/research.mdwn b/microkernel/research.mdwn new file mode 100644 index 00000000..4eefe602 --- /dev/null +++ b/microkernel/research.mdwn @@ -0,0 +1,15 @@ +## <a name="Research"> Research </a> + +Listed here are references to academical research papers related to Micro Kernels. + +* [Networking Performance for Microkernels](http://citeseer.nj.nec.com/maeda92networking.html) (1992) -- An article by Chris Maeda and Brian N. Bershad discussing microkernel optimizations of an UDP driver. + +* [The Increasing Irrelevance of IPC Performance for Microkernel-Based Operating Systems](http://citeseer.nj.nec.com/bershad92increasing.html) (1992) + +* [Linux Device Driver Emulation in Mach](http://citeseer.nj.nec.com/goel96linux.html) (1996) + +* [Microkernels Meet Recursive Virtual Machines](http://citeseer.nj.nec.com/ford96microkernel.html) (1996) + +* [The Flux OS Toolkit: Reusable Components for OS Implementation](http://citeseer.nj.nec.com/ford97flux.html) (1997) + +* [The Flux OSKit: A Substrate for Kernel and Language Research](http://www.cs.utah.edu/flux/papers/oskit-sosp97.html) (1997) diff --git a/microkernel/viengoos.mdwn b/microkernel/viengoos.mdwn new file mode 100644 index 00000000..9a4f726f --- /dev/null +++ b/microkernel/viengoos.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +*viengoos* is a new kernel currently being designed and written by Neal +Walfield. + +It can be found in the *hurd-l4* repository, available at +<http://savannah.gnu.org/cvs/?group=hurd>. + +* [[Building]] +* Running + * [[QEMU]] + * [[Hardware]] diff --git a/microkernel/viengoos/building.mdwn b/microkernel/viengoos/building.mdwn new file mode 100644 index 00000000..3c27af83 --- /dev/null +++ b/microkernel/viengoos/building.mdwn @@ -0,0 +1,106 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +## Viengoos build + +Checkout hurd-l4: + + cvs -z3 -d :pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co hurd-l4 + +There is a patch in the README file, to change to %%gs:0 in libl4/ia32/l4/bits/vregs.h in line 35. It should have been applied already in the checked out code. Do verify. + +Configure: + + autoreconf -i + mkdir test build + +Make check on test (fails to complete as on July 7, 2008): + + cd test + ../configure --enable-l4-abi=x2 --host=i686-pc-viengoos-gnu --enable-tests + make check + +Build the compiler: + + cd ../build + ../configure --enable-l4-abi=x2 --host=i686-pc-viengoos-gnu --with-newlib + +Build cross-compiler: + + make + +Build Viengoos proper: + + make + +Install the built executables: + + cd .. + mkdir install + install -s build/laden/laden install + install -s build/viengoos/viengoos install + install -s build/hieronymus/hieronymus install + +## BUILD L4 + +Get Pistachio using hg: + + hg clone http://hg.l4ka.org/l4ka-pistachio + +Build: + + cd kernel + + make BUILDDIR=/absolute/path/to/build + cd build + +Check Makeconf.local: + + make menuconfig + Kernel->Enable experimental features->Pager ExchangeRegisters + + make + +## Build sigma0 + + cd user + + autoheader + autoconf + ./configure + make + +## Test! + +Install all executables to /usr/local/hurd. Create a menu.lst + + title The GNU Hurd on L4 + root (hd0,0) + kernel /laden -D + module /x86-kernel + module /sigma0 + module /viengoos -D 3 -o serial + module /hieronymus -D 3 + +Get specific grub version: + + wget ftp://alpha.gnu.org/gnu/grub/grub-0.97-i386-pc.ext2fs + +Use the following to boot: + + qemu -serial stdio -hdb fat:/usr/local/hurd -fda grub-0.97-i386-pc.ext2fs -boot a + +At grub prompt: + + grub> root (hd0,0) + + grub> configfile /menu.lst + +It will boot to a kernel debugger prompt. diff --git a/microkernel/viengoos/hardware.mdwn b/microkernel/viengoos/hardware.mdwn new file mode 100644 index 00000000..1b4ce514 --- /dev/null +++ b/microkernel/viengoos/hardware.mdwn @@ -0,0 +1,50 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +I boot over the network using PXE. + +On my build machine, I have installed a tftpserver. Specifically, I use +the one built into dnscache. In /tftpboot, I have symlinks to pistachio, +sigma0, and the root of the build tree. + +My build machine boots using PXE. It gets an IP address, contacts +my build machine and loads [grub2pxe](http://grub.enbug.org/PXEBOOT). +Note that there is no need to use pxelinux; grub2 is a valid PXE +executable. Further, grub2 uses the PXE interface for accessing the +network, so if your hardware supports PXE, then you do not need to +worry about a network driver. Here is how I build grub2 and the +grub2 image: + + cd ~/src + svn co svn://svn.savannah.gnu.org/grub/trunk/grub2 + cd grub2 + mkdir build + cd build + ../configure --prefix=$HOME/src/grub2/install && make && make install + cd ~/src/grub2/install + bin/grub-mkimage --output=core.img --prefix="(pxe)" pxe pxecmd help reboot serial multiboot pc configfile normal boot + cat lib/grub/i386-pc/pxeboot.img core.img > grub2pxe + +Here is my /tftpboot/grub.cfg, which sends output to the first +[[serial_port]]: + + # Timeout for menu + set timeout=1 + + # Set default boot entry as Entry 0 + set default=0 + + menuentry "Viengoos" { + multiboot /viengoos/laden/laden -o serial -D + module /pistachio + module /sigma0 + module /viengoos/viengoos/viengoos.stripped -D 3 -o serial + module /viengoos/hieronymus/hieronymus.stripped + } diff --git a/microkernel/viengoos/serial_port.mdwn b/microkernel/viengoos/serial_port.mdwn new file mode 100644 index 00000000..53b988c5 --- /dev/null +++ b/microkernel/viengoos/serial_port.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +Viengoos can be configured to send output to the serial port (in fact, +this is the only configuration that I use). To talk to the serial +port, I use ser2net, which provides a telnet interface to the serial +port. Be sure to edit /etc/ser2net.conf to use 115200 bps, which +Viengoos uses by default. diff --git a/naming_context.mdwn b/naming_context.mdwn new file mode 100644 index 00000000..9c701e71 --- /dev/null +++ b/naming_context.mdwn @@ -0,0 +1,24 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Names are bindings to objects, however, to find an object +given a name, the relation must be looked up in a +naming context. A problem with using string as names is +that it is very easy to lose track of the correct naming +context. This is one of the problem with [[PassiveTranslators]]: +a passive translator is a string. When the node is accessed +on which the passive translator is set and there is no active +translator, then an active translator is started using the +passive translator setting. The active translator is started +by the file system, not the program instance that set the +passive translator. The passive translator settings are +therefore resolved in the file system's naming context, which +may be different from that of the program instance that set the +passive translator setting. diff --git a/persistency.mdwn b/persistency.mdwn new file mode 100644 index 00000000..17176708 --- /dev/null +++ b/persistency.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +A persistent object is an object that survives reboot. +On [[Unix]], files and directories are persistent but +processes and file descriptors are not. [[microkernel/EROS]] is +an example of an orthogonally persistent system: +processes and capabilities also survive reboot. To a +process, it generally only looks as if it had not been +scheduled for a long time; the rest of its environment +remains essentially the indistinguishable. diff --git a/policy.mdwn b/policy.mdwn new file mode 100644 index 00000000..f0a414f2 --- /dev/null +++ b/policy.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +A policy is a rule that define what may or may not happens, not +how it happens. The latter is referred to as [[mechanism]]. diff --git a/principal.mdwn b/principal.mdwn new file mode 100644 index 00000000..897c0436 --- /dev/null +++ b/principal.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +A principal is an accountable entity. A principal may be +a user. On some computer systems, users are represented by their +respective UID. A process may also be a principal. However, a +principal may span multiple processes (a web request that causes +a CGI script to be invoked) or a principal may contain a number +of separate principals (a web server serves multiple requests, +each request represents a different principal). diff --git a/public_hurd_boxen.mdwn b/public_hurd_boxen.mdwn new file mode 100644 index 00000000..bc902384 --- /dev/null +++ b/public_hurd_boxen.mdwn @@ -0,0 +1,71 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 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]]."]]"""]] + +Here are some Hurd boxes that users have made available to the public: + +[[table class="table_style_1" data=""" +"Host Name","Operator","Access","Distro","Machine Specs","Comments" +"flubber.bddebian.com","[[Barry_de_Freese|bddebian]]","ssh; port 2250","Debian","PII 550 MHz; 384 MiB","used for the wiki, and a bit short on disk space, so please don't use for general work" +"clubber.bddebian.com","[[Barry_de_Freese|bddebian]]","ssh; port 2251","Debian","PIII 1 GHz; 384 MiB" +"gnubber.bddebian.com","[[Barry_de_Freese|bddebian]]","ssh; port 2254","Debian","PII 733 MHz; 384 MiB" +"goober.bddebian.com","[[Barry_de_Freese|bddebian]]","ssh; port 2255","Debian","?" +"hurd.nipl.net","[[AlastairPoole]]","ssh; port 24","GNU","AMD Sempron 2800 MHz","not sure if this machine is still alive" +"""]] + +To request an account on the `*.bddebian.com` machines either contact +*bddebian* or *tschwinge* (other people might also be able to help) in [[IRC]] +or send email to <hurd-shell-account@gnu.org>. Also use these contact +addresses for requesting support with respect to software installations, etc. + +For the `hurd.nipl.net` host, please see <http://www.nipl.net/>. + +For a list of people using the Hurd in production systems, please see +[[Hurd/WhoRunsGNU]]. + +--- + +/!\ SSH access to the machines is very instable at the moment. This is +probably due to problems with the [[hurd/translator/pfinet]] server. + + * <http://lists.gnu.org/archive/html/bug-hurd/2008-07/msg00052.html> + +--- + + +To be able to use just `ssh [machine]`, you should append your public SSH key +to `~/.ssh/authorized_keys` on the remote machine. + +And if you don't want to worry about the machines's IP addresses changing (due +to dial-up connection) or the host keys changing every now and then (when the +machines are re-installed), put something like the following into +`~/.ssh/config` of the machine you connect from: + + Host clubber.bddebian.com clubber + HostName clubber.bddebian.com + Port 2251 + + Host flubber.bddebian.com flubber + HostName flubber.bddebian.com + Port 2250 + + Host gnubber.bddebian.com gnubber + HostName gnubber.bddebian.com + Port 2254 + + Host goober.bddebian.com goober + HostName goober.bddebian.com + Port 2255 + + Host *.bddebian.com clubber flubber gnubber goober + CheckHostIP no + UserKnownHostsFile /dev/null + StrictHostKeyChecking no + User [username] diff --git a/qemu.mdwn b/qemu.mdwn new file mode 100644 index 00000000..97ce5693 --- /dev/null +++ b/qemu.mdwn @@ -0,0 +1,36 @@ +[[meta copyright="Copyright © 2005, 2007, 2008 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]]."]]"""]] + +QEMU is free software written by Fabrice Bellard that implements a fast +processor [[emulator|emulation]], allowing a user to run one operating system +within another one. It is similar to projects such as [[Bochs]] and VMware +Workstation, but has several features these lack, including increased speed and +support for multiple architectures. By using dynamic translation it achieves a +reasonable speed while being easy to port on new host CPUs. + +QEMU has two operating modes: + + * User mode emulation: QEMU can launch Linux processes compiled for one CPU + on another CPU. Linux system calls are converted because of endianness and + 32/64 bit mismatches. Wine and Dosemu are the main targets for QEMU. + + * System mode emulation: QEMU emulates a full system, including a processor + and various peripherials. It enables easier testing and debugging of + system code. It can also be used to provide virtual hosting of several + virtual PCs on a single server. + +The majority of the program is under the [[LGPL]], with the system mode +emulation under the [[GPL]]. + +# External Links + + * <http://fabrice.bellard.free.fr/qemu/> + * <http://kidsquid.com/cgi-bin/moin.cgi> QEMU Wiki + * [Qemu on Windows](http://www.h7.dion.ne.jp/~qemu-win/) diff --git a/recent_changes.mdwn b/recent_changes.mdwn new file mode 100644 index 00000000..708e4588 --- /dev/null +++ b/recent_changes.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2008 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="Recent Changes"]] + +[[inline pages="internal(recent_changes/change_*)" template=recentchanges +show=0]] diff --git a/recentchanges.mdwn b/recentchanges.mdwn new file mode 100644 index 00000000..260e8011 --- /dev/null +++ b/recentchanges.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2008 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 redir=recent_changes]] diff --git a/render_locally b/render_locally new file mode 100755 index 00000000..67c96fdb --- /dev/null +++ b/render_locally @@ -0,0 +1,36 @@ +#!/bin/sh + +# Render the pages of this repository for your local browsing pleasure. + +# We use ``--no-usedirs'' here, because when browsing local files, the web +# browsers don't display `index.html' files by default when a hyperlink +# referencing a directory is being opened. + +# Written by Thomas Schwinge <tschwinge@gnu.org> + + +# Need a symlink-free path. +src=$(readlink -f "$(dirname "$0")") && +dest=$src.rendered && + +ikiwiki \ + --verbose \ + --wikiname GNU\ Hurd\ wiki \ + --templatedir "$src"/.templates \ + --userdir user \ + --no-usedirs \ + --plugin favicon \ + --plugin goodstuff \ + --plugin html \ + --plugin sidebar \ + --plugin table \ + --plugin txt \ + --libdir "$src"/.library \ + --plugin copyright \ + --plugin license \ + --plugin texinfo \ + ${1+"$@"} \ + "$src" "$dest" && + +echo && +echo Now\ open\ \`"$dest"/index.html\'' to browse the wiki pages.' diff --git a/rpc.mdwn b/rpc.mdwn new file mode 100644 index 00000000..e60254d1 --- /dev/null +++ b/rpc.mdwn @@ -0,0 +1,11 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +RPC stands for remote procedure call. diff --git a/rules.mdwn b/rules.mdwn new file mode 100644 index 00000000..d1a544e0 --- /dev/null +++ b/rules.mdwn @@ -0,0 +1,12 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +* [[Source_repositories]] +* [[Savannah_group]] diff --git a/rules/savannah_group.mdwn b/rules/savannah_group.mdwn new file mode 100644 index 00000000..317ec49f --- /dev/null +++ b/rules/savannah_group.mdwn @@ -0,0 +1,20 @@ +[[meta copyright="Copyright © 2006, 2007, 2008 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]]."]]"""]] + +<http://savannah.gnu.org/projects/hurd/> + +# Group membership + +There is no need to be a formal member of the GNU Hurd Savannah group in order +to be able to contribute to the system. In fact, if we added every single soul +that was interested in the Hurd to the Savannah group it'd probably have +exploded by now. We have the policy of adding people as soon as they are +beginning to make substantial contributions. Simply use the [[mailing_lists]] +for sending your contributions, for asking questions, and so on. diff --git a/rules/source_repositories.mdwn b/rules/source_repositories.mdwn new file mode 100644 index 00000000..2ecc6fe6 --- /dev/null +++ b/rules/source_repositories.mdwn @@ -0,0 +1,100 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +CVS repositories on Savannah, see <http://savannah.gnu.org/cvs/?group=hurd>. + +# Branches + +Members of the Hurd Savannah group, +<http://savannah.gnu.org/project/memberlist.php?group=hurd>, are allowed to +create branches without formal permission... + +* named *SAVANNAH_LOGIN-WHATEVER-branch* for general-purpose branches, or + +* named *BASE_BRANCH-WHATEVER-branch* for topic-branches basing on + *BASE_BRANCH*. + +*WHATEVER* shall be a suitable tag. + +Examples: + +* GNU Mach + + * *gnumach-1-branch-Xen-branch* + * *gnumach-1-branch-gdb-branch* + +* GNU Hurd + + * *miles-orphaned-changes* + * *hammy-libchannel-branch* + * *mmenal-soc2006-nfs-branch* + +Also, create helper tags for merging mainline changes into your branches. + +Examples: + +* GNU Mach + + * *gnumach-1-branch-Xen-branch*: *gnumach-1-branch-Xen-branch-merge_helper* + * *gnumach-1-branch-gdb-branch*: *gnumach-1-branch-gdb-branch-merge_helper* + +* GNU Hurd + + * *hammy-libchannel-branch*: *hammy-libchannel-branch-base* + * *mmenal-soc2006-nfs-branch*: *mmenal-soc2006-nfs-branch-base* + +## Merging + +Merging between CVS branches is not trivial. Unless you really know what +you're doing, please talk to [[Thomas_Schwinge|tschwinge]] or +[[Samuel_Thibault|samuelthibault]], to avoid cluttering the repositories +unintendedly. + +# Tags + +Equivalent rules apply. + +# Behavior + +## ... on your branches + +Most branches are to be eventually be merged back into the mainline branch. To +faciliate (and also to help other contributors) we'd like you to write a short +summary log in a top-level (or wherever else appropriate) `ChangeLog.WHATEVER` +file. + +Examples: + +* GNU Mach + + * *gnumach-1-branch-Xen-branch*: `ChangeLog.Xen` + * *gnumach-1-branch-gdb-branch-merge_helper*: `ChangeLog.gdb` + +* GNU Hurd + + * *hammy-libchannel-branch-base*: `channelio/ChangeLog`, `libchannel/ChangeLog` + * *mmenal-soc2006-nfs-branch-base*: `nfs/ChangeLog` + +This need not be a full-fledged [GNU-style *ChangeLog* +file](http://www.gnu.org/prep/standards/html_node/Change-Logs.html). E.g., +don't waste time writing *ChangeLog* entries for debugging stuff that will be +removed again before merging back into mainline. But please do write +something. Short notes. + +## ... in general + +Try to not introduce spurious, unneeded changes, e.g., whitespace changes. + +Adhere to the already-used coding conventions. These are usually the [GNU +Coding Standards](http://www.gnu.org/prep/standards/html_node/) for stuff +written by ourselves, including new files, of course. + +GNU Mach code is largely based on external code. Don't GNU-ify it, as this +would make merging external patches unnecessarily difficult. diff --git a/sandbox.mdwn b/sandbox.mdwn new file mode 100644 index 00000000..def5fae7 --- /dev/null +++ b/sandbox.mdwn @@ -0,0 +1,42 @@ +This is the sandbox, a page anyone can edit to learn how to use the wiki. + +There even is a [[subsandbox]]. + +--- + +Here's a paragraph. + +Here's another one with *emphasised* text. + +# Header + +## Subheader + +This is a blockquote. + +> This is the first level of quoting. +> +> > This is nested blockquote. +> +> Back to the first level. + +Numbered list + + 1. First item. + 1. Another. + 1. And another. + +Bulleted list + + * *item* + * item + +[[ikiwiki/wikilink]] + +--- + +[[Texinfo]] example. + +--- + +UTF-8 testing: © Queensrÿche ¿ Ø ß ® diff --git a/sandbox/subsandbox.mdwn b/sandbox/subsandbox.mdwn new file mode 100644 index 00000000..3e5ada72 --- /dev/null +++ b/sandbox/subsandbox.mdwn @@ -0,0 +1 @@ +Not much is going on here.
\ No newline at end of file diff --git a/sandbox/texinfo.texi b/sandbox/texinfo.texi new file mode 100644 index 00000000..39bbdcf0 --- /dev/null +++ b/sandbox/texinfo.texi @@ -0,0 +1,61 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename sample.info +@settitle Sample Manual 1.0 +@c %**end of header + +@copying +This is a short example of a complete Texinfo file. + +Copyright @copyright{} 2004 Free Software Foundation, Inc. +@end copying + +@titlepage +@title Sample Title +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Output the table of the contents at the beginning. +@contents + +@ifnottex +@node Top +@top GNU Sample + +@insertcopying +@end ifnottex + +@menu +* First Chapter:: The first chapter is the + only chapter in this sample. +* Index:: Complete index. +@end menu + + +@node First Chapter +@chapter First Chapter + +@cindex chapter, first + +This is the first chapter. +@cindex index entry, another + +Here is a numbered list. + +@enumerate +@item +This is the first item. + +@item +This is the second item. +@end enumerate + + +@node Index +@unnumbered Index + +@printindex cp + +@bye diff --git a/security.mdwn b/security.mdwn new file mode 100644 index 00000000..ae925f74 --- /dev/null +++ b/security.mdwn @@ -0,0 +1,60 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Alan Karp [identifies][1] 11 security questions: + + [1]: http://www.eros-os.org/pipermail/cap-talk/2007-December/009460.html + + * Authentication Who am I talking to? + * Authorization What should I be able to do? + * Audit Who did that? + * Access control Should this request be honored? + + * Non-repudiation Can I pretend I never said that? + * Confidentiality Can others see what I'm seeing? + * Privacy Can others see that I'm seeing it? + * Integrity Can this data be changed? + * Anonymity Can others find out who I am? + + * Denial of service Can I be assured of access? + * Physical security Who can touch it? + +Mark Miller [proposes][2] some ways to think about security relationships: + + [2]: http://www.eros-os.org/pipermail/cap-talk/2008-March/010615.html + +A way to talk about security relationships + +Permissions channels (necessarily overt in a sensible system) are phisical: + + * Alice gives Bob a car or a car key. + +Online overt information channels are visual: + + * Bob can see Carol. Bob can see Carol's car. + * (Potential, transitive) overt connectivity is line of sight. + * Lack of overt connectivity (including revocation) is occlusion. + * Alice tells the Caretaker to turn opaque, blocking Bob's view of Carol. + +Offline overt channels are visual but indirect: + + * Bob can see that Kilroy was here. + +Online non-overt channels (both covert & side) are auditory: + + * Bob can hear Carol (e.g., hear Carol banging on the wall) + * Alice tries to silence (or mute) Carol + * Alice deafens Bob (or creates a deaf Bob) + * In order for Bob to hear Carol's wall banging, Bob and Carol, + must be awake at the same time + +Offline non-overt channels are olfactory: + + * Bob can smell that Kilroy was here, even if Kilroy is asleep or dead. diff --git a/sfi.mdwn b/sfi.mdwn new file mode 100644 index 00000000..1a987290 --- /dev/null +++ b/sfi.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +SFI stands for Software-Based Fault Isolation. SFI is an [[isolation]] +technique described by Wahbe et al. in their 1993 paper [Effcient +Software-Based Fault Isolation](http://citeseer.ist.psu.edu/wahbe93efficient.html). +Instead of running code is a separate process, untrusted code +is loaded into into the host's address space, part of the address +space is reserved to the application and referred to as its fault +domain, and the code is rewritten such that it cannot modify or jump +to addresses outside of its fault domain. diff --git a/shortcuts.mdwn b/shortcuts.mdwn new file mode 100644 index 00000000..19368aab --- /dev/null +++ b/shortcuts.mdwn @@ -0,0 +1,78 @@ +[[if test="enabled(shortcut)" + then="This wiki has shortcuts **enabled**." + else="This wiki has shortcuts **disabled**."]] + +Some examples of using shortcuts include: + + \[[google foo]] + \[[wikipedia War_of_1812]] + \[[debbug 12345]] + +This page controls what shortcut links the wiki supports. + +* [[shortcut name=google url="http://www.google.com/search?q=%s"]] +* [[shortcut name=archive url="http://web.archive.org/*/%S"]] +* [[shortcut name=gmap url="http://maps.google.com/maps?q=%s"]] +* [[shortcut name=gmsg url="http://groups.google.com/groups?selm=%s"]] +* [[shortcut name=wikipedia url="http://en.wikipedia.org/wiki/%s"]] +* [[shortcut name=wikitravel url="http://wikitravel.org/en/%s"]] +* [[shortcut name=debbug url="http://bugs.debian.org/%s" desc="bug #%s"]] +* [[shortcut name=deblist url="http://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]] +* [[shortcut name=debpkg url="http://packages.debian.org/%s"]] +* [[shortcut name=debpts url="http://packages.qa.debian.org/%s"]] +* [[shortcut name=debmsg url="http://lists.debian.org/msgid-search/%s"]] +* [[shortcut name=debrt url="https://rt.debian.org/Ticket/Display.html?id=%s"]] +* [[shortcut name=debss url="http://snapshot.debian.net/package/%s"]] + * Usage: `\[[debss package]]`, `\[[debss package#version]]`, or `\[[debss package/version]]`. See http://snapshot.debian.net for details. +* [[shortcut name=fdobug url="https://bugs.freedesktop.org/show_bug.cgi?id=%s" desc="freedesktop.org bug #%s"]] +* [[shortcut name=fdolist url="http://lists.freedesktop.org/mailman/listinfo/%s" desc="%s@lists.freedesktop.org"]] +* [[shortcut name=gnomebug url="http://bugzilla.gnome.org/show_bug.cgi?id=%s" desc="GNOME bug #%s"]] +* [[shortcut name=linuxbug url="http://bugzilla.kernel.org/show_bug.cgi?id=%s" desc="Linux bug #%s"]] +* [[shortcut name=mozbug url="https://bugzilla.mozilla.org/show_bug.cgi?id=%s" desc="Mozilla bug #%s"]] +* [[shortcut name=gnulist url="http://lists.gnu.org/mailman/listinfo/%s" desc="%s@gnu.org"]] +* [[shortcut name=marcmsg url="http://marc.info/?i=%s"]] +* [[shortcut name=marclist url="http://marc.info/?l=%s"]] +* [[shortcut name=gmane url="http://dir.gmane.org/gmane.%s" desc="gmane.%s"]] +* [[shortcut name=gmanemsg url="http://mid.gmane.org/%s"]] +* [[shortcut name=cpan url="http://search.cpan.org/search?mode=dist&query=%s"]] +* [[shortcut name=ctan url="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s"]] +* [[shortcut name=hoogle url="http://haskell.org/hoogle/?q=%s"]] +* [[shortcut name=iki url="http://ikiwiki.info/%S/"]] +* [[shortcut name=ljuser url="http://%s.livejournal.com/"]] +* [[shortcut name=rfc url="http://www.ietf.org/rfc/rfc%s.txt" desc="RFC %s"]] +* [[shortcut name=c2 url="http://c2.com/cgi/wiki?%s"]] +* [[shortcut name=meatballwiki url="http://www.usemod.com/cgi-bin/mb.pl?%s"]] +* [[shortcut name=emacswiki url="http://www.emacswiki.org/cgi-bin/wiki/%s"]] +* [[shortcut name=haskellwiki url="http://haskell.org/haskellwiki/%s"]] +* [[shortcut name=dict url="http://www.dict.org/bin/Dict?Form=Dict1&Strategy=*&Database=*&Query=%s"]] +* [[shortcut name=imdb url="http://imdb.com/find?q=%s"]] +* [[shortcut name=gpg url="http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&exact=on&search=0x%s"]] +* [[shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]] +* [[shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain"]] +* [[shortcut name=cve url="http://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]] +* [[shortcut name=cia url="http://cia.vc/stats/project/%s"]] +* [[shortcut name=ciauser url="http://cia.vc/stats/user/%s"]] +* [[shortcut name=flickr url="http://www.flickr.com/photos/%s"]] + +To add a new shortcut, use the `shortcut` +[[ikiwiki/PreprocessorDirective]]. In the url, "%s" is replaced with the +text passed to the named shortcut, after url-encoding it, and '%S' is +replaced with the raw, non-encoded text. The optional `desc` parameter +controls the description of the link. + +Remember that the `name` you give the shortcut will become a new +[[ikiwiki/PreprocessorDirective]]. Avoid using a `name` that conflicts +with an existing directive. + +If you come up with a shortcut that you think others might find useful, +consider contributing it to the [[iki shortcuts]] page on the ikiwiki +ikiwiki, so that future versions of ikiwiki will include your shortcut +in the standard underlay. + + +# Local stuff + +* [[shortcut name=source_gnumach-1-branch url="http://cvs.savannah.gnu.org/viewvc/gnumach/%S?view=log&root=hurd&pathrev=gnumach-1-branch"]] +* [[shortcut name=GNU_Savannah_bug url="http://savannah.gnu.org/bugs/?%s" desc="GNU Savannah bug #%s"]] +* [[shortcut name=GNU_Savannah_patch url="http://savannah.gnu.org/patch/?%s" desc="GNU Savannah patch #%s"]] +* [[shortcut name=GNU_Savannah_task url="http://savannah.gnu.org/task/?%s" desc="GNU Savannah task #%s"]] diff --git a/sidebar.mdwn b/sidebar.mdwn new file mode 100644 index 00000000..88723432 --- /dev/null +++ b/sidebar.mdwn @@ -0,0 +1,35 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[img hurd/logo/boxes-redrawn.png link=/hurd/logo]] + +* **[[Home|/index]]** +* **[[Community]]** +* **[[Documentation]]** +* **[[Hurd/Getting_Help]]** + +--- + +* **[[Hurd]]**[[if test="destpage(hurd*)" then=" + * *[[About|Hurd/TheGnuHurd]]* + * *[[Hurd/Documentation]]* + * *[[hurd/Running]]*"]] +* **[[microkernel/Mach]]**[[if test="destpage(microkernel/mach*)" then=" + * *[[GNU_Mach|microkernel/mach/gnumach]]* + * *[[microkernel/mach/Documentation]]*"]] + +--- + +* **[[Debian_GNU/Hurd|hurd/running/debian]]** +* **[[GNU_system|hurd/running/gnu]]** + +--- + +* **[[HurdNG|hurd/ng]]** diff --git a/tcb.mdwn b/tcb.mdwn new file mode 100644 index 00000000..d321a954 --- /dev/null +++ b/tcb.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +TCB stands for trusted computed base. Unqualified, the trusted +computing base referrers to the set of components programs +must [[trust]] to function correctly. On multiserver systems, +it is sometimes more appropriate to speak of the trusted computing +base of a particular program: as components are much less connected, +one program's trusted computing base may be significantly different +from another's. diff --git a/trackers.mdwn b/trackers.mdwn new file mode 100644 index 00000000..cb1d9c89 --- /dev/null +++ b/trackers.mdwn @@ -0,0 +1,27 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +A number of different trackers are available at the [GNU Savannah Hurd +Group](http://savannah.gnu.org/projects/hurd). + + +# Bugs + +<http://savannah.gnu.org/bugs/?group=hurd> + + +# Tasks + +<http://savannah.gnu.org/task/?group=hurd> + + +# Patches + +<http://savannah.gnu.org/patch/?group=hurd> diff --git a/trust.mdwn b/trust.mdwn new file mode 100644 index 00000000..f0d29a9c --- /dev/null +++ b/trust.mdwn @@ -0,0 +1,25 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +The word trust is used in a number of contexts with different technical meanings. +Sometimes it is used to confuse, for instance trusted computing is rarely about +providing users reason to trust that software they are running does not violate +their intents but about providing a mechanism for a third party to verify +that software that runs on a remote computer obeys him or her rather than the +user. + +When we say that a program trusts another, we mean that [[correctness]] of the +former depends on the cooperation of the latter. For instance, when a user runs +ssh, the user's intention is that all communication is encrypted. In this case, +the user trusts that the ssh binary respects this intent. In [[Unix]], a program's +[[tcb]] consists not only of the kernel (and all the drivers, +file systems and protocol stacks that it contains) but every program running +under the same UID; it is impossible to protect against +[[DestructiveInterference]] from programs running under the same UID. diff --git a/unix.mdwn b/unix.mdwn new file mode 100644 index 00000000..b313010a --- /dev/null +++ b/unix.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +# External + + * Wikipedia page about [[wikipedia UNIX]]. + + * [*Standardizing + UNIX*](http://www.informit.com/articles/printerfriendly.aspx?p=691503), an + article by David Chisnall. diff --git a/unsorted/AwarenessOfWhatHappens.mdwn b/unsorted/AwarenessOfWhatHappens.mdwn new file mode 100644 index 00000000..4ba78999 --- /dev/null +++ b/unsorted/AwarenessOfWhatHappens.mdwn @@ -0,0 +1,7 @@ +FROM: <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00242.html> + +The user must know what the operations are he can perform in the operating system. He must also know about their consequences and relevant side effects, and what the possible results are. At any point where the system can not make the right decision automatically, the user must have the ability to influence the path chosen. + +_Awareness means that the user knows what happens._ + +-- [[TomBachmann]] - 29 Apr 2006 diff --git a/unsorted/BochsEmulator.mdwn b/unsorted/BochsEmulator.mdwn new file mode 100644 index 00000000..8c9f5cfe --- /dev/null +++ b/unsorted/BochsEmulator.mdwn @@ -0,0 +1,20 @@ +# <a name="Bochs_IA_32_x86_64_Emulator"> Bochs IA-32/x86-64 Emulator </a> + +[Bochs](http://bochs.sf.net) is a very cool emulator, similar to Plex86 and the commercial product [[VmWare]] which virtualizes the PC hardware. However, Bochs does not virtualize, it _emulates_ the IA32 on the instruction level. It's currently the best alternative if you want to take the Hurd for a quick test drive without needing to repartition your hard drive or read complicated installation manuals. + +* [Debian package](http://packages.qa.debian.org/bochs) + +Note that Bochs is quite slow, so installing GNU inside its virtual machine will probably take you a lot of time. There are several pre-installed bochs images available. + +## <a name="Images"> Images </a> + +* The Bochs project hosts a [preinstalled GNU image](http://sourceforge.net/project/showfiles.php?group_id=12580). It has network, Xfree86 and the console server installed and configured (X has some problems though). If you want to try it out, please read the [[BochsFAQ]] for setting up a GNU guest first. +* [Another 2GB image](http://www.gnuhurd.org/) distributed in rar format without apologies. +* Bee has a [bochs version](http://bee.es.gnu.org/) of it's distribution + +## <a name="Articles"> Articles </a> + +* [Bruno Bonfils wrote an article.](http://www.asyd.net/docs/hurd/bochs-hurd.html) +* [Julien PUYDT wrote another article on setting up Hurd in Bochs.](http://lists.debian.org/debian-hurd/2003/debian-hurd-200303/msg00065.html) + * [Lucas Nussbaum added some details.](http://lists.debian.org/debian-hurd/2004/debian-hurd-200401/msg00078.html) +* [Marcus Brinkmann shares his experience in running GNU/Hurd on Bochs](http://lists.debian.org/debian-hurd/2004/debian-hurd-200402/msg00057.html). He [mentions qemu](http://lists.debian.org/debian-hurd/2004/debian-hurd-200402/msg00059.html) too, and [PUYDT Julien suggests using /dev/loop0.](http://lists.debian.org/debian-hurd/2004/debian-hurd-200402/msg00064.html) diff --git a/unsorted/BochsFAQ.mdwn b/unsorted/BochsFAQ.mdwn new file mode 100644 index 00000000..d446f695 --- /dev/null +++ b/unsorted/BochsFAQ.mdwn @@ -0,0 +1,85 @@ +# <a name="GNU_pre0_3_J2_for_Bochs_mini_FAQ"> </a> GNU pre0.3-J2 for Bochs mini-FAQ + +%TOC% + +---- + +## <a name="What_do_you_mean_GNU_the_GNU_Hur"> </a> What do you mean "GNU", the GNU Hurd? + +Yes and no. See <http://www.gnu.org/software/hurd/faq.en.html#q1-2> + +## <a name="Where_are_"> Where are...? </a> + +Latest version of this FAQ: [[Distrib/BochsFAQ]] + +Latest GNU image for Bochs: [http://sourceforge.net/project/showfiles.php?group\_id=12580](http://sourceforge.net/project/showfiles.php?group_id=12580) + +## <a name="Disk_line_for_bochsrc_"> Disk line for .bochsrc? </a> + +for Bochs 2.0 or later: + + ata0-master: type=disk, path="gnu.img", cylinders=1024, heads=16, spt=63 + +for older versions: + + diskc: file="gnu.img", cyl=1024, heads=16, spt=63 + +## <a name="My_PATH_and_prompt_are_weird_and"> </a> My PATH and prompt are weird, and X clients fail + +The profile is not loaded properly, do it manually with `". /etc/profile"` + +## <a name="How_can_i_change_terminals_"> How can i change terminals? </a> + +The Mach default console lack have multi-terminal capability, and up 'til recently we recommended the "screen" program. However, the new console server is installed and configured with 6 terminals. You can launch it with the ncursesw driver: + + console -d ncursesw /dev/vcs + +Switching is done via `C-w 1` (or 2, 3, ...). you can exit it with `C-w x` + +See the original posting to debian-hurd, <http://lists.debian.org/debian-hurd/2002/debian-hurd-200209/msg00054.html>, or [[Hurd/HurdConsole]] for more details. + +**_IMPORTANT:_** Note that X doesn't work well while running the console server. + +## <a name="Does_X_work_"> Does X work? </a> + +Somewhat: + +* DRI and speedo modules won't load so they're deactivated. +* The VESA driver also failed so VGA is being used. +* more than 8 bpp won't work. +* for some weird reason the mouse server in `/dev/mouse` doesn't respond, so the mouse is inoperative. +* GNU is still an unstable OS which makes X crash often on it. + +To reconfigure it, see Distrib.Xfree86, or: + + dpkg-reconfigure xserver-xfree86 + +then apply a patch to fix the mouse section: + + patch /etc/X11/XF86config-4 /root/XF86Config-4.diff + +Installed clients are blackbox window manager and rxvt terminal emulator. + +## <a name="Is_network_configured_"> Is network configured? </a> + +Yes, to change parameters use: + + settrans -apfg /servers/socket/2 /hurd/pfinet [options to pfinet] + +See `/hurd/pfinet --help` for details, or the [[Hurd/GetNetworkRunning]] topic. + +## <a name="How_do_i_mount_stuff_"> How do i mount stuff? </a> + + settrans -afg <node> /hurd/<translator> <options to translator> + +Where `node` is your mount point and `translator` is the filesystem server. Add `-p` to settrans if you want it to stay over reboots (fstab-like) + +## <a name="Anything_neat_to_try_"> Anything neat to try? </a> + +Yes! instead of `"su"` use `"sush"`, a more flexible version that manages multiple UIDs. + +You can also play with userspace filesystems for NFS and FTP in `/hurd/{nfs,ftpfs}` that you can run as user, debug with GDB, etc. + +## <a name="More_questions_"> More questions? </a> + +Read the FAQ (<http://www.gnu.org/software/hurd/faq.en.html>) for a general overview on the GNU system. diff --git a/unsorted/BootProcess.mdwn b/unsorted/BootProcess.mdwn new file mode 100644 index 00000000..17f7bba7 --- /dev/null +++ b/unsorted/BootProcess.mdwn @@ -0,0 +1,36 @@ +Describes the GNU/Hurd boot process. + +# <a name="Bootloader"> Bootloader </a> + +[GRUB](http://www.gnu.org/software/grub/) (GRand Unified Bootloader) is the default (and as far as I know the only supported ) bootloader for GNU/Hurd and is the initial process. + +GRUB can be used for booting multiple Operating Systems on a given machine. Device naming convention for GRUB is different than that of the Hurd. Where the first partition on the primary IDE drive in GNU/Hurd is hd0s1, in GRUB it is (hd0,0). In the case of GNU/Hurd, the first thing that GRUB loads is kernel image. + +Here is a copy of GNU/Hurd multi-user entry from menu.lst. The first two lines are primarily informational and are what get displayed on the GRUB boot menu. + + # Entry 2: 1st partition on first HDD + title GNU/Hurd (IDE 1st partition - hd0s1 multi-user) + root (hd0,0) + kernel /boot/gnumach.gz root=device:hd0s1 + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +**_N.B. the escaped new lines above should end in only a back slash, no spaces!_** + +The line "root (hd0,0)" tells GRUB where to look for the root partition. Notice that the (hd0,0) is using GRUB naming conventions. + +The next line loads the gnumach kernel image itself. Notice here the root=device:hd0s1 argument. This is now using GNU/Hurd device naming convention, telling the Hurd where the root partition exists. + +---- + +-- [[Main/BarryDeFreese]] - 29 May 2003 + +Minor formatting and edit check. + +On a side note. The actual description of the GNU/Hurd boot process is a good idea but keeping duplicated information to a bare minimum must be the guide line for a "book" like this. See other topics for more information on Grub configuration for instance. + +-- [[Main/JoachimNilsson]] - 30 May 2003 diff --git a/unsorted/FlexibilityForUser.mdwn b/unsorted/FlexibilityForUser.mdwn new file mode 100644 index 00000000..71b05cfd --- /dev/null +++ b/unsorted/FlexibilityForUser.mdwn @@ -0,0 +1,7 @@ +FROM: <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00242.html> + +The user must have a range of options available that support him to achieve an arbitrary but well-defined goal that can be stated within the legitimate resources the user controls. + +_Flexibility means that the user controls what can happen **with** his resources._ + +-- [[TomBachmann]] - 29 Apr 2006 diff --git a/unsorted/GrubNotes.mdwn b/unsorted/GrubNotes.mdwn new file mode 100644 index 00000000..b0b1fdf5 --- /dev/null +++ b/unsorted/GrubNotes.mdwn @@ -0,0 +1,70 @@ +This section complements the [[InstallNotes]] with complete information regarding the GRUB boot loader. The syntax is different from Lilo's and so to scratch my own itch I'm creating this quick reference. The [Grub manual](http://www.gnu.org/software/grub/manual/grub.html) is another good reference. + +* update-grub is **Debian specific** and very nice. It will automatically create a /boot/grub/menu.lst file for the kernels in /boot/. It will also append a manually configured set for other partitions like the GNU/Hurd. +* grub-floppy is a **Debian specific** boot floppy creation script. +* mkbimage is a **Debian specific** boot disk image creation script. +* <http://khazad.dyndns.org/packages/grub-disk/> contains a Debian packaged makefile for creating CD & floppy images. Looks like it doesn't work properly. If you fix it, please send patches to the maintainer. +* essential GRUB commands & disk syntax + * root + * kernel + * module + * boot +* sample file + + title GNU/Linux + root (hd0,11) + kernel /boot/vmlinuz-2.4.18 root=/dev/hda12 ro + initrd /boot/initrd.img-2.4.18 + savedefault + + title GNU + root (hd0,15) + kernel /boot/oskit-mach root=device:hd0s16 -- + module /hurd/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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + savedefault + + title DOS + rootnoverify (hd0,0) + chainloader +1 + +-- [[Main/GrantBow]] - 01 Oct 2002 <br /> -- [[Main/GrantBow]] - 22 Dec 2002 + +Another example, just as good, but a lot easier to read. The backslash at the end of each line is to "escape" the enter-key. So make sure there are no spaces following the backslashes! + + title GNU/Linux (Linux 2.4.18) + root (hd0,11) + kernel /boot/vmlinuz-2.4.18 root=/dev/hda12 ro + initrd /boot/initrd.img-2.4.18 + savedefault + + title GNUmach 1.3 + root (hd0,1) + kernel /boot/gnumach.gz root=device:hd0s2 + module /hurd/ext2fs.static --readonly \ + --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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + + title GNUmach 1.90 (CVS) + root (hd0,1) + kernel /boot/oskit-mach.gz root=device:hd0s2 -- + module /hurd/ext2fs.static --readonly \ + --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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +Note the differences between GNUmach and OSKit-Mach. The latter **needs** the two dashes after the root specification! + +-- [[Main/JoachimNilsson]] - 09 Nov 2002 diff --git a/unsorted/HurdWikiCopyrightDiscuss.mdwn b/unsorted/HurdWikiCopyrightDiscuss.mdwn new file mode 100644 index 00000000..ffa0b17b --- /dev/null +++ b/unsorted/HurdWikiCopyrightDiscuss.mdwn @@ -0,0 +1,69 @@ +How about that notice from [[Main/PeterThoeny]]? Why don't we change the [[Hurd/WebPreferences]] for the Hurd web to say "Copyright (c) 2002 Free Software Foundation", instead of the usual "... the contributing authors". I think that would make the information we put in here easier to move around among different webs (not only Wikified ones...). Perhaps also add a notice on licensing? Like this: + + "Copyright (C) 2001, 2002 Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111, USA + + Verbatim copying and distribution of this entire article is + permitted in any medium, provided this notice is preserved." + + Submitting material to the Hurd Wiki not only assigns the copyrights + to the Free Software Foundation it also put the material itself under + the GNU FDL, http://www.gnu.org/licenses/fdl.html + +-- [[Main/JoachimNilsson]] - 14 May 2002 + +Don't do this - the material will not be assigned to the FSF until every contributor signed a paper form and filed it with the FSF. + +So simply claiming something is (C) FSF will not make it to be so, and it will not only have no effect, but also be confusing. + +Wiki has authentication, this is good. However, unless you have paper forms, all contributions remain with the original author. + +And if you had papers, you would have to disallow or moderate guest account contributions and either filter them out or change the copyright notice when they are filled in. This makes reusing Wiki-evolved content in free software projects by the FSF difficult btw, so don't expect major wiki-evolved content to be included in FSF manuals or so (this is not a problem, as long as everyone is aware of this limitation and keeps it in mind). + +-- Marcus Brinkmann (no, not a Wiki-Name :) + +So what you are saying is basically this: + +1. We cannot assign the copyright to the FSF without the _paper_ work. +2. We _can_ use content from the FSF (as long as we keep all copyright information, of course), but any content evolved from this is unusable for GNU manuals. +3. Even if every newly registered user (and [[Main/TWikiGuest]] is disabled completely for the Hurd Web) agrees to our terms that agreement is useless without the _paper_ work. + +Oh, there is of course all the RCS diffs ... would that help, if we would like to have the Wiki content in GNU manuals? + +-- [[Main/JoachimNilsson]] - 14 May 2002 + +If you have papers signed by the contributors, then any Guest added words (less than 10 lines?) can be filtered out of the Wiki using RCS. This is acceptable for GNU code, if I recall correctly. You may have to re-writen certain portions of the Wiki to use FSF contributed work only, though. + +-- [[Main/SimonLaw]] - 16 May 2002 + +There seems to be a confusion of FDL vis-a-vis copyright-assignment here. FDL is like the all-important Step 1 which protects this content from being non-free. Copyright assignment is an Optional Step 2. + +Step2's not being feasible does not mean that we can't take Step 1. + +90% of GPL'ed software out there does not take Step 2. Step 2 helps by involving FSF in case someone violates our Step 1--the copyright itself. But i don't see why we cannot take Step 1 atleast. + +-- [[Main/DeepakGoel]] - 01 Oct 2002 + +After an email discussion a while ago now between myself, Grant Bowman, RMS and Marcus Brinkmann the following results where achieved: + +* Copyright assignment can indeed be done without the extensive paperwork. + +* To implement this on a Wiki some provisions must be fulfilled: + * The user must **_actively_** select a checkbox or similar. + * The text to the checkbox can be _"I approve to also assign the copyrights of my work to the FSF"_ + +* This practise can be implemented today in the U.S., but in the EU there are still some things that need to be ironed out. Different countries still have differences in copyright law. However, the Swedish laws, where the Hurd wiki is located, do allow such a practise. + +The first step, mentioned above by [[Main/DeepakGoel]] we have now taken. The Hurd wiki is now licensed under the GNU FDL. The second step, assigning copyright will take a bit longer since the Perl scripts making out the TWiki engine must be altered. Also, we must first make sure that we all want to take the second step - we will also need to get the approval of assigning copyright of older material by those editors. + +-- [[Main/JoachimNilsson]] - 01 Jan 2003 + +I don't feel taking the next step of copyright assignment is necessary, but I'm not opposed to it either. My concerns revolve around encouraging a wider participation and not actively putting up more barriers. Not many folks contribute as it is, unfortunately. + +-- [[Main/GrantBow]] - 03 Jan 2003 + +Good, I've been hesitating too. Then there's no need for me to rush into getting the architecture of it working just yet. + +As it is right now, with at least the licensing (the FDL) in place, I'm quite content. + +-- [[Main/JoachimNilsson]] - 03 Jan 2003 diff --git a/unsorted/HurdWikiMove.mdwn b/unsorted/HurdWikiMove.mdwn new file mode 100644 index 00000000..084e0ff2 --- /dev/null +++ b/unsorted/HurdWikiMove.mdwn @@ -0,0 +1,55 @@ +Many thanks to [[Main/JoachimNilsson]] for his work to establish and help update this Hurd Wiki! You have been extremely kind with your efforts in creating the new GNU skin and all of the expected and unexpected administrative work that's been needed to establish this Wiki. + +Now that the site is established, the traffic levels are growing and the value of the site is evident. This will affect the current host since its bandwidth is quite limited. Therefore a new permanent host must be located. We would like it to offer the following: + +* Free bandwidth +* At least one GiB of quota +* Availability 24/7 +* Shell access for at least one person for administrational purposes +* Possibly in the U.S. due to "click-n-approve" copyright assignment of material to the FSF (see [[HurdWikiCopyrightDiscuss]]). +* Regular backups +* Other? + +Comment on this page or email the maintainer <joachim@gnufansNOSPAM.org> + +Potential places to move Hurd Twiki to in order of preference: + +* savannah.gnu.org +* Some other \*.gnu.org site +* Other site in the U.S. or country with similar copyright laws. + +---- + +I favor removing gnu.org from the above list. There are copyright issues that are technically impossible to address in the way that RMS wants copyright assigned to all content hosted on gnu.org. While we probably could bend over backwards to accomodate it, fundamentally I think that this and other potential problems are not worth the effort of making this Hurd Twiki an official part of the GNU project. + +Technically I think that savannah.gnu.org might be possible but I will defer to others for a decision from this perspective. Assuming it's possible, I think we may have similar problems as above. + +I favor looking for another solution, an "other". + +-- [[Main/GrantBow]] - 22 Sep 2002 + +Refactoring and updating. + +The copyright issues we have to straighten out anyway. If someone wants to make a CD set of the "manual" we have created here and that content later on gets misused we need to defend our rights. Using the GNU [[GNU/FreeDocumentationLicense]] and assigning the copyright to the FSF will help us achieve this. The FSF can fight for us instead of all the writers trying to get together. + +-- [[Main/JoachimNilsson]] - 23 Oct 2002 + +Joachim, how are we doing on bandwidth usage? Is it growing, decreasing, about the same? What measure should we be looking at to keep an eye on the situation? I am sure lots of people really appreciate your hosting this site for free. I'm of course one of them! + +-- [[Main/GrantBow]] - 01 Jan 2003 + +I have [the statistics](http://hurd.gnufans.org/webalizer/) under observation and thus far it looks very good. There really isn't much traffic at all, [compared to](http://vmlinux.org/webalizer/) the machine we host gnufans.org on. One tenth of the traffic to vmlinux.org. + +Occasionally I talk to one of the guys at [QuickNet](http://www.quicknet.se) about the hosting and our (vmlinux.org's) bandwidth usage. He has assured me that there is no problem at all, in fact, they have increased the overall capacity of their hosting capabilites, so now our traffic is no more than a drop in the ocean to them. :) + +I'll keep you (all) informed if there is any change in status of the hosting. + +Furthermore, I've been looking into the copyright assignment issues we talked about a while ago now. It seems RMS is right. At least in Sweden transfer of copyright can be made by a user in the way he descibed in the email conversation we had. The provision is that the user must **_actively_** select a checkbox or similar which says something like: + +* _"I hereby assign the copyrights of my work to the FSF"_ + +This means that the copyright is also owned by the FSF, the original author can never lose his rights to a work. The copyright assignment is useful when there is a license violation, bacause then the FSF can fight on behalf of the copyright owners without having to ask them all. + +Well, this post somewhat "nullifies" many of the claims made at the beginning of this topic. Maybe I should refactor it a bit to better suit the current circumstances? + +-- [[Main/JoachimNilsson]] - 01 Jan 2003 diff --git a/unsorted/HurdWnpp.mdwn b/unsorted/HurdWnpp.mdwn new file mode 100644 index 00000000..49e069de --- /dev/null +++ b/unsorted/HurdWnpp.mdwn @@ -0,0 +1,19 @@ +While Debian Developers and users use the official [WNPP](http://www.debian.org/devel/wnpp/) (Work Needed and Prospective Packages) page, a system of special bugs in the [Debian Bug Tracking System](http://bugs.debian.org/), this page is intended to give another location (and method) for giving feedback and provide status for developers of the Hurd. Please simply add a package name, the person's name sho's porting it, possibly with URL or as a separate page if you have relevant notes on the package. + +This data is for porting purposes only. Any conflict between the Debian BTS data and the data here should be resolved in favor of the Debian BTS. It's hoped this page will allow people to keep notes on packages that need some care. + +Packages in need of porting help: + +* Ported packages up for adoption + +* Ported orphaned packages + +* Packages currently being ported + +* Rewritten/replaced packages + * fakeroot - [status](http://mail.gnu.org/pipermail/bug-hurd/2002-May/008322.html) + +* Requested packages + * [Entropy Gathering Daemon](http://bugs.debian.org/145498) - Mako Hill + +-- created 19 May 2002 diff --git a/unsorted/InstallNotes.mdwn b/unsorted/InstallNotes.mdwn new file mode 100644 index 00000000..49dcd53d --- /dev/null +++ b/unsorted/InstallNotes.mdwn @@ -0,0 +1,296 @@ +Items of interest during install not mentioned elsewhere include the following. Arranged in the same order as Neal Walfield's [install guide](http://web.walfield.org/papers/hurd-installation-guide/english/hurd-install-guide.html) - (link is currently broken - see below for current instructions). + +**_Currently, [Debian's installation instructions](http://www.debian.org/ports/hurd/hurd-install) are the most up-to-date._**<br /> Note the mirrors mentioned on debian.org have no hurd iso's. The iso's can be found [Here](http://ftp.gnuab.org/pub/gnu.iso) + +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="1_Overview_Where_we_are_going"> 1. Overview - Where we are going </a> + +There are currently four methods to install GNU + +1. Tarball - The current documentation, for the tarball method, are [Debian's installation instructions](http://www.debian.org/ports/hurd/hurd-install), based on the original guide by Neal Walfield. The GNU official [installation page](http://www.gnu.org/software/hurd/install.html) is the canonical reference. See [[Distrib/TarballNotesHome]] for more info. +2. [[Distrib/BochsEmulator]] is an x86 emulator similar to the propietary [[Distrib/VmWare]] (which is not supported). See the [[Distrib/BochsEmulator]] page for more info. The Bochs project hosts a preinstalled GNU image that is periodicaly updated. You can get the latest one [here](http://sourceforge.net/project/showfiles.php?group_id=12580). +3. [CD-ROM iso images](http://www.debian.org/ports/hurd/hurd-cd) CD-ROM installs are becoming more and more popular. The CDs are based on the most current tarball at release time. See [[Distrib/CDNotesHome]] for more info. +4. The [crosshurd](http://packages.debian.org/crosshurd/) Debian package, which can be used instead of a tarball to install the base system. This is the recommended way to proceed. + +* References to a `cross-install` script can nowadays be completely ignored by anyone not a maintainer. It is only used when creating a new tarball. + +## <a name="2_Real_Estate_or_Finding_A_Home"> 2. Real Estate or Finding A Home </a> + +For those who do not happen to have an available partition or an extra hard drive, this can be the longest step. In this case, we will need to repartition the hard drive. One solution is to use GNU's partition editor, Parted. It features not only basic partition editing, but also partition resizing and moving functions. It can be found at <http://www.gnu.org/software/parted>. The manual is quite complete and includes several tutorials. Also there's a frontend called [nparted](http://packages.debian.org/unstable/utils/nparted.html) to simplify usage. + +The Hurd can only support partition sizes of up to approximately one gigabyte; anything much larger than this will not work. This limitation is a design decision that was made several years ago in which the file system server maps the entire partition into virtual memory. As the amount of virtual memory available on an ia32 is only four gigabytes of which only two gigabytes are available to the application and, of that, a significant portion is reserved for the code, the stack and the heap, the final, maximum contiguous virtual memory area that is left is generally about one gigabyte. This limitation is scheduled to be remove. Several other items, however, currently have a slightly higher priority. + +Having said that, a single one gigabyte partition is more than enough for a working system. Many, however, prefer at least two partitions: one for a root partition and another for a home partition. This latter scheme is highly advised for developers interested in debugging Hurd servers. + +The Hurd supports several extensions to the ext2fs file system format. Foremost among these are passive translators and a fourth set of permission bits for unknown users. In order to take advantage of these features, however, the owner of the partition must be set to Hurd. `mke2fs`, unless specifically overridden on the command line, will set the owner to whatever system core it is running on. As the Hurd will diligently respect this setting, we must be careful to set this appropriately or the Hurd may fail in subtle ways. Be aware that even if a file system is owned by a particular system core, others may still use it; they just may not be able to use certain extensions. + +To create a file system, we use `mke2fs` and pass it `-o hurd` to designate the Hurd as the owner of the new file system. For instance: + + mke2fs -o hurd /dev/DEVICE + +**_Note:_** You may wish to add a `-b 4096` option to `mke2fs` (the default is chosen depending on the size of the partition, and the support for block size 1024 is buggy). The command to check the block size is `tune2fs -l /dev/hda9` under GNU/Linux. + +## <a name="3_The_Boot_Loader_Getting_GRUB"> </a> 3. The Boot Loader - Getting GRUB + +GRUB is the bootloader of the GNU system, and it's currently the only one that supports the multiboot standard, necessary to boot the Hurd. + +A word about GRUB. Unlike traditional boot loaders on the x86, such as LILO, GRUB is very powerful. It has a command line interface, bootp, dummy terminal support and a plethora of other features. In addition, it can boot most any operating system. If you have ever booted an alpha or sparc, you will understand what GRUB can do. Therefore, do not be scared: GRUB is better. You will like it. You will not go back. + +To find GRUB, visit <ftp://alpha.gnu.org/gnu/grub>. Here, there is a source tarball and a floppy image. If you choose to download the tarball, it is a normal configure, make and make install. Included is a wonderfully complete manual on how GRUB works. Read it. If, on the other hand, you choose to download the floppy image, it is sufficient to dump it to a floppy disk to get a working GRUB: + + dd if=grub-boot-VERSION.image of=/dev/fd0 + +You can always install GRUB onto your hard drive at a later date. + +For instructions on using GRUB, see either the info documentation or the quick reference notes on this wiki: + +* [[Distrib/GrubNotes]] - quick reference + +## <a name="4_Cross_Install_Cross_Installing"> </a> 4. Cross Install - Cross Installing GNU + +The recommended way to cross install the Hurd is by using the [crosshurd](http://packages.debian.org/crosshurd) Debian package. Unfortunately, it's broken right now (2003-10-10), so you'll have to use the old tarball method. + +Download the base system `gnu.tar.gz` from <ftp://alpha.gnu.org/gnu/hurd/contrib/robertmh/> . + +The tarball is setup to extract everything into the current directory. After mounting the partition and changing to the mount point, we just need to extract the archive. In the following example, we assume that the root partition is mounted on `/gnu`. + + cd /gnu + tar --same-owner -xvzpf ~/gnu.tar.gz + +**_NOTE:_** This should NOT be confused with the `cross-install` script method. It is only used by maintainers when creating a new tarball. + +## <a name="5_Booting_GNU"> </a> 5. Booting GNU + +Now things are setup to boot GNU for the first time. Verify that the GRUB boot disk is in the drive and reboot. If all goes well, a GRUB menu will be displayed. Hit c for the GRUB command line. + +First, the root file system needs to be set. GRUB uses a partition nomenclature that is a bit different from either GNU or GNU/Linux: both IDE and SCSI drives are named `(hdN)`. `N` is the drive number (zero based) as reported by the BIOS. That is, GRUB makes no distinction between IDE and SCSI disks. The partitions, like the disks, are also indexed numerically from zero: `(hdN,M)`. If this sounds bad, relax: GRUB is also helpful. + +To determine on which file system a particular file resides, one method is to use the find command. When issued this command, GRUB searches on each file system for the specified file and prints where is was found. Here we search for the kernel, `/boot/gnumach.gz`. + + grub> find /boot/gnumach.gz + (hd0,0) + +As we can see, GRUB is indicating that `/boot/gnumach.gz` is on `(hd0,0)`. Thus, we set the root respectively: + + grub> root (hd0,0) + Filesystem type is ext2fs, partition type 0x83 + +Next, GNU Mach needs to be loaded. In addition to loading the binary, at least one option, the root partition, must be specified. This will be used by the Hurd itself. As such, it must be in terms that the Hurd can understand. + +GNU Mach labels disks starting at zero. IDE drives are prefixed with hd, while SCSI disks are prefixed with sd. Like GNU/Linux, drives are number by their position on the controller. For instance, the primary master is `hd0` and the secondary slave is `hd3`. Partitions use the BSD slice naming convention, and append `sM` to the drive name to indicate a given partition. Note that `M` is a one, not zero, based index. The slice number is simple to calculate: just increment what you used for GRUB by one. + +Since the Hurd has not yet been configured, it must be run in single user mode. Adding a `-s` to the kernel command line is all that is required. + +Thus, continuing with the above example and assuming that the first drive in the master on the secondary controller, we would have: + + grub> kernel /boot/gnumach.gz root=device:hd2s1 -s + [Multiboot-elf, ...] + +NOTE: If after running this command you see GRUB Error 28, according to the [GRUB Troubleshooting](http://www.gnu.org/software/grub/manual/grub.html#Troubleshooting) documentation, you may need to tell grub that you have more memory by using the uppermem command. For example, if you have 256MB of RAM and running **displaymem** within GRUB shows that you have less memory than that, you can type **uppermem 262144** to tell GRUB about the additional memory. + +Next, the root file system server and the exec server must be loaded. This is done using GRUB's boot module capability. The parameters are the semantics by which the kernel passes some important values to the servers. + + grub> module /hurd/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) + + [Multiboot-module 0x1c4000, 0x2cfe6a bytes] + grub> module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + [Multiboot-module 0x494000, 0x27afe bytes] + +**_Important:_** each module string should be asingle separate line _or_ line wrapped with a backslash at the end of each line. Remember to make sure there are **_no trailing spaces!_** Adding this to GRUB's `menu.lst` file as soon as possible is advised. + +Finally, GNU can be booted: + + grub> boot + +Sit back and watch the messages. This is actually more important than one might think as there is a bug in GNU Mach whereby hitting a key during the boot process causes the kernel to panic. + +If GNU fails to boot, it could be due to shared IRQs: GNU Mach does not play well with these. You can verify your situation by looking at, for instance, the `/proc/interrupts` file under GNU/Linux. Also, as GNU Mach does not support loadable kernel modules, many of the drivers are compiled into the default kernel. If you have old peripherals, this can be a significant problem: a device may respond badly to a probe intended for a different device. Building a new kernel with only the required devices drivers will usually solve this problem. GNU Mach is easily cross compiled. If you are running Debian, try the `gcc-i386-gnu` package. + +If this does not help, explore the resources listed at the end of this document. Finally, ask on the appropriate mailing list. + +There are some cavaets to the boot process: + +* **IMPORTANT!** Remember when first booting into your freshly un-tarred distribution, you must pass the `-s` option to `/boot/gnumach.gz`. Failure to do so means that you won't get single-user mode. +* **IMPORTANT2!** Add the `--readonly` flag to the file system server in your GRUB `menu.lst` file. This is a work-around to get `fsck` working properly. Don't forget, everything must be on ONE line, or ended with a backslash! +* **IMPORTANT3!** If you have created the filesystem with a later version of e2fsprogs than the one installed in the tarball, it **might** happen that fsck fails and you can't boot multiuser. The workaround is to copy `/bin/true` into `/sbin/e2fsck` and `/sbin/fsck.ext2`, then boot multiuser and install the latest e2fsprogs. + + title GNU (kernel GNUmach 1.3) + root (hdX,Y) + kernel /boot/gnumach.gz root=device:hdXs(Y+1) + module /hurd/ext2fs.static --readonly \ + --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) + module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +Where `hdX,Y` is the appropriate hard disk and partition number, in GRUB format. `hdXs(Y+1)` is the GNUmach format - because Mach partitions start at 1, unlike GRUB partitions that start on 0 (zero). + +It is important that each module string is only a single separate line, or by escaping the EOL (end of line) with a back slash. Remember though to make sure there are **_no trailing spaces!_** + +**_GRUB floppy and iso images:_** These are available from <http://www.copyleft.co.nz/links.html>. These have been built with the correct strings and only the root and boot partitions names need to be editied. + +## <a name="6_Native_Install_Finishing_the_I"> 6. Native Install - Finishing the Installation </a> + +Once a prompt comes up, and any time that the the Hurd is in single user mode, it is necessary to set the terminal type: + + export TERM=mach + +(Repeat this each time you boot in single user mode) + +Be warned that CONTROL-C and family will not work in single user mode. + +We can now run the native-install script. This will configure the packages and set up several important translators: + + ./native-install + +Right before the script terminates, it will indicate that it needs to be run a second time. Follow its instructions and reboot using the reboot command. Again, go into single user mode. + +Now it is advisable to enable swap. The mach kernel dislikes running without swap and is unlikely to last through the installation, especially on systems with little physical RAM. Although you can enable swap later on after running `./native-install` for the second time, turning swap on early increases your probability of getting there. + +This will start the default pager, create a device corresponding to the swap partition, and turn swap on on that partition: + + /hurd/mach-defpager + cd /dev + ./MAKEDEV hdXsY + swapon /dev/hdXsY + cd / + +**IMPORTANT!** When enabling swap please be very sure that the partition really is swap. If you point `swapon` to a data partition it will use that for swap, overwriting any data you may have there. + +Now run `./native-install` for the second time and go through a series of prompts. + +Next, edit `/etc/fstab` to add the home partition and swap space. By default, `nano` is the only editor installed by the the base distribution (not `ae` nor `vi`). It is very important that swap space be used: the Hurd will be an order of magnitude more stable. Note that the Hurd can transparently share a swap partition with Linux, the kernel, but will happily page to any device including a raw partition such as your home partition. + +Here is an example `/etc/fstab` file: + + # <file system> <mount point> <type> <options> <dump> <pass> + /dev/hd2s1 / ext2 rw 0 1 + /dev/hd2s2 /home ext2 rw 0 2 + /dev/hd2s3 none swap sw 0 0 + +Remember to create any devices using the `MAKEDEV` command. + +When you first boot, your `/home` directory will _not_ be auto-mounted. You must set a passive translator on that node to access that partition. The correct syntax for this is: <br />`settrans -p /home /hurd/ext2fs /dev/hd2s2` + +To mount an nfs partition, use the nfs translator. When run as non-root, the translator will connect, for obvious reasons, to the nfs server on a port above 1024. For this to succeed under GNU/Linux, the insecure option must be added to the export line. Here is an example `/etc/exports` file: + + /home 192.168.1.2(rw,insecure) + +To mount this from a GNU box: + + settrans -cgap /home /hurd/nfs 192.168.1.1:/home + +## <a name="7_Configuration_Making_the_Syste"> 7. Configuration - Making the System Usable </a> + +See [[DebianAfterInstall]] for complete, up to date instructions. + +* After you install, you'll want to do several _important_ things: + * Run `passwd` to give the root user a password. By default, root does not have one. + * Run `adduser` to give yourself a user account. _Do not_ use root indiscriminately. + * Run `MAKEDEV` to create devices in `/dev` for your hard disk and other required devices. + * Since the Hurd does not use `ld.so.conf`, you will want to specify where the X Window System keeps its libraries. Do this by adding the following line to your `/etc/profile`: <br />`export LD_LIBRARY_PATH='/lib:/usr/X11R6/lib'` + * run `/etc/cron.daily/find` to allow `locate` to function. + +* [[GetNetworkRunning]] + * Hopefully Mach will recognize your hardware. If it doesn't you have to recompile in most cases. + * copy over your `/etc/resolv.conf` from GNU/Linux to allow your DNS to resolve correctly. + +* Prepare system for new packages. + * See [[DebianAfterInstall]] for up to date instruction on how to setup apt-get mirrors. + * There are some extremely useful cross-platform 'apt' tricks that can be used to get packages when using Debian GNU/Linux (possibly others) for installation on GNU. This is especially useful if your GNUMach doesn't recognize your network card. The steps are covered in the file `/usr/share/doc/apt-doc/offline` which has been used by several Hurd developers successfully. + * create an `/etc/apt/apt.conf.offline` like [[AptConfOffline]]. + * consider setting up a few [[CrossPlatformAliases]] for use under Debian GNU/Linux while the Debian GNU/Hurd partitions are mounted. + * select the `apt` method from within dselect. + +* [[Xfree86]] + +* New packages - Hopefully you are able to get your network working but since the default GNUMach is only configured for a few ethernet cards you may need to recompile your GNUMach to get it working with your network hardward. + * Install these extremely useful packages + * `dialog` -- Debconf uses this for interactivity. You should install this first to allow you to configure other packages as they are installed. + * It's a very good idea to bring your packages up to date by running: `apt-get update && apt-get dist-upgrade` + * Some recommended packages + * `screen` -- A terminal multiplexer was important because the Hurd didn't have virtual consoles. Now you can have the [[Hurd/HurdConsole]], but screen is still handy. + * `anacron` -- good to run cron jobs for a machine that is not on all the time. + * `emacs21` -- a powerful editor. + * `cvs` -- Concurrent Version System, you'll probably need this soon. + * `bzip2, zip, unzip` -- compression tools. + * `build-essential` -- preparing to build software. + * `gnu-standards` -- GNU coding and package standards. + +* Some packages use an erroneous dependency on `libc6-dev`. This is incorrect because libc6 is specific to GNU/Linux. The corresponding package for GNU is `libc0.3-dev`. If you find a package that is uninstallable due to a `libc6[-dev]` dependency, please send a bug report with a patch that fixes it. It is important that you don't hack your package system to workaround such problems, because that way you won't be able to spot them when they arrive. See the [[Distrib/PortingIssues]] for details about the problem and [[Distrib/BtsFiling]] for details on sending bug reports. +* Edit your `/etc/inetd.conf` and comment out all the services you don't need. Services that probably don't need to be running are `ftp`, `telnet`, `shell`, `login`, and `exec`. +* There appears to be a bug in `libnss-db` that causes networking to fail. To work around this edit `/etc/nsswitch.conf` and remove the `db` entries. (See <http://www.geocrawler.com/archives/3/333/2001/1/50/4907699/> ) + +* You may want to check the [[PackageTroubleshooting]] page if you are having trouble installing and making work some Debian packages. + +## <a name="8_Final_Words_The_FAQ"> </a> 8. Final Words - The FAQ + +* [[FAQ]] - More than frequently asked questions + +* [Hurd FAQ](http://web.walfield.org/papers/hurd-faq/) + +* [[KnownHurdLimits]] - Limitations of the GNU operating system + +## <a name="9_Works_Cited_Referenced_Materia"> 9. Works Cited - Referenced Materials </a> + +On Sept 20, 2002 [[Main/DeepakGoel]] (a self-proclaimed newbie) posted a link to his personal [step-by-step installation](http://24.197.159.102/~deego/pub/hurd/install-guide/install.txt). The parent directory has additional material. + +Tarball Notes: [[Distrib/TarballNotes20020816]] [[Distrib/TarballNotes20020523]] + +CD-ROM Notes: [[Distrib/CDNotesJ2]] + +Others who wish to post summaries of their installation experiences are encouraged to do so. The installer methods, package dependencies and file locations frequently do change without warning. + +---- + +## <a name="Licensing"> Licensing </a> + + This work is based on the hard work by [countless Hurd users](http://web.walfield.org/papers/hurd-installation-guide/THANKS), documented and maintained by Neal H. Walfield. See the original for both reference and its licensing at <http://web.walfield.org/papers/hurd-installation-guide/> + +The license for Neals work is under the [GNU GPL](http://web.walfield.org/papers/hurd-installation-guide/COPYING). However, in the Hurd Wiki license all content under the GNU FDL. (Unless the topic is mostly code or otherwise stated in the text.) + +There are currently issues to be resolved around this matter, as far as I understand at least. Until an agreement can be reached this text, and the unclear status of this topic, will remain. The suggestion is to do something like this: + +<dl> + <dt>[[InstallGuide]]</dt> + <dd> Neals Install Guide in its original form </dd> + <dt>[[InstallNotes]]</dt> + <dd> Or [[InstallGuideErrata]] with all user input and additions </dd> +</dl> + +There are several obvious issues with this as I can see + +1. The [[InstallGuide]] must be kept editable by a select few people to avoid the current situation from repeating itself. +2. This loops back and kicks us in the butt because then we get: + 1. Synchronization problems with the original work + 2. Bottle necks: The people with edit access are too busy to synchronize with Neals guide + 3. Diverging guides +3. Annoyed users, we break the tradition of freely editable wiki content and we also have two guides saying different things. + +-- [[Main/JoachimNilsson]] - 29 Dec 2002 + +## <a name="Blame_annotations"> Blame annotations </a> + + -- [[Main/SimonLaw]] - 29 May 2002 <br /> -- [[Main/GrantBow]] - 13 Oct 2002 <br /> -- [[Main/JoachimNilsson]] - 14 Nov 2002 <br /> -- [[Main/RobertMillan]] - 21 Nov 2002 <br /> + +First effort at straightening out the formatting mess ... added references to Neals' original, which this topic has become heavily based on. + +-- [[Main/JoachimNilsson]] - 19 Dec 2002 <br /> + +Updated to the latest short-comings in the Hurd. + +-- [[Main/OgnyanKulev]] - 11 Oct 2003 + +-- [[Main/TWikiGuest]] - 07 Dec 2003 (<r2q2@rocketmailNOSPAM.com>) + +Updated iso information diff --git a/unsorted/InstallTips.mdwn b/unsorted/InstallTips.mdwn new file mode 100644 index 00000000..a735fbf7 --- /dev/null +++ b/unsorted/InstallTips.mdwn @@ -0,0 +1,115 @@ +Before reading these instructions, be sure you are familiar with the [[InstallNotes]]. + +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="1_Setting_up_the_filesystems"> 1. Setting up the filesystems </a> + +You will need to boot a linux capable of internet access and creating/mounting ext2 partitions. I recommend [tomsrtbt](http://www.toms.net/rb/) linux which fits nicely onto a floppy and although a bit old will work well. + +Once in linux, you will need to create the partitions with fdisk. If you need to reboot, you will be notified. Make sure your partitions are not more than 2gig, or not even close. I learned this the hard way. This is for version 9-17-2004, newer versions should not have this problem. + +Assuming your root partition is on the first partition of the primary master run: + + mke2fs -o hurd /dev/hda1 + +If you do not have enough memory to do this, you will need to create a swap partition using mkswap and enable it with swapon before running mke2fs. + +## <a name="2_Getting_online"> 2. Getting online </a> + +Now you will need to get online to download the needed base system. To do this check to see if you are already online. + +If not, check the network by issuing ifconfig. If you have a device but it is not listed correctly, refer to the documentation on ifconfig to set it correctly. Even if you have dhcp you can usually issue a static ip that is in the correct range. An example may read: + + ifconfig eth0 up 192.168.1.9 netmask 255.255.255.0 + +Now setup the default gateway replace with your gateway + + route add default gw 192.168.1.1 + +you may need to issue "route del default" a few times to remove incorrect routings. + +Now just edit /etc/resolv.conf and put in your nameserver and you should be set. + +## <a name="3_Downloading_the_tar"> 3. Downloading the tar </a> + +Mount the filesystem to a directory (/mnt works) and cd to this directory. + +Download the latest tar of the debian system <http://eu.hurd.gnuab.org/pub/debian/base/> or another working link, the file will probably be in the format: debian-gnu-hurd-yyyy.mm.dd.tar.gz + +use wget for the full path + +now assuming tomsrtbt linux issue: + + gzip -d<debian-gnu-hurd-yyyy.mm.dd.tar.gz|tar -xvf - + +replacing yyyy.mm.dd appropriately + +## <a name="4_Configuring_GRUB"> </a> 4. Configuring GRUB + +Download the floppy image of grub with ext2fs support to a temporary directory, it can be found here: <ftp://alpha.gnu.org/gnu/grub/> write it to a blank floppy + + dd if=image of=/dev/fd0 + +now mount the floppy and copy the files to your partition + + mount /dev/fd0 /fl + cd /fl/boot + cp -R grub /mnt/boot + +you may also wish to put my menu.lst file in your grub directory which can be obtained here <ftp://firethroat.com/hurd/menu.lst> you will need to edit it to include a -s at the end of the line starting with kernel. Be sure modify the partition numbers, my system is using the third partition of the second harddrive. + +More detailed samples for grub config files can be found at the [[GrubNotes]] + +To install grub reboot using the grub floppy and issue: + + root (hd1,2) + setup (hd0) + +this will use the grub installed on the third partition of the second harddrive and install it to the master boot record of the first hard drive. + +Now reboot without the floppy, be sure to use the option -s at the end of the grub line starting with kernel= to start in single user mode. + +## <a name="5_Booting_GNU"> </a> 5. Booting GNU + +You should have booted the kernel now, check output to see if it detects your network card. My smc card did not work so I switched to a 3com card. + +You are now at step 6 of the [[InstallNotes]]. Follow these instructions to complete the installation. + +## <a name="6_Final_notes"> 6. Final notes </a> + +Be sure to issue + + apt-get update + apt-get upgrade + +Before running x run the console + + console -d vga -d pc_kbd --repeat=kbd -c /dev/cons /dev/vcs + +This forwards the keyboard device so x can use it. It also gives you 6 virtual terminals. I have had problems using it to forward the mouse, the system would lock. To exit issue ctrl+alt+backspace + +To get a sample XF86Config-4 issue: + + X -configure + +My file is available <ftp://firethroat.com/hurd/XF86Config-4> but it uses a serial mouse. You can use settrans to get mouse input (this is the prefered method) or accessing it directly works. + +## <a name="7_Works_Cited_Referenced_Materia"> 7. Works Cited - Referenced Materials </a> + +[[InstallNotes]] -- Neal H. Walfield's Install Guide + +[Grub Install Guide](http://www.gnu.org/software/grub/manual/html_node/Installing-GRUB-natively.html) + +[tomsrtbt linux](http://www.toms.net/rb/) a general purpose linux distribution on 1 floppy. + +A lot of help in the chat room [[IRC]]. + +---- + +## <a name="Licensing"> Licensing </a> + +The license for this info work is under the [GNU GPL](http://web.walfield.org/papers/hurd-installation-guide/COPYING). However, in the Hurd Wiki license all content under the GNU FDL. (Unless the topic is mostly code or otherwise stated in the text.) + +-- [[Main/SeanDEpagnier]] - 25 Dec 2004 diff --git a/unsorted/JoachimNilssonOldStuff.mdwn b/unsorted/JoachimNilssonOldStuff.mdwn new file mode 100644 index 00000000..30e6b611 --- /dev/null +++ b/unsorted/JoachimNilssonOldStuff.mdwn @@ -0,0 +1,32 @@ +## <a name="OSKit_Mach_Troubles"> </a> OSKit-Mach Troubles + +* Building OSKit & Mach and optimizations, context SMP: <http://lists.debian.org/debian-hurd/2002/debian-hurd-200203/msg00080.html> +* OSKit \_\_libc\_multiple\_libcs: <ftp://flux.cs.utah.edu/flux/oskit/mail/html/oskit-users/msg01052.html> +* Enabling OSKit drivers in Mach: <http://lists.debian.org/debian-hurd/2000/debian-hurd-200003/msg00265.html> +* IDE Bios probe trap on page zero problem: <http://mail.gnu.org/pipermail/bug-hurd/2001-July/004714.html> + +* Neal announces oskit-mach binary: <http://lists.debian.org/debian-hurd/2000/debian-hurd-200009/msg00323.html> +* Neal crashes with OSKit 200009 on 0x104: <http://mail.gnu.org/pipermail/bug-hurd/2000-September/000055.html> +* Igor crashes on 0x104: <http://mail.gnu.org/pipermail/bug-hurd/2001-July/004714.html> + +Mach docs + +* wget -m -np <ftp://ftp.inf.tu-dresden.de/pub/os/mach/> (nearly 250M) +* wget -m -np <ftp://ftp.lip6.fr/pub/mach/> (nearly 2G (e.g. includes oskit)) +* wget -m -np <ftp://ftp.opengroup.org/pub/ri/os/> (About 20-30M) +* <ftp://ftp.ftp.lip6.fr/pub/mach/cmu/doc/osf/> + +# <a name="Links"> Links </a> + +Misc. links for my pleasure only. + +* [Savannah - GNU CVS](http://savannah.gnu.org) +* [Gnu/Hurd](http://hurd.gnu.org) +* [OSKit-mach docs](http://www.etherhogz.org/doc/) +* "Building OSKit-Mach" the document: <http://mail.gnu.org/pipermail/bug-hurd/2001-September/005266.html> +* [Walken Hurd hackers guide](http://www.via.ecp.fr/~walken/hurd/) [(mirror)](http://vmlinux.org/crash/mirror/www.via.ecp.fr/) +* [CMU CS Mach pages](http://www.cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/www/mach.html) +* [Univ. of Utah's Mach 4](http://www.cs.utah.edu/projects/flux/mach4/html/) +* OSKit [HTML](http://www.cs.utah.edu/flux/oskit/html/oskit-www.html) or [PS.GZ](http://vmlinux.org/joachim/hurd/oskit.ps.gz) manual. + +-- [[Main/JoachimNilsson]] - 31 Oct 2002 diff --git a/unsorted/NewMachHistory.mdwn b/unsorted/NewMachHistory.mdwn new file mode 100644 index 00000000..562d1cac --- /dev/null +++ b/unsorted/NewMachHistory.mdwn @@ -0,0 +1,27 @@ +# <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +# <a name="Early_beginnings"> Early beginnings </a> + +GNUMach is based on Mach4 from University of Utah, which in turn is based on Mach3 from Carnegie-Mellon University. The last release of Mach4 was the [UK22 release](http://www.cs.utah.edu/flux/mach4-i386/html/mach4-UK22.html). + +The oskit-mach version of GNU Mach was presented in November 1999 by Roland McGrath. <http://mail.gnu.org/pipermail/bug-hurd/1999-November/003554.html> The purpose of the port was to get better hardware support through new drivers and platform code available in the OSKit. + +On May 27 2002, after the Gnumach 1.3 release, Roland McGrath merged OSKit-Mach onto the HEAD of CVS making it the Gnumach 2.x mainline. + +# <a name="Status_of_the_project"> Status of the project </a> + +GNU Mach 1.3 was released in May 2002, and features advanced boot script support, support for large disks (>= 10GB) and an improved console. + +GNU Mach is used as the default microkernel in the GNU/Hurd system. It is compatible with other popular Mach distributions. The device drivers for block devices and network cards are taken from Linux 2.0.x kernel versions, and so a broad range of common hardware is supported. + +However, the Linux device drivers have been improved greatly since the 2.0.x version, and a new version of GNU Mach based on the OSKit library is being worked on, which uses newer drivers and in general has cleaner machine specific support code. + +---- + +Copyright (C) 2001 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA + +Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. + +-- [[Main/JoachimNilsson]] - 24 Oct 2002 diff --git a/unsorted/OskitMachTest.mdwn b/unsorted/OskitMachTest.mdwn new file mode 100644 index 00000000..24cf9b6f --- /dev/null +++ b/unsorted/OskitMachTest.mdwn @@ -0,0 +1,24 @@ +# <a name="Proposal_to_change_configure_scr"> </a> Proposal to change configure script for GNUmach 2.0 + +Here are my proposed changes to the GNU Mach 2.0 configure script, configure.in. + +## <a name="_with_oskit_"> --with-oskit\* </a> + +The first one is basically what Daniel Wagner once suggested. A way for builders to better provide the path of the OSKit, e.g., `--with-oskit=/my/bisarre/path`. + +This patch also contains a minor "fix": detect presence of the OSKit before trying to check for a correct version number of the same. It also updates the required version number to be, at the very least, the 2001 release. This because we need the softirq changes introduced therein. + +With the patch a configure line like below is entirely possible on a Debian system with the i386-gnu-mig deb package installed. + + crash@isengard:~/Projects/build/oskit-mach$ ../../oskit-mach/configure --host=i386-gnu \ + --prefix=/usr/hurd --with-oskit=/usr/hurd + +## <a name="Drivers_move_Makefile_gt_configu"> Drivers move Makefile ==> configure </a> + +The second patch set, currently worked on, is to move the requested drivers from the Makefile to the configure script in the form of `--enable-freebsd-DRIVER` and `--enable-linux-DRIVER`. + +This will remove the current `make kernel-ide-ethernet_tulip` combo and introduce a more common `make kernel` scheme. + +-- [[Main/JoachimNilsson]] - 21 Jun 2003 + +* [[ATTACHURLgnumach2-configure-patch1diff]]: Adds --with-oskit and "fixes" a bug. diff --git a/unsorted/OskitMachTest/gnumach2-configure-patch1.diff b/unsorted/OskitMachTest/gnumach2-configure-patch1.diff new file mode 100644 index 00000000..cb8472ad --- /dev/null +++ b/unsorted/OskitMachTest/gnumach2-configure-patch1.diff @@ -0,0 +1,79 @@ +Index: configure.in +=================================================================== +RCS file: /cvsroot/hurd/gnumach/configure.in,v +retrieving revision 1.17 +diff -u -r1.17 configure.in +--- configure.in 6 Mar 2003 03:57:01 -0000 1.17 ++++ configure.in 21 Jun 2003 17:04:36 -0000 +@@ -61,6 +61,34 @@ + [test "x$enableval" = xno || + AC_DEFINE(FPE, 1, [Enable software FPU emulator for machines with no FPU.])]) + ++# Sometimes people don't use traditional places to put the OSKit in. ++# To still be nice we give these people a way of telling us where ++# they have put it. ++AC_ARG_WITH(oskit-includes, ++[ --with-oskit-includes Specify location of oskit headers],[ ++CFLAGS="$CFLAGS -I$withval" ++CPPFLAGS="$CPPFLAGS -I$withval" ++ASFLGAS="$ASFLAGS -I$withval" ++]) ++ ++# These two will overwrite any previous setting of OSKIT_LIBDIR, ++# but since the user has told us to do so we obey. ++AC_ARG_WITH(oskit-libs, ++[ --with-oskit-libs Specify location of oskit libs],[ ++LDFLAGS="$LDFLAGS -L$withval" ++OSKIT_LIBDIR="$withval/oskit" ++]) ++ ++AC_ARG_WITH(oskit, ++[ --with-oskit Specify prefix for oskit files],[ ++CFLAGS="$CFLAGS -I$withval/include" ++CPPFLAGS="$CPPFLAGS -I$withval/include" ++ASFLAGS="$ASFLAGS -I$withval/include" ++LDFLAGS="$LDFALGS -I$withval/lib" ++OSKIT_LIBDIR="$withval/lib/oskit" ++]) ++AC_SUBST(ASFLAGS) ++ + # + # Programs + # +@@ -76,8 +104,20 @@ + + AC_CHECK_PROG(MBCHK, mbchk, mbchk, :) + ++# Check for Flux Group's OSKit ++# If not in standard paths to CC the user needs to ++# supply a --with-oskit* or we need to evaluate the ++# OSKIT_LIBDIR variable *before* we check for the ++# correct version below. ++AC_CHECK_HEADERS(oskit/version.h,, ++ [AC_MSG_ERROR([cannot find oskit/version.h, where are the OSKit includes?])]) ++ + # Check oskit version. +-NEEDED_OSKIT_VERSION=19991121 ++# 19991121 was the old version we relied on, but since ++# the addition of softirqs to both the OSKit, in version ++# 20010214, and handling therof by Daniel Wagner in ++# GNU Mach, we now rely on 20010214. ++NEEDED_OSKIT_VERSION=20010214 + AC_REQUIRE_CPP() + AC_MSG_CHECKING([for oskit version >= ${NEEDED_OSKIT_VERSION}]) + AC_CACHE_VAL(gnumach_cv_oskit_version_${NEEDED_OSKIT_VERSION}, [ +Index: Makefile.in +=================================================================== +RCS file: /cvsroot/hurd/gnumach/Makefile.in,v +retrieving revision 1.38 +diff -u -r1.38 Makefile.in +--- Makefile.in 6 Mar 2003 04:06:25 -0000 1.38 ++++ Makefile.in 21 Jun 2003 17:04:36 -0000 +@@ -47,6 +47,7 @@ + + CFLAGS = @CFLAGS@ + LDFLAGS = @LDFLAGS@ ++ASFLAGS = @ASFLAGS@ + SMP_LIBS = @SMP_LIBS@ + + all: diff --git a/unsorted/PortingIssues.mdwn b/unsorted/PortingIssues.mdwn new file mode 100644 index 00000000..ff63bda3 --- /dev/null +++ b/unsorted/PortingIssues.mdwn @@ -0,0 +1,270 @@ +## <a name="Table_of_Contents"> Table of Contents </a> + +%TOC% + +## <a name="Overview"> Overview </a> + +This is a recompilation of common porting problems and their solutions. Information is gathered from the following sources: + +* [Debian GNU/Hurd port guidelines](http://www.debian.org/ports/hurd/hurd-devel-debian) + +* [James Morrison's GNU/Hurd pages](http://hurd.dyndns.org/) + +as well as other misc. sources. + +First of all, see [[BtsFiling]] if you need instructions on manipulating [Debian](http://www.debian.org/) source packages and submitting patches to their [Bug Tracking System](http://bugs.debian.org/). + +## <a name="System_API_limitations"> </a> System API limitations + +Sometimes building or running a program will fail due to bugs in the system API implementation (in Glibc and the Hurd). Make sure you check this list and know them before porting, otherwise you'll end up debugging something just to find out its an already known bug. + +We maintain a separate Wiki page for information on these bugs, see [[Distrib/SystemAPILimits]] + +If you think you can fix any of them and send a patch to the debian BTS, that'd be much appreciated. You may ask in <bug-hurd@gnuNOSPAM.org> for details or questions on the bug. + +## <a name="Undefined_bits_confname_h_tt_mac"> Undefined `bits/confname.h` macros (`PIPE_BUF`, ...) </a> + +If macro `XXX` is undefined, but macro `_SC_XXX` or `_PC_XXX` is defined in `bits/confname.h`, you probably need to use `sysconf`, `pathconf` or `fpathconf` to obtain it dynamicaly. + +The following macros have been found in this offending situation (add more if you find them): `PIPE_BUF` + +An example with `sysconf`: (when you find a `sysconf` offending macro, put a better example) + + #ifndef XXX + #define XXX sysconf(_SC_XXX) + #endif + /* offending code using XXX follows */ + +An example with `fpathconf`: + + #ifdef PIPE_BUF + read(fd, buff, PIPE_BUF - 1); + #else + read(fd, buff, fpathconf(fd, _PC_PIPE_BUF) - 1); + #endif + /* note we can't #define PIPE_BUF, because it depends + on the "fd" variable */ + +## <a name="Bad_File_Descriptor"> Bad File Descriptor </a> + +If you get Bad File Descriptor error when trying to read from a file (or accessing it at all), check the `open()` invocation. The second argument is the access method. If it is a hard coded number instead of a symbol defined in the standard header files, the code is screwed and should be fixed to either use `O_RDONLY`, `O_WRONLY` or `O_RDWR`. This bug was observed in the `fortunes` and `mtools` packages for example. + +## <a name="PATH_MAX_tt_MAX_PATH_tt_MAXPATHL"> `PATH_MAX` / `MAX_PATH` / `MAXPATHLEN` </a> + +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. + +## <a name="ARG_MAX"> `ARG_MAX` </a> + +Same as `PATH_MAX`. There is no limit on the number of arguments. + +## <a name="IOV_MAX"> `IOV_MAX` </a> + +Same as `PATH_MAX`. There is no limit on the number of iovec items. + +## <a name="MAXHOSTNAMELEN_tt_"> `MAXHOSTNAMELEN` </a> + +Same as `PATH_MAX`. When you find a `gethostname()` function, which acts on a static buffer, you can replace it with Neal's [xgethostname function](http://ftp.walfield.org/pub/people/neal/xgethostname/) which returns the hostname as a dynamic buffer. For example: + +Buggy code: + + char localhost[MAXHOSTNAMELEN]; + ... + gethostname(localhost, sizeof(localhost)); + +Fixed code: + + #include "xgethostname.h" + ... + char *localhost; + ... + localhost = xgethostname(); + if (! localhost) + { + perror ("xgethostname"); + return ERROR; + } + ... + /* use LOCALHOST. */ + free (localhost); + +## <a name="NOFILE_tt_"> `NOFILE` </a> + +Replace with `getrlimit(RLIMIT_NOFILE,...)` + +## <a name="GNU_specific_define_tt_"> </a> GNU specific `#define` + +If you need to include specific code for GNU/Hurd using `#if` ... `#endif`, then you can use the `__GNU__` symbol to do so. But think (at least) thrice! before doing so. In most situations, this is completely unnecessary and will create more problems than it may solve. Better ask on the mailing list how to do it right if you can't think of a better solution. + +## <a name="sys_errlist_tt_vs_strerror_tt_"> `sys_errlist[]` vs. `strerror()` </a> + +If a program has only support for `sys_errlist[]` you will have to do some work to make it compile on GNU, which has dropped support for it and does only provide `strerror()`. Steinar Hamre writes about `strerror()`: + +`strerror()` should be used because: + +* It is the modern, POSIX way. +* It is localized. +* It handles invalid signals/numbers out of range. (better errorhandling and not a buffer-overflow-candidate/security risk) + +`strerror()` should always be used if it is available. Unfortunaly there are still some old non-POSIX systems that do not have `strerror()`, only `sys_errlist[]`. + +Today, only supporting `strerror()` is far better than only supporting `sys_errlist[]`. The best (from a portability viewpoint), however is supporting both. For configure.in, you will need: + + AC_CHECK_FUNCS(strerror) + +To `config.h.in`, you need to add: + + #undef HAVE_STRERROR + +Then something like: + + #ifndef HAVE_STRERROR + static char * + private_strerror (errnum) + int errnum; + { + extern char *sys_errlist[]; + extern int sys_nerr; + + if (errnum > 0 && errnum <= sys_nerr) + return sys_errlist[errnum]; + + return "Unknown system error"; + } + #define strerror private_strerror + #endif /* HAVE_STRERROR */ + +You can for example look in the latest coreutils (the above is a simplified version of what I found there.) Patches should of course be sent to upstream maintainers, this is very useful even for systems with a working `sys_errlist[]`. + +Of course, if you don't care about broken systems (like MS-DOG) not supporting `strerror()` you can just replace `sys_errlist[]` directly (upstream might not accept your patch, but debian should have no problem) + +## <a name="C++_error_t"> C++, `error_t` and `E*` </a> + +On the Hurd, `error_t` is an enumeration of the `E*` constants. However, C++ +does not like `E*` integer macros being directly assigned to that enumeration. In short, replace + + error_t err = EINTR; + +by + + error_t err = error_t(EINTR); + +## <a name="Filenames_ending_in_a_slash_"> Filenames ending in a slash \`/' </a> + +Those are evil if they don't exist and you want to name a directory this way. For example, `mkdir foobar/` will not work on GNU. This is POSIX compatible. POSIX says that the path of a directory may have slashes appended to it. But the directory does not exist yet, so the path does not refer to a directory, and hence trailing slashes are not guaranteed to work. Just drop the slashes, and you're fine. + +## <a name="Missing_termio_h_tt_"> Missing `termio.h` </a> + +Change it to use `termios.h` (check for it properly with autoconf `HAVE_TERMIOS_H` or the `__GLIBC__` macro) + +Also, change calls to `ioctl(fd, TCGETS, ...)` and `ioctl(fd, TCSETS, ...)` with `tcgetattr(fd, ...)` and `tcsetattr(fd, ...)`. + +## <a name="AC_HEADER_TERMIO_tt_"> `AC_HEADER_TERMIO` </a> + +The autoconf check for `AC_HEADER_TERMIO` tryes to check for termios, but it's only really checking for termio in `termios.h`. It is better to use `AC_CHECK_HEADERS(termio.h termios.h)` + +## <a name="_IOT"> missing `_IOT` </a> + +This comes from ioctls. Fixing this is easy if the structure members can be expressed by using the _IOT() macro, else it's simply impossible... See `bits/termios.h` for an instance: + +`#define _IOT_termios /* Hurd ioctl type field. */ \ + _IOT (_IOTS (tcflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)` + +because `struct termios` holds 4 members of type `tcflag_ts`, then `NCCS` +members of type `cc_tsi` and finaly 2 members of type `speed_ts`. + +As you can see, this limits the number of kinds of members to 3, and in +addition to that (see the bitfield described in `ioctls.h`), the third +kind of member is limited to 3 members. However, since at the API +compatibility layer you are generally allowed to reorder fields in +structures, you can usually manage to fit into these limits. + +Note: if a field member is a pointer, then the ioctl can't be expressed +this way, and that makes sense, since the server you're talking to +doesn't have direct access to your memory. Ways other than ioctls must +then be found. + +## <a name="SA_SIGINFO"> `SA_SIGINFO` </a> + +Not implemented, packages may be fixed for working around this: use void sighandler(int num) prototype and sa_handler field. + +## <a name="SOL_IP"> `SOL_IP` </a> + +Not implemented yet. + +## <a name="HZ"> `HZ` </a> + +Linuxish and doesn't even make sense since the value may vary according to the running kernel. Should use `sysconf(_SC_CLK_TCK)` or `CLK_TCK` instead. + +## <a name="SIOCDEVPRIVATE"> `SIOCDEVPRIVATE` </a> + +Oh, we should probably provide it. + +## <a name="MAP_NORESERVE"> `MAP_NORESERVE` </a> + +Not POSIX, but we could implement it. + +## <a name="O_DIRECT"> `O_DIRECT` </a> + +Long story to implement. + +## <a name="PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP"> `PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP` </a> + +We could easily provide it; + +## <a name="PTHREAD_STACK_MIN"> `PTHREAD_STACK_MIN` </a> + +We should actually provide it. + +## <a name="types"> `linux/types.h` or `asm/types.h` </a> + +These are not POSIX, `sys/types.h` and `stdint.h` should be used instead. + +## <a name="iopl"> `iopl` </a> + +Not supported. Try to replace with `ioperm(0, 65536, 1)` (conditionned with `__GNU__` as that will not work in Linux). + +## <a name="iopl"> `semget`, `sem_open` </a> + +Not implemented, will always fail. Use `sem_init()` instead if possible. + +## <a name="net/..."> `net/if_arp.h`, `net/ethernet.h`, etc. </a> + +Not implemented, not POSIX. Try to disable the feature in the package. + +## <a name="broken_libc6_dependency"> broken libc6 dependency </a> + +Some packages use an erroneous dependency on `libc6-dev`. This is incorrect because `libc6` is specific to GNU/Linux. The corresponding package for GNU is `libc0.3-dev` but other OSes will have different ones. You can locate the problem in the `debian/control` file of the source tree. Typical solutions include detecting the OS using `dpkg-architecture` and hardcoding the soname, or better, use a logical OR. eg: `libc6-dev | libc0.3-dev | libc-dev`. The `libc-dev` is a virtual package that works for any soname but you have to put it only as the last option. + +---- + +## <a name="ChangeLog"> ChangeLog </a> + +-- [[Main/TWikiGuest]] - 13 Jan 2005 + +Fix xgethostname example. - Neal + +-- [[Main/RobertMillan]] - 22 Jul 2002 + +Formatting and minor grammatical fixes. + +-- [[Main/JoachimNilsson]] - 09 Sep 2002 + +Added more examples and misc semantical fixes. + +-- [[Main/RobertMillan]] - 05 Oct 2002 + +Added `xgethostname` example. + +-- [[Main/RobertMillan]] - 15 Nov 2002 + +Added broken libc6 dependency + +-- [[Main/RobertMillan]] - 21 Nov 2002 + +Text formatting. + +-- Ognyan Kulev - 12 Mar 2003 + +Added `ioctl` entry. + +-- [[Main/RobertMillan]] - 19 Mar 2003 diff --git a/unsorted/SavannahProjects.mdwn b/unsorted/SavannahProjects.mdwn new file mode 100644 index 00000000..3024ed64 --- /dev/null +++ b/unsorted/SavannahProjects.mdwn @@ -0,0 +1,13 @@ +[Savannah](http://savannah.gnu.org) was created with a forked version of the software that runs the [SourceForge](http://www.sf.net) site. It is the official [GNU project](http://www.gnu.org/gnu/thegnuproject.html) hosting facility of the [FSF](http://www.fsf.org). Many GNU projects are migrating to use it. Here is a list of projects hosted on Savannah related to the Hurd. + +* [Hurd](http://savannah.gnu.org/projects/hurd) - main project CVS repository +* [HurdExtras](http://savannah.gnu.org/projects/hurdextras) - related projects +* [wwwHurd](http://savannah.gnu.org/projects/wwwhurd) - webmasters for <http://hurd.gnu.org> +* [L4Hurd](http://savannah.gnu.org/projects/l4hurd) - OSkit/L4 unofficial porting project +* [pthreads](http://savannah.gnu.org/projects/pthreads) - porting of thread library for glibc +* [hurd-iso](http://savannah.gnu.org/projects/hurd-iso) - CD-ROM images +* [gnumach-alpha](http://savannah.gnu.org/projects/gnumach-alpha) - port for Alpha processor machines +* [[Hurd/THUG]] - Toronto Area GNU/Hurd User Group and their [documentation page](http://www.freesoftware.fsf.org/thug/docs.html) +* [francine](http://savannah.gnu.org/projects/francine) - "secure, colourful and themeable login program" + +-- [[Main/GrantBow]] - 13 May 2002 diff --git a/unsorted/SecurityForUser.mdwn b/unsorted/SecurityForUser.mdwn new file mode 100644 index 00000000..739cc1ca --- /dev/null +++ b/unsorted/SecurityForUser.mdwn @@ -0,0 +1,7 @@ +FROM: <http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00242.html> + +The user must be sure that his actions have predictable consequences, even in the presence of actively hostile influence. If there is a component in the system that the user can not control, the user must be able to contain its impact, either by simply ignoring it (shielding), or by imposing restrictions (confinement). + +_Security means that the user controls what can happen **to** his resources._ + +-- [[TomBachmann]] - 29 Apr 2006 diff --git a/unsorted/SystemAPILimits.mdwn b/unsorted/SystemAPILimits.mdwn new file mode 100644 index 00000000..8930ef9c --- /dev/null +++ b/unsorted/SystemAPILimits.mdwn @@ -0,0 +1,30 @@ +## <a name="API_Limitations_of_the_GNU_syste"> </a> API Limitations of the GNU system + +---- + +Sometimes building or running a program will fail due to bugs in the system API implementation (in Glibc and the Hurd). Make sure you check this list and know them before porting, otherwise you'll end up debugging something just to find out its an already known bug. + +Taken from the bug lists in debian BTS. If you find more of them (and it is clear in the bug log that it is a bug), please add them to the list below. See: + +* <http://bugs.debian.org/hurd> ([source](http://packages.qa.debian.org/h/hurd.html) and [binary](http://packages.debian.org/hurd) debs not synchronized) +* <http://bugs.debian.org/hurd-dev> ([binary](http://packages.debian.org/hurd-dev)) +* <http://bugs.debian.org/libc0.3> ([source](http://packages.qa.debian.org/g/glibc.html) & [binary](http://packages.debian.org/libc0.3) debs) +* <http://bugs.debian.org/libc0.3-dev> ([binary](http://packages.debian.org/libc0.3-dev)) + +---- + +These are the known system API limits that have porting implications. + +**_[\#47998](http://bugs.debian.org/47998): `msgget` IPC not implemented_** + +**_[\#184565](http://bugs.debian.org/184565): libc0.3: missing shm\* functions (from `<sys/shm.h>`)_**<br />**breaks:** cdrtools<br />**error:** warning: shm\* is not implemented and will always fail + +**_[\#190581](http://bugs.debian.org/190581): nice() doesn't work_**<br />**breaks:** coreutils<br />**error:** `nice()` doesn't take effect on some situations + +**_[\#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 + +-- [[Main/RobertMillan]] - 01 May 2003 + +Text formatting.<br /> -- [[Main/OgnyanKulev]] - 02 May 2003 diff --git a/unsorted/TestSuites.mdwn b/unsorted/TestSuites.mdwn new file mode 100644 index 00000000..e268ba8d --- /dev/null +++ b/unsorted/TestSuites.mdwn @@ -0,0 +1,12 @@ +Test suites exist to validate the compliance of software implementations with specific standards. This page is to act as a repository for information about the standards themselves, the test suites that validate software that complies with the standards as well as results & feedback from people who have run these suites. + +* IEEE [Posix](http://standards.ieee.org/regauth/posix/index.html) ([Open POSIX Test Suite](http://posixtest.sourceforge.net/)) +* Free Standards Group Linux Standard Base ([LSB](http://www.linuxbase.org/)) +* File Hierarchy Standard ([FHS](http://www.pathname.com/fhs/)) +* [X Desktop Group](http://www.freedesktop.org) +* The Open Group [Single UNIX specification, version 3](http://www.unix-systems.org/version3/online.html) +* The Open Group [ Unix 98](http://www.opengroup.org/public/prods/xxm0.htm) +* The Open Group [Testing Services](http://www.opengroup.org/consortia_services/testing.htm) (with [downloads](http://www.opengroup.org/testing/downloads.html)) +* [Perl](http://www.perl.org) + +-- [[Main/NagromNamreh]] - 24 Jan 2004 Added Posix test suite results diff --git a/unsorted/TestWebMenu/lmf09_1999.jpg b/unsorted/TestWebMenu/lmf09_1999.jpg Binary files differnew file mode 100644 index 00000000..85332658 --- /dev/null +++ b/unsorted/TestWebMenu/lmf09_1999.jpg diff --git a/unsorted/VmWare.mdwn b/unsorted/VmWare.mdwn new file mode 100644 index 00000000..6f4c3cba --- /dev/null +++ b/unsorted/VmWare.mdwn @@ -0,0 +1,22 @@ +## <a name="Why_not_vmware_"> Why not vmware? </a> + +**_Q:_** GNU won't work in [[VmWare]], it hangs when reaching the Hurd bootstrap. + +**_A:_** Note that Vmware is not supported software to run the Hurd on it. Reasons include: + +1. Vmware is not [free software](http://www.gnu.org/philosophy/free-sw.html), which is against our philosophy. +2. Obtaining a licensed copy to debug it costs (at least) $300. (However, the player is "free" as in beer. This doesn't lessen the other concerns, however). +3. Vmware's sources and specification are not publicly available, which makes debugging tasks really painful. +4. GNU is not in [Vmware's official supported operating systems page](http://www.vmware.com/support/ws3/doc/ws32_guestos2.html#1034043). + +We recommend to use [free](http://www.gnu.org/philosophy/free-sw.html) alternatives, like the [[BochsEmulator]]. Also check QEMU: [[HurdOnQEMU]]. + +-- [[Main/RobertMillan]] - 23 Jul 2002 + +I have been able to install Debian/Hurd K2 on [[VmWare]] ... + +* [[VmWare]] 3.02 complains a lot about a missing **console** and shows a lot of errors + * They can be solved by manually creating the devices +* I have tried **Bochs 2.0**, Debian/Hurd K2 installs with no problems at all. +* [[VmWare]] 4.0.0 works fine ... just follow the Hurd install instructions.-- [[TWiki/AndreaSterbini]] - 22 Apr 2003 +* Here using "free" (as in beer) vmware-player 1.0.2.29634 on Gentoo. Hurd K14 installs and runs smoothly, but seems to hang on shutdown. -- [[Main/DeviceRandom]] - 20 Jan 2007 diff --git a/user/arnuld.mdwn b/user/arnuld.mdwn new file mode 100644 index 00000000..1f913a2b --- /dev/null +++ b/user/arnuld.mdwn @@ -0,0 +1,34 @@ +# arnuld @ Hurd-Wiki + +## General + +* Name: arnuld uttre +* Email: arnuld (at) ippimail (dot) com +* Country: India +* Homepage: <http://www.lispmachine.wordpress.com> + + + +## Education + +* B.Sc. (with Comp. App) - Panjab Univeristy, Chandigarh + + + +## Professional + +* I was a Salesman (sold Financial Products) for 2 years + + + +## Future Plans + +* I am learning skills to get myself into Central-Cabinet of Government of India. India is the 2nd + biggest developing economy and hence lots of Software companies will grow here. RMS is working + hard in this field to spread free software but he dealing with effects rather than the cause. He + is not the one who decides what the software policy of some company will be, only Government can + create rules and regulations and push the methods of creating software and for that one needs to be + in a pretty much higher position in politics. I will go there and do it. + +* Yes, I want to learn Jeet-Kuan-Do. I love it as much as I love the copyleft but only one thing can + happen: I will be either in politics or a Martial-Arts expert. diff --git a/user/samuelthibault.mdwn b/user/samuelthibault.mdwn new file mode 100644 index 00000000..b0eab46d --- /dev/null +++ b/user/samuelthibault.mdwn @@ -0,0 +1,3 @@ +* Name: Samuel Thibault +* Email: <samuel.thibault@ens-lyon.org> +* Country: France diff --git a/user/stesie.mdwn b/user/stesie.mdwn new file mode 100644 index 00000000..7bed0ed5 --- /dev/null +++ b/user/stesie.mdwn @@ -0,0 +1,4 @@ +* Name: Stefan Siegl +* Email: <stesie@brokenpipe.de> +* Country: Germany +* Homepage: <http://www.brokenpipe.de/>
\ No newline at end of file diff --git a/user/tschwinge.mdwn b/user/tschwinge.mdwn new file mode 100644 index 00000000..b72f26f5 --- /dev/null +++ b/user/tschwinge.mdwn @@ -0,0 +1,17 @@ +[[meta copyright="Copyright © 2008 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="Thomas Schwinge"]] + +<tschwinge@gnu.org> + +Germany + +<http://www.thomas.schwinge.homeip.net/> diff --git a/user/vincentvikram.mdwn b/user/vincentvikram.mdwn new file mode 100644 index 00000000..847325e2 --- /dev/null +++ b/user/vincentvikram.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +* Name: Vikram Vincent +* Email: vincentvikram@swatantra.org OR vincentvikram@gmail.com +* Country: India +* Web resource: <http://www.swatantra.org> diff --git a/virtualization.mdwn b/virtualization.mdwn new file mode 100644 index 00000000..88f95328 --- /dev/null +++ b/virtualization.mdwn @@ -0,0 +1,18 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# External + + * Wikipedia page about [[wikipedia Virtualization]]. + + +# See Also + + * [[Emulation]]. diff --git a/wiki_colophon.mdwn b/wiki_colophon.mdwn new file mode 100644 index 00000000..a479599a --- /dev/null +++ b/wiki_colophon.mdwn @@ -0,0 +1,32 @@ +Just like a book, this topic is designed to help describe the tools used to +create this website and what methods were used to give it it's look and feel. + + +# Rev. I + +We used a particular implementation (or clone) of Wiki software called +[TWiki](http://twiki.org). + +A generic [WikiWikiWeb](http://www.c2.com/cgi/wiki?WelcomeVisitors), or simply +Wiki, is _"a collaborative forum where people can share ideas and record any +consensus reached on difficult issues, along with rebuttal. It changes as +people come and go, as experience develops, and as opinions change." The TWiki +software is an enhanced descendent of the original WikiWikiWeb_. + +We used the [GNU Skin](http://twiki.org/cgi-bin/view/Plugins/GnuSkin) created +by our own Joachim Nilsson. + +This site began in May, 2002 as one TWiki web: *Hurd*. This WebHome page was +used as the front page of the whole site. We grew this site and added more +TWiki webs by December, 2002. Due to the success of the site we had to act +with respect to more completely addressing copyright issues. More people +started adding content. + + +--- + +# Rev. II + +On 2007-08-12 [[Thomas_Schwinge|tschwinge]] finished the conversion of the +TWiki content to [ikiwiki](http://ikiwiki.info). Read +[[about_the_twiki_to_ikiwiki_conversion]]. |