diff --git a/README.md b/README.md index 0436a6f..bae7506 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,9 @@ alpine 3.16|3.17|3.18 opensuse 15.4|15.5|tumbleweed (只支持云镜像) arch (只支持云镜像) - - 可选参数: --ci 强制使用云镜像 + gentoo (只支持 amd64 云镜像) + + 可选参数: --ci 强制使用云镜像 ### 安装 Windows: bash reinstall.sh windows \ @@ -57,7 +58,7 @@ https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh --iso=https://example.com/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso \ --image-name='Windows 10 Enterprise LTSC 2021' ### 参数: -`--iso` 不需要提前添加 virtio/xen/aws nitro 驱动 +`--iso` 官方原版镜像,不需要提前添加 virtio/xen/aws nitro 驱动 `--image-name` 一个 iso 里会有一个或多个映像,此参数用于指定要安装的映像 @@ -88,10 +89,11 @@ https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh | ---- | ---- | ---- | | Debian | 384M | 512M | | Ubuntu | 1G | 512M | -| 红帽系 | 1G | 512M | -| Alpine | ? | 不支持 | -| openSUSE | 不支持 | 512M | -| Arch | 不支持 | 512M | +| CentOS / Alma / Rocky / Fedora | 1G | 512M | +| Alpine | 512M? | - | +| openSUSE | 暂不支持 | 512M | +| Arch | 暂不支持 | 512M | +| Gentoo | 暂不支持 | 512M | | Windows | 1G | - | ## 网络要求: @@ -102,10 +104,10 @@ https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh 要求有 IPv4、DHCPv4 !!!!! ## 默认密码: -| 用户名 | 密码 | -| ---- | ---- | -| root | 123@@@ | -| administrator | 123@@@ | +| 系统 | 用户名 | 密码 | +| ---- | ---- | ---- | +| Linux | root | 123@@@ | +| Windows| administrator | 123@@@ | ## TODO: - 静态 IP / IPV6 diff --git a/reinstall.sh b/reinstall.sh index a734cf6..96efe61 100644 --- a/reinstall.sh +++ b/reinstall.sh @@ -27,6 +27,7 @@ Usage: reinstall.sh centos 7|8|9 alpine 3.16|3.17|3.18 opensuse 15.4|15.5|tumbleweed arch + gentoo dd --img=xxx windows --iso=xxx --image-name=xxx EOF @@ -353,6 +354,22 @@ setos() { eval ${step}_img=$ci_mirror/images/latest/Arch-Linux-x86_64-cloudimg.qcow2 } + setos_gentoo() { + cloud_image=1 + if is_in_china; then + ci_mirror=https://mirrors.tuna.tsinghua.edu.cn/gentoo + else + ci_mirror=https://distfiles.gentoo.org + fi + + if [ "$basearch_alt" = arm64 ]; then + error_and_exit 'Not support arm64 for gentoo cloud image.' + fi + + # openrc 镜像没有附带兼容 cloud-init 的网络管理器 + eval ${step}_img=$ci_mirror/experimental/$basearch_alt/openstack/gentoo-openstack-$basearch_alt-systemd-latest.qcow2 + } + setos_opensuse() { cloud_image=1 @@ -528,6 +545,7 @@ verify_os_string() { 'alpine 3.16|3.17|3.18' \ 'opensuse 15|15.4|15.5|tumbleweed' \ 'arch' \ + 'gentoo' \ 'windows' \ 'dd'; do ds=$(awk '{print $1}' <<<"$os") @@ -663,7 +681,7 @@ check_ram() { ram_cloud_image=512 case "$distro" in - opensuse | arch) cloud_image=1 ;; + opensuse | arch | gentoo) cloud_image=1 ;; esac # ram 足够就用普通方法安装,否则如果内存大于512就用 cloud image diff --git a/trans.sh b/trans.sh index d0559ac..3d1f763 100644 --- a/trans.sh +++ b/trans.sh @@ -529,6 +529,17 @@ create_part() { echo #2 os 用目标系统的格式化工具 mkfs.ext4 -F -L installer /dev/$xda*3 #3 installer fi + else + # gentoo 的镜像解压后是 3.5g,因此设置 installer 分区 1g,这样才能在5g硬盘上安装 + [ "$distro" = gentoo ] && installer_part_size=1GiB || installer_part_size=2GiB + parted /dev/$xda -s -- \ + mklabel gpt \ + mkpart '" "' ext4 1MiB -$installer_part_size \ + mkpart '" "' ext4 -$installer_part_size 100% + update_part /dev/$xda + + mkfs.ext4 -F -L os /dev/$xda*1 #1 os + mkfs.ext4 -F -L installer /dev/$xda*2 #2 installer fi else # 安装红帽系或ubuntu @@ -748,6 +759,41 @@ modify_dd_os() { chroot $os_dir zypper install -y wicked rm -f $os_dir/etc/resolv.conf fi + + # gentoo + if [ -f $os_dir/etc/gentoo-release ]; then + # 挂载伪文件系统 + mount_pseudo_fs $os_dir + + # 在这里修改密码,而不是用cloud-init,因为我们的默认密码太弱 + sed -i 's/enforce=everyone/enforce=none/' $os_dir/etc/security/passwdqc.conf + echo 'root:123@@@' | chroot $os_dir chpasswd >/dev/null + sed -i 's/enforce=none/enforce=everyone/' $os_dir/etc/security/passwdqc.conf + + # 下载仓库,选择 profile + if false && [ ! -d $os_dir/var/db/repos/gentoo/ ]; then + cp -f /etc/resolv.conf $os_dir/etc/resolv.conf + + chroot $os_dir emerge-webrsync + profile=$(chroot $os_dir eselect profile list | grep '/[0-9\.]*/systemd (stable)' | awk '{print $2}') + chroot $os_dir eselect profile set $profile + fi + + # 删除 resolv.conf,不然 systemd-resolved 无法创建软链接 + rm -f $os_dir/etc/resolv.conf + + # 启用网络服务 + chroot $os_dir systemctl enable systemd-networkd + chroot $os_dir systemctl enable systemd-resolved + + # systemd-networkd 有时不会运行 + # https://bugs.gentoo.org/910404 补丁好像没用 + # https://github.com/systemd/systemd/issues/27718#issuecomment-1564877478 + # 临时的解决办法是运行 networkctl,如果启用了systemd-networkd服务,会运行服务 + insert_into_file $os_dir/lib/systemd/system/systemd-logind.service after '\[Service\]' <&1 | grep 'Not all of the space'; then printf "fix" | parted /dev/$xda print ---pretend-input-tty - printf "yes" | parted /dev/$xda resizepart 1 100% ---pretend-input-tty + # TODO: 获取 ext4 分区编号 + [ "$distro" = debian ] && system_part_num=1 || system_part_num=3 + printf "yes" | parted /dev/$xda resizepart $system_part_num 100% ---pretend-input-tty update_part /dev/$xda + + if [ "$distro" = gentoo ]; then + apk add e2fsprogs-extra + e2fsck -p -f /dev/$xda$system_part_num + resize2fs /dev/$xda$system_part_num + fi fi fi