|
@@ -0,0 +1,189 @@
|
|
|
+#!/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
|