From eb41d7b05e1a9033d0a27d0ce946ba17d5054aa3 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Thu, 23 Feb 2017 03:34:28 +0100 Subject: fwinstall: simplify, add support for devicename --- package/fwinstall/Makefile | 2 +- package/fwinstall/src/fwinstall | 584 ++++++++-------------------------------- 2 files changed, 114 insertions(+), 472 deletions(-) diff --git a/package/fwinstall/Makefile b/package/fwinstall/Makefile index fab528148..b05dbbe13 100644 --- a/package/fwinstall/Makefile +++ b/package/fwinstall/Makefile @@ -5,7 +5,7 @@ include ${ADK_TOPDIR}/rules.mk PKG_NAME:= fwinstall PKG_VERSION:= 1.0 -PKG_RELEASE:= 1 +PKG_RELEASE:= 2 PKG_DESCR:= disk/flash installer PKG_SECTION:= base/adk PKG_DEPENDS:= mke2fs parted sfdisk dosfstools mksh diff --git a/package/fwinstall/src/fwinstall b/package/fwinstall/src/fwinstall index 90ceb77ec..ed8b357f7 100644 --- a/package/fwinstall/src/fwinstall +++ b/package/fwinstall/src/fwinstall @@ -2,530 +2,172 @@ # This file is part of the OpenADK project. # install OpenADK to a block/flash device -if [ $(id -u) -ne 0 ];then - print installation is only possible as root - exit 1 +if [ $(id -u) -ne 0 ]; then + print installation is only possible as root + exit 1 fi +# get architecture +arch=$(uname -m) # get adk target system target=$(cat /etc/.adktarget) -if [ -z $target ];then - print autodetection of target failed - exit 1 +if [ -z $target ]; then + print autodetection of target failed + exit 1 fi -function mikrotik-rb532-help { - cat >&2 < - -c: compact flash install - -n: nand install - -f: filesystem for compact flash - -h: help text -EOF - exit 1 -} - -function sgi-o2-help { +function help { cat >&2 < - -d: create data partition - -f: filesystem (default ext4) - -h: help text +Syntax: fwinstall EOF exit 1 } -function ibm-x40-help { - cat >&2 < - -d: create data partition - -f: filesystem (default ext4) - -h: help text -EOF - exit 1 -} - -function asus-p5bvm-help { - cat >&2 < - -d: create data partition - -f: filesystem (default ext4) - -h: help text -EOF - exit 1 -} - - -function pcengines-apu-help { - cat >&2 < - -f: filesystem (default ext4) - -h: help text -EOF - exit 1 -} - -function pcengines-alix-help { - cat >&2 < - -f: filesystem (default ext4) - -h: help text -EOF - exit 1 -} - -case $target { -(sgi-o2) - cfgfssize=32768 - data= - fs=ext4 - while getopts "f:d:" ch; do - case $ch in - d) - data=$OPTARG - ;; - f) - fs=$OPTARG - ;; - *) - sgi-o2-help - exit 1 - ;; - esac - done - shift $((OPTIND - 1)) - if [ -z $1 ];then - sgi-o2-help - else - archive=$1 - fi - ;; -(ibm-x40) - cfgfssize=32768 - data= - fs=ext4 - while getopts "f:d:" ch; do - case $ch in - d) - data=$OPTARG - ;; - f) - fs=$OPTARG - ;; - *) - ibm-x40-help - exit 1 - ;; - esac - done - shift $((OPTIND - 1)) - if [ -z $1 ];then - ibm-x40-help - else - archive=$1 - fi - ;; -(asus-p5bvm) - cfgfssize=32768 - data= - fs=ext4 - while getopts "f:d:" ch; do - case $ch in - d) - data=$OPTARG - ;; - f) - fs=$OPTARG - ;; - *) - asus-p5bvm-help - exit 1 - ;; - esac - done - shift $((OPTIND - 1)) - if [ -z $1 ];then - ibm-x40-help - else - archive=$1 - fi - ;; -(pcengines-apu) - cfgfssize=32768 - fs=ext4 - while getopts "f:" ch; do - case $ch in - f) - fs=$OPTARG - ;; - *) - pcengines-apu-help - exit 1 - ;; - esac - done - shift $((OPTIND - 1)) - if [ -z $1 ];then - pcengines-apu-help - else - archive=$1 - fi - ;; -(pcengines-alix) - cfgfssize=32768 - fs=ext4 - while getopts "f:" ch; do - case $ch in - f) - fs=$OPTARG - ;; - *) - pcengines-alix-help - exit 1 - ;; - esac - done - shift $((OPTIND - 1)) - if [ -z $1 ];then - pcengines-alix-help - else - archive=$1 - fi - ;; -(mikrotik-rb532) - cfgfssize=32768 - nand=0 - cf=0 - fs=ext4 - while getopts "cnf:" ch; do - case $ch in - c) - cf=1 - fs=ext4 - ;; - n) - nand=1 - fs=yaffs2 - ;; - f) - fs=$OPTARG - ;; - *) - mikrotik-rb532-help - exit 1 - ;; - esac - done - shift $((OPTIND - 1)) - if [ -z $1 ];then - mikrotik-rb532-help - else - archive=$1 - fi - ;; -(*) - print target $target not supported - exit 1 - ;; -} +if [ -z $1 ]; then + print no archive given + help +fi -if [ "$target" = "mikrotik-rb532" ];then - if [ $cf -eq 0 -a $nand -eq 0 ];then - print "you either install on cf (-c) or nand (-n)" - mikrotik-rb532-help - fi +if [ -z $2 ]; then + print no device given + help fi +archive=$1 +device=$2 +fs=ext4 +cfgfssize=16384 tools="parted partprobe sfdisk mkfs.ext2" f=0 for tool in $tools;do - if ! which $tool >/dev/null; then - echo "checking if $tool is installed... failed" - f=1 - fi + if ! which $tool >/dev/null; then + echo "checking if $tool is installed... failed" + f=1 + fi done -if [ $f -eq 1 ];then exit 1;fi +if [ $f -eq 1 ]; then + exit 1 +fi # create empty partition table function create_label { - print "creating empty partition table" - parted -s $1 mklabel msdos > /dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "creating empty partition failed!" - exit 1 - fi + print "creating empty partition table" + parted -s $1 mklabel msdos > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "creating empty partition failed!" + exit 1 + fi } # get max size of disk in sectors function get_max_size { - maxsize=$(env LC_ALL=C parted $1 -s unit s print |awk '/^Disk/ { print $3 }'|sed -e 's/s//') - rootsize=$(($maxsize-$cfgfssize)) - print device has $maxsize sectors. using $rootsize for root. + maxsize=$(env LC_ALL=C parted $1 -s unit s print |awk '/^Disk/ { print $3 }'|sed -e 's/s//') + rootsize=$(($maxsize-$cfgfssize)) + print device has $maxsize sectors. using $rootsize for root. } # create partition, with fstype start and end in sectors function create_partition { - print creating partition on $1 - parted -s $1 unit s mkpart primary $2 $3 $4 > /dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "creating primary partition failed!" - exit 1 - fi + print creating partition on $1 + parted -s $1 unit s mkpart primary $2 $3 $4 > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "creating primary partition failed!" + exit 1 + fi } function set_boot_flag { - print setting bootflag on $1 partition $2 - parted -s $1 set $2 boot on > /dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "setting bootflag failed!" - exit 1 - fi + print setting bootflag on $1 partition $2 + parted -s $1 set $2 boot on > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "setting bootflag failed!" + exit 1 + fi } function change_part_type { - print setting partition type on $1 partition $2 to $3 - sfdisk --change-id $1 $2 $3 >/dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "changing partition type failed!" - exit 1 - fi + print setting partition type on $1 partition $2 to $3 + sfdisk --change-id $1 $2 $3 >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "changing partition type failed!" + exit 1 + fi } function create_filesystem { - print creating filesystem $2 on $1 partition $3 - mkfs.ext2 -j -F -q ${1}${3} - if [ $? -ne 0 ]; then - echo "creating filesystem on partition failed!" - exit 1 - fi + print creating filesystem $2 on $1 partition $3 + mkfs.ext2 -j -F -q ${1}${3} >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "creating filesystem on partition failed!" + exit 1 + fi } function mount_fs { - print mounting ${1}${2} to $4 with filesystem $3 - mount -t $3 ${1}${2} $4 - if [ $? -ne 0 ]; then - echo "mounting filesystem failed!" - exit 1 - fi + print mounting ${1}${2} to $4 with filesystem $3 + mount -t $3 ${1}${2} $4 + if [ $? -ne 0 ]; then + echo "mounting filesystem failed!" + exit 1 + fi } function extract_archive { - print extracting archive $1 onto $2 - tar -C $2 -xpf $1 - if [ $? -ne 0 ]; then - echo "archive extraction failed!" - exit 1 - fi + print extracting archive $1 onto $2 + tar -C $2 -xpf $1 + if [ $? -ne 0 ]; then + echo "archive extraction failed!" + exit 1 + fi } function grub_install { - print installing bootloader grub + print installing bootloader grub ( - print set default=0 - print set timeout=1 - print serial --unit=0 --speed=115200 - print terminal_output serial - print terminal_input serial - consargs="console=ttyS0,115200" - print - print 'menuentry "GNU/Linux (OpenADK)" {' - print "\tlinux /boot/kernel root=/dev/sda1" - print '}' + print set default=0 + print set timeout=1 + print serial --unit=0 --speed=115200 + print terminal_output serial + print terminal_input serial + consargs="console=ttyS0,115200" + print + print 'menuentry "GNU/Linux (OpenADK)" {' + print "\tlinux /boot/kernel root=${device}1" + print '}' ) >/mnt/boot/grub/grub.cfg - grub-install $1 --root-directory /mnt - if [ $? -ne 0 ]; then - echo "grub install failed!" - exit 1 - fi + grub-install $1 --root-directory /mnt + if [ $? -ne 0 ]; then + echo "grub install failed!" + exit 1 + fi } function fix_perm { - print fixing permissions - chmod 1777 ${1}/tmp - [[ -f ${1}/usr/bin/sudo ]] && chmod 4755 ${1}/usr/bin/sudo - [[ -f ${1}/usr/bin/Xorg ]] && chmod 4755 ${1}/usr/bin/Xorg -} - -case $target { -(sgi-o2) - get_max_size /dev/sda - create_label /dev/sda - if [ -z $data ];then - create_partition /dev/sda ext2 16385 $rootsize - create_partition /dev/sda ext2 $(($rootsize+1)) $(($maxsize-1)) - set_boot_flag /dev/sda 1 - change_part_type /dev/sda 2 88 - else - datasize=$(($data*1024*2)) - echo datasize is: $datasize - echo create partition from 16385 to $(($rootsize-$datasize)) - create_partition /dev/sda ext2 16385 $(($rootsize-$datasize)) - echo create partition from $(($rootsize-$datasize+1)) to $(($maxsize-$cfgfssize-1)) - create_partition /dev/sda ext2 $(($rootsize-$datasize+1)) $(($maxsize-$cfgfssize-1)) - echo create partition from $(($maxsize-$cfgfssize)) to $(($maxsize-1)) - create_partition /dev/sda ext2 $(($maxsize-$cfgfssize)) $(($maxsize-1)) - set_boot_flag /dev/sda 1 - change_part_type /dev/sda 3 88 - - fi - partprobe /dev/sda - sync - sleep 2 - if [ -z $data ];then - create_filesystem /dev/sda $fs 1 - else - create_filesystem /dev/sda $fs 1 - create_filesystem /dev/sda $fs 2 - fi - mdev -s - mount_fs /dev/sda 1 $fs /mnt - extract_archive $archive /mnt - if [ ! -z $data ];then - echo creating data dir and fstab entry - mkdir /mnt/data - echo "/dev/sda2 /data ext4 rw 0 0" >> /mnt/etc/fstab - fi - fix_perm /mnt - umount /mnt - ;; -(ibm-x40) - get_max_size /dev/sda - create_label /dev/sda - if [ -z $data ];then - create_partition /dev/sda ext2 16385 $rootsize - create_partition /dev/sda ext2 $(($rootsize+1)) $(($maxsize-1)) - set_boot_flag /dev/sda 1 - change_part_type /dev/sda 2 88 - else - datasize=$(($data*1024*2)) - echo datasize is: $datasize - echo create partition from 16385 to $(($rootsize-$datasize)) - create_partition /dev/sda ext2 16385 $(($rootsize-$datasize)) - echo create partition from $(($rootsize-$datasize+1)) to $(($maxsize-$cfgfssize-1)) - create_partition /dev/sda ext2 $(($rootsize-$datasize+1)) $(($maxsize-$cfgfssize-1)) - echo create partition from $(($maxsize-$cfgfssize)) to $(($maxsize-1)) - create_partition /dev/sda ext2 $(($maxsize-$cfgfssize)) $(($maxsize-1)) - set_boot_flag /dev/sda 1 - change_part_type /dev/sda 3 88 - - fi - partprobe /dev/sda - sync - sleep 2 - umount /mnt - if [ -z $data ];then - create_filesystem /dev/sda $fs 1 - else - create_filesystem /dev/sda $fs 1 - create_filesystem /dev/sda $fs 2 - fi - mdev -s - mount_fs /dev/sda 1 $fs /mnt - extract_archive $archive /mnt - if [ ! -z $data ];then - echo creating data dir and fstab entry - mkdir /mnt/data - echo "/dev/sda2 /data ext4 rw 0 0" >> /mnt/etc/fstab - fi - grub_install /dev/sda - fix_perm /mnt - umount /mnt - ;; -(asus-p5bvm) - get_max_size /dev/sdc - create_label /dev/sdc - if [ -z $data ];then - create_partition /dev/sdc ext2 16385 $rootsize - create_partition /dev/sdc ext2 $(($rootsize+1)) $(($maxsize-1)) - set_boot_flag /dev/sdc 1 - change_part_type /dev/sdc 2 88 - else - datasize=$(($data*1024*2)) - echo datasize is: $datasize - echo create partition from 16385 to $(($rootsize-$datasize)) - create_partition /dev/sdc ext2 16385 $(($rootsize-$datasize)) - echo create partition from $(($rootsize-$datasize+1)) to $(($maxsize-$cfgfssize-1)) - create_partition /dev/sdc ext2 $(($rootsize-$datasize+1)) $(($maxsize-$cfgfssize-1)) - echo create partition from $(($maxsize-$cfgfssize)) to $(($maxsize-1)) - create_partition /dev/sdc ext2 $(($maxsize-$cfgfssize)) $(($maxsize-1)) - set_boot_flag /dev/sdc 1 - change_part_type /dev/sdc 3 88 - - fi - partprobe /dev/sdc - sync - sleep 2 - umount /mnt - if [ -z $data ];then - create_filesystem /dev/sdc $fs 1 - else - create_filesystem /dev/sdc $fs 1 - create_filesystem /dev/sdc $fs 2 - fi - mdev -s - mount_fs /dev/sdc 1 $fs /mnt - extract_archive $archive /mnt - if [ ! -z $data ]; then - echo creating data dir and fstab entry - mkdir /mnt/data - echo "/dev/sdc2 /data ext4 rw 0 0" >> /mnt/etc/fstab - fi - #grub_install /dev/sdc - fix_perm /mnt - umount /mnt - ;; -(pcengines-apu|pcengines-alix) - get_max_size /dev/sda - create_label /dev/sda - create_partition /dev/sda ext2 16385 $rootsize - create_partition /dev/sda ext2 $(($rootsize+1)) $(($maxsize-1)) - set_boot_flag /dev/sda 1 - change_part_type /dev/sda 2 88 - partprobe /dev/sda - sync - sleep 2 - create_filesystem /dev/sda $fs 1 - mdev -s - mount_fs /dev/sda 1 $fs /mnt - extract_archive $archive /mnt - grub_install /dev/sda - fix_perm /mnt - umount /mnt - ;; -(mikrotik-rb532) - if (( cf )); then - get_max_size /dev/sda - create_label /dev/sda - create_partition /dev/sda ext2 1 16384 - create_partition /dev/sda ext2 16385 $rootsize - create_partition /dev/sda ext2 $(($rootsize+1)) $(($maxsize-1)) - set_boot_flag /dev/sda 1 - change_part_type /dev/sda 1 27 - change_part_type /dev/sda 3 88 - partprobe /dev/sda - sync - sleep 2 - create_filesystem /dev/sda $fs 2 - mdev -s - mount_fs /dev/sda 2 $fs /mnt - extract_archive $archive /mnt - print installing kernel to cf disk /dev/sda1 - dd if=/mnt/boot/kernel of=/dev/sda1 bs=2048 >/dev/null 2>&1 - fix_perm /mnt - umount /mnt - fi - if (( nand )); then - mount_fs /dev/mtdblock 1 $fs /mnt - rm -rf /mnt/* >/dev/null 2>&1 - mkdir /mnt/boot - mount_fs /dev/mtdblock 0 $fs /mnt/boot - extract_archive $archive /mnt - fix_perm /mnt - umount /mnt/boot - umount /mnt - fi - ;; + print fixing permissions + chmod 1777 ${1}/tmp + [[ -f ${1}/usr/bin/sudo ]] && chmod 4755 ${1}/usr/bin/sudo + [[ -f ${1}/usr/bin/Xorg ]] && chmod 4755 ${1}/usr/bin/Xorg +} + +case $arch { + (x86|x86_64) + get_max_size $device + create_label $device + create_partition $device ext2 16385 $rootsize + create_partition $device ext2 $(($rootsize+1)) $(($maxsize-1)) + set_boot_flag $device 1 + change_part_type $device 2 88 + partprobe $device + sync + create_filesystem $device $fs 1 + [[ -x /sbin/mdev ]] && mdev -s + mount_fs $device 1 $fs /mnt + extract_archive $archive /mnt + grub_install $device + fix_perm /mnt + umount /mnt + ;; } echo "successfully installed OpenADK on $target." -- cgit v1.2.3