ansible安装脚本
#!/usr/bin/env bash # # 通用 Ansible 安装脚本 # 支持多种方式安装(yum/apt/pip/source) # 支持 root 和 普通用户 # 支持自定义版本(默认 2.9.27) set -e ANSIBLE_VERSION=${1:-2.9.27} # 默认版本 INSTALL_METHOD=${2:-auto} # auto|yum|apt|pip|source LOG_FILE="/tmp/install_ansible.log" echo "[INFO] 开始安装 Ansible ${ANSIBLE_VERSION}" | tee -a "$LOG_FILE" #----------------------------- # 检测系统类型 #----------------------------- detect_os() { if [ -f /etc/os-release ]; then . /etc/os-release OS_ID=$ID OS_VER=$VERSION_ID else echo "[ERROR] 无法检测系统类型" exit 1 fi echo "[INFO] 检测到系统: ${OS_ID} ${OS_VER}" | tee -a "$LOG_FILE" } #----------------------------- # 安装依赖 #----------------------------- install_deps() { echo "[INFO] 安装依赖..." | tee -a "$LOG_FILE" case "$OS_ID" in ubuntu|debian) sudo apt update -y sudo apt install -y python3 python3-pip python3-venv build-essential git curl ;; centos|rocky|almalinux|openEuler|rhel) sudo yum install -y python3 python3-pip git gcc make curl ;; *) echo "[WARN] 未识别的系统,尝试使用 pip 安装依赖" ;; esac } #----------------------------- # pip 安装方式 #----------------------------- install_by_pip() { echo "[INFO] 使用 pip 安装 ansible==${ANSIBLE_VERSION}" | tee -a "$LOG_FILE" if [ "$EUID" -eq 0 ]; then pip3 install "ansible==${ANSIBLE_VERSION}" else pip3 install --user "ansible==${ANSIBLE_VERSION}" export PATH=$HOME/.local/bin:$PATH echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc fi } #----------------------------- # apt/yum 方式 #----------------------------- install_by_package() { echo "[INFO] 尝试使用系统包管理器安装 ansible" | tee -a "$LOG_FILE" case "$OS_ID" in ubuntu|debian) sudo apt update -y sudo apt install -y ansible ;; centos|rocky|almalinux|openEuler|rhel) sudo yum install -y epel-release || true sudo yum install -y ansible ;; *) echo "[WARN] 不支持此系统的包管理器安装,改用 pip" install_by_pip ;; esac } #----------------------------- # 源码安装方式 #----------------------------- install_by_source() { echo "[INFO] 使用源码方式安装 ansible==${ANSIBLE_VERSION}" | tee -a "$LOG_FILE" TMP_DIR=$(mktemp -d) cd "$TMP_DIR" git clone https://github.com/ansible/ansible.git cd ansible git checkout "v${ANSIBLE_VERSION}" || { echo "[ERROR] 无法找到版本 v${ANSIBLE_VERSION}"; exit 1; } if [ "$EUID" -eq 0 ]; then python3 setup.py install else python3 setup.py install --user export PATH=$HOME/.local/bin:$PATH echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc fi } #----------------------------- # 自动选择安装方式 #----------------------------- auto_install() { case "$OS_ID" in ubuntu|debian) install_by_package ;; centos|rocky|almalinux|openEuler|rhel) install_by_package ;; *) install_by_pip ;; esac } #----------------------------- # 主流程 #----------------------------- main() { detect_os install_deps case "$INSTALL_METHOD" in yum|apt) install_by_package ;; pip) install_by_pip ;; source) install_by_source ;; auto) auto_install ;; *) echo "[ERROR] 未知安装方式: $INSTALL_METHOD" exit 1 ;; esac echo "[INFO] Ansible 安装完成 ✅" echo "[INFO] 当前版本:" ansible --version | head -n 1 } main "$@"