ansible-devops/scripts/clonezilla_config.sh

113 lines
3.8 KiB
Bash
Raw Normal View History

2025-10-15 12:37:14 +08:00
#!/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