gentoo: 一次安装所有包,避免 rebuild

This commit is contained in:
bin456789
2026-05-29 07:25:16 +08:00
parent bd48e70776
commit 4fb015dc55
+44 -7
View File
@@ -2066,6 +2066,19 @@ add_frpc_systemd_service_if_need() {
fi fi
} }
get_fs_of_mount_point() {
local mount_point=$1
if ! [ "$mount_point" = / ]; then
# 删除最后的若干个 /
mount_point=$(printf "%s" "$mount_point" | sed 's,/*$,,')
fi
# findmnt 要安装
# findmnt "$mount_point" -rno FSTYPE
mount | awk -v mp="$1" '$3==mp {print $5}' | grep .
}
basic_init() { basic_init() {
os_dir=$1 os_dir=$1
@@ -2179,11 +2192,20 @@ EOF
# 安装系统 # 安装系统
# 要安装分区工具(包含 fsck.xxx),用于 initramfs 检查分区数据 # 要安装分区工具(包含 fsck.xxx),用于 initramfs 检查分区数据
# base 包含 e2fsprogs
pkgs="base grub openssh" pkgs="base grub openssh"
# efi fs
if is_efi; then if is_efi; then
pkgs="$pkgs efibootmgr dosfstools" pkgs="$pkgs efibootmgr dosfstools"
fi fi
# root fs
case $(get_fs_of_mount_point "$os_dir") in
xfs) pkgs="$pkgs xfsprogs" ;;
ext4) pkgs="$pkgs e2fsprogs" ;;
btrfs) pkgs="$pkgs btrfs-progs" ;;
esac
if [ "$(uname -m)" = aarch64 ]; then if [ "$(uname -m)" = aarch64 ]; then
pkgs="$pkgs archlinuxarm-keyring" pkgs="$pkgs archlinuxarm-keyring"
fi fi
@@ -2335,20 +2357,32 @@ EOF
rm -rf $os_dir/var/db/repos/gentoo rm -rf $os_dir/var/db/repos/gentoo
chroot $os_dir emerge --sync chroot $os_dir emerge --sync
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Tools#Filesystem_tools # 一次性安装所有包,可减少软件包重复 rebuild ?
chroot $os_dir emerge sys-block/io-scheduler-udev-rules local pkgs=
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Tools#Filesystem_tools
pkgs="$pkgs sys-block/io-scheduler-udev-rules"
# efi fs
if is_efi; then if is_efi; then
chroot $os_dir emerge sys-fs/dosfstools pkgs="$pkgs sys-fs/dosfstools sys-boot/efibootmgr"
fi fi
# root fs
case $(get_fs_of_mount_point "$os_dir") in
xfs) pkgs="$pkgs sys-fs/xfsprogs" ;;
ext4) pkgs="$pkgs sys-fs/e2fsprogs" ;;
btrfs) pkgs="$pkgs sys-fs/btrfs-progs" ;;
esac
# sudo
if ! [ "$username" = root ]; then if ! [ "$username" = root ]; then
chroot $os_dir emerge app-admin/sudo pkgs="$pkgs app-admin/sudo"
fi fi
# firmware + microcode # firmware + microcode
if fw_pkgs=$(get_ucode_firmware_pkgs) && [ -n "$fw_pkgs" ]; then if fw_pkgs=$(get_ucode_firmware_pkgs) && [ -n "$fw_pkgs" ]; then
chroot $os_dir emerge $fw_pkgs pkgs="$pkgs $fw_pkgs"
fi fi
# 安装 grub + 内核 # 安装 grub + 内核
@@ -2363,8 +2397,11 @@ EOF
uuid=$(chroot $os_dir findmnt -rno UUID /) uuid=$(chroot $os_dir findmnt -rno UUID /)
mkdir -p $os_dir/etc/dracut.conf.d mkdir -p $os_dir/etc/dracut.conf.d
echo "kernel_cmdline=\" root=UUID=$uuid \"" >$os_dir/etc/dracut.conf.d/00-installkernel.conf echo "kernel_cmdline=\" root=UUID=$uuid \"" >$os_dir/etc/dracut.conf.d/00-installkernel.conf
pkgs="$pkgs sys-kernel/gentoo-kernel-bin"
chroot $os_dir emerge sys-kernel/gentoo-kernel-bin # 安装
# 不添加 -n/--noreplace 的话会 rebuild 选定的包,无论是否已安装
chroot "$os_dir" emerge -n $pkgs
} }
install_aosc() { install_aosc() {