summaryrefslogtreecommitdiff
path: root/package/fwinstall
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2017-02-05 17:18:11 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2017-02-05 17:18:11 +0100
commit0906d4acb286d0584a8f1c15bb1c3077502b0f6d (patch)
treef3320f6b92084cea98d55dcd8ea97fd9a7d9a03a /package/fwinstall
parent0a2f1543c97632205564085c7931c85c287ba7b1 (diff)
add new section base/adk, rename adkinstall into fwinstall
Diffstat (limited to 'package/fwinstall')
-rw-r--r--package/fwinstall/Makefile29
-rw-r--r--package/fwinstall/src/fwinstall532
2 files changed, 561 insertions, 0 deletions
diff --git a/package/fwinstall/Makefile b/package/fwinstall/Makefile
new file mode 100644
index 000000000..fab528148
--- /dev/null
+++ b/package/fwinstall/Makefile
@@ -0,0 +1,29 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${ADK_TOPDIR}/rules.mk
+
+PKG_NAME:= fwinstall
+PKG_VERSION:= 1.0
+PKG_RELEASE:= 1
+PKG_DESCR:= disk/flash installer
+PKG_SECTION:= base/adk
+PKG_DEPENDS:= mke2fs parted sfdisk dosfstools mksh
+PKG_DEPENDS+= grub grub-tools
+PKG_KDEPENDS:= ext4-fs
+
+NO_DISTFILES:= 1
+
+include ${ADK_TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,FWINSTALL,fwinstall,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+fwinstall-install:
+ $(INSTALL_DIR) $(IDIR_FWINSTALL)/usr/sbin
+ $(INSTALL_BIN) $(WRKBUILD)/fwinstall $(IDIR_FWINSTALL)/usr/sbin
+
+include ${ADK_TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/fwinstall/src/fwinstall b/package/fwinstall/src/fwinstall
new file mode 100644
index 000000000..90ceb77ec
--- /dev/null
+++ b/package/fwinstall/src/fwinstall
@@ -0,0 +1,532 @@
+#!/bin/mksh
+# 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
+fi
+
+# get adk target system
+target=$(cat /etc/.adktarget)
+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 {
+ cat >&2 <<EOF
+Syntax: adkinstall <archive>
+ -d: create data partition
+ -f: filesystem (default ext4)
+ -h: help text
+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 [ "$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
+fi
+
+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
+done
+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
+}
+
+# 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.
+}
+
+# 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
+}
+
+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
+}
+
+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
+}
+
+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
+}
+
+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
+}
+
+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
+}
+
+function grub_install {
+ 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 '}'
+) >/mnt/boot/grub/grub.cfg
+ 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
+ ;;
+}
+
+echo "successfully installed OpenADK on $target."
+exit 0