#!/bin/mksh # This file is part of the OpenADK project. # install Gentoo to a block/flash device 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 fi function help { cat >&2 < EOF exit 1 } if [ -z $1 ]; then print no archive given help fi if [ -z $2 ]; then print no device given help fi if [ -z $3 ]; then print no hostname given help fi archive=$1 device=$2 hostname=$3 swapsize=2048000 fs=ext4 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} >/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 } 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 create_chroot_installer { ( emerge-websync emerge rsyslog rc-update add sshd default emerge grub:2 print grub-mkconfig > /boot/grub/grub.cfg print Installing Grub into /dev/sda print grub-install /dev/sda ) >/mnt/install chmod 755 /mnt/install } function chroot_install { print Installing Gentoo mount -t proc proc /mnt/proc mount -t sysfs sys /mnt/sys mount -o bind /dev /mnt/dev mkdir /mnt/dev/shm mount -t tmpfs tmpfs /mnt/dev/shm chroot /mnt /install if [ $? -ne 0 ]; then echo "Gentoo installation failed!" exit 1 fi } function fix_perm { print fixing permissions chmod 1777 ${1}/tmp } case $arch { (x86|x86_64) get_max_size $device create_label $device create_partition $device swap 0 $swapsize create_partition $device ext2 $(($swapsize+1)) $(($maxsize-1)) set_boot_flag $device 1 change_part_type $device 1 82 partprobe $device sync create_filesystem $device $fs 1 [[ -x /sbin/mdev ]] && mdev -s mount_fs $device 1 $fs /mnt extract_archive $archive /mnt create_chroot_installer chroot_install /mnt print "/dev/sda2 / ext4 defaults 0 1" > /mnt/etc/fstab print hostname=\"$hostname\" > /mnt/etc/conf.d/hostname fix_perm /mnt umount /mnt/dev/shm umount /mnt/{proc,dev,sys} umount /mnt ;; } echo "Successfully installed Gentoo on $target." exit 0