在这个演示中,我使用Ansible在macOS上安装了我必备的写作工具之一Asciidoctor。

在大多数系统中,有几种安装软件的方法。你使用哪一种取决于你要安装的应用程序的来源。一些软件以可下载的向导形式出现,引导你完成安装过程,而另一些则是你直接下载并立即运行的文件。
在macOS上,整个开源应用程序库可以从Unix命令中获得,如Homebrew和MacPorts。使用命令进行软件安装的好处是,你可以将它们自动化,我最喜欢的自动化工具是Ansible。将Ansible与Homebrew结合起来是一种高效且可重复的方式来安装你喜欢的开源应用程序。
本文演示了如何使用Ansible在macOS上安装我的必备写作工具之一Asciidoctor。Asciidoctor是一个开源的文本处理器,这意味着它可以接收以特定格式(在这里是Asciidoc)编写的文本,并将其转换为其他流行的格式(如HTML,PDF等)进行发布。Ansible是一个开源的、无代理的、易于理解的自动化工具。通过使用Ansible,你可以简化和自动化你的日常工作。
注意:虽然这个例子使用的是macOS,但这些信息适用于与Ansible兼容的所有平台上的各种开源软件(包括Linux、Windows、Mac和BSD)。
安装Ansible
你可以使用pip ,即Python软件包管理器来安装Ansible。首先,安装pip 。
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python ./get-pip.py
接下来,使用pip 安装Ansible。
$ sudo python -m pip install --user ansible
使用Homebrew安装Ansible
另外,你也可以使用Homebrew软件包管理器来安装Ansible。如果你已经用pip 安装了Ansible,请跳过这一步,因为你已经达到了同样的效果。
$ brew install ansible
配置Ansible
要设置Ansible,首先必须创建一个清单文件,指定希望Ansible脚本(称为playbook)在哪台或哪几台计算机上操作。
在终端或使用你喜欢的文本编辑器创建一个库存文件。在终端中,键入以下内容,将your-host-name 替换为你的计算机名称。
$ cat << EOF >> inventory
[localhost\]
your-host-name
EOF
如果你不知道你的计算机的主机名,你可以使用hostname 命令得到它。或者,进入苹果菜单,打开系统偏好设置,然后点击共享。你的电脑主机名就在 "共享"偏好窗格顶部的电脑名称下面。
使用Ansible安装Asciidoctor
在这个例子中,我只在我正在工作的电脑上安装应用程序,也就是所谓的localhost。首先,创建一个playbook.yml 文件并复制以下内容。
- name: Install software
hosts: localhost
become: false
vars:
Brew_packages:
- asciidoctor
install_homebrew_if_missing: false
在第一个YAML序列中,你给playbook命名(Install software ),提供目标(localhost ),并确认不需要管理权限。你还创建了两个变量,你可以在后面的游戏手册中使用:Brew_packages 和install_homebrew_if_missing 。
接下来,创建一个YAML映射,名为pre_tasks ,其中包含确保Homebrew本身安装在你运行游戏手册的电脑上的逻辑。通常情况下,Ansible可以验证一个应用程序是否已安装,但当该应用程序是帮助Ansible首先做出判断的软件包管理器时,你必须手动完成它。
pre_tasks:
- name: Ensuring Homebrew Is Installed
stat:
path: /usr/local/bin/brew
register: homebrew_check
- name: Fail If Homebrew Is Not Installed and install_homebrew_if_missing Is False
fail:
msg: Homebrew is missing, install from http://brew.sh
when:
- not homebrew_check.stat.exists
- not install_homebrew_if_missing
- name: Installing Homebrew
shell: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
when:
- not homebrew_check.stat.exists
- install_homebrew_if_missing
最后,创建一个名为tasks 的YAML映射,其中包含对Homebrew模块的调用(这是Ansible的一个内置模块),以便在Asciidoctor尚未存在的情况下安装它。
tasks:
- name: Install Asciidoctor
homebrew:
name: asciidoctor
state: present
运行Ansible playbook
你可以使用ansible-playbook 命令来运行Ansible playbook。
$ ansible-playbook -i inventory playbook.yml
-i 选项指定了你在设置Ansible时创建的inventory 文件。你可以选择添加-vvvv ,以指导Ansible在运行playbook时变得更加粗略,这在排除故障时很有用。
在游戏手册运行后,验证Ansible已经成功地在主机上安装了Asciidoctor。
$ asciidoctor -v
Asciidoctor X.Y.Z https://asciidoctor.org
Runtime Environment (ruby 2.6.8p205 (2021-07-07 revision 67951)...
适应自动化
你可以在本文示例的playbook中向Brew_packages 变量添加更多软件。只要有一个Homebrew软件包可用,Ansible就会安装它。Ansible只在需要的时候采取行动,所以你可以把你安装的所有软件包留在playbook中,有效地建立一个你在电脑上期待的所有软件包的清单。
如果你发现自己在另一台电脑上,也许是因为你在工作或你已经购买了一个新的电脑,你可以快速地一次性安装所有相同的应用程序。更好的是,如果你换成了Linux,Ansible游戏手册仍然有效,你可以使用Homebrew for Linux或者做一些简单的更新,切换到不同的软件包管理器。