summaryrefslogtreecommitdiffstats
path: root/rescue
diff options
context:
space:
mode:
Diffstat (limited to 'rescue')
-rw-r--r--rescue/Makefile4
-rw-r--r--rescue/kernel_read_part.c39
-rw-r--r--rescue/tree/boot/grub/menu.lst5
-rwxr-xr-xrescue/tree/etc/oem41
-rwxr-xr-xrescue/tree/etc/rc.sysinit4
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