diff options
-rw-r--r-- | Makefile | 22 | ||||
-rw-r--r-- | src/backend/c_jail.sh (renamed from src/backend/commands_jail.sh) | 0 | ||||
-rw-r--r-- | src/backend/f_generic.sh (renamed from src/backend/functions_generic.sh) | 0 | ||||
-rw-r--r-- | src/backend/f_help.sh | 80 | ||||
-rw-r--r-- | src/backend/f_import.sh | 57 | ||||
-rw-r--r-- | src/backend/f_makeiso.sh (renamed from src/backend/functions_makeiso.sh) | 0 | ||||
-rw-r--r-- | src/backend/f_makepkg.sh (renamed from src/backend/functions_makepkg.sh) | 0 | ||||
-rw-r--r-- | src/backend/f_modeswitch.sh (renamed from src/backend/functions_modeswitch.sh) | 0 | ||||
-rwxr-xr-x | src/backend/libvasile | 608 | ||||
-rw-r--r-- | src/backend/libvasile.sh | 50 | ||||
-rw-r--r-- | src/backend/v_jail.sh (renamed from src/backend/variables_jail.sh) | 0 | ||||
-rwxr-xr-x | src/frontend/cli/vasile.sh (renamed from src/frontend/cli/vasile) | 5 |
12 files changed, 161 insertions, 661 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2a3461a --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +SUBDIRS = +DESTDIR = +UBINDIR ?= /usr/bin +ULIBDIR ?= /usr/lib/vasile + +all: + for d in $(SUBDIRS); do $(MAKE) -C $$d; done + +clean: + for d in $(SUBDIRS); do $(MAKE) -C $$d clean; done + +install: + for d in $(SUBDIRS); do $(MAKE) -C $$d install; done + + install -d $(DESTDIR)$(UBINDIR) + install -m 0755 src/frontend/cli/vasile.sh $(DESTDIR)$(UBINDIR)/ + install -d $(DESTDIR)$(ULIBDIR) + install -m 0644 src/backend/*sh $(DESTDIR)$(ULIBDIR)/ + +uninstall: + rm -rf $(DESTDIR)$(UBINDIR)/vasile.sh + rm -rf $(DESTDIR)$(ULIBDIR) diff --git a/src/backend/commands_jail.sh b/src/backend/c_jail.sh index fe5e82b..fe5e82b 100644 --- a/src/backend/commands_jail.sh +++ b/src/backend/c_jail.sh diff --git a/src/backend/functions_generic.sh b/src/backend/f_generic.sh index d692c46..d692c46 100644 --- a/src/backend/functions_generic.sh +++ b/src/backend/f_generic.sh diff --git a/src/backend/f_help.sh b/src/backend/f_help.sh new file mode 100644 index 0000000..f8cc605 --- /dev/null +++ b/src/backend/f_help.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +export local colorstart="\e[1;49;34m" +export local colorstop="\e[0m" + +showhelp () { + +echo -e "\ +"$colorstart"SYNOPSIS"$colorstop" + "$colorstart"vasile --option"$colorstop" ["$colorstart"arguments"$colorstop"] + "$colorstart"vasile --help"$colorstop" + +"$colorstart"DESCRIPTION"$colorstop" + + Vasile is an acronym for ** Versatile Advanced Script for Iso and Latest Enchantments ** + +"$colorstart"OPTIONS"$colorstop" + "$colorstart"--makepkg"$colorstop" ["$colorstart"package(s)"$colorstop"] + This option will allow you to build a package or multiple packages in an overlayfs mounted squashfs chroot jail. + + It must be run in the folder where the squashfs chroot jail resides, or else it will fail to mount the squahfs chroot jail and build the package(s). + + The squashfs chroot jail and the md5sum checksum file are hardcored into "$colorstart"libvasile"$colorstop", but you may want to change them to suit your needs. + + You MUST provide package(s) to build as arguments, or else vasile will only mount the chroot jail + + Examples : + "$colorstart"vasile --makepkg wine"$colorstop" + "$colorstart"vasile --makepkg wine playonlinux q4wine"$colorstop" + + If the package(s) is/are already built, it will not build it/them again (unless newer version(s) is/are available), but install it/them into squahfs chroot jail + + If the package(s) you want to build depends on any already built package(s) it will make use of it/them to satisfy the required dependencies. + + "$colorstart"--makeiso"$colorstop" + This option will allow you to build a live iso image based on the squashfs chroot jail. + + It must be run in the folder where the squashfs chroot jail resides, or else it will fail to rsync the contents of it and build the iso image. + + It is not fully automatic, it will only rsync the contents of the squashfs chroot jail, chroot into it, and let you install packages you want into the iso image. + There are some predefined package sets available in "$colorstart"/etc/portage/sets"$colorstop". Adjust them to suit your needs. + + It will ALLWAYS use package(s) built with "$colorstart"--makepkg"$colorstop" option. When you are happy with package selection, just exit the chroot environment and + the live filesystem will be compressed, live services will be autoenabled, live bootloader autoconfigured and in the end live iso image will be built. You will find + a list of predefined live services list hardcoded into "$colorstart"libvasile"$colorstop". Adjust it to suit your needs. + + "$colorstart"--resetmode"$colorstop" + This option will allow you to reset the system state. It will remove whole portage tree, overlays and portage configuration files and reset the system profile. Usually + you will never want to call this option directly, unless you really really really know what are you doing. It is called automatically when switching to other states. + + !!! WARNING !!! : Never never never leave the system in this state. You will no longer be able to install/remove/upgrade any packages untill you set the system profile, + get the portage tree, overlays and configure portage by hand. Or, you can always activate one of the three other supported system states. + + "$colorstart"--binmode"$colorstop" + This option will allow you to change the system state to binmode. In this state portage will allways use only binary packages from the binhost. It will fetch a minimal + portage tree without any ebuilds in it, but only with portage profiles, metadata and eclass. It will also fetch overlay and portage configuration files, and will adjust + "$colorstart"make.conf"$colorstop" for binary only usage. This system state is for those who just meet with the power of Gentoo. + + !!! WARNING !!! : Never never never modify or create any file in "$colorstart"/etc/portage/"$colorstop" in this state. + + "$colorstart"--mixedmode"$colorstop" + This option will allow you to change the system state to mixedmode. In this state portage will prefer binary packages from the binhost over ebuilds from the portage tree. + It will fetch the full portage tree, the overlay and portage configuration files, and adjust "$colorstart"make.conf"$colorstop" for binary/ebuild usage. Usually you will find this system state + useful if you want to install a package not available in the binhost, you want to upgrade a package to a newer version from portage tree or if you wanna rebuild a package + with your own useflags. + + !!! WARNING !!! : Never never never modify any file in "$colorstart"/etc/portage/"$colorstop" in this state. If you want to adjust useflags or keywords for a package, you can create a new file + e.g.: "$colorstart"100-my.package.use"$colorstop" in "$colorstart"/etc/portage/package.use/"$colorstop" or "$colorstart"100-my.package.keywords"$colorstop" in "$colorstart"/etc/portage/package.keywords/"$colorstop". + + "$colorstart"--srcmode"$colorstop" + This option will allow you to change the system state to srcmode. In more clear terms, it will transform your Kogaion/Argent/Redcore system into pure Gentoo. Binary packages + from the binhost will be ignored, and you will only install packages building from portage tree using emerge. It will fetch the full portage tree, the overlay and portage + configuration files and adjust "$colorstart"make.conf"$colorstop" for ebuild only usage. + + In this system state you can modify whatever you want in "$colorstart"/etc/portage/"$colorstop". You can adjust useflags, keywords, masks, build environment and rebuild the whole system to suit you. + You have the full power of Gentoo available only one command away! + + !!! WARNING !!! : Only use this system state if you have a strong knowledge of Gentoo tools e.g.: "$colorstart"emerge, equery, layman, eix, qlist, useflags, keywords, masks"$colorstop". " +exit 0 +} diff --git a/src/backend/f_import.sh b/src/backend/f_import.sh new file mode 100644 index 0000000..f8dbcf3 --- /dev/null +++ b/src/backend/f_import.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +if [[ -f /lib/gentoo/functions.sh ]] ; then + source /lib/gentoo/functions.sh +else + echo "Cannot import Gentoo functions, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/v_jail.sh ]] ; then + source /usr/lib/vasile/v_jail.sh +else + echo "Cannot import jail variables, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/c_jail.sh ]] ; then + source /usr/lib/vasile/c_jail.sh +else + echo "Cannot import jail commands, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/f_generic.sh ]] ; then + source /usr/lib/vasile/f_generic.sh +else + echo "Cannot import generic functions, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/f_makepkg.sh ]] ; then + source /usr/lib/vasile/f_makepkg.sh +else + echo "Cannot import makepkg functions, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/f_makeiso.sh ]] ; then + source /usr/lib/vasile/f_makeiso.sh +else + echo "Cannot import makeiso functions, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/f_modeswitch.sh ]] ; then + source /usr/lib/vasile/f_modeswitch.sh +else + echo "Cannot import modeswitch functions, I will abort now!" + exit 1 +fi + +if [[ -f /usr/lib/vasile/f_help.sh ]] ; then + source /usr/lib/vasile/f_help.sh +else + echo "Cannot import help functions, I will abort now!" + exit 1 +fi diff --git a/src/backend/functions_makeiso.sh b/src/backend/f_makeiso.sh index be5a550..be5a550 100644 --- a/src/backend/functions_makeiso.sh +++ b/src/backend/f_makeiso.sh diff --git a/src/backend/functions_makepkg.sh b/src/backend/f_makepkg.sh index 1c16d45..1c16d45 100644 --- a/src/backend/functions_makepkg.sh +++ b/src/backend/f_makepkg.sh diff --git a/src/backend/functions_modeswitch.sh b/src/backend/f_modeswitch.sh index 0f66964..0f66964 100644 --- a/src/backend/functions_modeswitch.sh +++ b/src/backend/f_modeswitch.sh diff --git a/src/backend/libvasile b/src/backend/libvasile deleted file mode 100755 index e1678ad..0000000 --- a/src/backend/libvasile +++ /dev/null @@ -1,608 +0,0 @@ -#!/usr/bin/env bash - -# import gentoo functions - -source /lib/gentoo/functions.sh - -# generic variables - -export local releasename="redcore" -export local releasetarget="desktop" -export local releaseversion="1" - -# kernel version && name from inside core squashfs (we need to know this, to generate a matching kernel/live initramfs) - -export local kernelver="4.9.53-"$releasename"-lts" - -# core squahfs name and md5 checksum file - -export local chrootx64=""$releasename"_"$releaseversion"_core_x64.squashfs" -export local chrootx64md5=""$chrootx64".md5" - -# overlay mount variables - -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" - -# build variables and commands to run inside core squashfs when building packages - -export local chrootuser="root" -export local chroottarget="${@:2}" -export local chrootbuildtarget="emerge -kav "$chroottarget"" -export local chrootsrcmode="vasile --srcmode" - -# iso variables and commands to run inside core squahfs when making iso image - -export local isouser="root" -export local isomainarch="x86_64" -export local isobinmode="vasile --binmode" -export local isodkms="vasile --dkms" -export local isokernelname="kernel-genkernel-"$isomainarch"-"$kernelver"" -export local isoramfsname="initramfs-genkernel-"$isomainarch"-"$kernelver"" -export local isoramfscmd="dracut -N -a dmsquash-live -a pollcdrom --force --kver="$kernelver" /boot/"$isoramfsname"" -export local isochainloadcmd="grub2-mkimage -d /usr/lib64/grub/i386-pc -o core.img -O i386-pc biosdisk part_msdos fat -p /boot/grub" -export local isoefix64cmd="grub2-mkimage -d /usr/lib64/grub/x86_64-efi -o bootx64.efi -O x86_64-efi ext2 fat udf btrfs ntfs reiserfs xfs hfsplus lvm ata part_msdos part_gpt part_apple bsd search_fs_uuid normal chain iso9660 configfile help loadenv reboot cat search memdisk tar boot linux chain -p /boot/grub" -export local isoefiia32cmd="grub2-mkimage -d /usr/lib64/grub/i386-efi -o bootia32.efi -O i386-efi ext2 fat udf btrfs ntfs reiserfs xfs hfsplus lvm ata part_msdos part_gpt part_apple bsd search_fs_uuid normal chain iso9660 configfile help loadenv reboot cat search memdisk tar boot linux chain -p /boot/grub" - -# iso image layout variables - -export local bootloaderfetchpath="/tmp/bootcore" -export local bootloaderconfigs=""$bootloaderfetchpath"/cdroot/boot" -export local isorootdir=""$releasename"-"$releasetarget"-"$releaseversion"-"$isomainarch"" -export local isogrubdir=""$isorootdir"/boot/grub" -export local isoefidir=""$isorootdir"/efi/boot" -export local isorsynctarget=""$isorootdir"/rootfs" -export local isorsyncsource="/tmp/"$isorootdir"" -export local isocdrootdir=""$isorootdir"/CDroot" -export local isorealfsdir=""$isocdrootdir"/LiveOS" -export local isosquashfsdir=""$isorootdir"/LiveOS" - -# modechange variables - -export local gentooportdir="/usr/ports/gentoo" -export local redcoreportdir="/usr/ports/redcore" -export local portconfdir="/etc/portage" -export local portgitdir="/opt/redcore-build/conf/intel/portage" -export local portclonedir="/opt/redcore-build" - -# generic functions (used for both build && iso creation) - -kernelconfig () { - # check if the host kernel has needed modules for vasile to work properly...fail to start if it doesn't - if [[ $(zgrep 'CONFIG_OVERLAY_FS=' /proc/config.gz) && $(zgrep "CONFIG_SQUASHFS=" /proc/config.gz) && $(zgrep "CONFIG_BLK_DEV_LOOP=" /proc/config.gz) ]] ; then - einfo "Kernel configuration seems OK, moving on" - sleep 1 - else - eerror "Vasile needs OVERLAYFS && SQUASHFS && LOOP DEVICES to work" - eerror "Please rebuild the kernel with those activated to use it" - exit 1 - fi -} - -checkroot () { - # check for root privileges, needed for mount && chroot...fail to start if not root - if [[ "$(whoami)" != root ]] ; then - eerror "You're not root?...No cookies for you, go away !!!" - exit 1 - fi -} - -checkiflive () { - # check if running in live mode...fail to start if so - if [[ -L /dev/mapper/live-base ]] ; then - eerror "Running in Live mode is unsupported" - exit 1 - fi -} - -chrootchecksum () { - # check if core squashfs and md5 checksum file exists, verify core squashfs integrity against md5 checksum file - # fail to start if core squashfs or md5 checksum file doesn't exist, or if core squashfs fails md5 verification - while : true ; do - if [[ -f "$chrootx64" && -f "$chrootx64md5" ]] ; then - einfo "Squashed chroot && Checksum file found" - if [[ "$(md5sum -c "$chrootx64md5")" ]] ; then - einfo "Squashed chroot checksum passed" - sleep 1 - break - else - eerror "Squashed chroot checksum failed" - exit 1 - fi - else - eerror "Squashed chroot || Checksum file not found" - exit 1 - fi - done -} - -dkmsmod () { - checkroot - # build and install any 3rd party kernel modules using DKMS - if [[ -x $(which dkms) ]] ; then - for i in $(dkms status | cut -d " " -f1,2 | sed -e 's/,//g' | sed -e 's/ /\//g' | sed -e 's/://g') ; do - dkms install $i - done - fi -} - -# build functions - -chrootprepare () { - # always start from fresh overlay mount path, if previous exists, remove it and start over - while : true ; do - if [[ ! -d "$rodir" && ! -d "$rwdir" && ! -d "$workdir" && ! -d "$overlaydir" ]] ; then - for i in "$rodir" "$rwdir" "$workdir" "$overlaydir" ; do - mkdir "$i" - done - chrootstart - break - elif [[ -d "$rodir" && -d "$rwdir" && -d "$workdir" && -d "$overlaydir" ]] ; then - chrootstop - for i in "$rodir" "$rwdir" "$workdir" "$overlaydir" ; do - rm -rf "$i" - done - continue - fi - done - -} - -chrootstop () { - # umount core squashfs overlay mount - 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"/var/cache/packages > /dev/null 2>&1 - umount -l "$overlaydir"/var/cache/distfiles > /dev/null 2>&1 - umount -l "$overlaydir" > /dev/null 2>&1 - umount -l "$rodir" > /dev/null 2>&1 -} - -chrootstart () { - # mount core squashfs in overlay - mount -t squashfs "$chrootx64" "$rodir" - mount -t overlay -o lowerdir="$rodir",upperdir="$rwdir",workdir="$workdir" overlay "$overlaydir" - mount -o bind packages "$overlaydir"/var/cache/packages - mount -o bind distfiles "$overlaydir"/var/cache/distfiles - 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 -} - -chrootdevtree () { - # inject portage tree, redcore overlay && redcore buildsystem (portage config) - chroot "$overlaydir" su - "$chrootuser" -c "$chrootsrcmode" -} - -chrootbuild () { - # build and install package(s) given as argument...if is already built, install it - einfo "All systems are go!" - sleep 1 - chroot "$overlaydir" su - "$chrootuser" -c "$chrootbuildtarget" -} - -chrootx64 () { - # land into a chroot env into overlay mounted core squashfs and make build adjustments, if needed - einfo "DROPPING YOU TO A ROOT SHELL INTO BUILD ENVIRONMENT" - einfo "FIX FAILURES && ADJUST PORTAGE CONFIGURATION FILES" - einfo "TEST USEFLAGS && KEYWORDS && MASKS IF REQUIRED" - einfo "IN THE END : DO NOT FORGET TO COMMIT YOUR CHANGES" - chroot "$overlaydir" su - "$chrootuser" -} - -makepkg () { - checkroot - chrootchecksum - chrootprepare - chrootdevtree - chrootbuild - chrootx64 - chrootstop -} - -# iso functions - -isostart () { - # mount iso image core - mount -o bind packages "$isorsynctarget"/var/cache/packages - mount -t proc proc "$isorsynctarget"/proc - mount -t sysfs sysfs "$isorsynctarget"/sys - mount -t devtmpfs -o relatime,size=3055348k,nr_inodes=763837,mode=755 none "$isorsynctarget"/dev - mount -t devpts -o nosuid,noexec,relatime,gid=5,mode=620 none "$isorsynctarget"/dev/pts - mount -t tmpfs -o nosuid,nodev none "$isorsynctarget"/dev/shm - mount -t tmpfs -o nosuid,nodev,noexec none "$isorsynctarget"/tmp -} - -isostop () { - # umount iso image core - umount -l "$isorsynctarget"/proc > /dev/null 2>&1 - umount -l "$isorsynctarget"/sys > /dev/null 2>&1 - umount -l "$isorsynctarget"/dev/pts > /dev/null 2>&1 - umount -l "$isorsynctarget"/dev/shm > /dev/null 2>&1 - umount -l "$isorsynctarget"/dev > /dev/null 2>&1 - umount -l "$isorsynctarget"/tmp > /dev/null 2>&1 - umount -l "$isorsynctarget"/var/cache/packages > /dev/null 2>&1 -} - -isousertree () { - # inject portage tree, redcore overlay && redcore buildsystem (portage config) - chroot "$isorsynctarget" su - "$isouser" -c "$isobinmode" -} - -isoramfs () { - # generate iso initramfs with required modules for live boot - chroot "$isorsynctarget" su - "$isouser" -c "$isoramfscmd" -} - -isoefiimg () { - # generate efi bootloader - chroot "$isorsynctarget" su - "$isouser" -c "$isoefix64cmd" - chroot "$isorsynctarget" su - "$isouser" -c "$isoefiia32cmd" -} - -isochainloader () { - # generate syslinux -> grub chainloader for unetbootin compatibility - chroot "$isorsynctarget" su - "$isouser" -c "$isochainloadcmd" -} - -isoservices () { - # enable live user setup service (runlevel : boot) - chroot "$isorsynctarget" su - "$isouser" -c "rc-update add redcorelive boot" - - # enable live iso system services (runlevel : default) - for service in acpid dbus NetworkManager avahi-daemon syslog-ng cupsd cronie cgmanager consolekit alsasound bluetooth ntpd openrc-settingsd xdm virtualbox-guest-additions ; do - chroot "$isorsynctarget" su - "$isouser" -c "rc-update add "$service" default" - done -} - -isomodules () { - # build and install any 3rd party kernel modules using DKMS (virtualbox-guest in our case) - chroot "$isorsynctarget" su - "$isouser" -c "$isodkms" -} - -isochroot () { - # land into a chroot env into iso image core and make adjustments, if needed - einfo "DROPPING YOU TO A ROOT SHELL INTO ISO ENVIRONMENT" - einfo "INSTALL APPS & TARGETS & DES YOU WANT INSIDE ISO" - einfo "EXIT WHEN YOU'RE DONE AND I'LL CREATE THE IMAGE" - chroot "$isorsynctarget" su - "$isouser" -} - -prepareiso () { - # prepare iso image layout - mkdir -p "$isorsynctarget" - dd if=/dev/zero of=""$isorsynctarget".img" bs=1M count=10240 && sync - mkfs.ext2 -F ""$isorsynctarget".img" - mkdir -p "$isorsyncsource" - mkdir -p "$isocdrootdir" - mkdir -p "$isosquashfsdir" - mkdir -p "$isorealfsdir" - mkdir -p "$isogrubdir" - mkdir -p "$isoefidir" - # mount core squashfs and rsync it's contents into core iso image - mount -t squashfs "$chrootx64" "$isorsyncsource" - mount -t ext4 ""$isorsynctarget".img" "$isorsynctarget" - rsync -aHAXr --progress "$isorsyncsource/" "$isorsynctarget/" - # copy the kernel for live boot - cp -avx ""$isorsynctarget"/boot/"$isokernelname"" ""$isorootdir"/boot/vmlinuz" - # generate and copy initramfs for live boot - isostart - isoramfs - isostop - mv ""$isorsynctarget"/boot/"$isoramfsname"" ""$isorootdir"/boot/initrd" - # generate and copy efi bootloader for live boot - isostart - isoefiimg - isostop - mv ""$isorsynctarget"/root/bootx64.efi" "$isoefidir" - chmod 755 ""$isoefidir"/bootx64.efi" - mv ""$isorsynctarget"/root/bootia32.efi" "$isoefidir" - chmod 755 ""$isoefidir"/bootia32.efi" - # generate and copy syslinux -> grub chainloader for unetbootin compatibility - isostart - isochainloader - isostop - mv ""$isorsynctarget"/root/core.img" "$isogrubdir" - cp -avx ""$isorsynctarget"/usr/lib64/grub/i386-pc/lnxboot.img" "$isogrubdir" - # land into a chroot env into live environment to make adjustments, if needed - isostart - isousertree - isochroot - isostop - # build and install any 3rd party kernel modules using DKMS (virtualbox-guest in our case) - isostart - isomodules - isostop - # enable live iso image system services - isostart - isoservices - isostop - # umount "real" live filesystem - umount -l "$isorsynctarget" > /dev/null 2>&1 - # fix any possible "real" live filesystem corruptions - # e2fsck -fy ""$isorsynctarget".img" - # move "real" live filesystem into right place - mv ""$isorsynctarget".img" "$isorealfsdir" - # compress "fake" live filesystem - mksquashfs "$isocdrootdir" ""$isorootdir"/squashfs.img" -b 1048576 -comp xz -Xdict-size 100% - mv ""$isorootdir/"squashfs.img" "$isosquashfsdir" - # dracut requires "real" live filesystem to be placed - # into a "fake" squashfs live filesystem as bellow : - # /cdroot/LiveOS/squashfs.img/LiveOS/rootfs.img - # squashfs.img is the "fake" squashfs live filesystem - # rootfs.img is the "real" live filesystem -} - -bootloaderiso () { - # get grub2 live boot configs and place them into right place - git clone https://gitlab.com/"$releasename"/boot-core.git "$bootloaderfetchpath" - cp -avx "$bootloaderconfigs" "$isorootdir" -} - -cleanupiso () { - # cleanup temporary files used during iso image layout preparation - umount "$isorsyncsource" - rm -rf "$isorsynctarget" - rm -rf "$isorsyncsource" - rm -rf "$isocdrootdir" - rm -rf "$bootloaderfetchpath" -} - -makeisoimg () { - # create iso image - grub2-mkrescue -o ""$releasename"-"$releasetarget"-"$releaseversion"-"$isomainarch".iso" "$isorootdir" -} - -makeiso () { - checkroot - chrootchecksum - prepareiso - bootloaderiso - cleanupiso - makeisoimg -} - -# modechange functions - -removeportagetree() { - # remove portage tree, but leave packages and distfiles directories intact - einfo "Removing gentoo portage tree" - if [ -d ""$gentooportdir"/.git" ] ; then - find "$gentooportdir" -mindepth 1 -exec rm -rf {} \; > /dev/null 2>&1 - fi -} - -removeoverlays() { - # remove redcore overlay - einfo "Removing "$releasename"-"$releasetarget" overlay" - if [ -d ""$redcoreportdir"/.git" ] ; then - find "$redcoreportdir" -mindepth 1 -exec rm -rf {} \; > /dev/null 2>&1 - fi -} - -removeportageconfig() { - # remove redcore buildsystem (portage configuration) - einfo "Removing "$releasename"-"$releasetarget" buildsystem" - rm ""$portconfdir"/make.conf" > /dev/null 2>&1 - rm ""$portconfdir"/make.profile" > /dev/null 2>&1 - rm "$portconfdir" > /dev/null 2>&1 - rm -rf "$portclonedir" > /dev/null 2>&1 -} - -resetmode () { - checkroot - removeportagetree - removeoverlays - removeportageconfig -} - -fetchportageconfig() { - # fetch redcore buildsystem (portage configuration) - pushd /opt > /dev/null 2>&1 - einfo "Injecting "$releasename"-"$releasetarget" buildsystem" - git clone https://gitlab.com/redcore/redcore-build.git - popd > /dev/null 2>&1 -} - -fetchfullportagetree() { - # fetch full portage tree - if [ ! -d ""$gentooportdir"/.git" ] ; then - einfo "Injecting mixedmode/srcmode (full) gentoo portage tree" - cd "$gentooportdir" && git init > /dev/null 2>&1 - git remote add origin https://gitlab.com/redcore/portage.git - git pull --depth=1 origin master - git branch -u origin/master master - rm -rf ""$gentooportdir"/profiles/updates" - fi -} - -fetchminimalportagetree() { - # fetch minimal portage tree - # in binmode we don't want the whole tree of gentoo ebuilds - # but we need portage profiles portage metadata && portage eclasses - # so make a sparse-checkout, to fetch only what we need - if [ ! -d ""$gentooportdir"/.git" ] ; then - einfo "Injecting binmode (minimal) gentoo portage tree" - cd "$gentooportdir" && git init > /dev/null 2>&1 - git remote add origin https://gitlab.com/redcore/portage.git - git config core.sparsecheckout true - echo "profiles/*" >> .git/info/sparse-checkout - echo "metadata/*" >> .git/info/sparse-checkout - echo "eclass/*" >> .git/info/sparse-checkout - echo ".gitignore" >> .git/info/sparse-checkout - git pull --depth=1 origin master - git branch -u origin/master master - rm -rf ""$gentooportdir"/profiles/updates" - fi -} - -fetchfulloverlays () { - # fetch full redcore overlay - if [ ! -d ""$redcoreportdir"/.git" ] ; then - einfo "Injecting "$releasename"-"$releasetarget" overlay" - cd "$redcoreportdir" && git init > /dev/null 2>&1 - git remote add origin https://gitlab.com/redcore/redcore-desktop.git - git pull --depth=1 origin master - git branch -u origin/master master - fi -} - -fetchminimaloverlays () { - # fetch minimal redcore overlay - if [ ! -d ""$redcoreportdir"/.git" ] ; then - einfo "Injecting binmode (minimal) "$releasename"-"$releasetarget" overlay" - cd "$redcoreportdir" && git init > /dev/null 2>&1 - git remote add origin https://gitlab.com/redcore/redcore-desktop.git - git config core.sparsecheckout true - echo "profiles/*" >> .git/info/sparse-checkout - echo "metadata/*" >> .git/info/sparse-checkout - echo "eclass/*" >> .git/info/sparse-checkout - git pull --depth=1 origin master - git branch -u origin/master master - fi -} - -setbinmodeconfig() { - # set make.conf to binmode, portage will always use binary packages from binhost - ln -sf "$portgitdir" "$portconfdir" - ln -sf "$portconfdir"/make.conf.amd64-binmode "$portconfdir"/make.conf - eselect profile set 1 - env-update - . /etc/profile -} - -setmixedmodeconfig() { - # set make.conf to mixedmode, portage will prefer binary packages over ebuilds - # but will use ebuilds if they are newer than binary packages from binhost - # or if the binary package is not available in binhost - ln -sf "$portgitdir" "$portconfdir" - ln -sf "$portconfdir"/make.conf.amd64-mixedmode "$portconfdir"/make.conf - eselect profile set 1 - env-update - . /etc/profile -} - -setsrcmodeconfig () { - # set make.conf to srcmode, portage will always use ebuilds - ln -sf "$portgitdir" "$portconfdir" - ln -sf "$portconfdir"/make.conf.amd64-srcmode "$portconfdir"/make.conf - eselect profile set 1 - env-update - . /etc/profile -} - -binmode() { - resetmode - fetchminimalportagetree - fetchminimaloverlays - fetchportageconfig - setbinmodeconfig -} - -mixedmode() { - resetmode - fetchfullportagetree - fetchfulloverlays - fetchportageconfig - setmixedmodeconfig -} - -srcmode() { - resetmode - fetchfullportagetree - fetchfulloverlays - fetchportageconfig - setsrcmodeconfig -} - -# help menu color variables - -export local colorstart="\e[1;49;34m" -export local colorstop="\e[0m" - -# help menu function - -showhelp () { - -echo -e "\ -"$colorstart"SYNOPSIS"$colorstop" - "$colorstart"vasile --option"$colorstop" ["$colorstart"arguments"$colorstop"] - "$colorstart"vasile --help"$colorstop" - -"$colorstart"DESCRIPTION"$colorstop" - - Vasile is an acronym for ** Versatile Advanced Script for Iso and Latest Enchantments ** - -"$colorstart"OPTIONS"$colorstop" - "$colorstart"--makepkg"$colorstop" ["$colorstart"package(s)"$colorstop"] - This option will allow you to build a package or multiple packages in an overlayfs mounted squashfs chroot jail. - - It must be run in the folder where the squashfs chroot jail resides, or else it will fail to mount the squahfs chroot jail and build the package(s). - - The squashfs chroot jail and the md5sum checksum file are hardcored into "$colorstart"libvasile"$colorstop", but you may want to change them to suit your needs. - - You MUST provide package(s) to build as arguments, or else vasile will only mount the chroot jail - - Examples : - "$colorstart"vasile --makepkg wine"$colorstop" - "$colorstart"vasile --makepkg wine playonlinux q4wine"$colorstop" - - If the package(s) is/are already built, it will not build it/them again (unless newer version(s) is/are available), but install it/them into squahfs chroot jail - - If the package(s) you want to build depends on any already built package(s) it will make use of it/them to satisfy the required dependencies. - - "$colorstart"--makeiso"$colorstop" - This option will allow you to build a live iso image based on the squashfs chroot jail. - - It must be run in the folder where the squashfs chroot jail resides, or else it will fail to rsync the contents of it and build the iso image. - - It is not fully automatic, it will only rsync the contents of the squashfs chroot jail, chroot into it, and let you install packages you want into the iso image. - There are some predefined package sets available in "$colorstart"/etc/portage/sets"$colorstop". Adjust them to suit your needs. - - It will ALLWAYS use package(s) built with "$colorstart"--makepkg"$colorstop" option. When you are happy with package selection, just exit the chroot environment and - the live filesystem will be compressed, live services will be autoenabled, live bootloader autoconfigured and in the end live iso image will be built. You will find - a list of predefined live services list hardcoded into "$colorstart"libvasile"$colorstop". Adjust it to suit your needs. - - "$colorstart"--resetmode"$colorstop" - This option will allow you to reset the system state. It will remove whole portage tree, overlays and portage configuration files and reset the system profile. Usually - you will never want to call this option directly, unless you really really really know what are you doing. It is called automatically when switching to other states. - - !!! WARNING !!! : Never never never leave the system in this state. You will no longer be able to install/remove/upgrade any packages untill you set the system profile, - get the portage tree, overlays and configure portage by hand. Or, you can always activate one of the three other supported system states. - - "$colorstart"--binmode"$colorstop" - This option will allow you to change the system state to binmode. In this state portage will allways use only binary packages from the binhost. It will fetch a minimal - portage tree without any ebuilds in it, but only with portage profiles, metadata and eclass. It will also fetch overlay and portage configuration files, and will adjust - "$colorstart"make.conf"$colorstop" for binary only usage. This system state is for those who just meet with the power of Gentoo. - - !!! WARNING !!! : Never never never modify or create any file in "$colorstart"/etc/portage/"$colorstop" in this state. - - "$colorstart"--mixedmode"$colorstop" - This option will allow you to change the system state to mixedmode. In this state portage will prefer binary packages from the binhost over ebuilds from the portage tree. - It will fetch the full portage tree, the overlay and portage configuration files, and adjust "$colorstart"make.conf"$colorstop" for binary/ebuild usage. Usually you will find this system state - useful if you want to install a package not available in the binhost, you want to upgrade a package to a newer version from portage tree or if you wanna rebuild a package - with your own useflags. - - !!! WARNING !!! : Never never never modify any file in "$colorstart"/etc/portage/"$colorstop" in this state. If you want to adjust useflags or keywords for a package, you can create a new file - e.g.: "$colorstart"100-my.package.use"$colorstop" in "$colorstart"/etc/portage/package.use/"$colorstop" or "$colorstart"100-my.package.keywords"$colorstop" in "$colorstart"/etc/portage/package.keywords/"$colorstop". - - "$colorstart"--srcmode"$colorstop" - This option will allow you to change the system state to srcmode. In more clear terms, it will transform your Kogaion/Argent/Redcore system into pure Gentoo. Binary packages - from the binhost will be ignored, and you will only install packages building from portage tree using emerge. It will fetch the full portage tree, the overlay and portage - configuration files and adjust "$colorstart"make.conf"$colorstop" for ebuild only usage. - - In this system state you can modify whatever you want in "$colorstart"/etc/portage/"$colorstop". You can adjust useflags, keywords, masks, build environment and rebuild the whole system to suit you. - You have the full power of Gentoo available only one command away! - - !!! WARNING !!! : Only use this system state if you have a strong knowledge of Gentoo tools e.g.: "$colorstart"emerge, equery, layman, eix, qlist, useflags, keywords, masks"$colorstop". " -exit 0 -} diff --git a/src/backend/libvasile.sh b/src/backend/libvasile.sh deleted file mode 100644 index 506ee5e..0000000 --- a/src/backend/libvasile.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -if [[ -f /lib/gentoo/functions.sh ]] ; then - source /lib/gentoo/functions.sh -else - echo "Cannot import Gentoo functions, I will abort now!" - exit 1 -fi - -if [[ -f /usr/lib/vasile/variables_jail.sh ]] ; then - source /usr/lib/vasile/variables_jail.sh -else - echo "Cannot import jail variables, I will abort now!" - exit 1 -fi - -if [[ -f /usr/lib/vasile/commands_jail.sh ]] ; then - source /usr/lib/vasile/commands_jail.sh -else - echo "Cannot import jail commands, I will abort now!" - exit 1 -fi - -if [[ -f /usr/lib/vasile/functions_generic.sh ]] ; then - source /usr/lib/vasile/functions_generic.sh -else - echo "Cannot import generic functions, I will abort now!" - exit 1 -fi - -if [[ -f /usr/lib/vasile/functions_makepkg.sh ]] ; then - source /usr/lib/vasile/functions_makepkg.sh -else - echo "Cannot import makepkg functions, I will abort now!" - exit 1 -fi - -if [[ -f /usr/lib/vasile/functions_makeiso.sh ]] ; then - source /usr/lib/vasile/functions_makeiso.sh -else - echo "Cannot import makeiso functions, I will abort now!" - exit 1 -fi - -if [[ -f /usr/lib/vasile/functions_modeswitch.sh ]] ; then - source /usr/lib/vasile/functions_modeswitch.sh -else - echo "Cannot import modeswitch functions, I will abort now!" - exit 1 -fi diff --git a/src/backend/variables_jail.sh b/src/backend/v_jail.sh index 4a08a26..4a08a26 100644 --- a/src/backend/variables_jail.sh +++ b/src/backend/v_jail.sh diff --git a/src/frontend/cli/vasile b/src/frontend/cli/vasile.sh index d64b617..aeb27b3 100755 --- a/src/frontend/cli/vasile +++ b/src/frontend/cli/vasile.sh @@ -6,14 +6,13 @@ # Import our variables and functions -source /usr/lib/vasile/libvasile +source /usr/lib/vasile/f_import.sh # Vasile need root privileges and a proper kernel to run # Also, running it in live mode is a really bad idea checkiflive -kernelconfig - +checkkerncfg case $1 in --makepkg) |