core: 优化代码
This commit is contained in:
parent
ae012a79f1
commit
c21bf52d41
18
reinstall.sh
18
reinstall.sh
@ -1061,6 +1061,10 @@ setos() {
|
||||
if is_efi; then
|
||||
install_pkg hexdump $img_type
|
||||
|
||||
# openwrt 镜像 efi part type 不是 esp
|
||||
# 因此改成检测 fat?
|
||||
# https://downloads.openwrt.org/releases/23.05.3/targets/x86/64/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img.gz
|
||||
|
||||
# od 在 coreutils 里面,好像要配合 tr 才能删除空格
|
||||
# hexdump 在 util-linux / bsdmainutils 里面
|
||||
# xxd 要单独安装,el 在 vim-common 里面
|
||||
@ -2186,7 +2190,14 @@ build_extra_cmdline() {
|
||||
}
|
||||
|
||||
echo_tmp_ttys() {
|
||||
if false; then
|
||||
curl -L $confhome/ttys.sh | sh -s "console="
|
||||
else
|
||||
case "$basearch" in
|
||||
x86_64) echo "console=ttyS0,115200n8 console=tty0" ;;
|
||||
aarch64) echo "console=ttyS0,115200n8 console=ttyAMA0,115200n8 console=tty0" ;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
get_entry_name() {
|
||||
@ -2229,11 +2240,10 @@ build_nextos_cmdline() {
|
||||
else
|
||||
# debian arm 在没有ttyAMA0的机器上(aws t4g),最少要设置一个tty才能启动
|
||||
# 只设置tty0也行,但安装过程ttyS0没有显示
|
||||
nextos_cmdline+=" console=ttyAMA0,115200 console=ttyS0,115200 console=tty0"
|
||||
nextos_cmdline+=" $(echo_tmp_ttys)"
|
||||
fi
|
||||
else
|
||||
# nextos_cmdline+=" $(echo_tmp_ttys)"
|
||||
nextos_cmdline+=" console=ttyAMA0,115200 console=ttyS0,115200 console=tty0"
|
||||
nextos_cmdline+=" $(echo_tmp_ttys)"
|
||||
fi
|
||||
# nextos_cmdline+=" mem=256M"
|
||||
# nextos_cmdline+=" lowmem=+1"
|
||||
@ -2279,9 +2289,9 @@ mod_initrd_debian_kali() {
|
||||
|
||||
# hack 2
|
||||
# 修改 /var/lib/dpkg/info/netcfg.postinst 运行我们的脚本
|
||||
# shellcheck disable=SC1091,SC2317
|
||||
netcfg() {
|
||||
#!/bin/sh
|
||||
# shellcheck source=/dev/null
|
||||
. /usr/share/debconf/confmodule
|
||||
db_progress START 0 5 debian-installer/netcfg/title
|
||||
|
||||
|
137
trans.sh
137
trans.sh
@ -3,7 +3,7 @@
|
||||
# shellcheck disable=SC2086,SC3047,SC3036,SC3010,SC3001
|
||||
# alpine 默认使用 busybox ash
|
||||
|
||||
# 命令出错终止运行,将进入到登录界面,防止失联
|
||||
# 出错后停止运行,将进入到登录界面,防止失联
|
||||
set -eE
|
||||
|
||||
# debian 安装版、ubuntu 安装版、el/ol 安装版不使用该密码
|
||||
@ -35,12 +35,7 @@ trap_err() {
|
||||
}
|
||||
|
||||
is_run_from_locald() {
|
||||
[[ "$0" = /etc/local.d/* ]]
|
||||
}
|
||||
|
||||
should_hold_after_boot() {
|
||||
# shellcheck disable=SC2154
|
||||
[ "$hold" = 1 ] # && is_run_from_locald
|
||||
[[ "$0" = "/etc/local.d/*" ]]
|
||||
}
|
||||
|
||||
add_community_repo() {
|
||||
@ -301,13 +296,6 @@ get_all_disks() {
|
||||
ls /sys/block/ | grep -Ev '^(loop|sr|nbd)'
|
||||
}
|
||||
|
||||
setup_tty_and_log() {
|
||||
# 显示输出到前台
|
||||
# script -f /dev/tty0
|
||||
dev_ttys=$(get_ttys /dev/)
|
||||
exec > >(tee -a $dev_ttys /reinstall.log) 2>&1
|
||||
}
|
||||
|
||||
extract_env_from_cmdline() {
|
||||
# 提取 finalos/extra 到变量
|
||||
for prefix in finalos extra; do
|
||||
@ -3980,50 +3968,8 @@ EOF
|
||||
cat "$grub_cfg"
|
||||
}
|
||||
|
||||
# 脚本入口
|
||||
# debian initrd 会寻找 main
|
||||
# 并调用本文件的 create_ifupdown_config 方法
|
||||
: main
|
||||
|
||||
# 无参数运行
|
||||
# 复制本脚本到 /trans.sh,除非路径相同
|
||||
# 用于打印错误或者再次运行
|
||||
if ! [ "$(readlink -f "$0")" = /trans.sh ]; then
|
||||
cp -f "$0" /trans.sh
|
||||
fi
|
||||
|
||||
# 还原改动,不然本脚本会被复制到新系统
|
||||
rm -f /etc/local.d/trans.start
|
||||
rm -f /etc/runlevels/default/local
|
||||
|
||||
trap 'trap_err $LINENO $?' ERR
|
||||
extract_env_from_cmdline
|
||||
|
||||
# 带参数运行,则重新下载脚本
|
||||
if [ "$1" = "update" ]; then
|
||||
# shellcheck disable=SC2154
|
||||
wget -O /trans.sh "$confhome/trans.sh"
|
||||
chmod +x /trans.sh
|
||||
exec /trans.sh
|
||||
fi
|
||||
|
||||
# 允许 ramdisk 使用所有内存,默认是 50%
|
||||
mount / -o remount,size=100%
|
||||
|
||||
# arm要手动从硬件同步时间,避免访问https出错
|
||||
# do 机器第二次运行会报错
|
||||
hwclock -s || true
|
||||
|
||||
# 设置密码,安装并打开 ssh
|
||||
echo "root:$PASSWORD" | chpasswd
|
||||
printf '\nyes' | setup-sshd
|
||||
|
||||
if should_hold_after_boot; then
|
||||
exit
|
||||
fi
|
||||
|
||||
trans() {
|
||||
mod_motd
|
||||
setup_tty_and_log
|
||||
cat /proc/cmdline
|
||||
clear_previous
|
||||
add_community_repo
|
||||
@ -4117,13 +4063,82 @@ if is_efi; then
|
||||
add_fallback_efi_to_nvram
|
||||
fi
|
||||
|
||||
sync
|
||||
echo 'done'
|
||||
# 让 web 输出全部内容
|
||||
sleep 5
|
||||
}
|
||||
|
||||
# 脚本入口
|
||||
# debian initrd 会寻找 main
|
||||
# 并调用本文件的 create_ifupdown_config 方法
|
||||
: main
|
||||
|
||||
# 复制脚本
|
||||
# 用于打印错误或者再次运行
|
||||
# 路径相同则不用复制
|
||||
# 重点:要在删除脚本之前复制
|
||||
if ! [ "$(readlink -f "$0")" = /trans.sh ]; then
|
||||
cp -f "$0" /trans.sh
|
||||
fi
|
||||
trap 'trap_err $LINENO $?' ERR
|
||||
|
||||
# 删除本脚本,不然会被复制到新系统
|
||||
rm -f /etc/local.d/trans.start
|
||||
rm -f /etc/runlevels/default/local
|
||||
|
||||
# 提取变量
|
||||
extract_env_from_cmdline
|
||||
|
||||
# 带参数运行部分
|
||||
# 重新下载并 exec 运行新脚本
|
||||
if [ "$1" = "update" ]; then
|
||||
# shellcheck disable=SC2154
|
||||
wget -O /trans.sh "$confhome/trans.sh"
|
||||
chmod +x /trans.sh
|
||||
exec /trans.sh
|
||||
fi
|
||||
|
||||
# 无参数运行部分
|
||||
# 允许 ramdisk 使用所有内存,默认是 50%
|
||||
mount / -o remount,size=100%
|
||||
|
||||
# arm要手动从硬件同步时间,避免访问https出错
|
||||
# do 机器第二次运行会报错
|
||||
hwclock -s || true
|
||||
|
||||
# 设置密码,安装并打开 ssh
|
||||
echo "root:$PASSWORD" | chpasswd
|
||||
printf '\nyes' | setup-sshd
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if [ "$hold" = 1 ]; then
|
||||
if is_run_from_locald; then
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
# 正式运行重装
|
||||
# shellcheck disable=SC2046,SC2194
|
||||
case 1 in
|
||||
1)
|
||||
# ChatGPT 说这种性能最高
|
||||
exec > >(exec tee -a $(get_ttys /dev/) /reinstall.log) 2>&1
|
||||
trans
|
||||
;;
|
||||
2)
|
||||
exec > >(tee -a $(get_ttys /dev/) /reinstall.log) 2>&1
|
||||
trans
|
||||
;;
|
||||
3)
|
||||
trans 2>&1 | tee -a $(get_ttys /dev/) /reinstall.log
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$hold" = 2 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
cd /
|
||||
# 让 web 输出全部内容
|
||||
sleep 5
|
||||
# swapoff -a
|
||||
# umount ?
|
||||
sync
|
||||
reboot
|
||||
|
Loading…
Reference in New Issue
Block a user