summaryrefslogtreecommitdiffstats
path: root/gentoox_build.sh
blob: 99a74ee8eb498f233db73978f421a51468ca6aae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
#!/bin/bash
if [ $(id -u) != "0" ]; then
	echo "This script must be run as root" 1>&2
	exit 1
fi

#
# Notes
# • review 'stage3tarball' variable before running the script, once the 'base' is built you may uncomment build_weston=y and run the script again
# • if at any point something fails to compile you can Ctrl+C kill the script and manually chroot into the OS build with './gentoox_build.sh chroot'
#

gitprefix="https://gitgud.io/cloveros/cloveros/raw/master"
rootpassword=gentoox
username=gentoox
userpassword=gentoox
builddate="$(date +%Y%m%d).graphite"
builddir="build-$(date +%Y%m%d)"
stage3tarball="stage3-amd64-20211117.graphite.tar.xz"
KERNEL_CONFIG_DIFF="0001-kernel-config-cfs-r8.patch"

binpkgs="$(pwd)/var/cache/binpkgs/"
distfiles="$(pwd)/var/cache/distfiles/"

#build_weston=y
#build_kde=y
#build_steam=y
#build_extra=y
#build_wine=y
#configure_user=y
#configure_weston=y
#clover_rice="y"
#build_iso=y


if [[ ! -d $builddir ]]; then mkdir -v $builddir; fi
cd $builddir

if [[ ! -f 'image/etc/gentoo-release' ]]; then
  ntpd -qg > /dev/null
  mkdir image/
  cd image/

  if [[ -f "../../$stage3tarball" ]]; then
    cp -v "../../$stage3tarball" .
  else
    cp -v /var/tmp/catalyst/builds/default/stage3-amd64-$builddate.tar.xz .
  fi
  if [[ $? -ne 0 ]]; then echo "you need to build stage3 tarball that has gcc graphite support first via build-stage3.sh"; exit 1; fi

  echo 'extracting stage3 tarball...'
  tar xJpf stage3* --xattrs --numeric-owner
  rm -f stage3*

  cp ../../gentoox-patches/$KERNEL_CONFIG_DIFF usr/src
  cp ../../gentoox-patches/0011-ZFS-fix.patch usr/src
  cp ../../gentoox-patches/portage-change-rsync-to-git-repos.diff usr/src
  cp ../../gentoox-patches/zfs-ungpl-rcu_read_unlock-export.diff usr/src
  mkdir -p etc/portage/patches
  cp -r ../../patches/* etc/portage/patches/
  cp ../../60-ioschedulers.rules etc/udev/rules.d/
  cp ../../my.start etc/local.d/

  mkdir -p etc/portage/patches/www-client/firefox
  wget --quiet -P etc/portage/patches/www-client/firefox/ 'https://raw.githubusercontent.com/bmwiedemann/openSUSE/master/packages/m/MozillaFirefox/firefox-kde.patch'
  wget --quiet -P etc/portage/patches/www-client/firefox/ 'https://raw.githubusercontent.com/bmwiedemann/openSUSE/master/packages/m/MozillaFirefox/mozilla-kde.patch'
  wget --quiet -P etc/portage/patches/www-client/firefox/ 'https://bazaar.launchpad.net/~mozillateam/firefox/firefox-trunk.head/download/ricotz%40ubuntu.com-20210119184254-9ag3yy5sw3i4autd/unitymenubar.patch-20130215095938-1n6mqqau8tdfqwhg-1/unity-menubar.patch'

  mkdir -p etc/portage/package.mask
  mkdir -p etc/portage/package.unmask
  cp ../../package.mask/* etc/portage/package.mask/

  cp ../../archlinux-tools/arch-chroot usr/local/sbin/
  cp ../../archlinux-tools/genfstab usr/local/sbin/

  cp ../../mpv-kio.sh usr/local/bin/

  if [[ ! -z $binpkgs ]] && [[ ! -z $distfiles ]]; then
    #rsync -a $binpkgs var/cache/binpkgs/
    #rsync -a $distfiles var/cache/distfiles/
    mkdir -p $binpkgs
    mkdir -p $distfiles
    mount --bind $binpkgs var/cache/binpkgs/
    mount --bind $distfiles var/cache/distfiles/
  fi

  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
  if [[ -z $(findmnt image/var/cache/binpkgs) ]]; then
    mount --bind $binpkgs image/var/cache/binpkgs/
    mount --bind $distfiles image/var/cache/distfiles/
  fi
else
  echo "proc already mounted..."
fi
cd image/

if [[ $# -ge 1 ]]; then
  case $1 in
    "chroot")
      chroot . /bin/bash -i
      #env-update
      #chmod 777 /tmp
      umount -l var/cache/binpkgs
      umount -l var/cache/distfiles
      umount -l {dev,proc,sys}
      exit 0
      ;;
  esac
fi

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 --quiet
emerge --sync --quiet
eselect profile set "default/linux/amd64/17.1"
echo 'COMMON_FLAGS="-O3 -march=sandybridge -mtune=sandybridge -pipe -fomit-frame-pointer -fno-math-errno -fno-trapping-math -funroll-loops -mfpmath=both -malign-data=cacheline -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin"
CFLAGS="\${COMMON_FLAGS}"
CXXFLAGS="\${COMMON_FLAGS}"
FCFLAGS="\${COMMON_FLAGS}"
FFLAGS="\${COMMON_FLAGS}"
RUSTFLAGS="-C opt-level=3 -C target-cpu=sandybridge"
#LDFLAGS="\${COMMON_FLAGS} \${LDFLAGS} -Wl,-O1 -Wl,--as-needed -Wl,-fuse-ld=bfd"
CPU_FLAGS_X86="aes mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
MAKEOPTS="-j8"
USE="-bindist"
#FEATURES="buildpkg noclean"
FEATURES="buildpkg"
ACCEPT_KEYWORDS="~amd64"
ACCEPT_LICENSE="*"
PORTAGE_NICENESS=19
GENTOO_MIRRORS="https://gentoo.osuosl.org/"
EMERGE_DEFAULT_OPTS="--jobs=2"
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
LC_MESSAGES=C
RUBY_TARGETS="ruby27 ruby30"' > /etc/portage/make.conf

mkdir /etc/portage/env
echo 'CFLAGS="\${CFLAGS} -fno-lto"
CXXFLAGS="\${CFLAGS} -fno-lto"' > /etc/portage/env/nolto.conf
echo 'CFLAGS="${CFLAGS} -Wno-error=missing-prototypes"
CXXFLAGS="${CFLAGS} -Wno-error=missing-prototypes"' > /etc/portage/env/no-error-on-missing-prototype.conf
echo 'CFLAGS="-O3 -march=sandybridge -mtune=sandybridge -fno-tree-slp-vectorize -pipe"
CXXFLAGS="${CFLAGS}"' > /etc/portage/env/O3nolto-noslp.conf
echo 'CFLAGS="-O2 -march=sandybridge -mtune=sandybridge -pipe"
CXXFLAGS="\${CFLAGS}"' > /etc/portage/env/O2nolto.conf
echo 'CFLAGS="-O3 -march=sandybridge -mtune=sandybridge -pipe"
CXXFLAGS="\${CFLAGS}"' > /etc/portage/env/O3nolto.conf

echo 'sys-libs/glibc O3nolto-noslp.conf
dev-libs/elfutils nolto.conf
app-crypt/efitools nolto.conf
sys-libs/efivar nolto.conf
dev-libs/libaio nolto.conf
app-arch/bzip2 O3nolto.conf
dev-libs/libbsd nolto.conf
sys-apps/sandbox nolto.conf
media-libs/opencv O3nolto.conf' > /etc/portage/package.env

echo 'sys-devel/gcc graphite lto pgo zstd
dev-libs/elfutils zstd
sys-libs/glibc custom-cflags
sys-devel/llvm gold
sys-apps/kmod lzma
sys-kernel/linux-firmware initramfs redistributable unknown-license
x11-libs/libdrm libkms
media-libs/mesa d3d9 lm-sensors opencl vaapi vdpau vulkan vulkan-overlay xa xvmc
media-libs/libsdl2 gles2
www-client/firefox -system-av1 -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite -system-harfbuzz -system-webp hwaccel pgo lto wayland clang
mail-client/thunderbird hwaccel lto
dev-libs/boost python zstd
dev-lang/python sqlite pgo tk
sys-fs/squashfs-tools zstd
sys-boot/grub:2 mount libzfs
x11-libs/libxcb xkb
dev-db/sqlite secure-delete
x11-base/xorg-server xvfb
sys-apps/xdg-desktop-portal screencast
dev-vcs/git tk
dev-libs/libjcat pkcs7 gpg
dev-libs/libdbusmenu gtk3
net-misc/curl http2
dev-libs/apr-util ldap
sys-apps/util-linux caps
*/* PYTHON_TARGETS: python2_7 python3_10
*/* PYTHON_SINGLE_TARGET: -* python3_10
app-misc/lirc python_single_target_python3_9
media-gfx/blender python_single_target_python3_9
dev-libs/libnatspec python_single_target_python2_7
dev-lang/yasm python_single_target_python2_7
media-libs/libcaca python_single_target_python2_7
gnome-base/libglade python_single_target_python2_7' > /etc/portage/package.use/gentoox

rm -rf /etc/portage/package.accept_keywords/
echo -n > /etc/portage/package.accept_keywords

#unmask gcc/glibc to prompt installation of masked 9999 packages
#echo 'sys-devel/gcc' >> /etc/portage/package.unmask/gcc
#echo 'sys-devel/gcc **' >> /etc/portage/package.accept_keywords
#echo 'sys-libs/glibc' >> /etc/portage/package.unmask/glibc
#echo 'sys-libs/glibc **' >> /etc/portage/package.accept_keywords

emerge -vN1 gcc  # install latest gcc now that it has been unmasked, or if above lines are commented this will rebuild gcc with 'lto pgo zstd' flags
emerge --autounmask=y --autounmask-write=y -vueDN --with-bdeps=y --exclude gcc @world  # rebuild entire system with fresh gcc

emerge -v gentoo-sources genkernel portage-utils gentoolkit cpuid2cpuflags cryptsetup lvm2 mdadm dev-vcs/git btrfs-progs app-arch/lz4 ntfs3g dosfstools exfat-utils f2fs-tools gptfdisk efitools shim syslog-ng logrotate
emerge --noreplace app-editors/nano

# set portage to use git repos
patch -p1 < /usr/src/portage-change-rsync-to-git-repos.diff
rm -rf /var/db/repos/gentoo/*
rm -rf /var/db/repos/gentoo/.*
emerge --sync

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}')

#echo -e '\nPLYMOUTH="yes"
#PLYMOUTH_THEME="fade-in"' >> /etc/genkernel.conf
#echo -e '\nrc_interactive="NO"' >> /etc/rc.conf
eselect kernel set 1
cd /usr/src/linux/

if [[ ! -f '/tmp/gentoox-kernelpatches-applied' ]]; then
  wget --quiet 'https://raw.githubusercontent.com/archlinux/svntogit-packages/packages/linux/trunk/config' -O .config
  cp .config .config.org
  #wget --quiet -m -np -c 'ck.kolivas.org/patches/5.0/5.12/5.12-ck1/patches/'
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/android-patches-v2/0001-android-export-symbold-and-enable-building-ashmem-an.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/arch-patches-v10/0001-arch-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/btrfs-patches-v9/0001-btrfs-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/clearlinux-patches-v2/0001-clearlinux-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/cpu-patches-v2/0001-cpu-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/fixes-miscellaneous-v9/0001-fixes-miscellaneous.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/mm-patches-v2/0001-mm-protect-mappings-under-memory-pressure.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/futex-patches-v2/0001-futex-resync-from-gitlab.collabora.com.patch
  #wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/futex2-patches/0001-futex2-resync-from-gitlab.collabora.com.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/zstd-patches/0001-zstd-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/zstd-dev-patches-v5/0001-zstd-dev-patches.patch
  wget --quiet https://raw.githubusercontent.com/ptr1337/kernel-patches/master/CacULE/v5.15/cacule-5.15-full.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/xanmod-patches-v5/0001-xanmod-patches.patch
  #wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/lru-patches-le9-v4/0001-lru-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/bbr2-patches/0001-bbr2-5.15-introduce-BBRv2.patch
  #wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/bcachefs-patches/0001-bcachefs-5.15-introduce-bcachefs-patchset.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/ntfs3-patches-v2/0001-ntfs3-patches.patch

  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/amd64-patches-v2/0001-amd64-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/cpufreq-patches-v6/0001-cpufreq-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/intel-patches/0001-intel-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/hwmon-patches-v8/0001-hwmon-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/lqx-patches-v4/0001-lqx-patches.patch
  wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/v4l2loopback-patches-v2/0001-v4l2loopback-patches.patch

  #wget --quiet https://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git/patch/?id=86ad60a65f29dd862a11c22bb4b5be28d6c5cef1 -O x86_aes-ni-xts_use_direct_calls_to_and_4-way_stride.patch
  #wget --quiet https://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git/patch/?id=2481104fe98d5b016fdd95d649b1235f21e491ba -O x86_aes-ni-xts_rewrite_and_drop_indirections_via_glue_helper.patch

  #for f in ck.kolivas.org/patches/5.0/5.12/5.12-ck1/patches/*.patch; do patch -p1 < "\$f"; done
  patch -p1 < 0001-cpu-patches.patch
  patch -p0 < ../$KERNEL_CONFIG_DIFF

  # Aufs
  git clone --single-branch --branch aufs5.x-rcN https://github.com/sfjro/aufs5-standalone.git
  cp -r aufs5-standalone/fs/aufs/ fs/
  cp aufs5-standalone/include/uapi/linux/aufs_type.h include/uapi/linux/
  patch -p1 < aufs5-standalone/aufs5-kbuild.patch
  patch -p1 < aufs5-standalone/aufs5-base.patch
  patch -p1 < aufs5-standalone/aufs5-mmap.patch
  #patch -p1 < aufs5-standalone/aufs5-standalone.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

  # Anbox
  patch -p1 < 0001-android-export-symbold-and-enable-building-ashmem-an.patch
  scripts/config --enable CONFIG_ASHMEM
  scripts/config --enable CONFIG_ANDROID
  scripts/config --enable CONFIG_ANDROID_BINDER_IPC
  scripts/config --enable CONFIG_ANDROID_BINDERFS
  scripts/config --set-str CONFIG_ANDROID_BINDER_DEVICES "binder,hwbinder,vndbinder"

  patch -p1 < 0001-arch-patches.patch
  patch -p1 < 0001-btrfs-patches.patch
  patch -p1 < 0001-clearlinux-patches.patch
  patch -p1 < 0001-fixes-miscellaneous.patch
  patch -p1 < 0001-futex-resync-from-gitlab.collabora.com.patch
  #patch -p1 < 0001-futex2-resync-from-gitlab.collabora.com.patch
  patch -p1 < ../0011-ZFS-fix.patch
  patch -p1 < ../zfs-ungpl-rcu_read_unlock-export.diff
  patch -p1 < 0001-zstd-dev-patches.patch
  patch -p1 < 0001-zstd-patches.patch
  patch -p1 < cacule-5.15-full.patch
  patch -p1 < 0001-xanmod-patches.patch
  #patch -p1 < 0001-lru-patches.patch
  patch -p1 < 0001-mm-protect-mappings-under-memory-pressure.patch
  patch -p1 < 0001-bbr2-5.15-introduce-BBRv2.patch
  #patch -p1 < 0001-bcachefs-5.15-introduce-bcachefs-patchset.patch
  patch -p1 < 0001-ntfs3-patches.patch

  patch -p1 < 0001-amd64-patches.patch
  patch -p1 < 0001-cpufreq-patches.patch
  patch -p1 < 0001-intel-patches.patch
  patch -p1 < 0001-hwmon-patches.patch
  patch -p1 < 0001-lqx-patches.patch
  patch -p1 < 0001-v4l2loopback-patches.patch

  #patch -p1 < x86_aes-ni-xts_use_direct_calls_to_and_4-way_stride.patch
  #patch -p1 < x86_aes-ni-xts_rewrite_and_drop_indirections_via_glue_helper.patch

  # Linux Random Number Generator patch.  http://www.chronox.de/lrng.html
  git clone --depth 1 --filter=blob:none --sparse https://github.com/smuellerDD/lrng.git lrng-5.15; cd lrng-5.15
  git sparse-checkout init --cone; git sparse-checkout set kernel_patches/v5.15; cd ..
  for f in lrng-5.15/kernel_patches/v5.15/*.patch; do patch -p1 < "\$f"; done
echo 'CONFIG_LRNG=y
CONFIG_LRNG_CONTINUOUS_COMPRESSION_DISABLED=y
CONFIG_LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION=y
CONFIG_LRNG_COLLECTION_SIZE_1024=y
CONFIG_LRNG_COLLECTION_SIZE=1024
CONFIG_LRNG_DRNG_SWITCH=y
CONFIG_LRNG_KCAPI_HASH=y
CONFIG_LRNG_DRBG=y
CONFIG_LRNG_RCT_CUTOFF=31
CONFIG_LRNG_APT_CUTOFF=325
CONFIG_LRNG_JENT=y
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG=y' >> .config

  sed -i 's/CONFIG_DEFAULT_HOSTNAME="archlinux"/CONFIG_DEFAULT_HOSTNAME="gentoox"/' .config
  sed -i 's/CONFIG_LOCALVERSION=""/CONFIG_LOCALVERSION="-x86_64"/' .config
  sed -i 's/CONFIG_SQUASHFS=m/CONFIG_SQUASHFS=y/' .config
  sed -i 's/CONFIG_BLK_DEV_LOOP=m/CONFIG_BLK_DEV_LOOP=y/' .config
  sed -i 's/CONFIG_BLK_DEV_CRYPTOLOOP=m/CONFIG_BLK_DEV_CRYPTOLOOP=y/' .config
  sed -i 's/CONFIG_NET_IP_TUNNEL=y/CONFIG_NET_IP_TUNNEL=m/' .config
  sed -i 's/CONFIG_NET_UDP_TUNNEL=y/CONFIG_NET_UDP_TUNNEL=m/' .config
  sed -i 's/EXTRAVERSION = -gentoo-r1/EXTRAVERSION = -gentoo/' Makefile
  make oldconfig
  find . -name  "*.orig" -exec rm -f {} \;
  find . -name  "*.rej" -exec rm -f {} \;
  touch /tmp/gentoox-kernelpatches-applied
fi

cd /usr/src
#rm -f $KERNEL_CONFIG_DIFF
#mkdir -p /usr/share/genkernel/distfiles/
#wget https://www.busybox.net/downloads/busybox-1.20.2.tar.bz2 -d /usr/share/genkernel/distfiles/
#echo -e '\nMAKEOPTS="-j12"' >> /etc/genkernel.conf

# former command is genkernel-next (systemd only), latter is for genkernel
#genkernel --kernel-config=/usr/src/linux-\$KERNELVERSION-gentoo/.config --no-mrproper --udev --plymouth --luks --lvm --mdadm --btrfs --zfs all
genkernel --kernel-config=/usr/src/linux-\$KERNELVERSION-gentoo/.config --no-mrproper kernel

#unmask zfs to prompt installation of masked zfs-9999 zfs-kmod-9999
echo 'sys-fs/zfs
sys-fs/zfs-kmod' >> /etc/portage/package.unmask/zfs
echo 'sys-fs/zfs **
sys-fs/zfs-kmod **' >> /etc/portage/package.accept_keywords
emerge -v grub:2 squashfs-tools linux-firmware os-prober zfs zfs-kmod
hostid > /etc/hostid
dd if=/dev/urandom of=/dev/stdout bs=1 count=4 > /etc/hostid

genkernel --kernel-config=/usr/src/linux/.config --compress-initramfs-type=zstd --microcode --luks --lvm --mdadm --btrfs --zfs initramfs
tar --zstd -cf /usr/src/kernel-gentoox.tar.zst /boot/*\${KERNELVERSION}* -C /lib/modules/ .

kver=\$(uname -r)
cd /usr/src/uefi/
sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-\$kver --output vmlinuz-\$kver.signed
mv vmlinuz-\$kver.signed /boot/vmlinuz-\$kver
cp -r /lib/modules/\$kver/{kernel,extra,misc}/ .
./mod-sign.sh MOK.priv MOK.der ./kernel/
./mod-sign.sh MOK.priv MOK.der ./extra/
./mod-sign.sh MOK.priv MOK.der ./misc/
cp -r ./kernel/ ./extra/ ./misc/ /lib/modules/\$kver/
rm -rf kernel extra misc

sed -i "s/#GRUB_CMDLINE_LINUX_DEFAULT=\"\"/GRUB_CMDLINE_LINUX_DEFAULT=\"zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold dobtrfs\"/" /etc/default/grub
sed -i "s/#GRUB_GFXMODE=640x480/GRUB_GFXMODE=auto/" /etc/default/grub
sed -i "s/#GRUB_GFXPAYLOAD_LINUX=/GRUB_GFXPAYLOAD_LINUX=keep/" /etc/default/grub
rc-update add zfs-import boot
rc-update add zfs-mount boot
touch /tmp/gentoox-kernel-done
HEREDOC
cp -v usr/src/kernel-gentoox.tar.lzma ../
exit 0
else echo "kernel already compiled, skipping..."; fi


if [[ ! -z $build_weston ]] && [[ ! -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 vulkan plymouth pulseaudio ffmpeg ipv6 bluetooth zstd avif heif jpeg2k webp\"/g" /etc/portage/make.conf

# install lto-overlay
emerge layman
layman --sync-all
yes | layman --add mv
yes | layman --add lto-overlay
echo 'sys-config/ltoize ~amd64
app-portage/portage-bashrc-mv ~amd64
app-shells/runtitle ~amd64' >> /etc/portage/package.accept_keywords
mkdir -p /etc/portage/package.mask /etc/portage/package.unmask
echo '*/*::mv' >> /etc/portage/package.mask/lowprio
echo 'app-portage/portage-bashrc-mv::mv
app-shells/runtitle::mv' >> /etc/portage/package.unmask/wanted
emerge sys-config/ltoize
sed -i '1s/^/source make.conf.lto\n/' /etc/portage/make.conf
sed -i '1s/^/NTHREADS="8"\n/' /etc/portage/make.conf

FEATURES="-userpriv" emerge dev-lang/yasm  # yasm fails to build otherwise

#echo 'sys-kernel/genkernel-next plymouth
#sys-boot/plymouth gdm' > /etc/portage/package.use/gentoox

emerge -v --autounmask=y --autounmask-write=y --keep-going=y --deep --newuse xorg-server nvidia-firmware arandr elogind sudo vim weston wpa_supplicant ntp bind-tools telnet-bsd snapper \
nfs-utils cifs-utils samba dhcpcd nss-mdns zsh zsh-completions powertop cpupower lm-sensors screenfetch gparted gdb strace atop dos2unix app-misc/screen app-text/tree openbsd-netcat laptop-mode-tools hdparm alsa-utils vulkan-tools mesa-progs tcpdump shim mokutil #plymouth-openrc-plugin
#emerge -avuDN --with-bdeps=y @world
#emerge -v --depclean
groupadd weston-launch
touch /tmp/gentoox-weston-done
HEREDOC
exit 0
fi


if [[ ! -z $build_kde ]] && [[ ! -f 'tmp/gentoox-kde-done' ]]; then
cp ../../postinstall.sh usr/src/
mkdir usr/src/theme
cp ../../theme/1518039301698.png usr/src/theme/
cp '../../theme/GentooX Breeze Dark Transparent.tar.gz' usr/src/theme/

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

echo -e '\nkde-apps/kdecore-meta -webengine
kde-plasma/kde-cli-tools kdesu
kde-apps/akonadi -mysql sqlite
kde-plasma/plasma-meta discover networkmanager thunderbolt
kde-apps/kio-extras samba
kde-frameworks/kimageformats avif heif
kde-plasma/ksysguard lm-sensors networkmanager
kde-plasma/kwin multimedia
kde-plasma/plasma-desktop emoji
kde-plasma/plasma-meta colord grub qrcode
kde-plasma/plasma-vault networkmanager
media-video/vlc archive bluray dav1d libass libcaca lirc live opus samba speex skins theora vaapi v4l vdpau x265
media-video/ffmpeg bluray cdio dav1d rubberband libass ogg vpx rtmp aac wavpack opus gme v4l webp theora xcb cpudetection x265 libaom truetype libsoxr modplug samba vaapi vdpau libcaca libdrm librtmp opencl openssl speex jpeg2k
media-libs/libheif x265
dev-qt/qtmultimedia gstreamer
media-libs/gd avif heif
media-libs/libvpx postproc
gnome-base/gvfs afp archive bluray fuse gphoto2 ios mtp nfs samba zeroconf
net-irc/telepathy-idle python_single_target_python2_7' >> /etc/portage/package.use/gentoox

# enable flatpak backend in discover, patch qt-creator to use clang9 effectively dropping clang8
echo 'kde-plasma/discover flatpak' >> /etc/portage/package.use/gentoox
# mask qt-creator, it pulls llvm9 and we don't want that
echo 'dev-qt/qt-creator' >> /etc/portage/package.mask/gentoox
# glibc 2.33 does not declare __xstat among others in the header anymore causing umockdev build to fail
echo 'dev-util/umockdev no-error-on-missing-prototype.conf' >> /etc/portage/package.env

emerge -v --jobs=2 --keep-going=y --autounmask=y --autounmask-write=y --deep --newuse kde-plasma/plasma-meta kde-apps/kde-apps-meta kde-apps/kmail kde-apps/knotes \
latte-dock plasma-sdk libdbusmenu gvfs kio-fuse kuroo
#emerge --noreplace dev-qt/qt-creator
#echo 'dev-qt/qt-creator' >> /etc/portage/package.mask/gentoox

#yes | layman -o https://raw.githubusercontent.com/fosero/flatpak-overlay/master/repositories.xml -f -a flatpak-overlay -q
emerge -v sys-apps/flatpak

# theme related
(cd /usr/share/icons; git clone https://github.com/keeferrourke/la-capitaine-icon-theme.git)
cd /usr/src/
git clone https://github.com/ishovkun/SierraBreeze.git
cd SierraBreeze/
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_LIBDIR=lib -DBUILD_TESTING=OFF -DKDE_INSTALL_USE_QT_SYS_PATHS=ON
make install

touch /tmp/gentoox-kde-done
HEREDOC
exit 0
fi


if [[ ! -z $build_steam ]] && [[ ! -f 'tmp/gentoox-steam-done' ]]; then
cat <<HEREDOC | chroot .
source /etc/profile  && export PS1="(chroot) \$PS1"
yes | layman -a steam-overlay -q
USE="abi_x86_32" emerge -O gpm
echo -e '\n# steam
app-arch/bzip2 abi_x86_32
dev-libs/elfutils abi_x86_32
dev-libs/expat abi_x86_32
dev-libs/icu abi_x86_32
dev-libs/libffi abi_x86_32
dev-libs/libpthread-stubs abi_x86_32
dev-libs/libxml2 abi_x86_32
dev-libs/ocl-icd abi_x86_32
dev-libs/wayland abi_x86_32
dev-util/glslang abi_x86_32
dev-util/pkgconf abi_x86_32
media-libs/mesa abi_x86_32
sys-apps/lm-sensors abi_x86_32
sys-devel/clang abi_x86_32
sys-devel/llvm abi_x86_32
sys-libs/gpm abi_x86_32
sys-libs/ncurses abi_x86_32
sys-libs/zlib abi_x86_32
virtual/libelf abi_x86_32
virtual/libffi abi_x86_32
virtual/opengl abi_x86_32
virtual/pkgconfig abi_x86_32
x11-base/xcb-proto abi_x86_32
x11-libs/libdrm abi_x86_32
x11-libs/libpciaccess abi_x86_32
x11-libs/libva abi_x86_32
x11-libs/libva-intel-driver abi_x86_32
x11-libs/libva-vdpau-driver abi_x86_32
x11-libs/libvdpau abi_x86_32
x11-libs/libX11 abi_x86_32
x11-libs/libXau abi_x86_32
x11-libs/libxcb abi_x86_32
x11-libs/libXdamage abi_x86_32
x11-libs/libXdmcp abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libXfixes abi_x86_32
x11-libs/libXrandr abi_x86_32
x11-libs/libXrender abi_x86_32
x11-libs/libxshmfence abi_x86_32
x11-libs/libXv abi_x86_32
x11-libs/libXvMC abi_x86_32
x11-libs/libXxf86vm abi_x86_32
media-libs/libglvnd abi_x86_32
virtual/opencl abi_x86_32
app-arch/zstd abi_x86_32
dev-util/wayland-scanner abi_x86_32' >> /etc/portage/package.use/gentoox
emerge -v steam-meta
touch /tmp/gentoox-steam-done
HEREDOC
exit 0
fi


if [[ ! -z $build_extra ]] && [[ ! -f 'tmp/gentoox-extra-done' ]]; then
cat <<HEREDOC | chroot .
source /etc/profile  && export PS1="(chroot) \$PS1"

echo -e '\nmedia-gfx/gimp heif jpeg2k openexr python vector-icons webp wmf xpm python_single_target_python2_7
media-video/mpv archive bluray drm gbm samba vaapi vdpau
media-gfx/imagemagick djvu hdri opencl openexr perl
media-libs/opencv gphoto2 gstreamer opencl openexr
media-libs/embree raymask
media-libs/opensubdiv opencl
media-gfx/blender collada jemalloc openal opencl jpeg2k
dev-lang/php gd truetype pcntl zip curl sockets
dev-java/openjdk-jre-bin gentoo-vm
dev-java/oracle-jdk-bin gentoo-vm
dev-java/openjdk-bin gentoo-vm
dev-java/openjdk gentoo-vm
app-emulation/virtualbox-guest-additions -X' >> /etc/portage/package.use/gentoox

yes | layman -a bobwya -q
echo '*/*::bobwya' >> /etc/portage/package.mask/lowprio

echo 'app-benchmarks/phoronix-test-suite::bobwya
dev-php/fpdf::bobwya' >> /etc/portage/package.unmask/wanted

echo 'media-gfx/gimp nolto.conf' >> /etc/portage/package.env

emerge -v gimp avidemux blender tuxkart keepassxc libreoffice firefox thunderbird mpv audacious-plugins audacious net-irc/hexchat smartmontools libisoburn phoronix-test-suite virtualbox-guest-additions pfl bash-completion dev-python/pip virtualenv app-misc/jq youtube-dl app-shells/dash

touch /tmp/gentoox-extra-done
HEREDOC
exit 0
fi


if [[ ! -z $build_wine ]] && [[ ! -f 'tmp/gentoox-wine-done' ]]; then
cat <<HEREDOC | chroot .
source /etc/profile  && export PS1="(chroot) \$PS1"

echo -e '\n# wine
x11-libs/libXcursor abi_x86_32
x11-libs/libXi abi_x86_32
media-libs/alsa-lib abi_x86_32
net-print/cups abi_x86_32
media-libs/fontconfig abi_x86_32
media-libs/lcms abi_x86_32
media-sound/mpg123 abi_x86_32
sys-devel/gettext abi_x86_32
media-libs/libpng abi_x86_32
media-sound/pulseaudio abi_x86_32
media-libs/libsdl2 abi_x86_32 haptic
net-libs/gnutls abi_x86_32
media-libs/freetype abi_x86_32
sys-apps/dbus abi_x86_32
sys-libs/libunwind abi_x86_32
media-libs/vulkan-loader abi_x86_32
x11-libs/libXcomposite abi_x86_32
dev-libs/libxslt abi_x86_32
app-emulation/wine-gecko abi_x86_32
dev-libs/libgcrypt abi_x86_32
dev-libs/libgpg-error abi_x86_32
dev-libs/libtasn1 abi_x86_32
dev-libs/libunistring abi_x86_32
dev-libs/nettle abi_x86_32
dev-libs/gmp abi_x86_32
net-dns/libidn2 abi_x86_32
x11-libs/libxkbcommon abi_x86_32
media-libs/libsndfile abi_x86_32
x11-libs/libSM abi_x86_32
x11-libs/libICE abi_x86_32
x11-libs/libXtst abi_x86_32
sys-libs/libcap abi_x86_32
dev-libs/glib abi_x86_32
sys-apps/tcp-wrappers abi_x86_32
net-libs/libasyncns abi_x86_32
media-plugins/alsa-plugins abi_x86_32
media-video/ffmpeg abi_x86_32
media-libs/libbluray abi_x86_32
dev-libs/libcdio-paranoia abi_x86_32
media-libs/dav1d abi_x86_32
media-sound/lame abi_x86_32
media-libs/libtheora abi_x86_32
media-libs/libogg abi_x86_32
media-libs/libwebp abi_x86_32
media-libs/x264 abi_x86_32
media-libs/x265 abi_x86_32
media-libs/xvid abi_x86_32
media-libs/game-music-emu abi_x86_32
media-libs/libaom abi_x86_32
media-libs/libass abi_x86_32
media-libs/libcaca abi_x86_32
media-video/rtmpdump abi_x86_32
media-libs/soxr abi_x86_32
media-libs/libmodplug abi_x86_32
media-libs/opus abi_x86_32
media-libs/rubberband abi_x86_32
net-fs/samba abi_x86_32
media-libs/speex abi_x86_32
gnome-base/librsvg abi_x86_32
media-libs/libvorbis abi_x86_32
media-libs/libvpx abi_x86_32
dev-libs/openssl abi_x86_32
x11-libs/cairo abi_x86_32
x11-libs/gdk-pixbuf abi_x86_32
media-libs/harfbuzz abi_x86_32
x11-libs/pango abi_x86_32
dev-libs/fribidi abi_x86_32
x11-libs/libXft abi_x86_32
media-gfx/graphite2 abi_x86_32
media-libs/tiff abi_x86_32
dev-libs/lzo abi_x86_32
sys-libs/binutils-libs abi_x86_32
x11-libs/pixman abi_x86_32
app-arch/libarchive abi_x86_32
dev-libs/libbsd abi_x86_32
dev-libs/popt abi_x86_32
net-libs/libnsl abi_x86_32
sys-libs/e2fsprogs-libs abi_x86_32
sys-libs/ldb abi_x86_32
sys-libs/liburing abi_x86_32
sys-libs/talloc abi_x86_32
sys-libs/tdb abi_x86_32
sys-libs/tevent abi_x86_32
dev-python/subunit abi_x86_32
app-crypt/mit-krb5 abi_x86_32
dev-util/cmocka abi_x86_32
net-libs/libtirpc abi_x86_32
sys-apps/keyutils abi_x86_32
dev-libs/check abi_x86_32
dev-util/cppunit abi_x86_32
dev-db/lmdb abi_x86_32
sys-apps/attr abi_x86_32
app-arch/xz-utils abi_x86_32
media-libs/libsamplerate abi_x86_32
sci-libs/fftw abi_x86_32
media-libs/freeglut abi_x86_32
x11-libs/libXt abi_x86_32
dev-libs/libcdio abi_x86_32
dev-libs/libpcre abi_x86_32
sys-apps/util-linux abi_x86_32
sys-libs/pam abi_x86_32
sys-libs/db abi_x86_32
media-libs/flac abi_x86_32
virtual/libintl abi_x86_32
virtual/jpeg abi_x86_32
media-libs/libjpeg-turbo abi_x86_32
virtual/libiconv abi_x86_32
virtual/libcrypt abi_x86_32
virtual/glu abi_x86_32
media-libs/glu abi_x86_32
virtual/acl abi_x86_32
sys-apps/acl abi_x86_32
dev-libs/libverto abi_x86_32
dev-libs/libev abi_x86_32
virtual/rust abi_x86_32
dev-lang/rust abi_x86_32
virtual/libudev abi_x86_32
sys-fs/udev abi_x86_32
virtual/libusb abi_x86_32
dev-libs/libusb abi_x86_32
app-emulation/vkd3d abi_x86_32
x11-libs/xcb-util abi_x86_32
x11-libs/xcb-util-keysyms abi_x86_32
x11-libs/xcb-util-wm abi_x86_32
x11-libs/xcb-util-cursor abi_x86_32
x11-libs/xcb-util-image abi_x86_32
x11-libs/xcb-util-renderutil abi_x86_32
dev-libs/libusb-compat abi_x86_32
media-libs/speexdsp abi_x86_32
media-libs/openjpeg abi_x86_32
app-crypt/libmd abi_x86_32
dev-libs/libudfread abi_x86_32
sys-libs/libxcrypt abi_x86_32

app-emulation/wine-vanilla custom-cflags vkd3d' >> /etc/portage/package.use/gentoox

emerge -v wine
touch /tmp/gentoox-wine-done
HEREDOC
exit 0
fi


if [[ ! -z $configure_user ]] && [[ ! -f 'tmp/gentoox-user-configured' ]]; then
cp ../../install.sh usr/src/

cat <<HEREDOC | chroot .
source /etc/profile  && export PS1="(chroot) \$PS1"
sed -i "s/localhost/gentoox/g" /etc/co