在生产环境中很少有连接外网的服务器,这里以ansible内网安装为例来介绍。

1、安装ansible(有外网)

1、ansible的安装包存在于ansible的PPA中,如果要下载PPA(个人软件包存档),就必须要使用apt-add-repository这个命令,而software-properties-common软件中包含这个命令,所以下载顺序如下:

root@ubuntu:~# sudo apt install software-properties-common
root@ubuntu:~# sudo apt-add-repository ppa:ansible/ansible
root@ubuntu:~# sudo apt update
root@ubuntu:~# sudo apt install ansible

2、免密设置:我个人做个多次实验,不免密就报错,所以尽量做免密吧。

root@ubuntu:~/ansible2# ssh-keygen
或者
root@ubuntu:~/ansible2# ssh-keygen  -t  rsa
# 然后一路回车就好
ssh-copy-id root@192.168.91.159

注:ssh-copy-id root@192.168.91.159可能会报错,因为Ubuntu默认root做免密,可以换成普通用户,也可以把ansible主机的~/.ssh/id_rsa.pub的内容添加到另一台的~/.ssh/authorized_keys内容后面做成手动免密。还可以对ssh的配置文件进行如下修改/etc/ssh/sshd_config,之后执行ssh-copy-id root@192.168.91.159

# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes

改成

# Authentication:
LoginGraceTime 120
#PermitRootLogin without-password
PermitRootLogin yes
StrictModes yes

到此,测试ansible可以使用测试命令如下:ansible netflow -m shell -a’date’

2、用deb包安装ansible(内网环境)

离线模式安装ansible,重点在于攻克root@ubuntu:~# sudo apt-add-repository ppa:ansible/ansible这个命令,了解他是干嘛的就可以成功了。好吧我在文章最后在对他就行解释吧,这个难关我没有攻克,于是我决定用ansible的deb包进行安装。
1、在离线机器上的操作

root@ubuntu:~# sudo apt-get --allow-unauthenticated -y install --print-uris ansible | cut -d\' -f2 | grep http:// > /var/tmp/download-list

2、把/var/tmp/download-list传到有网的机器上,然后执行如下操作把所需要的依赖包下载到当前目录,最好在下载一个sshpass的包

sudo wget -i download-list

3、使用dpkg命令进行离线安装

sudo  dpkg  -i   *.deb

注:如果wget下载后提示404等,那么可能是离线服务器的源的问题。把离线服务器换成阿里云源就可以了。
4、依照上面有网的操作做免密。

到此,离线安装结束。

5、不过我还查到一个下载依赖包的好办法(对ansible安装没有成功)

  1. 查看依赖:
apt-cache depends XXX
  1. 递归的方式下载 deb 依赖包
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends XXX | grep -v i386 | grep "^\w")
  1. 使用dpkg命令进行离线安装:
dpkg -i *.deb

3、总结一下apt-add-repository命令

最近Ubuntu安装ansible遇到了这四个命令

root@ubuntu:~# sudo apt install software-properties-common
root@ubuntu:~# sudo apt-add-repository ppa:ansible/ansible
root@ubuntu:~# sudo apt update
root@ubuntu:~# sudo apt install ansible

1、什么是 PPA?

当你执行sudo apt-add-repository ppa:ansible/ansible的时候, /etc/apt/sources.list 文件中会多出一些URL。/etc/apt/sources.list这便是存储库,我感觉类似于centos的yum源。

Ansible在Ubuntu下安装 ubuntu ansible 离线安装_Ansible在Ubuntu下安装


当您执行 sudo apt update 命令时,Ubuntu 系统就会使用 APT 工具检查在线存储库,并将有关软件及其版本的信息存储到缓存中。 当您使用 sudo apt install package_name 安装软件时,系统就会使用该信息从存储实际软件的 URL 获取该软件包。

在存储库中添加地址,然后去下载,如果存储库中没有关于某个软件包的信息,终端中将返回以下错误:(感觉非常像yum源)

E: Unable to locate package

2、为什么要使用 PPA?

Ubuntu 的存储库控制着用户可以在系统上获得的软件版本。但如果 ISV 或开发人员发布了软件新版本,Ubuntu 的官方存储库不可能立即提供。为了确保系统稳定性,官方源会检查新版本是否与系统兼容,所以在软件发布新版本后,短时间内用户是无法通过 Ubuntu 的官方存储库来获得最新软件版本的。

3、为什么 PPA 不适用于所有 Ubuntu 发行版?

PPA 意味着个人包存档,请注意个人这个词,它暗示了这是开发人员所独有的东西,并没有得到分发的正式认可。

Ubuntu 提供了一个名为 Launchpad 的平台,让软件开发人员能够创建自己的存储库,方便最终用户将 PPA 存储库添加到 sources.list。当用户更新系统时,Ubuntu 系统就能够知道这个新软件的可用性,而且可以使用标准的 sudo apt install package_name 命令来安装它,就比如:

sudo add-apt-repository ppa:dr-akulavich/lighttable

sudo apt-get update

sudo apt-get install lighttable-installer

将上述命令总结一下就是:

1]、sudo add-apt-repository <PPA_info> 命令可以将 PPA 存储库添加到 sources.list 列表中

2]、sudo apt-get update 此命令更新软件包列表

3]、sudo apt-get install <package_in_PPA> 命令用于安装软件包

现在让我们详细拆解一下:

sudo add-apt-repository ppa:dr-akulavich/lighttable

上述命令中并没有列出存储库的 URL,这是因为该工具旨在对有关 URL 的信息进行抽象化。如果你添加 ppa:dr-akulavich/lighttable,将会获取到 Light Table;如果添加的是 ppa:dr-akulavich,将能够获取到上层存储库中的所有存储库或软件包。

基本上,当您使用 add-apt-repository 添加 PP A时,相当于手动执行类似如下命令:

deb http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu YOUR_UBUNTU_VERSION_HERE main

deb-src http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu YOUR_UBUNTU_VERSION_HERE main

上述 2 条命令是将存储库添加到 sources.list 的传统方法,而在添加 PPA 时会自动完成对 sources.list 文件的配置,而无需用户知道确切的存储库 URL 和操作系统版本,相当于是自动化的。

而相当重要的一点就是,使用 PPA 时它不会更改 Ubuntu 系统中的原始 sources.list 配置文件,而是根据最佳实践在 /etc/apt/sources.list.d/ 目录中创建列表文件和对应(save 扩展名)的备份文件。

Ansible在Ubuntu下安装 ubuntu ansible 离线安装_Ansible在Ubuntu下安装_02


4、如何下载 PPA

需要在互联网上搜索 PPA 名称,如 ppa:dr-akulavich/lighttable,就可以获得 Launchpad 这一官方 PPA 托管平台中的结果。当然,你也可以直接到 Launchpad 网站中进行搜索。

Ansible在Ubuntu下安装 ubuntu ansible 离线安装_服务器_03


Ansible在Ubuntu下安装 ubuntu ansible 离线安装_linux_04


由于 Gdebi 在处理依赖项方面要好得多,建议使用 Gdebi 而非软件中心来安装这些 DEB 文件。

5、如何删除PPA安装的软件
建议在删除 PPA 之前事先删除通过 PPA 安装的软件,如果你只删除 PPA,则已经安装的软件仍然会保留在系统当中,而且还无法获得任何更新。

那么问题来了,如何判断哪些应用程序是通过 PPA 安装的呢?

1、找出通过PPA安装的软件

Ubuntu软件中心是不包括这个功能的,我们可以通过新立得包管理器来找出通过 PPA 安装的软件:

sudo apt install synaptic

在新立得包管理器中选择源自:如下是启动命令

root@ubuntu:~# synaptic

Ansible在Ubuntu下安装 ubuntu ansible 离线安装_linux_05


找到包后,您可以直接用新立得包管理器来删除它们,或者执行终端命令来删除:

sudo apt remove package_name

删除用 PPA 安装的软件包后,您可以继续从 sources.list 中删除 PPA。

2、以图形方式删除PPA

转到软件和更新——然后转到其它软件选项卡——查找要删除的 PPA:

Ansible在Ubuntu下安装 ubuntu ansible 离线安装_ubuntu_06


你有两个选择:您取消选择 PPA 或直接用删除选项。

其区别在于:当您取消选择 PPA 条目时,系统会将 /etc/apt/sources.list.d 中的 ppa_name.list 文件注释掉;如果选择删除选项,就会直接删除 /etc/apt/sources.list.d 目录中的 ppa_name.list文件。