G

Untitled

public
Guest Oct 21, 2024 Never 8
Clone
Bash paste1.bash 91 lines (91 loc) | 3.71 KB
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