Hello! > Nobody works on a GRUB installer, so I've written it. This version > is completely untested. Be careful. Oh, yes! Just for the beginning: * stage2/Makefile.am: Don't include files pre_stage2 and start in the distribution * util/Makefile.am: Typo fix: sbin_SCRIPS renamed to sbin_SCRIPTS * util/grub-install.in: Typo fix: grub_dir -> grubdir "test" was missing after "if" Check that $grub_shell exists before doing anything dangerous grub-install still doesn't work. I don't want what is supposed to be passed as the argument, so I cannot fix it. For example: ------------ # ./grub-install hd GRUB version 0.5.94 (640K lower / 4096K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename. ESC at any time exits. ] grub> root /dev/hda Error: Device string unrecognizable grub> setup /dev/hda /dev/hdc /dev/hdd Error: Device string unrecognizable grub> quit ------------ Also the following checks could be useful: 1) Check that grub-install is run by root 2) Check that stage1, stage2 and *stage1_5 are installed 3) Check that "rm" and "cp" succeed. By the way, I think that GRUB shell should classify messages in three categories: 1) Error messages - send to stderr 2) Transcript of commands - send to stdout 3) Messages for interactive users - send to stdout unless --batch is used That "Minimal BASH-like line editing"... makes no sence here. Also I think that --batch should get an optional argument - file name for the input. Redirections are good for well debugged scripts, but not for root, whose errors may cost too much. Pavel Roskin
--- stage2/Makefile.am Mon Nov 8 13:41:20 1999 +++ stage2/Makefile.am Thu Nov 18 22:25:25 1999 @@ -24,7 +24,7 @@ nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \ minix_stage1_5 CLEANFILES = $(nodist_pkgdata_DATA) -noinst_DATA = pre_stage2 start +nodist_noinst_DATA = pre_stage2 start noinst_PROGRAMS = pre_stage2.exec start.exec \ e2fs_stage1_5.exec fat_stage1_5.exec \ ffs_stage1_5.exec minix_stage1_5.exec --- util/Makefile.am Thu Nov 18 20:48:42 1999 +++ util/Makefile.am Thu Nov 18 21:36:23 1999 @@ -1,5 +1,5 @@ bin_PROGRAMS = mbchk -sbin_SCRIPS = grub-install +sbin_SCRIPTS = grub-install # XXX: Need to search for a header file in docs, because of multiboot.h. AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs --- util/grub-install.in Thu Nov 18 01:00:32 1999 +++ util/grub-install.in Thu Nov 18 22:00:25 1999 @@ -32,7 +32,7 @@ grub_shell=${sbindir}/grub bootdir=/boot grubdir=${bootdir}/grub -device_map=${grub_dir}/device.map +device_map=${grubdir}/device.map log_file=/tmp/grub-install.log.$$ install_device= @@ -73,7 +73,7 @@ | sed 's%.*\(/dev/[a-z0-9]*\).*%\1%'` # If not found, print an error message and exit. - if "x$tmp_drive" = x; then + if test "x$tmp_drive" = x; then echo "$1 does not have any corresponding BIOS drive." exit 1 fi @@ -118,6 +118,13 @@ install_device=${option} ;; esac done + +# Test that GRUB is installed +if test ! -f $grub_shell; then + echo "$grub_shell not found" + exit 1 +fi + # Create the GRUB directory if it is not present. if test ! -d $bootdir; then