summaryrefslogtreecommitdiff
path: root/package/adkinstall/src/adkinstall
diff options
context:
space:
mode:
Diffstat (limited to 'package/adkinstall/src/adkinstall')
-rw-r--r--package/adkinstall/src/adkinstall155
1 files changed, 127 insertions, 28 deletions
diff --git a/package/adkinstall/src/adkinstall b/package/adkinstall/src/adkinstall
index 7e9a0d1ad..62ab3225a 100644
--- a/package/adkinstall/src/adkinstall
+++ b/package/adkinstall/src/adkinstall
@@ -1,38 +1,140 @@
#!/bin/sh
# installs a rootfs tar archive from OpenADK onto a Compact Flash disk
+check_exit() {
+ if [ $? -ne 0 ];then
+ echo "Installation failed."
+ exit 1
+ fi
+}
+
+rescue=0
+while getopts "r" option
+do
+ case $option in
+ r)
+ rescue=1
+ ;;
+ *)
+ printf "Option not recognized\n"
+ exit 1
+ ;;
+ esac
+done
+shift $(($OPTIND - 1))
+
if [ -z $1 ];then
printf "Please give your root tar archive as parameter\n"
exit 1
fi
-# create empty partition table
+
+if [ $rescue -eq 1 ];then
+ if [ -z $2 ];then
+ printf "Please give your rescue kernel image as second parameter\n"
+ exit 2
+ fi
+ if [ ! -f $2 ];then
+ printf "$2 is not a file, Exiting.\n"
+ exit 1
+ fi
+fi
+
+printf "Creating partitions ...\n"
parted -s /dev/sda mklabel msdos
+check_exit
sleep 2
maxsize=$(env LC_ALL=C parted /dev/sda -s unit cyl print |awk '/^Disk/ { print $3 }'|sed -e 's/cyl//')
rootsize=$(($maxsize-2))
-parted -s /dev/sda unit cyl mkpartfs primary ext2 0 $rootsize
-parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize
-parted -s /dev/sda set 1 boot on
-sfdisk --change-id /dev/sda 2 88 >/dev/null 2>&1
-if [ $? -eq 0 ];then
- printf "Successfully created partition ${rootpart}\n"
-else
- printf "Partition creation failed, Exiting.\n"
- exit 1
+start=0
+rootp=1
+cfgfsp=2
+if [ $rescue -eq 1 ];then
+ rootp=3
+ cfgfsp=4
+ start=2
+ parted -s /dev/sda unit cyl mkpartfs primary ext2 0 1
+ parted -s /dev/sda unit cyl mkpartfs primary ext2 1 2
+ check_exit
fi
-mount -t ext2 /dev/sda1 /mnt
-printf "Extracting install archive\n"
+parted -s /dev/sda unit cyl mkpartfs primary ext2 $start $rootsize
+check_exit
+parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize
+check_exit
+parted -s /dev/sda set $rootp boot on
+check_exit
+sfdisk --change-id /dev/sda $cfgfsp 88 >/dev/null 2>&1
+check_exit
+# settle down
+sleep 2
+mount -t ext2 /dev/sda$rootp /mnt
+check_exit
+printf "Extracting install archive ...\n"
tar -C /mnt -xzpf $1
+check_exit
chmod 1777 /mnt/tmp
chmod 4755 /mnt/bin/busybox
+if [ $rescue -eq 1 ];then
+ mkdir /mnt/boot/grub
+fi
speed=$(awk -F \, '/console=ttyS0/ { print $2 }' /proc/cmdline|sed -e "s/ .*$//")
-printf "Install bootloader\n"
+if [ $rescue -eq 1 ];then
+ umount /mnt
+ mount /dev/sda2 /mnt
+ cp $2 /mnt/rescue
+fi
+printf "Installing bootloader ...\n"
mkdir -p /mnt/boot/grub
-mount -o bind /dev /mnt/dev
-chroot /mnt mount -t proc /proc /proc
-chroot /mnt mount -t sysfs /sys /sys
+if [ $rescue -eq 1 ];then
+mount /dev/sda1 /mnt/boot/grub
+cat << EOF > /mnt/boot/grub/grub.cfg
+set timeout=1
+serial --unit=0 --speed=$speed
+terminal_output serial
+terminal_input serial
+
+if [ -s \$prefix/grubenv ]; then
+ load_env
+fi
+
+set default="\${saved_entry}"
+
+if [ \${prev_saved_entry} ]; then
+ set saved_entry=\${prev_saved_entry}
+ save_env saved_entry
+ set prev_saved_entry=
+ save_env prev_saved_entry
+ set boot_once=true
+fi
+
+function savedefault {
+ if [ -z \${boot_once} ]; then
+ saved_entry=\${chosen}
+ save_env saved_entry
+ fi
+}
+
+function recordfail {
+ set recordfail=1
+ if [ -n \${have_grubenv} ]; then if [ -z \${boot_once} ]; then save_env recordfail; fi; fi
+}
+
+menuentry "GNU/Linux (OpenADK)" {
+ recordfail
+ insmod ext2
+ set root=(hd0,3)
+ linux /boot/vmlinuz-adk root=/dev/sda$rootp ro init=/init panic=10
+}
+
+menuentry "GNU/Linux (OpenADK) Rescue Mode" {
+ recordfail
+ insmod ext2
+ set root=(hd0,2)
+ linux /rescue ro init=/init panic=10
+}
+EOF
+else
cat << EOF > /mnt/boot/grub/grub.cfg
set default=0
set timeout=1
@@ -43,19 +145,16 @@ terminal_input serial
menuentry "GNU/Linux (OpenADK)" {
insmod ext2
set root=(hd0,1)
- linux /boot/vmlinuz-adk root=/dev/sda1 ro init=/init panic=10
+ linux /boot/vmlinuz-adk root=/dev/sda$rootp ro init=/init panic=10
}
EOF
-chroot /mnt grub-install /dev/sda >/dev/null 2>&1
-umount /mnt/proc
-umount /mnt/sys
-umount /mnt/dev
-
-printf "Creating device nodes\n"
-mknod -m 666 /mnt/dev/null c 1 3
-mknod -m 622 /mnt/dev/console c 5 1
-mknod -m 666 /mnt/dev/tty c 5 0
-
+fi
+grub-install --root-directory=/mnt /dev/sda
+check_exit
+if [ $rescue -eq 1 ];then
+ grub-set-default --root-directory=/mnt 0
+ umount /mnt/boot/grub
+fi
umount /mnt
-printf "Successfully installed.\n"
+printf "Successfully installed. You can reboot now.\n"
exit 0