diff --git a/alpineInit.sh b/alpineInit.sh new file mode 100644 index 0000000..292b99d --- /dev/null +++ b/alpineInit.sh @@ -0,0 +1,87 @@ +#!/bin/ash +# shellcheck shell=dash +# alpine 默认使用 busybox ash + +# 显示输出到前台 +# 似乎script更优雅,但 alpine 不带 script 命令 +# script -f/dev/tty0 +exec >/dev/tty0 2>&1 + +add_community_repo() { + alpine_ver=$(cut -d. -f1,2 >/etc/apk/repositories +} + +# 找到主硬盘 +xda=$(ls /dev/ | grep -Ex '[shv]da|nvme0n1') + +# arm要手动从硬件同步时间,避免访问https出错 +hwclock -s + +# 安装并打开 ssh +echo root:LeitboGi0ro | chpasswd +printf '\nyes' | setup-sshd + +# 还原改动,不然本脚本会被复制到新系统 +rm -f /etc/local.d/alpineConf.start +rm -f /etc/runlevels/default/local + +# 网络 +setup-interfaces -a +# 生成 /etc/network/interfaces +rc-update add networking boot + +# 设置 +setup-keymap us us +setup-timezone -i Asia/Shanghai +setup-ntp chrony + +# 在 arm netboot initramfs init 中 +# 如果识别到rtc硬件,就往系统添加hwclock服务,否则添加swclock +# 这个设置也被复制到安装的系统中 +# 但是从initramfs chroot到真正的系统后,是能识别rtc硬件的 +# 所以我们手动改用hwclock修复这个问题 +rc-update del swclock boot +rc-update add hwclock boot + +# 通过 setup-alpine 安装会多启用几个服务 +# https://github.com/alpinelinux/alpine-conf/blob/c5131e9a038b09881d3d44fb35e86851e406c756/setup-alpine.in#L189 +# acpid | default +# crond | default +# seedrng | boot + +# 添加 virt-what 用到的社区仓库 +add_community_repo + +# 如果是 vm 就用 virt 内核 +cp /etc/apk/world /tmp/world.old +[[ -n "$(virt-what)" ]] && kernel_opt="-k virt" + +# 重置为官方仓库配置 +true >/etc/apk/repositories +setup-apkrepos -1 +setup-apkcache /var/cache/apk + +# 去掉仓库 URL 配置中所有被注释的条目 +sed -i 's/#//' /etc/apk/repositories +# 加入 edge testing 作为仓库源之一 +sed -i '$a\http://dl-cdn.alpinelinux.org/alpine/edge/testing' /etc/apk/repositories + +apk update +apk add bash bash-doc bash-completion bind-tools coreutils cpio curl figlet grep gzip lsblk net-tools python3 py3-pip sed vim + +# 加入定制 motd +rm -rf /etc/motd +wget --no-check-certificate -O /etc/profile.d/motd.sh https://gitee.com/mb9e8j2/Tools/raw/master/Linux_reinstall/Alpine/motd.sh +chmod a+x /etc/profile.d/motd.sh + +# 替换 Alpine Linux 自带的 ash 为 bash. +sed -i 's/ash/bash/' /etc/passwd + +# 安装到硬盘 +# alpine默认使用 syslinux (efi 环境除外),这里强制使用 grub,方便用脚本再次重装 +export BOOTLOADER="grub" +printf 'y' | setup-disk -m sys $kernel_opt -s 0 /dev/$xda + +# 重启,此时内存中的系统会被自动写入到硬盘中 +exec reboot \ No newline at end of file