summaryrefslogtreecommitdiffstats
path: root/gentoox_build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'gentoox_build.sh')
-rwxr-xr-xgentoox_build.sh297
1 files changed, 297 insertions, 0 deletions
diff --git a/gentoox_build.sh b/gentoox_build.sh
new file mode 100755
index 0000000..0b06ca8
--- /dev/null
+++ b/gentoox_build.sh
@@ -0,0 +1,297 @@
+#!/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 <<HEREDOC | chroot .
+source /etc/profile && export PS1="(chroot) \$PS1"
+mkdir /etc/portage/repos.conf
+cp /usr/share/portage/config/repos.conf /etc/portage/repos.conf/gentoo.conf
+emerge-webrsync
+emerge --sync
+eselect profile set "default/linux/amd64/17.1"
+echo 'COMMON_FLAGS="-O3 -march=sandybridge -mtune=sandybridge -mfpmath=both -pipe -funroll-loops -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=12 -fuse-linker-plugin -malign-data=cacheline -Wl,--hash-style=gnu"
+CFLAGS="\${COMMON_FLAGS}"
+CXXFLAGS="\${COMMON_FLAGS}"
+FCFLAGS="\${COMMON_FLAGS}"
+FFLAGS="\${COMMON_FLAGS}"
+RUSTFLAGS="-C target-cpu=native"
+CPU_FLAGS_X86="aes avx mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
+MAKEOPTS="-j12"
+USE="-bindist"
+#FEATURES="buildpkg noclean"
+FEATURES="buildpkg"
+ACCEPT_KEYWORDS="~amd64"
+ACCEPT_LICENSE="*"
+PORTAGE_NICENESS=19
+GENTOO_MIRRORS="http://gentoo.ussg.indiana.edu/"
+EMERGE_DEFAULT_OPTS="--jobs=4"
+PORTDIR="/var/db/repos/gentoo"
+DISTDIR="/var/cache/distfiles"
+PKGDIR="/var/cache/binpkgs"
+LC_MESSAGES=C' > /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 <<HEREDOC | chroot .
+source /etc/profile && export PS1="(chroot) \$PS1"
+KERNELVERSION=\$(qlist -Iv gentoo-sources | tr '-' ' ' | awk '{print \$4}')
+cd /usr/src/linux/
+
+if [[ ! -f '/tmp/gentoox-kernelpatches-applied' ]]; then
+ wget 'https://gitea.artixlinux.org/artixlinux/packages-kernel/raw/branch/master/linux/trunk/config' -O .config
+ git clone https://github.com/graysky2/kernel_gcc_patch.git
+ wget https://gitlab.com/post-factum/pf-kernel/commit/cf7a8ad26e0bd6ca8afba89f53d2e9dc43ee2598.diff -O O3-always-available.diff
+ #wget --quiet -m -np -c 'ck.kolivas.org/patches/5.0/5.4/5.4-ck1/patches/'
+ #wget https://gitlab.com/sirlucjan/kernel-patches/raw/master/5.4/aufs-patches/0001-aufs-20191223.patch
+ wget https://raw.githubusercontent.com/sirlucjan/kernel-patches/master/5.4/aufs-patches/0001-aufs-20200113.patch
+ wget https://git.froggi.es/tkg/PKGBUILDS/raw/master/linux54-tkg/linux54-tkg-patches/0007-v5.4-fsync.patch
+ wget https://git.froggi.es/tkg/PKGBUILDS/raw/master/linux54-tkg/linux54-tkg-patches/0011-ZFS-fix.patch
+
+ patch -p1 < kernel_gcc_patch/enable_additional_cpu_optimizations_for_gcc_v9.1+_kernel_v4.13+.patch
+ patch -p1 < O3-always-available.diff
+ #for f in ck.kolivas.org/patches/5.0/5.4/5.4-ck1/patches/*.patch; do patch -p1 < "\$f"; done
+ patch -p0 < ../0001-kernel-config-cfs-r2.patch
+ patch -p1 < 0001-aufs-20200113.patch
+ echo -e "CONFIG_AUFS_FS=y\nCONFIG_AUFS_BRANCH_MAX_127=y\nCONFIG_AUFS_BRANCH_MAX_511=n\nCONFIG_AUFS_BRANCH_MAX_1023=n\nCONFIG_AUFS_BRANCH_MAX_32767=n\nCONFIG_AUFS_HNOTIFY=y\nCONFIG_AUFS_EXPORT=n\nCONFIG_AUFS_XATTR=y\nCONFIG_AUFS_FHSM=y\nCONFIG_AUFS_RDU=n\nCONFIG_AUFS_DIRREN=n\nCONFIG_AUFS_SHWH=n\nCONFIG_AUFS_BR_RAMFS=y\nCONFIG_AUFS_BR_FUSE=n\nCONFIG_AUFS_BR_HFSPLUS=n\nCONFIG_AUFS_DEBUG=n" >> .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 <<HEREDOC | chroot .
+source /etc/profile && export PS1="(chroot) \$PS1"
+sed -i -r "s/^USE=\"([^\"]*)\"$/USE=\"\1 elogind -consolekit -systemd udev dbus X wayland gles plymouth pulseaudio ffmpeg ipv6\"/g" /etc/portage/make.conf
+FEATURES="-userpriv" emerge dev-lang/yasm # yasm fails to build otherwise
+
+emerge -v --autounmask=y --autounmask-write=y --keep-going=y --deep --newuse xorg-server elogind sudo vim weston wpa_supplicant nfs-utils cifs-utils dhcpcd zsh zsh-completions
+#emerge -v --depclean
+rc-update add dhcpcd default
+touch /tmp/gentoox-weston-done
+HEREDOC
+exit 0
+fi
+
+
+if [[ ! -z $build_kde ]]; then
+cat <<HEREDOC | chroot .
+source /etc/profile && export PS1="(chroot) \$PS1"
+eselect profile set "default/linux/amd64/17.1/desktop/plasma"
+sed -i -r "s/^USE=\"([^\"]*)\"$/USE=\"\1 -webkit\"/g" /etc/portage/make.conf
+
+mkdir -p /etc/portage/patches/media-libs/dav1d
+wget https://raw.githubusercontent.com/InBetweenNames/gentooLTO/master/sys-config/ltoize/files/patches/media-libs/dav1d/dav1d-graphite-ice-workaround.patch -P /etc/portage/patches/media-libs/dav1d/
+
+emerge layman
+layman --sync-all
+layman --add mv
+layman --add lto-overlay
+echo 'sys-config/ltoize ~amd64
+app-portage/portage-bashrc-mv ~amd64
+app-shells/runtitle ~amd64' >> /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 <<HEREDOC | chroot .
+source /etc/profile && export PS1="(chroot) \$PS1"
+
+echo "root:$rootpassword" | chpasswd
+useradd $username
+echo "$username:$userpassword" | chpasswd
+gpasswd -a $username wheel
+
+cp /usr/share/zoneinfo/UTC /etc/localtime
+echo "en_US.UTF-8 UTF-8" >> /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 <<HEREDOC | chroot .
+cd /home/$username/
+rm .bash_profile
+wget $gitprefix/home/user/{.bash_profile,.zprofile,.zshrc,.fvwm2rc,.Xdefaults,.xbindkeysrc,screenfetch-dev,stats.sh,rotate_screen.sh,.emacs,.rtorrent.rc}
+wget $gitprefix/home/user/.mpv/config -P .mpv/
+wget $gitprefix/home/user/.config/mimeapps.list -P .config/
+echo -e "[Desktop Entry]\nEncoding=UTF-8\nType=Link\nName=Home\nIcon=user-home\nExec=spacefm ~/" > 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
+