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
Raspberry Pi でノクトビジョン、暗視ゴーグルを作った (1)
子供の頃にSFとかゲームとかアニメとかで見た、暗視ゴーグル。ナイトビジョンとかノクトビジョンとか言われる、軍用・防犯に使われてあるアレをラズパイと赤外線カメラモジュールで作った話。
TRPGの名作、Dungeons and Dragons のエルフとかドワーフは「赤外線視覚」ってスキルを持っていて暗闇でも物が見えるが、アレを人の身で感じたかった。
ラズパイでサイボーグになるのだ俺は。
Call of Duty 4とか劇場版パトレイバーの冒頭にある夜戦ミッション、暗視装置起動して視界がクリアになるとことか、めちゃかっこいいじゃないですか。
というわけで作りました。去年。
「見える!私にも敵の動きが見えるぞ!」
赤外線に照らされた様子がそのままモニタに映るので、街頭のない闇の原野を歩くのも安心。闇が原因でいつのまにかクマに接近されていきなり先手を取られることもない。
サバゲの夜戦でも安心。サバゲやんないですけど。
とりあえず試作した状態のものはこれ。むきだし。動けばいいの。
装備するとめちゃくちゃ目立つので、いかがわしい目的にはとても使えません。
あと、闇で撮影すると、赤外線照射器がほんのり赤く光る。魔王かな?
必要な部品やコードなどは次回以降載せます。
つづく
AnsibleのyumモジュールでGNOME Desktopが入らない件と対処
そういえば以前、Ansible でCentOSを初期設定していたときGNOME Desktopインストール時にエラーがでた。
端末からだと
$ sudo yum groupinstall "GNOME Desktop"
とやるやつ。
Ansibleのplaybookにこんな感じでgroupinstall 指定しても、Ansibleさまは「そんなパッケージないです」的な英語のつれないお返事をするだけ。
- name: groupinstall GNOME Desktop yum: name: "@GNOME Desktop" state: present
公式リファレンスをよくみるとGNOMEの前に^が入ってる。^いれるとちゃんとgroupinstallされる。
- name: groupinstall GNOME Desktop yum: name: "@^GNOME Desktop" state: present
公式リファレンスはよく読もうね。というおはなし。