はじめに
Raspberry Pi(RasPi)のセットアップ、毎回同じことをやるには手間がかかるので、Ansibleを使って初期セットアップをする。
動作環境および準備
ホスト側
- CentOS 6.6
- Ansible 1.9.2
- sshpass 1.05
リモート側:RasPi
- Raspberry Pi (typeB)
事前準備
- RasPiが起動できるよう、SDカードにRASPBIAN(Debian Wheezy,Release date:2015-05-05)をインストール
- RasPiを起動。IPアドレスをメモする
- ホスト側にAnsibleをインストール。Ansibleがsshでリモート接続するとき、sshが必要になるので、sshpassもインストール
できること/できないこと
できること
- タイムゾーン設定
- キーボード設定
- MySQLインストール
- PHP5インストール
- Apache2インストール
- Wordpress
できないこと
- Expand Filesystem …… raspi-config内に書いてある内容を移植すればできるかも
- pi/root password …… 初期パスワードのまま
Playbookいろいろ
Ansibleを使ってRasPiをセットアップするPlaybookを用意する。
躓いた部分のPlaybookを掲載していきます。全体像はGitHubを参照してください。
インベントリファイル設定
INVENTORY:棚卸し表
初期セットアップをするRasPiをリストアップ。事前に調べておいたIPアドレスをインベントリファイルに羅列する。ここに羅列されたIPアドレスへ順次 Playbookの内容が実行されていく。
RASPBIANのパスワードも固定&公開されているのでインベントリファイルに記載してしまう。
[raspi]
192.168.1.2
[raspi:vars]
ansible_ssh_port=22
ansible_ssh_user=pi
ansible_ssh_pass=raspberry
#ansible_sudo_pass=
backup=yes
【参考】
Playbook
YAML形式で作業を内容を記述していく。
raspi.yml
RasPiのSDカードを書き換えのたびにサーバ側のホスト鍵指紋が変わってしまうため、同一IPアドレスを指定してSSHを接続した時 キャッシュ保持されているホスト鍵指紋と一致しない。そのためAnsibleがリモート(RasPi)側にssh接続するときにエラーが出てしまうため、ssh-keygen -R {{ inventory_hostname }}
でホスト鍵指紋のキャッシュを削除している。
inventory_hostname
はマジック変数。対象となるインベントリが代入される。
あとは、roles/setup内のPlaybookが実行されていく。
---
- name: remove Raspberry Pi ssh-publickey
hosts: 127.0.0.1
tasks:
- name: remove ssh publickey
shell: ssh-keygen -R {{ inventory_hostname }}
- name: Setup Raspberry Pi
hosts: raspi
sudo: yes
roles:
- setup
timezone.yml
タイムゾーンを設定。Asia/Tokyo
を/etc/timezone
に書き込むだけなので、copyで直接文字打ちしてしまう。
---
- name : Create Timezone file.
copy : content='Asia/Tokyo'
dest=/etc/timezone
owner=root
group=root
mode=0644
backup={{ backup }}
- name: update timezone
shell: dpkg-reconfigure --frontend noninteractive tzdata
keyboard.yml
キーボード設定。
複数行あるので、あらかじめ用意したファイルをcopy。
---
- name: Create keyboard keymap file.
copy: src=keyboard
dest=/etc/default/keyboard
owner=root
group=root
mode=0644
backup={{ backup }}
- name: update keymap
shell: /etc/init.d/keyboard-setup reload
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
GitHub