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