G

Untitled

public
Guest Oct 17, 2024 Never 10
Clone
Bash paste1.bash 83 lines (83 loc) | 3.36 KB
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 -o NAME,MODEL,SIZE,FSTYPE,PARTLABEL
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 /dev/mapper/cryptlvm
20
vgcreate vg0 /dev/mapper/cryptlvm
21
lvcreate -L "${SWAP}G" -n swap vg0
22
lvcreate -l 100%FREE -n root vg0
23
mkswap /dev/mapper/vg0-swap
24
swapon /dev/mapper/vg0-swap
25
mkfs.ext4 /dev/mapper/vg0-root
26
mount /dev/mapper/vg0-root /mnt/gentoo
27
mkfs.fat -F 32 "${parts[1]}"
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 "$url/$stage3"
33
wget -qO- "$url/$stage3.sha256" | sha256sum -c
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 lvm mount -wayland"
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
useradd -m -G wheel,video -s /bin/bash "\$username"
53
passwd "\$username"
54
ln -sf '/usr/share/zoneinfo/$TIMEZONE' /etc/localtime
55
echo '$LANGUAGE.UTF-8 UTF-8' >> /etc/locale.gen
56
locale-gen
57
eselect locale set '$LANGUAGE.utf8'
58
emerge-webrsync -q
59
profile=\$(eselect profile list \\
60
| awk '/[0-9.]+\\/desktop\\/gnome \\(stable\\)/{print \$1}' \\
61
| tr -d '[]')
62
eselect profile set "\$profile"
63
emerge -q1 cpuid2cpuflags
64
echo "*/* \$(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
65
emerge -q cryptsetup os-prober
66
echo 'GRUB_DISABLE_OS_PROBER=false' >> /etc/default/grub
67
emerge -av linux-firmware sudo sysklogd chrony gnome-light firefox noto-cjk \\
68
noto-emoji fcitx-chinese-addons fcitx-configtool
69
sed -i 's/^#\\s*\\(%wheel\\s*ALL=(ALL.*)\\s*ALL\\)/\\1/' /etc/sudoers
70
rc-update add sysklogd default
71
rc-update add chronyd default
72
rc-update add elogind boot
73
sed -i 's/^DISPLAYMANAGER=.*/DISPLAYMANAGER="gdm"/' \\
74
/etc/conf.d/display-manager
75
rc-update add display-manager default
76
rc-update add NetworkManager default
77
echo -e '[main]\\nplugins=keyfile\\nhostname-mode=none' \\
78
> /etc/NetworkManager/NetworkManager.conf
79
grub-install --efi-directory=/boot
80
EOF
81
)
82
arch-chroot /mnt/gentoo bash -ce "$script"
83
reboot