199 |
* Invoking serverboot:: Starting a set of interdependent servers. |
* Invoking serverboot:: Starting a set of interdependent servers. |
200 |
* Boot Scripts:: Describing server bootstrap relationships. |
* Boot Scripts:: Describing server bootstrap relationships. |
201 |
* Recursive Bootstrap:: Running a Hurd under another Hurd. |
* Recursive Bootstrap:: Running a Hurd under another Hurd. |
202 |
|
* Invoking boot:: How to use the boot program. |
203 |
|
|
204 |
Foundations |
Foundations |
205 |
|
|
667 |
@cindex GRUB |
@cindex GRUB |
668 |
@cindex GRand Unified Bootloader |
@cindex GRand Unified Bootloader |
669 |
Currently, @dfn{GRUB}@footnote{The GRand Unified Bootloader, available |
Currently, @dfn{GRUB}@footnote{The GRand Unified Bootloader, available |
670 |
from @uref{http://www.uruk.org/grub/}.} is the preferred GNU bootloader. |
from @uref{http://www.gnu.org/software/grub/}.} is the GNU bootloader. |
671 |
GRUB provides advanced functionality, and is capable of loading several |
GNU GRUB provides advanced functionality, and is capable of loading several |
672 |
different kernels (such as Linux, DOS, and the *BSD family). |
different kernels (such as Linux, DOS, and the *BSD family). |
673 |
|
|
674 |
From the standpoint of the Hurd, the bootloader is just a mechanism to |
From the standpoint of the Hurd, the bootloader is just a mechanism to |
675 |
get the microkernel running and transfer control to @code{serverboot}. |
get the microkernel running and transfer control to the Hurd servers. |
676 |
You will need to refer to your bootloader and microkernel documentation |
You will need to refer to your bootloader and microkernel documentation |
677 |
for more information about the details of this process. |
for more information about the details of this process. |
678 |
|
|
681 |
@section Server Bootstrap |
@section Server Bootstrap |
682 |
@pindex serverboot |
@pindex serverboot |
683 |
|
|
684 |
|
The @code{serverboot} program has been deprecated. Newer kernels |
685 |
|
support processing the bootscript parameters and boot the Hurd |
686 |
|
directly. |
687 |
|
|
688 |
The @code{serverboot} program is responsible for loading and executing |
The @code{serverboot} program is responsible for loading and executing |
689 |
the rest of the Hurd servers. Rather than containing specific |
the rest of the Hurd servers. Rather than containing specific |
690 |
instructions for starting the Hurd, it follows general steps given in a |
instructions for starting the Hurd, it follows general steps given in a |
691 |
user-supplied boot script. |
user-supplied boot script. |
692 |
|
|
693 |
To boot the Hurd, the microkernel must start @code{serverboot} as its |
To boot the Hurd using @code{serverboot}, the microkernel must start |
694 |
|
@code{serverboot} as its |
695 |
first task, and pass it appropriate arguments. @code{serverboot} has a |
first task, and pass it appropriate arguments. @code{serverboot} has a |
696 |
counterpart, called @code{boot}, which can be invoked while the Hurd is |
counterpart, called @code{boot}, which can be invoked while the Hurd is |
697 |
already running, and allows users to start their own complete sub-Hurds |
already running, and allows users to start their own complete sub-Hurds |
701 |
* Invoking serverboot:: Starting a set of interdependent servers. |
* Invoking serverboot:: Starting a set of interdependent servers. |
702 |
* Boot Scripts:: Describing server bootstrap relationships. |
* Boot Scripts:: Describing server bootstrap relationships. |
703 |
* Recursive Bootstrap:: Running a Hurd under another Hurd. |
* Recursive Bootstrap:: Running a Hurd under another Hurd. |
704 |
|
* Invoking boot:: How to use the boot program. |
705 |
@end menu |
@end menu |
706 |
|
|
707 |
|
|
751 |
@pindex /boot/servers.boot |
@pindex /boot/servers.boot |
752 |
@pindex servers.boot |
@pindex servers.boot |
753 |
|
|
754 |
|
Boot Scripts are used to boot further Hurd systems in parallel to the |
755 |
|
first, and are parsed by @code{serverboot} to boot the Hurd. See |
756 |
|
@file{/boot/servers.boot} for an example of a Hurd boot script. |
757 |
|
|
758 |
FIXME: finish |
FIXME: finish |
759 |
|
|
760 |
|
|
821 |
$ @kbd{cd my-root} |
$ @kbd{cd my-root} |
822 |
$ @kbd{tar -zxpf /pub/debian/FIXME/gnu-20000929.tar.gz} |
$ @kbd{tar -zxpf /pub/debian/FIXME/gnu-20000929.tar.gz} |
823 |
$ @kbd{cd ..} |
$ @kbd{cd ..} |
824 |
$ @kbd{fsysopts ./my-root --read-only} |
$ @kbd{fsysopts ./my-root --readonly} |
825 |
$ |
$ |
826 |
@end example |
@end example |
827 |
|
|
835 |
$ @kbd{boot -D ./my-boot ./my-boot/boot/servers.boot ./my-partition} |
$ @kbd{boot -D ./my-boot ./my-boot/boot/servers.boot ./my-partition} |
836 |
[...] |
[...] |
837 |
@end example |
@end example |
838 |
|
|
839 |
|
@item |
840 |
|
Here is an example using a hard drive that already has a GNU/Hurd |
841 |
|
system installed on an ext2 filesystem on @file{/dev/hd2s1}. |
842 |
|
|
843 |
|
@example |
844 |
|
$ @kbd{settrans /mnt /hurd/ex2fs --readonly /dev/hd2s1} |
845 |
|
$ @kbd{boot -d -D /mnt -I /mnt/boot/servers.boot /dev/hd2s1} |
846 |
|
@end example |
847 |
|
|
848 |
|
@item |
849 |
|
See @pxref{boot Options} for help with boot. |
850 |
@end enumerate |
@end enumerate |
851 |
|
|
852 |
Note that it is impossible to share microkernel devices between the two |
Note that it is impossible to share microkernel devices between the two |
868 |
to your old configuration (with the new Hurd servers). |
to your old configuration (with the new Hurd servers). |
869 |
|
|
870 |
|
|
871 |
|
@node Invoking boot |
872 |
|
@section Invoking boot |
873 |
|
@menu |
874 |
|
* boot Options:: Boot program command line options |
875 |
|
@end menu |
876 |
|
|
877 |
|
@node Boot bptions |
878 |
|
@subsection boot Options |
879 |
|
|
880 |
|
Usage: boot [@var{option}@dots{}] @var{boot-script} @var{device}@dots{} |
881 |
|
|
882 |
|
@table @code |
883 |
|
@item --kernel-command-line=@var{command line} |
884 |
|
@itemx -c |
885 |
|
Simulated multiboot command line to supply. |
886 |
|
|
887 |
|
@item --pause |
888 |
|
@itemx -d |
889 |
|
Pause for user confirmation at various times during booting. |
890 |
|
|
891 |
|
@item --boot-root=@var{dir} |
892 |
|
@itemx -D |
893 |
|
Root of a directory tree in which to find the files specified in |
894 |
|
@var{boot-script}. |
895 |
|
|
896 |
|
@item --interleave=@var{blocks} |
897 |
|
Interleave in runs of length @var{blocks}. |
898 |
|
|
899 |
|
@item --isig |
900 |
|
@itemx -I |
901 |
|
Do not disable terminal signals, so you can suspend and interrupt the |
902 |
|
boot program itself, rather than the programs running in the booted |
903 |
|
system. |
904 |
|
|
905 |
|
@item --layer |
906 |
|
@itemx -L |
907 |
|
Layer multiple devices for redundancy. |
908 |
|
|
909 |
|
@item --single-user |
910 |
|
@itemx -s |
911 |
|
Boot into single user mode. |
912 |
|
|
913 |
|
@item --store-type=@var{type} |
914 |
|
@itemx -T |
915 |
|
Each @var{device} names a store of type @var{type}. |
916 |
|
@end table |
917 |
|
|
918 |
|
Mandatory or optional arguments to long options are also mandatory or optional |
919 |
|
for any corresponding short options. |
920 |
|
|
921 |
|
If neither @option{--interleave} or @option{--layer} is specified, multiple |
922 |
|
@var{device}s are concatenated. |
923 |
|
|
924 |
|
|
925 |
@node Shutdown |
@node Shutdown |
926 |
@section Shutdown |
@section Shutdown |
927 |
@scindex halt |
@scindex halt |
2213 |
@end table |
@end table |
2214 |
|
|
2215 |
|
|
|
FIXME: finish |
|
2216 |
@node Invoking showtrans |
@node Invoking showtrans |
2217 |
@subsection Invoking @code{showtrans} |
@subsection Invoking @code{showtrans} |
2218 |
|
|
2219 |
|
The @code{showtrans} program allows you to show the passive translator |
2220 |
|
setting on a file system node. |
2221 |
|
|
2222 |
|
The @code{showtrans} program has the following synopsis: |
2223 |
|
|
2224 |
|
@example |
2225 |
|
showtrans [@var{option}]@dots{} @var{file}@dots{} |
2226 |
|
@end example |
2227 |
|
|
2228 |
|
@code{showtrans} accepts the following options: |
2229 |
|
|
2230 |
|
@table @code |
2231 |
|
@item -p |
2232 |
|
@itemx --prefix |
2233 |
|
Always display @var{filename}: before translators. |
2234 |
|
|
2235 |
|
@item -P |
2236 |
|
@itemx --no-prefix |
2237 |
|
Never display @var{filename}: before translators. |
2238 |
|
@item -s |
2239 |
|
@itemx --silent |
2240 |
|
No output; useful when checking error status. |
2241 |
|
@item -t |
2242 |
|
@itemx --translated |
2243 |
|
Only display files that have translators. |
2244 |
|
@end table |
2245 |
|
|
2246 |
|
|
2247 |
@node Invoking mount |
@node Invoking mount |
2248 |
@subsection Invoking @code{mount} |
@subsection Invoking @code{mount} |
2249 |
|
|
2250 |
|
|
2251 |
@node Invoking fsysopts |
@node Invoking fsysopts |
2252 |
@subsection Invoking @code{fsysopts} |
@subsection Invoking @code{fsysopts} |
2253 |
|
|
2254 |
|
The @code{fsysopts} program allows you to retrieve or set command line |
2255 |
|
options for running translator @var{filesys}. |
2256 |
|
|
2257 |
|
The @code{fsysopts} program has the following synopsis: |
2258 |
|
|
2259 |
|
@example |
2260 |
|
fsysopts [@var{option}@dots{}] @var{filesys} [@var{fs_option}@dots{}] |
2261 |
|
@end example |
2262 |
|
|
2263 |
|
@code{fsysopts} accepts the following options: |
2264 |
|
|
2265 |
|
@table @code |
2266 |
|
|
2267 |
|
@item -L |
2268 |
|
@itemx --dereference |
2269 |
|
If @var{filesys} is a symbolic link, follow it. |
2270 |
|
|
2271 |
|
@item -R |
2272 |
|
@itemx --recursive |
2273 |
|
Pass these options to any child translators. |
2274 |
|
@end table |
2275 |
|
|
2276 |
|
The legal values for @var{fs_option} depends on @var{filesys}, but |
2277 |
|
some common ones are: |
2278 |
|
|
2279 |
|
@table @code |
2280 |
|
@item --readonly |
2281 |
|
@item --writable |
2282 |
|
@item --remount |
2283 |
|
@item --sync[=@var{interval}] |
2284 |
|
@item --nosync |
2285 |
|
@end table |
2286 |
|
|
2287 |
|
If no options are supplied, @var{filesys}' current options are |
2288 |
|
printed. |
2289 |
|
|
2290 |
|
|
2291 |
@node Trivfs Library |
@node Trivfs Library |
2292 |
@section Trivfs Library |
@section Trivfs Library |
2472 |
default definitions in @code{libtrivfs}, so you are not forced to define |
default definitions in @code{libtrivfs}, so you are not forced to define |
2473 |
them; rather, they may be redefined on a case-by-case basis. |
them; rather, they may be redefined on a case-by-case basis. |
2474 |
|
|
2475 |
@deftypevar {extern struct port_class *} trivfs_protid_portclasses[] |
@deftypevar {extern struct port_class *} trivfs_protid_portclasses [] |
2476 |
@deftypevarx {extern int} trivfs_protid_nportclasses |
@deftypevarx {extern int} trivfs_protid_nportclasses |
2477 |
@deftypevarx {extern struct port_class *} trivfs_cntl_portclasses[] |
@deftypevarx {extern struct port_class *} trivfs_cntl_portclasses [] |
2478 |
@deftypevarx {extern int} trivfs_cntl_nportclasses |
@deftypevarx {extern int} trivfs_cntl_nportclasses |
2479 |
If you define these, they should be vectors (and the associated sizes) |
If you define these, they should be vectors (and the associated sizes) |
2480 |
of port classes that will be translated into control and protid pointers |
of port classes that will be translated into control and protid pointers |
2982 |
@node Modifying Directories |
@node Modifying Directories |
2983 |
@subsection Modifying Directories |
@subsection Modifying Directories |
2984 |
|
|
2985 |
FIXME: Creating and deleting nodes |
@deftypefun kern_return_t dir_mkfile (@w{file_t @var{directory}}, @w{int @var{flags}}, @w{mode_t @var{mode}}, @w{mach_port_t *@var{newnode}}) |
2986 |
|
Create a new file in @var{directory} without linking it into the |
2987 |
|
filesystem. You still must have write permission on the specified |
2988 |
|
directory, even though it will not actually be written. |
2989 |
|
|
2990 |
@code{dir_mkfile} |
The function returns a port to the new file in *@var{newnode}. Flags |
2991 |
|
are the same as for @code{dir_lookup}, but @code{O_CREAT} and |
2992 |
|
@code{O_TRUNC} are assumed even if not specified. |
2993 |
|
@end deftypefun |
2994 |
|
|
2995 |
@code{dir_mkdir} |
@deftypefun kern_return_t dir_mkdir (@w{file_t @var{directory}}, @w{char *@var{name}}, @w{mode_t @var{mode}}) |
2996 |
|
Create a new directory named @var{name} in @var{directory} with |
2997 |
|
permission specified by @var{mode}. |
2998 |
|
@end deftypefun |
2999 |
|
|
3000 |
@code{dir_rmdir} |
@deftypefun kern_return_t dir_rmdir (@w{file_t @var{directory}}, @w{char *@var{name}}) |
3001 |
|
Remove the directory named @var{name} from @var{directory}. |
3002 |
|
@end deftypefun |
3003 |
|
|
3004 |
@code{dir_unlink} |
@deftypefun kern_return_t dir_unlink (@w{file_t @var{directory}}, @w{char *@var{name}}) |
3005 |
|
Remove the non-directory node @var{name} from @var{directory}. |
3006 |
|
@end deftypefun |
3007 |
|
|
3008 |
@code{dir_link} |
@deftypefun kern_return_t dir_link (@w{file_t @var{directory}}, @w{file_t @var{file}}, @w{char *@var{name}}, @w{int @var{excl}}) |
3009 |
|
Create a hard link in @var{directory}. If @var{excl} is set and |
3010 |
|
@var{name} already exists in @var{directory}, then this function will |
3011 |
|
fail. If @var{excl} is not set and @var{name} already exists the old |
3012 |
|
file named @var{name} will be unlinked. If @var{directory} and |
3013 |
|
@var{file} are not on the same filesystem, then @code{dir_link} might |
3014 |
|
fail with @code{EXDEV}. |
3015 |
|
@end deftypefun |
3016 |
|
|
3017 |
@code{dir_rename} |
@deftypefun kern_return_t dir_rename (@w{file_t @var{olddirectory}}, @w{char *@var{oldname}}, @w{file_t @var{newdirectory}}, @w{char *@var{newname}}, @w{int @var{excl}}) |
3018 |
|
Move the node @var{oldname} in @var{olddirectory} to the node |
3019 |
|
@var{newname} in @var{newdirectory}. If @var{excl} is set and |
3020 |
|
@var{newname} already exists in @var{newdirectory}, then this function |
3021 |
|
will fail. If @var{excl} is not set and @var{newname} already exists, |
3022 |
|
the old file named @var{newname} will be unlinked. If |
3023 |
|
@var{olddirectory} and @var{newdirectory} are not on the same |
3024 |
|
filesystem, then @code{dir_rename} might fail with @code{EXDEV}. |
3025 |
|
@end deftypefun |
3026 |
|
|
3027 |
@node Notifications |
@node Notifications |
3028 |
@subsection Notifications |
@subsection Notifications |
3308 |
The store library comes with a number of standard store class |
The store library comes with a number of standard store class |
3309 |
implementations: |
implementations: |
3310 |
|
|
3311 |
@deftypevar {extern const struct store_class *const} store_std_classes[] |
@deftypevar {extern const struct store_class *const} store_std_classes [] |
3312 |
This is a null-terminated vector of the standard store classes |
This is a null-terminated vector of the standard store classes |
3313 |
implemented by @code{libstore}. |
implemented by @code{libstore}. |
3314 |
@end deftypevar |
@end deftypevar |