# arch agnostic code export local rodir="rodir" export local rwdir="rwdir" export local workdir="workdir" # only needed for overlayfs on kernel greather than 3.18 export local overlaydir="overlaydir" export local chrootuser="root" export local chroottarget="${@:2}" export local chrootbuildtarget="emerge -kav "$chroottarget"" export local chrootoverlay="layman -f -a kogaion -o https://gitlab.com/kogaion/kogaion-main/raw/master/overlay.xml" export local chrootdesktopoverlay="layman -f -a kogaion-desktop -o https://gitlab.com/kogaion/kogaion-desktop/raw/master/overlay.xml" export local chrootbuildgit="cd /opt && git clone https://gitlab.com/kogaion/kogaion-build.git" export local chrootportageconfig="ln -sf /opt/kogaion-build/conf/intel/portage /etc/portage" export local chrootenvupdate="/usr/sbin/env-update && . /etc/profile" export local chrootprofile="eselect profile set 1" export local releasename="kogaion" export local releaseversion="3" kernelconfig () { if [[ $(zgrep 'CONFIG_OVERLAY_FS=' /proc/config.gz) && $(zgrep "CONFIG_SQUASHFS=" /proc/config.gz) && $(zgrep "CONFIG_BLK_DEV_LOOP=" /proc/config.gz) ]] ; then echo "" echo "Kernel configuration seems OK, moving on" echo "" sleep 1 else echo "" echo "Vasile needs OVERLAYFS && SQUASHFS && LOOP DEVICES to work" echo "Please rebuild the kernel with those activated to use it" echo "" exit 1 fi } checkroot () { if [[ "$(whoami)" != root ]] ; then echo "" echo "You're not root?...No cookies for you, go away !!!" echo "" exit 1 fi } chrootstop () { umount -l "$overlaydir"/proc > /dev/null 2>&1 umount -l "$overlaydir"/sys > /dev/null 2>&1 umount -l "$overlaydir"/dev/pts > /dev/null 2>&1 umount -l "$overlaydir"/dev/shm > /dev/null 2>&1 umount -l "$overlaydir"/dev > /dev/null 2>&1 umount -l "$overlaydir"/tmp > /dev/null 2>&1 umount -l "$overlaydir"/usr/portage/packages > /dev/null 2>&1 umount -l "$overlaydir"/mnt > /dev/null 2>&1 umount -l "$overlaydir" > /dev/null 2>&1 umount -l "$rodir" > /dev/null 2>&1 } # x64 specific code export local chrootx64=""$releasename"_"$releaseversion"_core_x64.squashfs" export local chrootx64md5=""$chrootx64".md5" export local chrootmakeconfx64="ln -sf /opt/kogaion-build/conf/intel/portage/make.conf.amd64 /etc/portage/make.conf" chrootchecksumx64 () { while : true ; do if [[ -f "$chrootx64" && -f "$chrootx64md5" ]] ; then echo "Good, x64 squashed chroot && checksum file FOUND ... verifying integrity" echo "" if [[ "$(md5sum -c "$chrootx64md5")" ]] ; then echo "Good, x64 squashed chroot checksum PASSED ... starting environment" echo "" sleep 1 break else echo "Ooops, x64 squashed chroot checksum FAILED ... aborting" exit 1 fi else echo "Ooops, x64 squashed chroot or checksum file NOT FOUND ... aborting" exit 1 fi done } chrootstartx64 () { mount -t squashfs "$chrootx64" "$rodir" if [[ "$(uname -r | cut -d . -f1,2)" = "3.14" ]] ; then mount -t overlayfs -o lowerdir="$rodir",upperdir="$rwdir" overlayfs "$overlaydir" else mount -t overlay -o lowerdir="$rodir",upperdir="$rwdir",workdir="$workdir" overlay "$overlaydir" fi while : true ; do if [[ ! -d packages ]] ; then mkdir packages mount -o bind packages "$overlaydir"/usr/portage/packages break elif [[ -d packages ]] ; then mount -o bind packages "$overlaydir"/usr/portage/packages break fi done while : true ; do if [[ ! -d distfiles ]] ; then mkdir distfiles mount -o bind distfiles "$overlaydir"/usr/portage/distfiles break elif [[ -d distfiles ]] ; then mount -o bind distfiles "$overlaydir"/usr/portage/distfiles break fi done mount -o bind targets "$overlaydir"/mnt mount -t proc proc "$overlaydir"/proc mount -t sysfs sysfs "$overlaydir"/sys mount -t devtmpfs -o relatime,size=3055348k,nr_inodes=763837,mode=755 none "$overlaydir"/dev mount -t devpts -o nosuid,noexec,relatime,gid=5,mode=620 none "$overlaydir"/dev/pts mount -t tmpfs -o nosuid,nodev none "$overlaydir"/dev/shm mount -t tmpfs -o nosuid,nodev,noexec none "$overlaydir"/tmp } chrootoverlaysx64 () { echo "Injecting Kogaion Linux Main Overlay into x64 environment" sleep 1 chroot "$overlaydir" su - "$chrootuser" -c "$chrootoverlay" echo "Injecting Kogaion Linux Desktop Overlay into x64 environment" sleep 1 chroot "$overlaydir" su - "$chrootuser" -c "$chrootdesktopoverlay" } chrootbuildsystemx64 () { echo "Injecting Kogaion Linux x64 Buildsystem && Setting up Portage && Setting up make.conf" echo "" sleep 1 for cmd in "$chrootbuildgit" "$chrootportageconfig" "$chrootmakeconfx64" "$chrootprofile" "$chrootenvupdate" ; do chroot "$overlaydir" su - "$chrootuser" -c "$cmd" done } chrootbuildx64 () { echo "" echo "x64 Environment is UP && RUNNING ... building targets" sleep 1 chroot "$overlaydir" su - "$chrootuser" -c "$chrootbuildtarget" } chrootx64 () { echo -e "" echo -e "#################################################################" echo -e "# ENTERING CHROOT ENV FOR YOU TO PUSH BUILT PACKAGES #" echo -e "# OR TO FIX EVENTUAL BUILD ERRORS #" echo -e "#################################################################" echo -e "# !!! WARNING !!! WARNING !!! WARNING !!! #" echo -e "#################################################################" echo -e "# NEXT RUN OF THIS SCRIPT WILL DESTROY ALL YOUR WORK #" echo -e "# DO NOT EXIT CHROOT UNTIL ALL PACKAGES ARE PUSHED TO REPOS #" echo -e "# OR, IN CASE OF BUILD FAILURES, UNTIL ALL FIXES ARE COMMITED #" echo -e "#################################################################" echo -e "# !!! WARNING !!! WARNING !!! WARNING !!! #" echo -e "#################################################################" echo -e "" echo -e "" chroot "$overlaydir" su - "$chrootuser" } # x86 specific code export local chrootx86=""$releasename"_"$releaseversion"_core_x86.squashfs" export local chrootx86md5=""$chrootx86".md5" export local chrootmakeconfx86="ln -sf /opt/kogaion-build/conf/intel/portage/make.conf.x86 /etc/portage/make.conf" chrootchecksumx86 () { while : true ; do if [[ -f "$chrootx86" && -f "$chrootx86md5" ]] ; then echo "Good, x86 squashed chroot && checksum file FOUND ... verifying integrity" echo "" if [[ "$(md5sum -c "$chrootx86md5")" ]] ; then echo "Good, x86 squashed chroot checksum PASSED ... starting environment" echo "" sleep 1 break else echo "Ooops, x86 squashed chroot checksum FAILED ... aborting" exit 1 fi else echo "Ooops, x86 squashed chroot or checksum file NOT FOUND ... aborting" exit 1 fi done } chrootstartx86 () { mount -t squashfs "$chrootx86" "$rodir" if [[ "$(uname -r | cut -d . -f1,2)" = "3.14" ]] ; then mount -t overlayfs -o lowerdir="$rodir",upperdir="$rwdir" overlayfs "$overlaydir" else mount -t overlay -o lowerdir="$rodir",upperdir="$rwdir",workdir="$workdir" overlay "$overlaydir" fi while : true ; do if [[ ! -d packages ]] ; then mkdir packages mount -o bind packages "$overlaydir"/usr/portage/packages break elif [[ -d packages ]] ; then mount -o bind packages "$overlaydir"/usr/portage/packages break fi done while : true ; do if [[ ! -d distfiles ]] ; then mkdir distfiles mount -o bind distfiles "$overlaydir"/usr/portage/distfiles break elif [[ -d distfiles ]] ; then mount -o bind distfiles "$overlaydir"/usr/portage/distfiles break fi done mount -o bind targets "$overlaydir"/mnt mount -t proc proc "$overlaydir"/proc mount -t sysfs sysfs "$overlaydir"/sys mount -t devtmpfs -o relatime,size=3055348k,nr_inodes=763837,mode=755 none "$overlaydir"/dev mount -t devpts -o nosuid,noexec,relatime,gid=5,mode=620 none "$overlaydir"/dev/pts mount -t tmpfs -o nosuid,nodev none "$overlaydir"/dev/shm mount -t tmpfs -o nosuid,nodev,noexec none "$overlaydir"/tmp } chrootoverlaysx86 () { echo "Injecting Kogaion Linux Main Overlay into x86 environment" sleep 1 linux32 chroot "$overlaydir" su - "$chrootuser" -c "$chrootoverlay" echo "Injecting Kogaion Linux Desktop Overlay into x86 environment" sleep 1 linux32 chroot "$overlaydir" su - "$chrootuser" -c "$chrootdesktopoverlay" } chrootbuildsystemx86 () { echo "Injecting Kogaion Linux x86 Buildsystem && Setting up Portage && Setting up make.conf" echo "" sleep 1 for cmd in "$chrootbuildgit" "$chrootportageconfig" "$chrootmakeconfx86" "$chrootprofile" "$chrootenvupdate" ; do linux32 chroot "$overlaydir" su - "$chrootuser" -c "$cmd" done } chrootbuildx86 () { echo "" echo "x86 Environment is UP && RUNNING ... building targets" sleep 1 chroot "$overlaydir" su - "$chrootuser" -c "$chrootbuildtarget" } chrootx86 () { echo -e "" echo -e "#################################################################" echo -e "# ENTERING CHROOT ENV FOR YOU TO PUSH BUILT PACKAGES #" echo -e "# OR TO FIX EVENTUAL BUILD ERRORS #" echo -e "#################################################################" echo -e "# !!! WARNING !!! WARNING !!! WARNING !!! #" echo -e "#################################################################" echo -e "# NEXT RUN OF THIS SCRIPT WILL DESTROY ALL YOUR WORK #" echo -e "# DO NOT EXIT CHROOT UNTIL ALL PACKAGES ARE PUSHED TO REPOS #" echo -e "# OR, IN CASE OF BUILD FAILURES, UNTIL ALL FIXES ARE COMMITED #" echo -e "#################################################################" echo -e "# !!! WARNING !!! WARNING !!! WARNING !!! #" echo -e "#################################################################" echo -e "" echo -e "" linux32 chroot "$overlaydir" su - "$chrootuser" }