AnsibleでRaspberryPiの初期設定を自動化する
Raspberry Pi でいくつか動くものを作ったが、途中から初期設定にかける時間がもったいなく感じ始めた。
てか何度も同じコマンド入力してると、「これは中世の単純労働刑?」みたいに感じられてよろしくない。ので、Ansible様にお願いしたのだった。
そんなPlaybookを最近久しぶりに発掘したので、せっかくだから載せます。
時間って大事ですよね。
前提
- ラズパイはmicroSDにOS入れて初回起動までしておく
- SSH接続できるようにしておく。起動後にGUI設定でSSHを許容するのでも、raspbianを入れたmicroSDにsshってファイル置いてはじめから動くようにしておくのでもいい。
- 再起動後、ターゲットノードの起動を待機しているが、 /etc/hosts にターゲットノードのIPアドレスとホスト名を記載しないと、起動を確認できずエラーになる。ので、書く。
/etc/hosts
192.168.101.18 raspberrypi
↑こんなかんじでファイル末尾に追記しとく
Playbookで実行すること
- timezone をAsia/Tokyoにする
- SDカードのrootを容量にあわせて拡張する
- expandを反映するため再起動、再接続をAnsible側で待機する
- apt で vim git mlocate を入れる
- apt で既存パッケージをまとめて更新する
- 再起動をかけたあと、sshが途切れてもAnsibleに待機させる
- 最後の再起動は、Ansibleの画面見なくてもraspberry側画面で「ばっちしおわったぜ」的なPRさせて自分が気づきやすくするため。 いらないんじゃないですか?
あとから知ったこと
最近のバージョンのraspbianは、初回起動時に勝手にrootfsをexpandしてくれるみたい。playbookに書いたexpand-rootfs処理いらなかったかも。
playbook
- hosts: all gather_facts: no become: yes tasks: - name: raspi-config --expand-rootfs command: raspi-config --expand-rootfs - name: reboot shell: /sbin/reboot async: 1 poll: 0 ignore_errors: true - name: wait ssh down local_action: wait_for host={{ inventory_hostname }} port=22 state=stopped - name: wait ssh up wait_for: host={{ inventory_hostname }} port=22 delay=30 delegate_to: 127.0.0.1 - name: set timezone to tokyo timezone: name: Asia/Tokyo - name: apt update apt: update_cache=yes - name: apt dist-upgrade apt: upgrade=dist force=yes ignore_errors: true - name: apt install vim mlocate git apt: name={{item}} state=present with_items: - vim - mlocate - git - name: reboot shell: /sbin/reboot async: 1 poll: 0 ignore_errors: true - name: wait ssh down local_action: wait_for host={{ inventory_hostname }} port=22 state=stopped - name: wait ssh up wait_for: host={{ inventory_hostname }} port=22 delay=30 delegate_to: 127.0.0.1