#!/bin/bash if [ $(id -u) != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # # Notes: start with clean /var/db/, if you have /var/cache/distfiles/ on host only rsync that to chroot # # dependencies # base install: genkernel btrfs-progs portage-utils gentoolkit cpuid2cpuflags cryptsetup lvm2 mdadm dev-vcs/git # # gitprefix="https://gitgud.io/cloveros/cloveros/raw/master" rootpassword=gentoox username=gentoox userpassword=gentoox builddate="20200101.graphite" #build_kde=y #clover_rice="y" #configure_user=y #build_iso=y if [[ ! -f 'image/etc/gentoo-release' ]]; then mkdir image/ cd image/ cp -v /var/tmp/catalyst/builds/default/stage3-amd64-$builddate.tar.xz . tar xJpf /var/tmp/catalyst/builds/default/stage3-amd64-$builddate.tar.xz --xattrs --numeric-owner rm -f stage3* cp ../0001-kernel-config-cfs-r2.patch usr/src rsync -a ../var/ var/ cp /etc/resolv.conf etc/ cd .. fi if [[ -z $(findmnt image/proc) ]]; then mount -t proc none image/proc mount --rbind /dev image/dev mount --rbind /sys image/sys else echo "proc already mounted..." fi cd image/ if [[ ! -f 'tmp/gentoox-base-done' ]]; then cat < /etc/portage/make.conf mkdir /etc/portage/env echo 'CFLAGS="\${CFLAGS} -fno-lto" CXXFLAGS="\${CFLAGS} -fno-lto"' > /etc/portage/env/nolto.conf echo 'dev-libs/elfutils nolto.conf dev-libs/libaio nolto.conf media-libs/alsa-lib nolto.conf media-libs/mesa nolto.conf media-libs/x264 nolto.conf dev-libs/weston nolto.conf sys-auth/elogind nolto.conf dev-lang/spidermonkey x11-drivers/xf86-video-intel nolto.conf x11-drivers/xf86-video-amdgpu nolto.conf x11-drivers/xf86-video-ati nolto.conf x11-drivers/xf86-video-intel nolto.conf' > /etc/portage/package.env echo 'sys-devel/gcc graphite sys-apps/kmod lzma sys-kernel/linux-firmware initramfs redistributable unknown-license x11-libs/libdrm libkms www-client/firefox hwaccel pgo lto wayland dev-lang/python sqlite sys-fs/squashfs-tools zstd sys-boot/grub:2 libzfs mount x11-libs/libxcb xkb' > /etc/portage/package.use/gentoox rm -rf /etc/portage/package.accept_keywords/ echo -n > /etc/portage/package.accept_keywords emerge --autounmask=y --autounmask-write=y -vDN @world emerge -v gentoo-sources genkernel btrfs-progs portage-utils gentoolkit cpuid2cpuflags cryptsetup lvm2 mdadm dev-vcs/git touch /tmp/gentoox-base-done HEREDOC #rsync -av --delete var/cache/{binpkgs,distfiles} ../var/cache/ exit 0 else echo "base system already compiled, skipping..."; fi if [[ ! -f 'tmp/gentoox-kernel-done' ]]; then cat <> .config sed -i "s/CONFIG_ISO9660_FS=m/CONFIG_ISO9660_FS=y/" .config patch -p1 < 0007-v5.4-fsync.patch patch -p1 < 0011-ZFS-fix.patch make oldconfig touch /tmp/gentoox-kernelpatches-applied fi cd .. rm -f 0001-kernel-config-cfs-r2.patch genkernel --kernel-config=/usr/src/linux-\$KERNELVERSION-gentoo/.config --no-mrproper --microcode --luks --lvm --mdadm --btrfs --disklabel all XZ_OPT="--lzma1=preset=9e,dict=128MB,nice=273,depth=200,lc=4" tar --lzma -cf /usr/src/kernel-gentoox.tar.lzma /boot/*\${KERNELVERSION}* -C /lib/modules/ . emerge -v squashfs-tools linux-firmware os-prober grub:2 touch /tmp/gentoox-kernel-done HEREDOC cp -v usr/src/kernel-gentoox.tar.lzma ../ exit 0 else echo "kernel already compiled, skipping..."; fi if [[ ! -f 'tmp/gentoox-weston-done' ]]; then cat <> /etc/portage/package.accept_keywords emerge sys-config/ltoize sed -i '1s/^/source make.conf.lto\n/' /etc/portage/make.conf sed -i '1s/^/NTHREADS="12"\n/' /etc/portage/make.conf emerge -v --jobs=4 --keep-going=y --autounmask=y --autounmask-write=y --deep --newuse kde-plasma/plasma-meta kde-apps/kde-apps-meta firefox mpv cd /home/$username/ echo 'exec dbus-launch --exit-with-session startplasma-x11' > .xinitrc chown -R $username /home/$username/ HEREDOC exit 0 fi if [[ ! -z $configure_user ]]; then cat <> /etc/locale.gen locale-gen eselect locale set en_US.utf8 echo "frozen-files=\"/etc/sudoers\"" >> /etc/dispatch-conf.conf sed -i "s/# %wheel ALL=(ALL) NOPASSWD: ALL/%wheel ALL=(ALL) NOPASSWD: ALL/" /etc/sudoers sed -Ei "s@c([2-6]):2345:respawn:/sbin/agetty 38400 tty@#\0@" /etc/inittab sed -i "s@c1:12345:respawn:/sbin/agetty 38400 tty1 linux@c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux@" /etc/inittab echo -e "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel\nupdate_config=1" > /etc/wpa_supplicant/wpa_supplicant.conf eselect fontconfig enable 52-infinality.conf eselect infinality set infinality eselect lcdfilter set infinality usermod -aG audio,video,games,input $username HEREDOC exit 0 fi if [[ ! -z $clover_rice ]]; then cat < Desktop/home.desktop echo -e "[Desktop Entry]\nEncoding=UTF-8\nType=Link\nName=Applications\nIcon=folder\nExec=spacefm /usr/share/applications/" > Desktop/applications.desktop cp /usr/share/applications/{firefox.desktop,mpv.desktop,emacs.desktop,zzz-gimp.desktop,porthole.desktop,xarchiver.desktop} Desktop/ echo -e "~rows=0\n1=home.desktop\n2=applications.desktop\n3=porthole.desktop\n4=firefox.desktop\n5=mpv.desktop\n6=emacs.desktop\n7=zzz-gimp.desktop\n8=xarchiver.desktop" > .config/spacefm/desktop0 chown -R $username /home/$username/ wget $gitprefix/livecd_install.sh -P /home/$username/ chmod +x /home/$username/livecd_install.sh sed -i "s@c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux@c1:12345:respawn:/sbin/agetty -a $username --noclear 38400 tty1 linux@" /etc/inittab sed -i "s/^/#/" /home/$username/.bash_profile echo -e 'if [ -z "\$DISPLAY" ] && [ -z "\$SSH_CLIENT" ] && ! pgrep X > /dev/null; then X & export DISPLAY=:0 fvwm & while sleep 0.2; do if [ -d /proc/\$! ]; then ((i++)); [ "\$i" -gt 6 ] && break; else i=0; fvwm & fi; done urxvtd -o -f urxvtc -geometry 80x24+100+100 -e sudo ./livecd_install.sh rc-config start wpa_supplicant &> /dev/null & nitrogen --set-zoom wallpaper.png & spacefm --desktop & urxvtc -geometry 1000x1+0+0 -fn 6x13 -letsp 0 -sl 0 -e ~/stats.sh xinput set-prop "SynPS/2 Synaptics TouchPad" "libinput Tapping Enabled" 1 & xinput list --name-only | sed "/Virtual core pointer/,/Virtual core keyboard/"\!"d;//d" | xargs -I{} xinput set-prop pointer:{} "libinput Accel Profile Enabled" 0 1 &> /dev/null & fi' >> /home/$username/.bash_profile HEREDOC exit 0 fi if [[ ! -z $build_iso ]]; then #rm -Rf /var/cache/binpkgs/* /var/cache/edb/binhost/* /etc/resolv.conf #rm -f /tmp/* #ToDo: clear bash history, truncate logs in /var/log/ cd .. umount -l image/* mv image/usr/src/kernel-gentoox.tar.lzma . mksquashfs image/ image.squashfs -b 1M -comp xz -Xbcj x86 -Xdict-size 1M mkdir iso/ builddate=$(wget -O - http://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal/ | sed -nr "s/.*href=\"install-amd64-minimal-([0-9].*).iso\">.*/\1/p") if [[ ! -f "current-install-amd64-minimal/install-amd64-minimal-$builddate.iso" ]]; then wget http://distfiles.gentoo.org/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-$builddate.iso fi xorriso -osirrox on -indev *-$builddate.iso -extract / iso/ mv image.squashfs iso/image.squashfs tar -xOf kernel-gentoox.tar.lzma --wildcards \*vmlinuz-\* > iso/boot/gentoo tar -xOf kernel-gentoox.tar.lzma --wildcards \*initramfs-\* | xz -d | gzip > iso/boot/gentoo.igz tar -xOf kernel-gentoox.tar.lzma --wildcards \*System.map-\* > iso/boot/System-gentoo.map sed -i "s@dokeymap@aufs@g" iso/isolinux/isolinux.cfg sed -i "s@dokeymap@aufs@g" iso/grub/grub.cfg xorriso -as mkisofs -r -J \ -joliet-long -l -cache-inodes \ -isohybrid-mbr /usr/share/syslinux/isohdpfx.bin \ -partition_offset 16 -A "Gentoo Live" \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -o Gentoox-x86_64-$builddate.iso iso/ #rm -Rf image/ iso/ kernel-gentoox.tar.lzma fi