mirror of
https://huihui.cat/mirrors/MikroTikPatch.git
synced 2025-12-10 03:24:37 +01:00
Update chr.sh
Signed-off-by: elseif <elseif@live.cn>
This commit is contained in:
parent
356575af79
commit
3fb99a94ac
1 changed files with 91 additions and 44 deletions
135
chr.sh
135
chr.sh
|
|
@ -7,11 +7,10 @@ set_language() {
|
||||||
MSG_SYSTEM_INFO="系统信息:"
|
MSG_SYSTEM_INFO="系统信息:"
|
||||||
MSG_ARCH="CPU架构:"
|
MSG_ARCH="CPU架构:"
|
||||||
MSG_BOOTMODE="引导模式:"
|
MSG_BOOTMODE="引导模式:"
|
||||||
MSG_STORAGE_DEVICE="存储设备:"
|
MSG_STORAGE_DEVICE="输入存储设备名称:"
|
||||||
MSG_ETH_DEVICE="网络设备:"
|
MSG_ADDRESS="输入IP地址:"
|
||||||
MSG_ADDRESS="IP地址:"
|
MSG_GATEWAY="输入网关地址:"
|
||||||
MSG_GATEWAY="网关:"
|
MSG_DNS="输入DNS服务器:"
|
||||||
MSG_DNS="DNS服务器:"
|
|
||||||
MSG_SELECT_VERSION="请选择您要安装的版本:"
|
MSG_SELECT_VERSION="请选择您要安装的版本:"
|
||||||
MSG_STABLE="稳定版 (v7)"
|
MSG_STABLE="稳定版 (v7)"
|
||||||
MSG_TEST="测试版 (v7)"
|
MSG_TEST="测试版 (v7)"
|
||||||
|
|
@ -36,17 +35,16 @@ set_language() {
|
||||||
MSG_ERROR_MOUNT="错误: 挂载分区失败"
|
MSG_ERROR_MOUNT="错误: 挂载分区失败"
|
||||||
MSG_ERROR_LOOP="错误: 设置 loop 设备失败"
|
MSG_ERROR_LOOP="错误: 设置 loop 设备失败"
|
||||||
MSG_AUTO_RUN_FILE_CREATED="autorun.scr 文件已创建。"
|
MSG_AUTO_RUN_FILE_CREATED="autorun.scr 文件已创建。"
|
||||||
MSG_AUTO_RUN_FILE_NOT_CREATED="autorun.scr 文件创建失败!"
|
MSG_AUTO_RUN_FILE_NOT_CREATED="警告:autorun.scr 文件创建失败!"
|
||||||
MSG_CONFIRM_CONTINUE="您是否确定继续? [Y/n]:"
|
MSG_CONFIRM_CONTINUE="您是否确定继续? [y/n]"
|
||||||
else
|
else
|
||||||
MSG_SYSTEM_INFO="SYSTEM INFO:"
|
MSG_SYSTEM_INFO="SYSTEM INFO:"
|
||||||
MSG_ARCH="ARCH:"
|
MSG_ARCH="ARCH:"
|
||||||
MSG_BOOTMODE="BOOT MODE:"
|
MSG_BOOTMODE="BOOT MODE:"
|
||||||
MSG_STORAGE_DEVICE="STORAGE:"
|
MSG_STORAGE_DEVICE="Input storage device name:"
|
||||||
MSG_ETH_DEVICE="ETH:"
|
MSG_ADDRESS="Input IP address:"
|
||||||
MSG_ADDRESS="ADDRESS:"
|
MSG_GATEWAY="Input gateway:"
|
||||||
MSG_GATEWAY="GATEWAY:"
|
MSG_DNS="Input domain name server:"
|
||||||
MSG_DNS="DNS:"
|
|
||||||
MSG_SELECT_VERSION="Select the version you want to install:"
|
MSG_SELECT_VERSION="Select the version you want to install:"
|
||||||
MSG_STABLE="stable (v7)"
|
MSG_STABLE="stable (v7)"
|
||||||
MSG_TEST="testing (v7)"
|
MSG_TEST="testing (v7)"
|
||||||
|
|
@ -71,29 +69,90 @@ set_language() {
|
||||||
MSG_ERROR_MOUNT="Error: Failed to mount partition"
|
MSG_ERROR_MOUNT="Error: Failed to mount partition"
|
||||||
MSG_ERROR_LOOP="Error: Failed to setup loop device"
|
MSG_ERROR_LOOP="Error: Failed to setup loop device"
|
||||||
MSG_AUTO_RUN_FILE_CREATED="autorun.scr file created."
|
MSG_AUTO_RUN_FILE_CREATED="autorun.scr file created."
|
||||||
MSG_AUTO_RUN_FILE_NOT_CREATED="autorun.scr file create failed"
|
MSG_AUTO_RUN_FILE_NOT_CREATED="Warn: autorun.scr file create failed"
|
||||||
MSG_CONFIRM_CONTINUE="Do you want to continue? [Y/n]:"
|
MSG_CONFIRM_CONTINUE="Do you want to continue? [y/n]"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_ask() {
|
||||||
|
local _redo=0
|
||||||
|
|
||||||
|
read resp
|
||||||
|
case "$resp" in
|
||||||
|
!) echo "Type 'exit' to return to setup."
|
||||||
|
sh
|
||||||
|
_redo=1
|
||||||
|
;;
|
||||||
|
!*) eval "${resp#?}"
|
||||||
|
_redo=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
return $_redo
|
||||||
|
}
|
||||||
|
ask() {
|
||||||
|
local _question="$1" _default="$2"
|
||||||
|
while :; do
|
||||||
|
printf %s "$_question "
|
||||||
|
[ -z "$_default" ] || printf "[%s] " "$_default"
|
||||||
|
_ask && : ${resp:=$_default} && break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
ask_until() {
|
||||||
|
resp=
|
||||||
|
while [ -z "$resp" ] ; do
|
||||||
|
ask "$1" "$2"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
yesno() {
|
||||||
|
case $1 in
|
||||||
|
[Yy]) return 0;;
|
||||||
|
esac
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
ask_yesno() {
|
||||||
|
while true; do
|
||||||
|
ask "$1" "$2"
|
||||||
|
case "$resp" in
|
||||||
|
Y|y|N|n) break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
yesno "$resp"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
show_system_info() {
|
show_system_info() {
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
BOOT_MODE=$( [ -d "/sys/firmware/efi" ] && echo "UEFI" || echo "BIOS" )
|
BOOT_MODE=$( [ -d "/sys/firmware/efi" ] && echo "UEFI" || echo "BIOS" )
|
||||||
STORAGE=$(lsblk -d -n -o NAME,TYPE | awk '$2=="disk"{print $1; exit}')
|
|
||||||
[ -z "$STORAGE" ] && STORAGE=$(fdisk -l | awk '/^Disk \/dev/ {print $2; exit}' | sed 's#:##' | sed 's#/dev/##')
|
|
||||||
ETH=$(ip route show default | grep '^default' | sed -n 's/.* dev \([^\ ]*\) .*/\1/p')
|
|
||||||
ADDRESS=$(ip addr show $ETH | grep global | cut -d' ' -f 6 | head -n 1)
|
|
||||||
GATEWAY=$(ip route list | grep default | cut -d' ' -f 3)
|
|
||||||
DNS=$(grep '^nameserver' /etc/resolv.conf | awk '{print $2}' | head -n 1)
|
|
||||||
[ -z "$DNS" ] && DNS="8.8.8.8"
|
|
||||||
echo "$MSG_SYSTEM_INFO"
|
echo "$MSG_SYSTEM_INFO"
|
||||||
echo "$MSG_ARCH $ARCH"
|
echo "$MSG_ARCH $ARCH"
|
||||||
echo "$MSG_BOOTMODE $BOOT_MODE"
|
echo "$MSG_BOOTMODE $BOOT_MODE"
|
||||||
echo "$MSG_STORAGE_DEVICE $STORAGE"
|
}
|
||||||
echo "$MSG_ETH_DEVICE $ETH"
|
|
||||||
echo "$MSG_ADDRESS $ADDRESS"
|
confirm_storge() {
|
||||||
echo "$MSG_GATEWAY $GATEWAY"
|
if command -v curl >/dev/null 2>&1; then
|
||||||
echo "$MSG_DNS $DNS"
|
STORAGE=$(lsblk -d -n -o NAME,TYPE | awk '$2=="disk"{print $1; exit}')
|
||||||
|
else
|
||||||
|
STORAGE=$(fdisk -l | awk '/^Disk \/dev/ {print $2; exit}' | sed 's#:##' | sed 's#/dev/##')
|
||||||
|
fi
|
||||||
|
ask_until "$MSG_STORAGE_DEVICE" "$STORAGE"
|
||||||
|
STORAGE=$resp
|
||||||
|
}
|
||||||
|
confirm_address() {
|
||||||
|
ETH=$(ip route show default | grep '^default' | sed -n 's/.* dev \([^\ ]*\) .*/\1/p')
|
||||||
|
ADDRESS=$(ip addr show $ETH | grep global | cut -d' ' -f 6 | head -n 1)
|
||||||
|
GATEWAY=$(ip route list | grep default | cut -d' ' -f 3)
|
||||||
|
if [ -f "/etc/resolv.conf" ]; then
|
||||||
|
DNS=$(grep '^nameserver' /etc/resolv.conf | awk '{print $2}' | head -n 1)
|
||||||
|
fi
|
||||||
|
[ -z "$DNS" ] && DNS="8.8.8.8"
|
||||||
|
ask_until "$MSG_ADDRESS" "$ADDRESS"
|
||||||
|
ADDRESS=$resp
|
||||||
|
ask_until "$MSG_GATEWAY" "$GATEWAY"
|
||||||
|
GATEWAY=$resp
|
||||||
|
ask_until "$MSG_DNS" "$DNS"
|
||||||
|
DNS=$resp
|
||||||
}
|
}
|
||||||
|
|
||||||
http_get() {
|
http_get() {
|
||||||
|
|
@ -224,28 +283,17 @@ download_image(){
|
||||||
}
|
}
|
||||||
|
|
||||||
create_autorun() {
|
create_autorun() {
|
||||||
|
confirm_storge
|
||||||
if LOOP=$(losetup -Pf --show chr.img 2>/dev/null); then
|
if LOOP=$(losetup -Pf --show chr.img 2>/dev/null); then
|
||||||
sleep 1
|
sleep 1
|
||||||
MNT=/tmp/chr
|
MNT=/tmp/chr
|
||||||
mkdir -p $MNT
|
mkdir -p $MNT
|
||||||
PARTITION=$([ "$V7" == 1 ] && echo "p2" || echo "p1")
|
PARTITION=$([ "$V7" == 1 ] && echo "p2" || echo "p1")
|
||||||
if mount "${LOOP}${PARTITION}" "$MNT" 2>/dev/null; then
|
if mount "${LOOP}${PARTITION}" "$MNT" 2>/dev/null; then
|
||||||
|
confirm_address
|
||||||
RANDOM_ADMIN_PASS=$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16)
|
RANDOM_ADMIN_PASS=$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16)
|
||||||
echo -e "$MSG_ADMIN_PASSWORD \e[31m$RANDOM_ADMIN_PASS\e[0m"
|
ask_until "$MSG_ADMIN_PASSWORD" "$RANDOM_ADMIN_PASS"
|
||||||
read -p "$MSG_MANUAL_PASS_CHOICE" input_pass_choice < /dev/tty
|
RANDOM_ADMIN_PASS=$resp
|
||||||
input_pass_choice=${input_pass_choice:-N}
|
|
||||||
if [[ "$input_pass_choice" =~ ^[Yy]$ ]]; then
|
|
||||||
while true; do
|
|
||||||
read -p "$MSG_ENTER_NEW_PASS" user_pass
|
|
||||||
if [[ -n "$user_pass" ]]; then
|
|
||||||
RANDOM_ADMIN_PASS="$user_pass"
|
|
||||||
echo -e "$MSG_ADMIN_PASSWORD \e[31m$RANDOM_ADMIN_PASS\e[0m"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo "$MSG_PASS_EMPTY"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
cat <<EOF > "$MNT/rw/autorun.scr"
|
cat <<EOF > "$MNT/rw/autorun.scr"
|
||||||
/user set admin password="$RANDOM_ADMIN_PASS"
|
/user set admin password="$RANDOM_ADMIN_PASS"
|
||||||
/ip dns set servers=$DNS
|
/ip dns set servers=$DNS
|
||||||
|
|
@ -269,9 +317,8 @@ EOF
|
||||||
|
|
||||||
write_and_reboot() {
|
write_and_reboot() {
|
||||||
printf "$MSG_WARNING\n" "$STORAGE"
|
printf "$MSG_WARNING\n" "$STORAGE"
|
||||||
read -p "$MSG_CONFIRM_CONTINUE" confirm < /dev/tty
|
ask_yesno "$MSG_CONFIRM_CONTINUE"
|
||||||
confirm=${confirm:-Y}
|
if [ $? -ne 0 ]; then
|
||||||
if [[ "$confirm" =~ ^[Nn]$ ]]; then
|
|
||||||
echo "$MSG_OPERATION_ABORTED"
|
echo "$MSG_OPERATION_ABORTED"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue