#!/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 } # create partition, with fstype start and end in sectors function create_partition { print creating partition on $1 with $2 parted -s $1 -- unit MiB 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 { ( print emerge-webrsync print emerge dhcpcd print rc-update add sshd default print emerge grub:2 ) >/mnt/install chmod 755 /mnt/install } function create_chroot_grubinstaller { ( print 'grub-mkconfig > /boot/grub/grub.cfg' print grub-install /dev/sda ) >/mnt/installgrub chmod 755 /mnt/installgrub } function chroot_install { print Installing Gentoo cat /etc/resolv.conf > /mnt/etc/resolv.conf mount -t proc proc /mnt/proc mount -t sysfs sys /mnt/sys mount -o bind /dev /mnt/dev mount -t tmpfs tmpfs /mnt/dev/shm chroot /mnt /install if [ $? -ne 0 ]; then echo "Gentoo installation failed!" umount /mnt/dev/shm umount /mnt/{proc,dev,sys} umount /mnt exit 1 fi printf "Now manually install a kernel" chroot /mnt /bin/bash printf "Now installang bootloader" chroot /mnt /installgrub if [ $? -ne 0 ]; then echo "Gentoo installation failed!" umount /mnt/dev/shm umount /mnt/{proc,dev,sys} umount /mnt exit 1 fi } case $arch { (x86|x86_64) create_label $device create_partition $device sw 2 2048 create_partition $device ext2 2049 -1 set_boot_flag $device 2 partprobe $device sync create_filesystem $device $fs 2 [[ -x /sbin/mdev ]] && mdev -s mount_fs $device 2 $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 chmod 1777 /mnt/tmp sync umount /mnt/dev/shm umount /mnt/{proc,dev,sys} umount /mnt ;; } echo "Successfully installed Gentoo on $target." exit 0