summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2017-02-23 03:34:28 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2017-02-23 03:57:20 +0100
commiteb41d7b05e1a9033d0a27d0ce946ba17d5054aa3 (patch)
treef4954b0284da2821a9f957cafd1df7853d8e69f8
parent1105e01f4a5b7153d2af8b4b727e7f8ce3a8ca80 (diff)
fwinstall: simplify, add support for devicename
-rw-r--r--package/fwinstall/Makefile2
-rw-r--r--package/fwinstall/src/fwinstall584
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 <<EOF
-Syntax: adkinstall [-c|-n] <archive>
- -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 <<EOF
-Syntax: adkinstall <archive>
- -d: create data partition
- -f: filesystem (default ext4)
- -h: help text
+Syntax: fwinstall <archive> <device>
EOF
exit 1
}
-function ibm-x40-help {
- cat >&2 <<EOF
-Syntax: adkinstall <archive>
- -d: create data partition
- -f: filesystem (default ext4)
- -h: help text
-EOF
- exit 1
-}
-
-function asus-p5bvm-help {
- cat >&2 <<EOF
-Syntax: adkinstall <archive>
- -d: create data partition
- -f: filesystem (default ext4)
- -h: help text
-EOF
- exit 1
-}
-
-
-function pcengines-apu-help {
- cat >&2 <<EOF
-Syntax: adkinstall <archive>
- -f: filesystem (default ext4)
- -h: help text
-EOF
- exit 1
-}
-
-function pcengines-alix-help {
- cat >&2 <<EOF
-Syntax: adkinstall <archive>
- -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."