ansible-devops/scripts/clonezilla_config.sh

113 lines
3.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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