summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package/gentooinstall/Makefile29
-rw-r--r--package/gentooinstall/src/gentooinstall189
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