forked from yindun/ansible-devops
113 lines
3.8 KiB
Bash
113 lines
3.8 KiB
Bash
#!/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
|