Untitled
public
Oct 21, 2024
Never
8
1 #!/bin/bash 2 : ${MIRROR:='https://mirrors.tuna.tsinghua.edu.cn/gentoo'} 3 : ${PORTAGE:='rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage'} 4 : ${TIMEZONE:='Asia/Shanghai'} 5 : ${LANGUAGE:='zh_TW'} 6 : ${LOCALHOST:='gentoo'} 7 mem=$(free -g | awk '/^Mem:/{print $2}') 8 : ${SWAP:=$(perl -e "use POSIX; print 2 ** ceil(log($mem) / log(4)), 'G'")} 9 : ${JOBS:=$(( mem / 2 < $(nproc) ? mem / 2 : $(nproc) ))} 10 set -e 11 lsblk -p -o NAME,MODEL,SIZE,FSTYPE,PARTLABEL 12 read -r -p 'Where do you want to install Gentoo (e.g. /dev/sda)? ' drive 13 parted -s "$drive" mklabel gpt mkpart primary 1MiB 1025MiB set 1 esp on \ 14 mkpart primary 1025MiB 100% set 2 lvm on 15 mapfile -t parts < <(lsblk -np -x NAME -o NAME "$drive") 16 cryptsetup -q luksFormat "${parts[2]}" 17 cryptsetup open "${parts[2]}" cryptlvm 18 pvcreate /dev/mapper/cryptlvm 19 vgcreate vg0 /dev/mapper/cryptlvm 20 lvcreate -L "$SWAP" -n swap vg0 21 lvcreate -l 100%FREE -n root vg0 22 mkswap /dev/mapper/vg0-swap 23 swapon /dev/mapper/vg0-swap 24 mkfs.ext4 /dev/mapper/vg0-root 25 mount /dev/mapper/vg0-root /mnt/gentoo 26 mkfs.fat -F 32 "${parts[1]}" 27 mount -m "${parts[1]}" /mnt/gentoo/boot 28 build='stage3-amd64-desktop-openrc' 29 url="$MIRROR/releases/amd64/autobuilds/current-$build" 30 file=$(wget -qO- "$url/latest-$build.txt" | grep -oP "$build-.*\.tar\.xz") 31 wget "$url/$file" 32 wget -qO- "$url/$file.sha256" | sha256sum -c 33 tar xpf "$file" -C /mnt/gentoo --xattrs-include='*.*' --numeric-owner 34 sed -i 's/^COMMON_FLAGS=.*/COMMON_FLAGS="-march=native -O3 -pipe"/' \ 35 /mnt/gentoo/etc/portage/make.conf 36 cat >> /mnt/gentoo/etc/portage/make.conf <<- EOF 37 MAKEOPTS="-j$JOBS" 38 GENTOO_MIRRORS="$MIRROR" 39 USE="dist-kernel lto pgo" 40 VIDEO_CARDS="nvidia" 41 ACCEPT_LICENSE="-* @FREE linux-fw-redistributable NVIDIA-r2" 42 EOF 43 mkdir -p /mnt/gentoo/etc/portage/repos.conf 44 echo -e "[gentoo]\nsync-uri = $PORTAGE" \ 45 > /mnt/gentoo/etc/portage/repos.conf/gentoo.conf 46 echo 'sys-fs/lvm2 lvm' > /mnt/gentoo/etc/portage/package.use/lvm2 47 echo 'sys-boot/grub mount' > /mnt/gentoo/etc/portage/package.use/grub 48 echo 'sys-kernel/installkernel dracut grub' \ 49 > /mnt/gentoo/etc/portage/package.use/installkernel 50 echo 'x11-base/xorg-server -elogind suid xvfb' \ 51 > /mnt/gentoo/etc/portage/package.use/xorg-server 52 echo 'media-libs/libvpx postproc' > /mnt/gentoo/etc/portage/package.use/libvpx 53 genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab 54 cp -L /etc/resolv.conf /mnt/gentoo/etc/ 55 script=$(cat <<- EOF 56 read -r -p 'Enter new UNIX username: ' username 57 useradd -m -G wheel,video -s /bin/bash "\$username" 58 passwd "\$username" 59 ln -sf "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime 60 echo "$LANGUAGE.UTF-8 UTF-8" >> /etc/locale.gen 61 locale-gen 62 eselect locale set "$LANGUAGE.utf8" 63 echo "$LOCALHOST" > /etc/hostname 64 emerge-webrsync 65 profile=\$(eselect profile list \\ 66 | awk '/[0-9.]+\\/desktop\\/gnome\\s\\(stable\\)/{print \$1}' \\ 67 | tr -d '[]') 68 eselect profile set "\$profile" 69 emerge -q1 cpuid2cpuflags 70 echo "*/* \$(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags 71 emerge -quDN @world 72 emerge -qc 73 emerge -q cryptsetup os-prober 74 echo 'GRUB_DISABLE_OS_PROBER=false' >> /etc/default/grub 75 emerge -q linux-firmware sudo chrony gnome-light firefox noto-cjk \\ 76 fnoto-emoji citx-chinese-addons fcitx-configtool 77 sed -i 's/^#\\s*\\(%wheel\\s*ALL=(ALL.*)\\s*ALL\\)/\\1/' /etc/sudoers 78 rc-update add NetworkManager default 79 echo -e '[main]\\nplugins=keyfile\\nhostname-mode=none' \\ 80 > /etc/NetworkManager/NetworkManager.conf 81 rc-update add metalog default 82 rc-update add chronyd default 83 rc-update add elogind boot 84 sed -i 's/^DISPLAYMANAGER=.*/DISPLAYMANAGER="gdm"/' \\ 85 /etc/conf.d/display-manager 86 rc-update add display-manager default 87 grub-install --efi-directory=/boot 88 EOF 89 ) 90 arch-chroot /mnt/gentoo bash -ce "$script" 91 reboot