diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2010-07-19 10:49:49 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2010-07-19 10:49:49 +0200 |
commit | 7907e3ee7302ac3fd428989a07b0df74f0c52853 (patch) | |
tree | e6de18488a687707667927065724372b40510d65 /package/adkinstall | |
parent | b70fdbfbf1139605c22083b647337f2b16f62fc3 (diff) | |
parent | 61355d1f054c15673adeb62d32dfd4563f89c165 (diff) |
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'package/adkinstall')
-rw-r--r-- | package/adkinstall/Makefile | 11 | ||||
-rw-r--r-- | package/adkinstall/src/adkinstall | 155 |
2 files changed, 131 insertions, 35 deletions
diff --git a/package/adkinstall/Makefile b/package/adkinstall/Makefile index e758b1f2f..65745cd08 100644 --- a/package/adkinstall/Makefile +++ b/package/adkinstall/Makefile @@ -5,8 +5,8 @@ include ${TOPDIR}/rules.mk PKG_NAME:= adkinstall PKG_VERSION:= 1.0 -PKG_RELEASE:= 4 -PKG_DESCR:= installer for cf, mmc, sd or mtd devices +PKG_RELEASE:= 5 +PKG_DESCR:= openadk installer PKG_SECTION:= base PKG_DEPENDS:= parted sfdisk e2fsprogs @@ -31,13 +31,10 @@ do-install: ifeq ($(ADK_LINUX_MIPS_RB532),y) ${INSTALL_BIN} ./src/adkinstall.rb532 \ $(IDIR_ADKINSTALL)/sbin/adkinstall -else ifeq ($(ADK_LINUX_ARM_FOXBOARD),y) +else ifeq ($(ADK_LINUX_ARM_FOXG20),y) ${INSTALL_BIN} ./src/adkinstall.foxg20 \ $(IDIR_ADKINSTALL)/sbin/adkinstall -else ifeq ($(ADK_LINUX_MIPS_RB433),y) - ${INSTALL_BIN} ./src/adkinstall.rb4xx \ - $(IDIR_ADKINSTALL)/sbin/adkinstall -else ifeq ($(ADK_LINUX_MIPS_RB411),y) +else ifeq ($(ADK_LINUX_MIPS_RB4XX),y) ${INSTALL_BIN} ./src/adkinstall.rb4xx \ $(IDIR_ADKINSTALL)/sbin/adkinstall else 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 |