diff options
-rw-r--r-- | package/gentooinstall/Makefile | 29 | ||||
-rw-r--r-- | package/gentooinstall/src/gentooinstall | 189 |
2 files changed, 218 insertions, 0 deletions
diff --git a/package/gentooinstall/Makefile b/package/gentooinstall/Makefile new file mode 100644 index 000000000..251e38a3d --- /dev/null +++ b/package/gentooinstall/Makefile @@ -0,0 +1,29 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include ${ADK_TOPDIR}/rules.mk + +PKG_NAME:= gentooinstall +PKG_VERSION:= 1.0 +PKG_RELEASE:= 1 +PKG_DESCR:= gentoo disk installer +PKG_SECTION:= base/adk +PKG_DEPENDS:= mke2fs parted sfdisk dosfstools mksh +PKG_DEPENDS+= grub grub-tools +PKG_KDEPENDS:= ext4-fs + +NO_DISTFILES:= 1 + +include ${ADK_TOPDIR}/mk/package.mk + +$(eval $(call PKG_template,GENTOOINSTALL,gentooinstall,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) + +CONFIG_STYLE:= manual +BUILD_STYLE:= manual +INSTALL_STYLE:= manual + +fwinstall-install: + $(INSTALL_DIR) $(IDIR_GENTOOINSTALL)/usr/sbin + $(INSTALL_BIN) $(WRKBUILD)/fwinstall $(IDIR_GENTOOINSTALL)/usr/sbin + +include ${ADK_TOPDIR}/mk/pkg-bottom.mk diff --git a/package/gentooinstall/src/gentooinstall b/package/gentooinstall/src/gentooinstall new file mode 100644 index 000000000..1989b2a3e --- /dev/null +++ b/package/gentooinstall/src/gentooinstall @@ -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 |