IoT開発フレームワーク『Nerves』のハンズオン環境をAnsibleで構築してみた

2019.09.30

はじめに

今回は10/5に開催されるElixir製IoT開発フレームワーク『Nerves』のハンズオンの開発環境を構築してみました。

イベントの詳細などはこちら→ Nerves Training at Sapporo

やったこと

イベントページでも紹介されているElixirでIoT#4.1:Nerves開発環境の準備のセットアップ内容を下記のAnsibleでやってみました。

サーバーのように複数環境を繰り返しプロビジョニングする訳ではないのですが、VMを削除したり、環境をリセットできると楽だなと思ってAnsibleの素振りも兼ねて挑戦してみた次第です。

Vagrantfileを含む完全なコードはこちらにあります

動作環境

環境は手元のMacBook(macOS 10.14.6)にVagrant + Virtualboxで構築しました。

  • Vagrant 2.2.5
  • Virtualbox 6.0.12

playbook

基本的には必要なパッケージを淡々とインストールしていきますが、いくつかポイントがあります。

  1. 環境構築後にvagrantユーザーで使う関係で、aptパッケージのインストール以外はvagrantユーザーで行います。
  2. 最後のasdfによるビルドではVMに4GB以上のメモリが必要でした(後述)
  3. このスクリプトではヘッドレス環境しかセットアップできないのでお好みでデスクトップ環境をインストールします
---
- hosts: all
  remote_user: vagrant
  tasks:
    - name: install packages
      become: true
      apt:
        name:
        - build-essential
        - automake
        - autoconf
        - git
        - squashfs-tools
        - ssh-askpass
        - libssl-dev
        - libncurses5-dev
        - bc
        - m4
        - unzip
        - cmake
        - python
        - picocom
        - libwxgtk3.0-dev
        - libgl1-mesa-dev
        - libglu1-mesa-dev
        - libglfw3
        - libglfw3-dev
        - libglew2.0
        - libglew-dev
        - fop
        - xsltproc
        - libxml2-utils
        - curl
        update_cache: yes
    - name: download fwup
      get_url:
        url: https://github.com/fhunleth/fwup/releases/download/v1.3.1/fwup_1.3.1_amd64.deb
        dest: ./fwup_1.3.1_amd64.deb
        force: true
    - name: install fwup
      apt:
        deb: ./fwup_1.3.1_amd64.deb
    - name: git clone asdf
      git:
        repo: https://github.com/asdf-vm/asdf.git
        dest:  /home/vagrant/.asdf
        depth: 1
        version: v0.7.1
    - name: set env vars
      lineinfile:
        dest: /home/vagrant/.bashrc
        state: present
        line: "{{ item.line }}"
      with_items:
      - line: . $HOME/.asdf/completions/asdf.bash
        regexp: '^ \. \$HOME/\.asdf/completions/asdf\.bash'
      - line: . $HOME/.asdf/asdf.sh
        regexp: '^ \. \$HOME/\.asdf/asdf\.sh'
    - name: install elixir
      script: ./install_elixir.sh

最後に実行しているinstall_elixir.shは下記のファイルです。 このスクリプトではErlangやElixirのビルドを行うので4GB以上のメモリが必要でした。

#!/bin/bash
source ~/.bashrc
ASDF_BIN=~/.asdf/bin/asdf
$ASDF_BIN plugin-add erlang
$ASDF_BIN plugin-add elixir
$ASDF_BIN install erlang 22.0.7
$ASDF_BIN install elixir 1.9.1-otp-22
$ASDF_BIN global erlang 22.0.7
$ASDF_BIN global elixir 1.9.1-otp-22

まとめ

Ansibleで使い捨て可能な環境ができました。今からハンズオンが楽しみです。