Browse Source

fwinstall: simplify, add support for devicename

Waldemar Brodkorb 7 years ago
parent
commit
eb41d7b05e
2 changed files with 114 additions and 472 deletions
  1. 1 1
      package/fwinstall/Makefile
  2. 113 471
      package/fwinstall/src/fwinstall

+ 1 - 1
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

+ 113 - 471
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."