diff options
Diffstat (limited to 'rescue')
-rw-r--r-- | rescue/Makefile | 4 | ||||
-rw-r--r-- | rescue/kernel_read_part.c | 39 | ||||
-rw-r--r-- | rescue/tree/boot/grub/menu.lst | 5 | ||||
-rwxr-xr-x | rescue/tree/etc/oem | 41 | ||||
-rwxr-xr-x | rescue/tree/etc/rc.sysinit | 4 |
5 files changed, 90 insertions, 3 deletions
diff --git a/rescue/Makefile b/rescue/Makefile index 4edae97bd..ed2d73018 100644 --- a/rescue/Makefile +++ b/rescue/Makefile @@ -3,8 +3,8 @@ ROOTDEST = /export install: rescue_stage2.gz cp -f $< $(ROOTDEST)/Mandrake/base -rescue_stage2.gz: +rescue_stage2.gz: kernel_read_part ./make_rescue_img clean: - rm -f rescue_stage2.gz + rm -f rescue_stage2.gz kernel_read_part diff --git a/rescue/kernel_read_part.c b/rescue/kernel_read_part.c new file mode 100644 index 000000000..4b9d16d65 --- /dev/null +++ b/rescue/kernel_read_part.c @@ -0,0 +1,39 @@ +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <sys/mount.h> +#include <fcntl.h> + + +void die(char *msg) +{ + perror(msg); + exit(1); +} + +void kernel_read(char *dev) +{ + int fd; + + sync(); + if ((fd = open(dev, O_RDONLY)) == -1) die("can't open device"); + sync(); + sleep(1); + ioctl(fd, BLKRRPART, 0); + sync(); + close(fd); + sync(); +} + +int main(int argc, char **argv) +{ + if (argc != 2) { + fprintf(stderr, "usage: kernel_read_part <hard drive device>\n"); + exit(1); + } + kernel_read(argv[1]); +} diff --git a/rescue/tree/boot/grub/menu.lst b/rescue/tree/boot/grub/menu.lst new file mode 100644 index 000000000..372c24902 --- /dev/null +++ b/rescue/tree/boot/grub/menu.lst @@ -0,0 +1,5 @@ +timeout 0 + +title oem +kernel (hd0,0)/boot/vmlinuz ramdisk_size=32000 hd vga=788 flang=fr_FR fclass=normal oem +initrd (hd0,0)/boot/hd.rdz diff --git a/rescue/tree/etc/oem b/rescue/tree/etc/oem new file mode 100755 index 000000000..e95d572e1 --- /dev/null +++ b/rescue/tree/etc/oem @@ -0,0 +1,41 @@ +#!/bin/sh + +[ "$1" = "-f" ] || { echo "Call it with option -f, but don't fear loosing all your data, this command is dangerous!"; exit 1; } + +echo "I'm going to install the oem version on your hard drive" +echo "!!ALL DATA IS GOING TO BE LOST!!" +echo +echo "Press enter to go on" + +read + +cd /proc/ide +for i in hd*; do + grep -q disk $i/media && hd=/dev/$i + grep -q cdrom $i/media && cd=/dev/$i +done + +echo "hd: $hd" +echo "cdrom: $cd" + +mkdir /cdrom ; mount -r -t iso9660 $cd /cdrom + +echo "Installing new partition table and bootloader" +dd if=/etc/part_and_bootloader of=$hd + +echo "Asking kernel to take into account this new partition table" +kernel_read_part $hd + +echo "Formatting (ext2) partition" +mkfs.ext2 ${hd}1 + +echo "Mounting partition" +mkdir /hd ; mount -t ext2 ${hd}1 /hd + +echo "Copying cdrom on hard drive" +cp -a /boot /cdrom/boot /cdrom/Mandrake /hd +rm /hd/Mandrake/mdkinst/usr/bin/runinstall2 + +echo "Done, oem hard drive ready! Press enter to reboot" +read +reboot
\ No newline at end of file diff --git a/rescue/tree/etc/rc.sysinit b/rescue/tree/etc/rc.sysinit index da7e07a8f..4f81e9e57 100755 --- a/rescue/tree/etc/rc.sysinit +++ b/rescue/tree/etc/rc.sysinit @@ -22,8 +22,10 @@ load ide-mod load ide-probe load ide-disk load ide-cd -load isofs load af_packet +load isofs + +grep -q oem /proc/cmdline && exec /etc/oem -f /sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 /sbin/route add 127.0.0.1 lo |