core: 优化代码

This commit is contained in:
bin456789 2024-08-20 00:27:51 +08:00
parent ae012a79f1
commit c21bf52d41
No known key found for this signature in database
GPG Key ID: EE301B386DE6C11B
2 changed files with 150 additions and 125 deletions

View File

@ -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
View File

@ -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