一、目录结构与拆分思路¶
1.1 Rocky 与 Ubuntu 分成两条安装线¶
rocky9.4离线安装ansible-2.14.17/rocky9.4-offline.shrocky9.4离线安装ansible-2.14.17/使用说明-脚本文件和压缩包都放在一起.txtubuntu2404离线安装ansible-2.17.9/ubuntu2404-offline.shubuntu2404离线安装ansible-2.17.9/使用说明-安装包需要放到root目录下.txt
1.2 这组脚本的共同目标¶
- 在无法联网的环境中安装指定版本 Ansible。
- 通过本地 RPM 或 DEB 包完成部署。
- 安装完成后立即做版本校验,避免“装了但命令不可用”。
二、Rocky Linux 离线安装方案¶
2.1 脚本核心流程¶
check_installed
setup_directory
extract_package
install_rpms
verify_installation
2.2 适合整理进正文的关键命令¶
install_dir="/opt/offline_ansible"
package="ansible-2.14.17.tar.gz"
mkdir -p "$install_dir"
tar xf "$package" -C "$install_dir"
cd "$install_dir/ansible-2.14.17"
yum localinstall -y *.rpm
ansible --version
三、Ubuntu 离线安装方案¶
3.1 与 Rocky 方案的主要差异¶
Ubuntu 版本在安装前先检查 /data/softs 和 /root 两个位置是否存在离线包,随后解压并通过 dpkg -i 安装;如果遇到依赖问题,再调用 apt-get -f install 自动修复。
check_ansible
create_dir
copy_package
verify_package
extract_package
install_debs
verify_install
3.2 适合整理进正文的关键命令¶
install_dir="/data/softs"
package="ansible-2.17.9.tar.gz"
cp "/root/$package" "$install_dir/"
tar -xzf "$install_dir/$package" -C "$install_dir"
cd "$install_dir/ansible-2.17.9"
dpkg -i *.deb || apt-get -y install -f
ansible --version
四、完整脚本¶
以下为本文对应的完整脚本,便于直接复制复用。
4.1 rocky9.4-offline.sh¶
#!/bin/bash
#
#********************************************************************
#Author: zhangqing
#QQ: 1904763431
#Date: 2020-03-04
#FileName: offline_install_ansible.sh
#URL: https://zhang-qing.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
#********************************************************************
#脚本使用注意事项:ansible-2.14.17.tar.gz包必须和脚本文件处于同一目录
#********************************************************************
# 功能1:检查系统是否已安装Ansible
check_installed() {
if command -v ansible &>/dev/null; then
current_version=$(ansible --version | head -n1 | awk '{print $3}' | tr -d ']')
echo "rocky系统已经安装ansible,且ansible的版本是 $current_version"
exit 0
fi
}
# 功能2:创建安装目录
setup_directory() {
install_dir="/opt/offline_ansible"
mkdir -p "$install_dir" || {
echo "目录创建失败:$install_dir"
exit 1
}
echo "安装目录已创建:$install_dir"
}
# 功能3:解压安装包
extract_package() {
package="ansible-2.14.17.tar.gz"
if ! tar xf "$package" -C "$install_dir"; then
echo "解压失败:$package"
exit 1
fi
echo "解压成功:$package"
}
# 功能4:安装RPM包
install_rpms() {
cd "$install_dir/ansible-2.14.17" || exit 1
if ! yum localinstall -y *.rpm >/dev/null 2>&1; then
echo "RPM包安装失败"
exit 1
fi
echo "RPM包安装成功"
}
# 功能5:验证最终安装结果
verify_installation() {
if ! command -v ansible &>/dev/null; then
echo "ansible安装失败"
exit 1
fi
final_version=$(ansible --version | head -n1 | awk '{print $3}' | tr -d ']')
echo "ansible安装成功,版本号为 $final_version"
}
# 主执行流程
check_installed
setup_directory
extract_package
install_rpms
verify_installation
4.2 ubuntu2404-offline.sh¶
#!/bin/bash
# 定义全局变量
install_dir="/data/softs"
package="ansible-2.17.9.tar.gz"
build_dir="$install_dir/ansible-2.17.9"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # 重置颜色
# 功能1:检查 Ansible 安装状态
check_ansible() {
if ! command -v ansible >/dev/null 2>&1; then
echo -e "${YELLOW}WARN${NC} Ansible 未安装,开始安装..."
else
installed_version=$(ansible --version 2>/dev/null | awk -F'[][]' '/^ansible/ {print $2}')
echo -e "${GREEN}INFO${NC} 已安装 Ansible,版本号:$installed_version"
exit 0
fi
}
# 功能2:创建安装目录
create_dir() {
if [ ! -d "$install_dir" ]; then
echo -e "${GREEN}INFO${NC} 正在创建安装目录:$install_dir"
mkdir -p "$install_dir" || {
echo -e "${RED}ERROR${NC} 目录创建失败:$install_dir"
exit 1
}
fi
}
# 功能3:拷贝离线包到安装目录(默认离线包存放在 /root)
copy_package() {
if [ ! -f "$install_dir/$package" ]; then
if [ -f "/root/$package" ]; then
echo -e "${GREEN}INFO${NC} 从 /root 目录拷贝 $package 到 $install_dir"
cp "/root/$package" "$install_dir/" || {
echo -e "${RED}ERROR${NC} 拷贝 $package 失败"
exit 1
}
else
echo -e "${RED}ERROR${NC} 离线包缺失:请将 $package 放置到 $install_dir 或 /root 目录"
exit 1
fi
else
echo -e "${GREEN}INFO${NC} 离线包 $package 已存在于 $install_dir"
fi
}
# 功能4:验证离线包是否存在
verify_package() {
if [ ! -f "$install_dir/$package" ]; then
echo -e "${RED}ERROR${NC} 离线包缺失:在 $install_dir 中未找到 $package"
exit 1
fi
}
# 功能5:解压安装包
extract_package() {
echo -e "${GREEN}INFO${NC} 开始解压离线包..."
if tar -xzf "$install_dir/$package" -C "$install_dir"; then
echo -e "${GREEN}INFO${NC} 解压成功:$package"
else
echo -e "${RED}ERROR${NC} 解压失败,请检查压缩包完整性"
exit 1
fi
}
# 功能6:安装 DEB 包
install_debs() {
echo -e "${GREEN}INFO${NC} 开始安装 DEB 包..."
cd "$build_dir" || {
echo -e "${RED}ERROR${NC} 目录不存在:$build_dir"
exit 1
}
# 尝试安装所有 DEB 包
if dpkg -i *.deb >/dev/null 2>&1; then
echo -e "${GREEN}INFO${NC} DEB 包安装成功"
else
echo -e "${YELLOW}WARN${NC} 检测到依赖问题,尝试自动修复..."
if apt-get -y install -f >/dev/null 2>&1; then
echo -e "${GREEN}INFO${NC} 依赖修复成功"
else
echo -e "${RED}ERROR${NC} 依赖修复失败,请手动检查以下问题:"
dpkg -l | grep -v '^ii'
exit 1
fi
fi
}
# 功能7:安装验证
verify_install() {
if final_version=$(ansible --version 2>/dev/null | awk -F'[][]' '/^ansible/ {print $2}'); then
echo -e "${GREEN}SUCCESS${NC} Ansible 安装完成,版本号:$final_version"
else
echo -e "${RED}ERROR${NC} 安装验证失败,请检查日志"
exit 1
fi
}
# 主执行流程
check_ansible
create_dir
copy_package
verify_package
extract_package
install_debs
verify_install