123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- #!/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 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
- ;;
- (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.$fs"
- 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.$2 -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
- 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
- ;;
- (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
|