123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #!/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
- Syntax: gentooinstall <archive> <device> <hostname>
- 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
|