From 120ddc9a56d9f64efc2b2fa468161606906216aa Mon Sep 17 00:00:00 2001 From: joy Date: Wed, 15 Oct 2025 12:37:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20scripts/clonezilla=5Fconfi?= =?UTF-8?q?g.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/clonezilla_config.sh | 112 +++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 scripts/clonezilla_config.sh diff --git a/scripts/clonezilla_config.sh b/scripts/clonezilla_config.sh new file mode 100644 index 0000000..b619f48 --- /dev/null +++ b/scripts/clonezilla_config.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +# 配置参数(可根据需要修改) +SCRIPT_URL="http://116.205.97.109/scripts/set_ip.sh" # 脚本下载地址 +DEST_PATH="/opt/set_ip.sh" # 脚本保存路径 +UDEV_RULES_PATTERN="/etc/udev/rules.d/70-persistent-*" # 匹配所有70-persistent-开头的文件 +DEST_UDEV_DIR="/opt/" # udev规则文件的目标目录 +NETPLAN_CONFIG="/etc/netplan/00-installer-config.yaml" # netplan配置文件 + +# 函数:错误处理 +error_exit() { + echo "$1" 1>&2 + exit 1 +} + +# 函数:检查是否以root权限运行 +check_root() { + if [ "$(id -u)" -ne 0 ]; then + error_exit "错误:请使用root权限运行此脚本(sudo)" + fi +} + +# 函数:下载配置脚本 +download_script() { + echo "正在下载脚本到$DEST_PATH..." + if command -v wget &> /dev/null; then + wget -q -O "$DEST_PATH" "$SCRIPT_URL" || error_exit "下载脚本失败(wget)" + elif command -v curl &> /dev/null; then + curl -s -o "$DEST_PATH" "$SCRIPT_URL" || error_exit "下载脚本失败(curl)" + else + error_exit "错误:未找到wget或curl,请先安装其中一个工具" + fi + + # 验证下载结果 + [ -f "$DEST_PATH" ] || error_exit "错误:脚本下载后文件不存在" +} + +# 函数:设置脚本权限 +set_script_permissions() { + echo "设置脚本权限..." + chmod +x "$DEST_PATH" || error_exit "设置脚本可执行权限失败" +} + +# 函数:处理所有70-persistent-开头的udev规则文件 +handle_udev_rules() { + echo "处理所有70-persistent-开头的udev规则文件..." + + # 检查是否存在匹配的文件 + shopt -s nullglob # 避免无匹配时返回通配符本身 + local udev_files=($UDEV_RULES_PATTERN) + shopt -u nullglob # 恢复默认行为 + + if [ ${#udev_files[@]} -eq 0 ]; then + error_exit "错误:未找到任何以70-persistent-开头的udev规则文件(路径:/etc/udev/rules.d/)" + fi + + # 确保目标目录存在 + [ -d "$DEST_UDEV_DIR" ] || mkdir -p "$DEST_UDEV_DIR" || error_exit "创建目标目录$DEST_UDEV_DIR失败" + + # 拷贝所有匹配的文件到目标目录 + cp "${udev_files[@]}" "$DEST_UDEV_DIR" || error_exit "拷贝udev规则文件失败" + + # 为所有拷贝的文件设置权限 + chmod 644 "$DEST_UDEV_DIR"70-persistent-* || error_exit "设置udev规则文件权限失败" + + echo "成功拷贝${#udev_files[@]}个udev规则文件到$DEST_UDEV_DIR" +} + +# 函数:添加计划任务 +add_cron_job() { + echo "添加计划任务..." + # 先检查是否已存在相同任务,避免重复添加 + if ! crontab -l | grep -q "$DEST_PATH"; then + (crontab -l 2>/dev/null; echo "@reboot bash $DEST_PATH > /tmp/ip_tmp.log 2>&1") | crontab - || error_exit "添加计划任务失败" + fi + + # 验证计划任务 + crontab -l | grep -q "$DEST_PATH" || error_exit "错误:计划任务添加后未生效" + echo "计划任务添加成功" +} + +# 函数:修改netplan网络配置 +modify_netplan_config() { + echo "修改网络配置文件..." + # 备份配置 + cp "$NETPLAN_CONFIG" "${NETPLAN_CONFIG}.bak2" || error_exit "备份netplan配置失败" + + # 修改IP地址 + sed -i '/^ addresses:$/,/^ interfaces:/ s/^ - [0-9.]\+\/[0-9]\+/ - 0.0.0.0\/0/' "$NETPLAN_CONFIG" || error_exit "修改IP地址失败" + + # 修改网关 + sed -i '/^ - to: default$/!b;n;s/^ via: [0-9.]\+/ via: 0.0.0.0/' "$NETPLAN_CONFIG" || error_exit "修改网关失败" +} + +# 主函数:串联所有操作 +main() { + echo "开始执行配置脚本..." + + # 按顺序执行各步骤 + check_root + download_script + set_script_permissions + handle_udev_rules + add_cron_job + modify_netplan_config + + echo "所有操作执行完成!" + exit 0 +} + +# 启动主函数 +main