使用Ansible自动化Mac的初始设置,以进行PC备份措施
首先
这篇文章主要面向使用Mac的人,特别是那些像我一样懒得麻烦的人。同时,对于那些进行SES等工作的人来说,如果每次现场更换都要设置Mac也变得很麻烦,我觉得这篇文章也会对他们有所帮助。
你要做什么?
我們打算使用一個名為Ansible的伺服器組態管理工具,來自動化Mac的設置。我們的理念就是要將一切繁瑣的事情都自動化。(嗯?)
這次只是作為簡單的自動化,讓Ansible代為安裝我們在Mac上使用的應用程式和其他設定。
用于使用Ansible所需要安装和必要的文件等。
Ansible安装
可以使用brew来安装,但是希望将brew的安装工作交给Ansible,所以我们使用python进行安装。
如果没有pip,可以只安装brew并运行brew install ansible也可以。
pip install ansible
运行Ansible所需的文件等
只需使用以下3个文件就可以简单地运行。
-
- Inventory(どのサーバーを管理するのかのhostsファイル
-
- Ansible.cfg(Ansible全体の設定
- Playbook(サーバーをどのように管理するのかの設定ファイル ymlで書く
执行的方式就像以下这样的感觉。
ansible-playbook -i ./hosts playbook.yml
简易地使用Ansible命令
ansible-playbook playbook.yml —syntax-check
構文エラーチェック
ansible-playbook playbook.yml —tasklist
実行するタスクを一覧で出す
ansible-playbook playbook.yml —check
実行したらどう結果を返すかのテスト
准备运行Ansible的第一步:准备Inventory(主机)
这次是localhost,也就是我的个人电脑,所以在文件中只需写入localhost即可。
localhost
准备运行Ansible的步骤②:准备Ansible.cfg(配置文件)
正常情况下,由于要管理多个服务器等,需要在此处写入密钥路径等。但由于只需设置自己的个人电脑,因此在这里仅进行hosts文件路径设置。
[defaults]
hostsfile = ./hosts
准备运行Ansible的步骤3:准备Playbook.yml(执行文件)。
在这里,我们将记录实际要执行的任务(所需操作)。在文章中提到自动化Mac设置,但实际上是为Mac安装平常使用的应用程序和软件包。
---
- name: set up my mac
hosts: localhost
connection: local
vars:
brew_pkgs:
- tree
- wget
- bat
- fd
- ripgrep
- starship
- exa
brew_cask_apps:
- vagrant
- virtualbox
- docker
- sublime-text
- visual-studio-code
- firefox
- karabiner
- shiftit
- slack
- skitch
- kindle
- postman
- cheatsheet
- macwinzipper
- clipy
- sequel-pro
- alfred
tasks:
- name: Install First Homebrew
shell: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- name: Update homebrew itself first
homebrew: update_homebrew=yes
- name: Install brew pkg
homebrew: name {{ item }}
with_items: "{{ brew_pkgs }}"
- name: Install application
homebrew_cask:
name: "{{ item }}"
state: "present"
install_options: "appdir=/Applications"
accept_external_apps: yes
with_items: "{{ brew_cask_apps }}"
task1: Install First Homebrew
Homebrewがないと話にならないのでまずはこれだけ最初にインストールします
task2: Update homebrew itself first
Homebrewのupdateを行います。(念のために
task3: Install brew pkg
必要なパッケージをインストール
task4: Install application
アプリケーション類をインストール
我只是使用Homebrew和brewcask安装所需的内容。
通过应用这个方法,可以使用Ansible自动化Mac的详细设置(例如在Finder中显示隐藏文件或设置触控板等)。
当执行上述操作时,将会执行yml文件中所写的任务。Ansible的好处是,它会对存在进行检查,因此如果已经安装了某个应用程序或软件包,则会自动跳过。
如果执行上述操作,会有以下的感觉。
TASK [Install brew pkg] ***********************************************************************************************************************************************
ok: [localhost] => (item=tree)
ok: [localhost] => (item=wget)
ok: [localhost] => (item=bat)
ok: [localhost] => (item=fd)
ok: [localhost] => (item=ripgrep)
ok: [localhost] => (item=starship)
ok: [localhost] => (item=exa)
TASK [Install application] ******************************************************************************************************************************************
ok: [localhost] => (item=vagrant)
ok: [localhost] => (item=virtualbox)
ok: [localhost] => (item=docker)
ok: [localhost] => (item=sublime-text)
ok: [localhost] => (item=visual-studio-code)
ok: [localhost] => (item=firefox)
failed: [localhost] (item=karabiner) => {"ansible_loop_var": "item", "changed": false, "item": "karabiner", "msg": "Error: Cask 'karabiner' is unavailable: No Cask with this name exists. Did you mean one of these?\nkarabiner-elements\nkarabiner-elements"}
ok: [localhost] => (item=shiftit)
ok: [localhost] => (item=slack)
ok: [localhost] => (item=skitch)
ok: [localhost] => (item=kindle)
ok: [localhost] => (item=postman)
ok: [localhost] => (item=cheatsheet)
ok: [localhost] => (item=macwinzipper)
ok: [localhost] => (item=clipy)
ok: [localhost] => (item=sequel-pro)
ok: [localhost] => (item=alfred)
PLAY RECAP ************************************************************************************************************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
如果成功了就好,如果失败了就会输出“fail”并结束。很方便!
这样就不会再出现“我家里电脑里装了那个应用来着~”这样的情况了。
把上述内容上传到GitHub并执行,就能得到与家里电脑一样的环境。
填补
在使用Python版本问题时,可能会出现以下警告。
TASK [Gathering Facts] ************************************************************************************************************************************************
[WARNING]: Platform darwin on host localhost is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter
could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [localhost]
如果是那种情况,只需在ansible.cfg中写入Python的路径即可。
请根据所需环境自行更改Python的路径。
[defaults]
interpreter_python = /usr/bin/python3
注:以下内容仅供不熟悉Ansible的人参考。
附言1:针对不了解Ansible的人。
由于我自己也不是很熟悉,所以我通过DotInstall的课程学习了“基本的Ansible”。虽然支持已经结束,但对于概念和简单构建的参考还是非常有用的,所以即使完全不懂的人也建议至少观看视频。
附言2:关于我所进行的Mac设置
我会将被称为dotfile的文件上传到GitHub。因为我记住了自己设置的别名之类的东西,忘记了正常的命令,所以当更换电脑时,我不会遇到“嗯?那个命令是什么来着?”这样的情况,以防忘记。
-
- .zshrc
-
- .bashrc
-
- .bash_profiles
- .profiles
然后,在主目录中创建一个符号链接。
ln -s ./repository_name0/dotfiles/.bash_profile ~/
通过创建符号链接,即使在本地进行更改,也可以进行git的差异比较,并且如果提交并在其他电脑上进行pull,则可以轻松共享。
有一个补充事项:我也想把VSCode的扩展功能上传到GitHub上。
如果想要一次性安装并导入编辑器的设置等内容,我认为一种比较常见的方式是将它们导出为文件。对于VSCode来说,你可以使用code –list-extensions | xargs -L 1 echo code –install-extension命令来导出,并通过install命令进行替代。只需将这个文件上传到GitHub,即使更换了电脑也不会出问题。
❯ code --list-extensions | xargs -L 1 echo code --install-extension
code --install-extension abusaidm.html-snippets
code --install-extension bmewburn.vscode-intelephense-client
code --install-extension CoenraadS.bracket-pair-colorizer
code --install-extension cstrap.flask-snippets
code --install-extension cweijan.vscode-mysql-manager
code --install-extension EditorConfig.EditorConfig
code --install-extension felixfbecker.php-debug
code --install-extension felixfbecker.php-intellisense
code --install-extension formulahendry.docker-explorer
code --install-extension hangxingliu.vscode-nginx-conf-hint
code --install-extension HookyQR.beautify
code --install-extension jakebathman.mysql-syntax
code --install-extension kevinkyang.auto-comment-blocks
code --install-extension mikestead.dotenv
code --install-extension mohsen1.prettify-json
code --install-extension ms-azuretools.vscode-docker
code --install-extension MS-CEINTL.vscode-language-pack-ja
code --install-extension ms-python.python
code --install-extension ms-vsliveshare.vsliveshare
code --install-extension nmrmsys.vscode-sql-formatter-mod
code --install-extension onecentlin.laravel-blade
code --install-extension onecentlin.laravel5-snippets
code --install-extension quicktype.quicktype
code --install-extension Shan.code-settings-sync
code --install-extension tht13.python
code --install-extension Umoxfo.vscode-w3cvalidation
code --install-extension vscode-icons-team.vscode-icons
code --install-extension xabikos.JavaScriptSnippets
code --install-extension yongzeyao.dom-code-snippets
结束了。