123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- #!/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
- }
- # 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
|