如果只是安装ansible,简单点的在线安装如下:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum clean all
yum makecache
yum install ansible -y
因为python3.6.5和ansible2.9.9在线安装还是有点慢,下面这个脚本是如果有离线包且上传了就离线安装,未上传就在线安装(自动判断):
首先,挂载镜像iso。并且确保能上网。上传离线包Python-3.6.5.tar.xz(或者在线wget),上传ansible离线包和所有依赖(或者在线pip)到根目录下。新建以下脚本即可一键离线(在线)安装python3.6.5和离线(在线)安装ansible2.9.9。
ansible2.9.9基于Centos7.6离线包链接:https://download.youkuaiyun.com/download/fxqice/12552852
![]()

脚本新建:
vi ansible_setup.sh
#!/usr/bin/bash
#Date: 2020-06-26
#Auth: Created by Jackie Fu
#Mail: xxx@qq.com
#Function: This script can automatically determine whether to install python3.6.5 and ansible2.9.9 offline or online according to whether to upload the offline package or not.
#Version: 1.1
# 脚本出错时终止执行
#set -e
echo "本地挂载源------------------------------------------"
cd /etc/yum.repos.d/ &&
echo "首先,移动repo文件至bak----------------------------"
mkdir -p /etc/yum.repos.d/bak/ &&
exist_file0()
{
if [ -e "$1" ]
then
return 1
else
return 2
fi
}
exist_file0 *.repo
value=$?
if [ $value -eq 1 ]
then
mv -f *.repo bak
echo "moved"
elif [ $value -eq 2 ]
then
echo "ok"
fi &&
echo "其次,挂载镜像iso,使用本地源------------------------"
mkdir -p /media/cdrom/ &&
if [ "`ls -A /media/cdrom/`" = "" ];
then
mount /dev/cdrom /media/cdrom/
if [ "`ls -A /media/cdrom/`" = "" ];
then
echo "光盘未挂载,中止操作,请检查和挂载光盘"
exit -1
else
echo "mounted"
fi
else
umount /media/cdrom/
mount /dev/cdrom /media/cdrom/
if [ "`ls -A /media/cdrom/`" = "" ];
then
echo "光盘未正确挂载,中止操作,请检查和挂载光盘"
exit -1
else
echo "umount and mount again"
fi
fi &&
echo "然后,创建本地repo文件------------------------------"
func()
{
cat>/etc/yum.repos.d/local.repo <<EOF
[CentOS-epel-yum]
name=CentOS epel yum Repository
baseurl=file:///media/cdrom
gpgcheck=0
enabled=1
EOF
}
func &&
echo "ok"
echo "最后,清空和新建缓存---------------------------------"
yum clean all && yum makecache &&
echo "ok"
echo "安装依赖--------------------------------------------"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel -y &&
yum install wget gcc gcc-c++ make -y &&
echo "ok"
echo "安装python和pip-----------------------------------"
echo "判断python3.6.5是否安装----------------------------"
if [ "`python3 -V | awk -F" " '/Python/ {print $2}'`" = "3.6.5" ] || [ "`python -V | awk -F" " '/Python/ {print $2}'`" = "3.6.5" ];
then
echo "Python3.6.5 is installed"
else
echo "python3命令未识别或者版本不是3.6.5,执行安装----- "
mkdir -p /opt/data/ &&
echo "自动判断Python-3.6.5.tar.xz是否上传------------ "
file1="/root/Python-3.6.5.tar.xz"
file2="/opt/data/Python-3.6.5.tar.xz"
if [ -f ${file1} ];then
mv -f ${file1} /opt/data/
else
wget -P /opt/data/ https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
if [ ! -f ${file2} ];then
echo "网络异常,请检查网络和DNS配置文件"
exit -1
fi
fi
cd /opt/data/ &&
mkdir -p /usr/local/python3 &&
tar -xvJf Python-3.6.5.tar.xz &&
cd Python-3.6.5 &&
./configure --prefix=/usr/local/python3 &&
make && make altinstall
rm -rf /usr/bin/python3
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
rm -rf /usr/bin/pip3
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3
fi &&
echo "查看python版本-------------------------------------"
python3 -V &&
echo "查看pip版本----------------------------------------"
pip3 -V &&
echo "删除离线包------------------------------------------"
cd ~ &&
rm -rf /opt/data/Python-3.6.5.tar.xz
rm -rf /opt/data/Python-3.6.5
echo "ok"
echo "配置网络epel源文件(可选)---------------------------"
#yum -y install epel-release &&
echo "ok"
echo "安装ansible(自动判断离线或在线安装)----------------"
echo "判断ansible2.9.9是否安装---------------------------"
if [ "`ansible --version | awk -F" " 'NR==1 {print $2}'`" = "2.9.9" ];
then
echo "ansible2.9.9 is installed"
else
echo "ansible命令未识别或者版本不是2.9.9,执行安装--"
cd /root/&&
file3="ansible-2.9.9.tar.gz PyYAML-5.3.1.tar.gz cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl Jinja2-2.11.2-py2.py3-none-any.whl MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl pycparser-2.20-py2.py3-none-any.whl six-1.15.0-py2.py3-none-any.whl"
exist_file3()
{
if [ -e "$1" ]
then
return 1
else
return 2
fi
}
exist_file3 ${file3[*]}
value=$?
exist_file4()
{
if [ $value -eq 1 ]
then
mv -f ${file3[*]} /opt/data/
pip3 install /opt/data/{cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl,cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl,Jinja2-2.11.2-py2.py3-none-any.whl,MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl,pycparser-2.20-py2.py3-none-any.whl,six-1.15.0-py2.py3-none-any.whl} &&
cd /opt/data/ &&
tar xzvf PyYAML-5.3.1.tar.gz &&
cd PyYAML-5.3.1 &&
python3 setup.py install &&
cd /opt/data/ &&
tar xavf ansible-2.9.9.tar.gz &&
cd ansible-2.9.9 &&
python3 setup.py install
elif [ $value -eq 2 ]
then
echo "自动判断,离线包未上传,执行在线安装ansible--"
pip3 install ansible==2.9.9
fi
}
exist_file4 &&
cd /opt/data/ &&
rm -rf ${file2} ansible-2.9.9 PyYAML-5.3.1
ln -s /usr/local/python3/bin/ansible /usr/bin/ansible
ln -s /usr/local/python3/bin/ansible-doc /usr/bin/ansible-doc
ln -s /usr/local/python3/bin/ansible-playbook /usr/bin/ansible-playbook
ln -s /usr/local/python3/bin/ansible-connection /usr/bin/ansible-connection
ln -s /usr/local/python3/bin/ansible-config /usr/bin/ansible-config
ln -s /usr/local/python3/bin/ansible-console /usr/bin/ansible-console
ln -s /usr/local/python3/bin/ansible-galaxy /usr/bin/ansible-galaxy
ln -s /usr/local/python3/bin/ansible-inventory /usr/bin/ansible-inventory
ln -s /usr/local/python3/bin/ansible-pull /usr/bin/ansible-pull
ln -s /usr/local/python3/bin/ansible-vault /usr/bin/ansible-vault
fi &&
echo "ok"
echo "查看ansible版本-------------------------------------"
ansible --version
echo "卸载iso---------------------------------------------"
umount /media/cdrom
chmod -R 777 ansible_setup.sh
./ansible_setup.sh
代码不够严谨,仅仅能实现功能,纯属探讨,能力有限,请留言指教,谢谢
570

被折叠的 条评论
为什么被折叠?



