From 0906d4acb286d0584a8f1c15bb1c3077502b0f6d Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 5 Feb 2017 17:18:11 +0100 Subject: add new section base/adk, rename adkinstall into fwinstall --- package/fwinstall/Makefile | 29 +++ package/fwinstall/src/fwinstall | 532 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 561 insertions(+) create mode 100644 package/fwinstall/Makefile create mode 100644 package/fwinstall/src/fwinstall (limited to 'package/fwinstall') 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 < + -c: compact flash install + -n: nand install + -f: filesystem for compact flash + -h: help text +EOF + exit 1 +} + +function sgi-o2-help { + cat >&2 < + -d: create data partition + -f: filesystem (default ext4) + -h: help text +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 [ "$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 -- cgit v1.2.3