AnsibleでMacの環境構築をしてみた
IT技術
AnsibleでMacの環境構築をしたい!
(株)ライトコードの北村です!
過去にAnsibleでMacの環境構築するネタをネットで拝見してまして、いつかやってみたいな~!と思ってました。
この度、会社からMac支給される運びとなり、これはビックウェーブに乗るしかないなと思い、ついに、機会が来たのでやってみます!
ハードル上げちゃうとあれなんで、よく使うツールが数コマンドで使えるようになれば良いなぁ、と
Ansible(アンシブル)とは?
Ansibleとは、構成管理ツールの1つで、主にサーバ構築に使われます。
(インフラ屋さんがよく使う認識)
「使うと何が嬉しいのか」を簡単に言うと『冪等性(べきとうせい)の担保』。
そのため、複数台のサーバを同じ構成で設定する場合とか便利です。
類似ツールとしてChef、Puppetと言うのがあります。
しかし、Ansibleは、yaml形式で設定を記述することから、記述内容を読める人が多く、かつ学習コストが低いというメリットがあります。
(Chef、Puppetは、独自形式に設定を記載)
Macを新調する度、Ansible使えば、ばっちりツールが使えるようにセットアップされる(はずです!)
Macにインストールしたいツールたちはこちら
CLI
- zsh
- git
- wget
- vim
- tree
- openssl
GUI
- alfred
- iterm2
- Google日本語入力
- ブラウザ(chrome、firefox)
- エディタ(vscode、CotEditor)
- vagrant
- virtualbox
- slack
- postman
- teamsql
- フォント(ricty-diminished)
必要ソフトのインストール
まずは、必要なソフトをインストールしていきます。
Xcode
素直にAppStoreから。重たいんですよね。。。
Homebrew
準備/インストールをしていきます。
1kitamuranoMacBook-Pro:setup tamken$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2
3==> This script will install:
4/usr/local/bin/brew
5(中略)
6
7Press RETURN to continue or any other key to abort
8# む。素直にリターンキーを押す
9
10==> /usr/bin/sudo /bin/mkdir -p /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Homebrew /usr/local/Frameworks
11Password:
12# む。素直にパスワードを入力する
13
14(中略)
15==> Installation successful!
16
17==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
18Read the analytics documentation (and how to opt-out) here:
19 https://docs.brew.sh/Analytics
20
21==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
22 https://github.com/Homebrew/brew#donations
23==> Next steps:
24- Run `brew help` to get started
25- Further documentation:
26 https://docs.brew.sh
インストール完了!
いちお確認
1kitamuranoMacBook-Pro:setup tamken$ brew -v
2Homebrew 2.0.4
3Homebrew/homebrew-core (git revision 07d6; last commit 2019-03-12)
OKです!(バージョン古いですね。ご愛嬌)
Ansible
いれたてのHomebrewでインストールしていきます。
1# 検索してみる
2kitamuranoMacBook-Pro:setup tamken$ brew search ansible
3==> Formulae
4ansible ansible-lint ansible@2.0
5ansible-cmdb ansible@1.9 terraform-provisioner-ansible
6
7==> Casks
8homebrew/cask/ansible-dk
いろいろ出てきたけど「ansible」をインストール。
1kitamuranoMacBook-Pro:setup tamken$ brew install ansible
2Updating Homebrew...
3==> Auto-updated Homebrew!
4Updated 1 tap (homebrew/core).
5(中略)
インストール開始!
1(中略)
2==> Installing dependencies for ansible: libyaml, openssl, gdbm, readline, sqlite, xz and python
3(中略)
4==> Pouring openssl-1.0.2q.mojave.bottle.tar.gz
5==> Caveats
6(中略)
7🍺 /usr/local/Cellar/openssl/1.0.2q: 1,794 files, 12.1MB
8==> Installing ansible dependency: gdbm
9==> Downloading https://homebrew.bintray.com/bottles/gdbm-1.18.1.mojave.bottle.1.tar.gz
10…
11######################################################################## 100.0%
あ゛。
openssl、はansibleの依存関連でインストールされる模様。
なのでplaybook(のvars)に、opensslの指定は不要ですね。
(でも、記載があっても影響無いからそのままにしとく)
1kitamuranoMacBook-Pro:setup tamken$ ansible --version
2ansible 2.7.8
3(中略)
インストール完了です!
playbook等設定ファイルの作成
続いて、playbook等のAnsibleの設定ファイルを作成します。
playbookは、平たくいえば構築手順を定義したファイルでyaml形式で記述します。
Ansibleはこのファイルを元に環境を構築していくみたいですね。
ファイル構成
以下な感じでいきます。
1- setup
2 - inventory
3 - setup.yml
4 - roles
5 - homebrew
6 - tasks
7 - main.yml
8 - vars
9 - main.yml
10 - homebrew_cask
11 - tasks
12 - main.yml
13 - vars
14 - main.yml
インベントリ
環境構築対象サーバの情報を記載。自分相手なのでlocalhostを指定します。
(~/setup/inventory)
1[localhost]
2127.0.0.1
setup.yml
playbook。
エントリポイントです。
(~/setup/setup.yml)
1---
2# file ~/setup/setup.yml
3- name: mac setup
4 hosts: localhost
5 connection: local
6 # sudo実行有無(しないのでno)
7 become: no
8 # 対象サーバの情報収集(しないのでno)
9 gather_facts: no
10 # タスクの呼び出し
11 roles:
12 - homebrew
13 - homebrew_cask
roles/homebrew
CLIツールのインストール設定を記載
- /tasks/main.yml … タスク
- /vars/main.yml … 変数(ここにインストールしたいツールを定義)
(./setup/roles/homebrew/tasks/main.yml)
1---
2# file: ~/setup/roles/homebrew/tasks/main.yml
3
4- block:
5
6 - name: homebrew update/upgrade
7 homebrew:
8 update_homebrew: true
9 upgrade_all: yes
10
11 - name: homebrew tap
12 homebrew_tap:
13 name: "{{ item }}"
14 state: present
15 with_items: "{{ taps }}"
16
17 - name: homebrew install
18 homebrew:
19 name: "{{ item.name }}"
20 state: "{{ item.state }}"
21 with_items: "{{ packages }}"
22
23 tags:
24 - homebrew
(./setup/roles/homebrew/vars/main.yml)
1---
2# file: ~/setup/roles/homebrew/vars/main.yml
3
4taps:
5 - homebrew/cask
6 - homebrew/cask-versions
7 - homebrew/cask-fonts
8 - homebrew/core
9
10packages:
11 - { name: zsh, state: present }
12 - { name: git, state: present }
13 - { name: wget, state: present }
14 - { name: vim, state: present }
15 - { name: tree, state: present }
16 - { name: openssl, state: present }
roles/homebrew_cask
GUIツールのインストール設定を記載
- /tasks/main.yml … タスク
- /vars/main.yml … 変数(ここにインストールしたいツールを定義)
(./setup/roles/homebrew_cask/tasks/main.yml)
1---
2# file: ~/setup/roles/homebrew_cask/tasks/main.yml
3
4- block:
5
6 - name: homebrew cask install
7 environment:
8 HOMEBREW_CASK_OPTS: --appdir=/Applications
9 homebrew_cask:
10 name: "{{ item.name }}"
11 state: "{{ item.state }}"
12 with_items: "{{ packages }}"
13
14 tags:
15 - homebrew_cask
(./setup/roles/homebrew_cask/vars/main.yml)
1---
2# file: ~/setup/roles/homebrew_cask/vars/main.yml
3
4packages:
5 - { name: alfred, state: present }
6 - { name: iterm2, state: present }
7 - { name: google-japanese-ime, state: present }
8 - { name: google-chrome, state: present }
9 - { name: firegox, state: present }
10 - { name: visual-studio-code, state: present }
11 - { name: coteditor, state: present }
12 - { name: vagrant, state: present }
13 - { name: virtualbox, state: present }
14 - { name: slack, state: present }
15 - { name: postman, state: present }
16 - { name: teamsql, state: present }
17 - { name: font-ricty-diminished, state: present }
playbookの実行
準備完了、setupディレクトリへ移動し以下実行します。
1# setupディレクトリへ移動
2$ cd ~/setup
3# 構文チェック(一応)
4$ ansible-playbook --syntax-check setup.yml -i inventory
5# playbook実行
6$ ansible-playbook setup.yml -i inventory
ansible実行
機は熟しました。
ついに、ansible実行します。
構文チェック
まずは、構文チェックまで。
1# ディレクトリ移動
2kitamuranoMacBook-Pro:setup tamken$ cd ~/setup
3
4# 構文チェック
5kitamuranoMacBook-Pro:setup tamken$ ansible-playbook --syntax-check setup.yml -i inventory
6
7playbook: setup.yml
む。
なにも出ない(分かりづらいですが、何も出なければ構文エラーは無い模様)。
続いて本番
1itamuranoMacBook-Pro:setup tamken$ ansible-playbook setup.yml -i inventory
2
3PLAY [mac setup] ****************************************************************************************************************************************************
4
5TASK [homebrew : homebrew update/upgrade] ***************************************************************************************************************************
6changed: [127.0.0.1]
7(中略)
8
9TAP
CLI群
1TASK [homebrew : homebrew install] **********************************************************************************************************************************
2changed: [127.0.0.1] => (item={'name': 'zsh', 'state': 'present'})
3changed: [127.0.0.1] => (item={'name': 'git', 'state': 'present'})
4changed: [127.0.0.1] => (item={'name': 'wget', 'state': 'present'})
5changed: [127.0.0.1] => (item={'name': 'vim', 'state': 'present'})
6changed: [127.0.0.1] => (item={'name': 'tree', 'state': 'present'})
7ok: [127.0.0.1] => (item={'name': 'openssl', 'state': 'present'})
8# opensslはインストール済なので「ok」でok
GUI群
1TASK [homebrew_cask : homebrew cask install] ************************************************************************************************************************
2changed: [127.0.0.1] => (item={'name': 'alfred', 'state': 'present'})
3changed: [127.0.0.1] => (item={'name': 'iterm2', 'state': 'present'})
4Password:
5# む。パスワード聞かれる(おとなしく入力)
6changed: [127.0.0.1] => (item={'name': 'google-japanese-ime', 'state': 'present'})
7changed: [127.0.0.1] => (item={'name': 'google-chrome', 'state': 'present'})
8changed: [127.0.0.1] => (item={'name': 'firefox', 'state': 'present'})
9changed: [127.0.0.1] => (item={'name': 'visual-studio-code', 'state': 'present'})
10changed: [127.0.0.1] => (item={'name': 'coteditor', 'state': 'present'})
11changed: [127.0.0.1] => (item={'name': 'vagrant', 'state': 'present'})
12# いい感じ
13
14
15failed: [127.0.0.1] (item={'name': 'virtualbox', 'state': 'present'}) => {"changed": false, "item": {"name": "virtualbox", "state": "present"}, "msg": "Updating Homebrew...
16# あら
17
18changed: [127.0.0.1] => (item={'name': 'slack', 'state': 'present'})
19changed: [127.0.0.1] => (item={'name': 'postman', 'state': 'present'})
20changed: [127.0.0.1] => (item={'name': 'teamsql', 'state': 'present'})
21changed: [127.0.0.1] => (item={'name': 'font-ricty-diminished', 'state': 'present'})
22to retry, use: --limit @/Users/tamken/setup/setup.retry
23
24PLAY RECAP **********************************************************************************************************************************************************
25
26127.0.0.1 : ok=3 changed=3 unreachable=0 failed=1
virtualboxが失敗、以外はOKな模様。
(ちなみに上記実行後のbrew list)
1# CLI
2kitamuranoMacBook-Pro:setup tamken$ brew list
3ansible git libyaml openssl perl ruby vim zsh
4gdbm libidn2 lua pcre python sqlite wget
5gettext libunistring ncurses pcre2 readline tree xz
6
7# GUI
8kitamuranoMacBook-Pro:setup tamken$ brew cask list
9alfred firefox google-chrome iterm2 slack vagrant
10coteditor font-ricty-diminished google-japanese-ime postman teamsql visual-studio-code
virtualboxはカーネルを書き換えるため警告がでるとのこと。
[システム環境設定]>[セキュリティとプライバシー]の[一般]タブを選択 → 右下の「許可」ボタン(「Oracle〜のシステムソフトウェアの読み込みがブロックされました。」が表示されている箇所)
を押す必要がある模様。
許可して、もう一回ansible実行。
1kitamuranoMacBook-Pro:setup tamken$ ansible-playbook --syntax-check setup.yml -i inventory
2(中略)
3Password:
4# パスワード聞かれる
5changed: [127.0.0.1] => (item={'name': 'virtualbox', 'state': 'present'})
6(中略)
7PLAY RECAP **********************************************************************************************************************************************************
8127.0.0.1 : ok=4 changed=1 unreachable=0 failed=0
はい、エラーなし。
1kitamuranoMacBook-Pro:setup tamken$ brew cask list
2alfred coteditor font-ricty-diminished google-japanese-ime postman teamsql virtualbox
3cheatsheet firefox google-chrome iterm2 slack vagrant visual-studio-code
virtualbox入った!
以上で、ansibleでMacの環境構築できました!(インストールしたソフトを起動して確認)
オススメ本
さいごに
ansible化するメリットは、Mac変更する際にソフト何入れればいーのか一々旧マシン調べなくて良いのと、ちまちまコマンド打たなくて良いの2点に尽きるかと思いました。
(playbook等をバージョン管理等しているのが前提)
機会あれば、ぜひansibleでMacの環境構築してみてください!
こちらの記事もオススメ!
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
2020.07.27IT・コンピューターの歴史特集IT・コンピューターの歴史をまとめていきたいと思います!弊社ブログにある記事のみで構成しているため、まだ「未完成状態」...
2020.08.04エンジニアの働き方 特集社員としての働き方社員としてのエンジニアの働き方とは?ライトコードのエンジニアはどんな働き方をしてるのか、まとめたいと...
https://github.com/tamken/mac-brew-ansible
【追記】
teamsqlオワコンでしたorz。かわりにdbeaver入れました。
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ