前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战 Centos7 \ Oracle Linux 7.5 离线安装ansible

实战 Centos7 \ Oracle Linux 7.5 离线安装ansible

作者头像
Devops海洋的渔夫
发布2019-06-02 13:52:44
2K1
发布2019-06-02 13:52:44
举报
文章被收录于专栏:Devops专栏Devops专栏

实战ansible

前言

本次实战情况是因为服务器机房由于安全原因,处理无网络的网闸区域。在这样的情况下,就需要采用离线安装ansible的方式来进行安装了。

实战环境

  • 服务器已做好了镜像的离线yum源,可以离线安装vim等工具,无法离线安装ansible
  • 服务器无法访问外网,处于网闸内环境

思路步骤

  • 首先离线ansible需要安装的rpm包
  • 编写自动构建离线ansible的yum源脚本
  • 使用脚本安装ansible工具

1.离线下载ansible需要安装的rpm包

语句格式: yum install -y 软件名 --downloadonly --downloaddir=保存文件路径

[root@server81 install_ansible]# yum install -y ansible --downloadonly --downloaddir=ansible
Loaded plugins: fastestmirror
base                                                                                         | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                                         | 8.8 kB  00:00:00     
epel                                                                                         | 3.2 kB  00:00:00     
extras                                                                                       | 3.4 kB  00:00:00     
updates                                                                                      | 3.4 kB  00:00:00     
(1/3): epel/x86_64/updateinfo                                                                | 930 kB  00:00:00     
(2/3): extras/7/x86_64/primary_db                                                            | 205 kB  00:00:00     
(3/3): epel/x86_64/primary                                                                   | 3.6 MB  00:00:00     
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
epel                                                                                                    12706/12706
Resolving Dependencies
--> Running transaction check
---> Package ansible.noarch 0:2.7.0-1.el7 will be updated
---> Package ansible.noarch 0:2.7.2-1.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================
 Package                    Arch                      Version                         Repository               Size
====================================================================================================================
Updating:
 ansible                    noarch                    2.7.2-1.el7                     epel                     11 M

Transaction Summary
====================================================================================================================
Upgrade  1 Package

Total download size: 11 M
Background downloading packages, then exiting:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
ansible-2.7.2-1.el7.noarch.rpm                                                               |  11 MB  00:00:01     
exiting because "Download Only" specified
[root@server81 install_ansible]# 
[root@server81 install_ansible]# ls
[root@server81 install_ansible]# cd ansible/
[root@server81 ansible]# ls
ansible-2.7.2-1.el7.noarch.rpm
[root@server81 ansible]# 

1.1 尝试在无网络环境进行直接的rpm包安装

[root@server01 ~]# rpm -ivh ansible-2.7.1-1.el7.noarch.rpm 
warning: ansible-2.7.1-1.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
error: Failed dependencies:
    PyYAML is needed by ansible-2.7.1-1.el7.noarch
    python-crypto is needed by ansible-2.7.1-1.el7.noarch
    python-httplib2 is needed by ansible-2.7.1-1.el7.noarch
    python-jinja2 is needed by ansible-2.7.1-1.el7.noarch
    python-keyczar is needed by ansible-2.7.1-1.el7.noarch
    python-paramiko is needed by ansible-2.7.1-1.el7.noarch
    python-setuptools is needed by ansible-2.7.1-1.el7.noarch
    python-six is needed by ansible-2.7.1-1.el7.noarch
    python2-jmespath is needed by ansible-2.7.1-1.el7.noarch
    sshpass is needed by ansible-2.7.1-1.el7.noarch
[root@server01 ~]# 

发现单纯简单的rpm安装的话,会提示需要安装很多python的工具依赖。那么下一步就要考虑如何构建yum源了。

2. 编写自动构建ansible的离线yum源脚本

2.1 步骤1 - 自动下载rpm包(Step1_download_rpm.py)

[root@server81 install_ansible]# vim Step1_download_rpm.py 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import  os

# shell命令
# yum install -y ansible --downloadonly --downloaddir=ansible

## 打印当前路径
print os.getcwd() #获取当前工作目录路径

savedir = os.getcwd() + '/software'
print '下载保存路径=',savedir

# 定义ansible需要yum离线缓存的list表
softwares = ['ansible']
for software in softwares:
   print '当前下载 :', software
   print os.system("date") ## 使用os模块执行shell命令
   print '执行下载:', os.system("yum install -y %s --downloadonly --downloaddir=%s" % (software,savedir)) ## 使用%s拼接字符串 

print '============== 下载完毕 ===================='

执行过程如下:

[root@server81 install_ansible]# python Step1_download_rpm.py 
/opt/install_ansible
下载保存路径= /opt/install_ansible/software
当前下载 : ansible
Wed Nov 21 13:54:24 HKT 2018
0
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package ansible.noarch 0:2.7.2-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================
 Package                    Arch                      Version                         Repository               Size
====================================================================================================================
Installing:
 ansible                    noarch                    2.7.2-1.el7                     epel                     11 M

Transaction Summary
====================================================================================================================
Install  1 Package

Total download size: 11 M
Installed size: 60 M
Background downloading packages, then exiting:
ansible-2.7.2-1.el7.noarch.rpm                                                               |  11 MB  00:00:05     
exiting because "Download Only" specified
执行下载: 0
============== 下载完毕 ====================
[root@server81 install_ansible]# 
[root@server81 install_ansible]# ls
software  Step1_download_rpm.py
[root@server81 install_ansible]# 
[root@server81 install_ansible]# cd software/
[root@server81 software]# ls
ansible-2.7.2-1.el7.noarch.rpm
[root@server81 software]# 

可以看到,依然只是下载了一个ansible-2.7版本的rpm包,那么下面就来写构建yum源的脚本。

2.2 步骤2 - 自动构建离线yum源以及安装ansible脚本(create_repo.sh、Step2_install_ansible.py)

create_repo.sh脚本如下:

[root@server81 install_ansible]# ls
create_repo.sh  software  Step1_download_rpm.py
[root@server81 install_ansible]# cat create_repo.sh 
#!/bin/bash
basedir=$(cd `dirname $0`;pwd)
softwaredir=$basedir/software
repoDir=/etc/yum.repos.d

## function 
function create_ansible_local_repo(){
cat <<EOF > $repoDir/ansible-local.repo
[ansible-local]
name=ansible-local
baseurl=file://$softwaredir/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF

createrepo -d $softwaredir
yum repolist
yum makecache
}

create_ansible_local_repo
[root@server81 install_ansible]# 

执行一下create_repo.sh脚本:

[root@server81 install_ansible]# ./create_repo.sh 
./create_repo.sh: line 17: createrepo: command not found

在这里提示createrepo该命令找不到,说明没有安装好createrepo的工具,那么这个也要离线缓存一下,以免到内网服务器无法安装。

离线缓存createrepo工具执行如下:

[root@server81 install_ansible]# yum install -y createrepo --downloadonly --downloaddir=createrepo
Loaded plugins: fastestmirror
base                                                                                         | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                                         | 5.1 kB  00:00:00     
extras                                                                                       | 3.4 kB  00:00:00     
updates                                                                                      | 3.4 kB  00:00:00 
====================================================================================================================
 Package                         Arch                   Version                          Repository            Size
====================================================================================================================
Installing:
 createrepo                      noarch                 0.9.9-28.el7                     base                  94 k
Installing for dependencies:
 deltarpm                        x86_64                 3.6-3.el7                        base                  82 k
 libxml2-python                  x86_64                 2.9.1-6.el7_2.3                  base                 247 k
 python-deltarpm                 x86_64                 3.6-3.el7                        base                  31 k

Transaction Summary
====================================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 454 k
Installed size: 2.0 M
Background downloading packages, then exiting:
(1/4): createrepo-0.9.9-28.el7.noarch.rpm                                                    |  94 kB  00:00:00     
(2/4): libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm                                             | 247 kB  00:00:00     
(3/4): python-deltarpm-3.6-3.el7.x86_64.rpm                                                  |  31 kB  00:00:00     
(4/4): deltarpm-3.6-3.el7.x86_64.rpm                                                         |  82 kB  00:00:00     
--------------------------------------------------------------------------------------------------------------------
Total                                                                               1.1 MB/s | 454 kB  00:00:00     
exiting because "Download Only" specified
[root@server81 install_ansible]# ls
createrepo  create_repo.sh  software  Step1_download_rpm.py
[root@server81 install_ansible]# ls createrepo/
createrepo-0.9.9-28.el7.noarch.rpm  libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm
deltarpm-3.6-3.el7.x86_64.rpm       python-deltarpm-3.6-3.el7.x86_64.rpm
[root@server81 install_ansible]# 

可以从上面看出,安装这个createrepo的工具也是有依赖的,那么为了下次方便,我直接将createrepo的rpm下载,写入步骤1的脚本中,再重新执行一下看看。

修改Step1_download_rpm.py脚本:

[root@server81 install_ansible]# vim Step1_download_rpm.py 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import  os

# shell命令
#yum install -y ansible --downloadonly --downloaddir=ansible
# yum install -y createrepo --downloadonly --downloaddir=createrepo

## 打印当前路径
print os.getcwd() #获取当前工作目录路径

savedir = os.getcwd() + '/software'
print '下载保存路径=',savedir

# 定义ansible需要yum离线缓存的list表
softwares = ['ansible','createrepo']
for software in softwares:
   print '当前下载 :', software
   print os.system("date") ## 使用os模块执行shell命令
   print '执行下载:', os.system("yum install -y %s --downloadonly --downloaddir=%s" % (software,savedir)) ## 使用%s拼接字符串 

print '============== 下载完毕 ===================='

再次执行一下rpm下载,如下:

[root@server81 install_ansible]# python Step1_download_rpm.py 
当前下载 : createrepo
Wed Nov 21 14:23:37 HKT 2018
0
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: sg.fedora.ipserverone.com
 * extras: mirrors.aliyun.com
====================================================================================================================
 Package                         Arch                   Version                          Repository            Size
====================================================================================================================
Installing:
 createrepo                      noarch                 0.9.9-28.el7                     base                  94 k
Installing for dependencies:
 deltarpm                        x86_64                 3.6-3.el7                        base                  82 k
 libxml2-python                  x86_64                 2.9.1-6.el7_2.3                  base                 247 k
 python-deltarpm                 x86_64                 3.6-3.el7                        base                  31 k

Transaction Summary
====================================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 454 k
Installed size: 2.0 M
Background downloading packages, then exiting:
(1/4): createrepo-0.9.9-28.el7.noarch.rpm                                                    |  94 kB  00:00:00     
(2/4): deltarpm-3.6-3.el7.x86_64.rpm                                                         |  82 kB  00:00:00     
(3/4): python-deltarpm-3.6-3.el7.x86_64.rpm                                                  |  31 kB  00:00:00     
(4/4): libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm                                             | 247 kB  00:00:00     
--------------------------------------------------------------------------------------------------------------------
Total                                                                               771 kB/s | 454 kB  00:00:00     
exiting because "Download Only" specified
执行下载: 0
============== 下载完毕 ====================
[root@server81 install_ansible]# ls
create_repo.sh  software  Step1_download_rpm.py
[root@server81 install_ansible]# ls software/
ansible-2.7.2-1.el7.noarch.rpm      deltarpm-3.6-3.el7.x86_64.rpm              python-deltarpm-3.6-3.el7.x86_64.rpm
createrepo-0.9.9-28.el7.noarch.rpm  libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm
[root@server81 install_ansible]# 

由于如果没有安装好createrepo就无法构建离线yum源,那么就无法使用yum install 的方式快速安装。 那么还是要rpm包将createrepo这个工具安装好先,操作如下:

[root@server81 install_ansible]# ls software/
ansible-2.7.2-1.el7.noarch.rpm      deltarpm-3.6-3.el7.x86_64.rpm              python-deltarpm-3.6-3.el7.x86_64.rpm
createrepo-0.9.9-28.el7.noarch.rpm  libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm
[root@server81 install_ansible]# 
[root@server81 install_ansible]# cd software/
[root@server81 software]# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm 
error: Failed dependencies:
    deltarpm is needed by createrepo-0.9.9-28.el7.noarch
    libxml2-python is needed by createrepo-0.9.9-28.el7.noarch
    python-deltarpm is needed by createrepo-0.9.9-28.el7.noarch
[root@server81 software]# 
[root@server81 software]# rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm 
error: Failed dependencies:
    deltarpm(x86-64) = 3.6-3.el7 is needed by python-deltarpm-3.6-3.el7.x86_64
[root@server81 software]# 
[root@server81 software]# rpm -ivh deltarpm-3.6-3.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:deltarpm-3.6-3.el7               ################################# [100%]
[root@server81 software]# 
[root@server81 software]# rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:python-deltarpm-3.6-3.el7        ################################# [100%]
[root@server81 software]# 
[root@server81 software]# rpm -ivh libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:libxml2-python-2.9.1-6.el7_2.3   ################################# [100%]
[root@server81 software]# 
[root@server81 software]# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:createrepo-0.9.9-28.el7          ################################# [100%]
[root@server81 software]# 
[root@server81 software]# createrepo --help
Usage: genpkgmetadata.py [options]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -q, --quiet           output nothing except for serious errors
  -v, --verbose         output more debugging info.
  --profile             output timing/profile info.
  -x EXCLUDES, --excludes=EXCLUDES
[root@server81 software]# createrepo --help
Usage: genpkgmetadata.py [options]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -q, --quiet           output nothing except for serious errors
  -v, --verbose         output more debugging info.
  --profile             output timing/profile info.
  -x EXCLUDES, --excludes=EXCLUDES

为了方便下载安装的时候,不用再这样一步步尝试rpm安装createrepo的过程,我先把这个过程写入脚本之后。

编写Step2_install_software.py脚本如下:

[root@server81 install_ansible]# cat Step2_install_software.py 
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import  os

# shell命令 - 安装createrepo
# rpm -ivh deltarpm-3.6-3.el7.x86_64.rpm 
# rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm 
# rpm -ivh libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm 
# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm 

# 打印当前路径
print os.getcwd() #获取当前工作目录路径

# 设置前面下载rpm的文件路径
softwaredir = os.getcwd() + '/software'

# rpm方式安装createrepo
def install_createrepo():
    os.system("rpm -ivh %s/deltarpm-3.6-3.el7.x86_64.rpm" % (softwaredir))
    os.system("rpm -ivh %s/python-deltarpm-3.6-3.el7.x86_64.rpm" % (softwaredir))
    os.system("rpm -ivh %s/libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm" % (softwaredir))
    os.system("rpm -ivh %s/createrepo-0.9.9-28.el7.noarch.rpm" % (softwaredir))
    print('安装createrepo:')

install_createrepo()

# 构建离线yum源
def create_yum_repo():
    os.system("sh create_repo.sh")
    print '创建yum离线源:'

create_yum_repo()

## 使用离线yum源安装
def install_ansible():
    os.system("yum install -y ansible")

print '使用本地yum源安装'
install_ansible()


[root@server81 install_ansible]# 

执行Step2_install_software.py脚本如下:

[root@server81 install_ansible]# python Step2_install_software.py 
/opt/install_ansible
Preparing...                          ################################# [100%]
    package deltarpm-3.6-3.el7.x86_64 is already installed
Preparing...                          ################################# [100%]
    package python-deltarpm-3.6-3.el7.x86_64 is already installed
Preparing...                          ################################# [100%]
    package libxml2-python-2.9.1-6.el7_2.3.x86_64 is already installed
Preparing...                          ################################# [100%]
    package createrepo-0.9.9-28.el7.noarch is already installed
安装createrepo:
Spawning worker 0 with 5 pkgs
...
Install  1 Package

Total download size: 11 M
Installed size: 60 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : ansible-2.7.2-1.el7.noarch                                                                  1/1 
  Verifying  : ansible-2.7.2-1.el7.noarch                                                                  1/1 

Installed:
  ansible.noarch 0:2.7.2-1.el7                                                                                 

Complete!
[root@server81 install_ansible]# ansible
ansible               ansible-console       ansible-doc-2.7       ansible-playbook      ansible-pull-2.7
ansible-2             ansible-console-2     ansible-galaxy        ansible-playbook-2    ansible-vault
ansible-2.7           ansible-console-2.7   ansible-galaxy-2      ansible-playbook-2.7  ansible-vault-2
ansible-config        ansible-doc           ansible-galaxy-2.7    ansible-pull          ansible-vault-2.7
ansible-connection    ansible-doc-2         ansible-inventory     ansible-pull-2        
[root@server81 install_ansible]# 

执行完毕这个脚本,那么ansible就安装起来了。

3. 个人习惯,喜欢最后写上卸载的脚本

卸载脚本如下:

[root@server81 install_ansible]# cat Step3_erase_clamav.py 
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import  os

# 卸载
def erase_ansible():
    os.system("yum erase -y ansible")
    print '卸载ansible'

erase_ansible()

[root@server81 install_ansible]# 

执行如下:

[root@server81 install_ansible]# python Step3_erase_clamav.py 
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package ansible.noarch 0:2.7.2-1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================
 Package                Arch                  Version                      Repository                     Size
===============================================================================================================
Removing:
 ansible                noarch                2.7.2-1.el7                  @ansible-local                 60 M

Transaction Summary
===============================================================================================================
Remove  1 Package

Installed size: 60 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : ansible-2.7.2-1.el7.noarch                                                                  1/1 
  Verifying  : ansible-2.7.2-1.el7.noarch                                                                  1/1 

Removed:
  ansible.noarch 0:2.7.2-1.el7                                                                                 

Complete!
卸载ansible
[root@server81 install_ansible]# 

好了,对于centos7的步骤可以说是到此为止了。只要将脚本拷贝到内网服务器执行即可。 但是有一个前置条件,就是内网的服务器已经做好了系统镜像的离线yum源。

4.线上正式执行

上面因为是以大家常用的centos7系统作为脚本编写演示,因为正式执行的服务器系统是Oracle Linux7.5,其中构建离线yum源的脚本部分需要稍微改一下。

注意:在线上服务执行的过程中碰到了几个坑,以及依赖的缺失,请继续往下看。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档