ふたごパパのサーバ構築日記

コンピュータ関連のことを、出来る時に、出来ることだけ。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
前回のAnsibleのplaybookを書きましたが、パッケージをインストールするだけでは特に便利になった感は少ないので、もうちょっとやってみます。

以下のplaybookを実行します。

01:---
02:- hosts: 192.168.1.5
03: sudo: yes
04: tasks:
05:
06: - name: Install net-tools
07: yum: pkg=net-tools state=latest
08:
09: - name: Install net-snmp
10: yum: pkg=net-snmp state=latest
11: - name: Install net-snmp-utils
12: yum: pkg=net-snmp-utils state=latest
13: - name: Copy ConfFile snmpd.conf
14: template: src=/vagrant/pi/etc/snmp/snmpd.conf dest=/etc/snmp/snmpd.conf
15: - name: Enable snmpd
16: service: name=snmpd state=started enabled=yes
17:
18: - name: Install ntp
19: yum: pkg=ntp state=latest
20: - name: Enable ntpd
21: service: name=ntpd state=started enabled=yes


・09-10行
 net-snmpをインストール
・11-12行
 net-snmp-utilをインストール
・13-14行
 snmpdの設定ファイルをコピー。
・15-16行
 snmpdを起動(state=started)し、自動起動するよう設定(enabled=yes)
・18-19行
 ntpをインストール
・20-21行
 ntpdを起動(state=started)し、自動起動するよう設定(enabled=yes)

snmpdの設定ファイルは、Ansibleサーバ上に予め準備しておきます。

$ cat /vagrant/pi/etc/snmp/snmpd.conf
com2sec notConfigUser default xxxxx

group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1

access notConfigGroup "" any noauth exact systemview none none

syslocation raspberry_pi
syscontact Root xxxxx@example.com

dontLogTCPWrappersConnects yes



playbookを実行します。

$ ansible-playbook raspberrypi_setup.yml -k -K
SSH password:
sudo password [defaults to SSH password]:

PLAY [192.168.1.5] ************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.1.5]

TASK: [Install net-tools] *****************************************************
ok: [192.168.1.5]

TASK: [Install net-snmp] ******************************************************
changed: [192.168.1.5]

TASK: [Install net-snmp-utils] ************************************************
changed: [192.168.1.5]

TASK: [Copy ConfFile snmpd.conf] **********************************************
changed: [192.168.1.5]

TASK: [Enable snmpd] **********************************************************
changed: [192.168.1.5]

TASK: [Install ntp] ***********************************************************
changed: [192.168.1.5]

TASK: [Enable ntpd] ***********************************************************
changed: [192.168.1.5]

PLAY RECAP ********************************************************************
192.168.1.5 : ok=8 changed=6 unreachable=0 failed=0


問題なく完了しました。
Raspberry piにログインして、意図通りに設定できているか確認します。

snmpdの設定ファイルは正しく配置されていました。

[root@pidora ~]# ls -l /etc/snmp/snmpd.conf
-rw------- 1 root root 421 Mar 25 23:43 /etc/snmp/snmpd.conf
[root@pidora ~]# cat /etc/snmp/snmpd.conf
com2sec notConfigUser default xxxxx

group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1

access notConfigGroup "" any noauth exact systemview none none

syslocation raspberry_pi
syscontact Root xxxxx@example.com

dontLogTCPWrappersConnects yes
[root@pidora ~]#



ntpdとsnmpdは、enable(自動起動)になっています。

[root@pidora ~]# systemctl list-unit-files | egrep "ntpd.service|snmpd.service"
ntpd.service enabled
snmpd.service enabled
[root@pidora ~]#



ntpdとsnmpdのプロセスも稼働しています。

[root@pidora ~]# ps -wef|egrep "ntp|snmp" | grep -v grep
root 31600 1 0 01:21 ? 00:00:02 /usr/sbin/snmpd -LS0-6d -f
ntp 31745 1 0 01:24 ? 00:00:00 /usr/sbin/ntpd -u ntp:ntp -g
[root@pidora ~]#



これくらいやってみると、便利さが実感できてきました。よく「実行できる手順書」と表現されますが、まさしくその通り。playbookがあれば設定ができて、何をやろうとしたかも分かる。しかも対象にログインしなくてよい。これは…良いものだ。

ただ、結局稼働確認で管理対象にログインしているので、そこも何とかしたい。次はserverspecをやってみます。
本格的なplaybookを書く前に、簡単なplaybookでテストしてみます。
PIDORAは初期段階ではnetstatやifconfigコマンドを実行できず、ネットワーク設定廻りで苦労したので、これらのコマンドが含まれるnettoolをインストールしました。

以下サイトを参考にさせて頂いています。

Ansible Tutorial
不思議の国のAnsible – 第4話
Ansible Docs - Intro to Playbooks

1.Playbookの作成
Vagrantで作成したansibleサーバ上でplaybookを作成します。
通常、Windows上のVagrantfileが配置されたフォルダが、vagrantで作成した仮想マシンの/vagrantディレクトリにマウントされているので、そこを使えばWindows上で簡単に作成できます。

以下の内容で作成しました。

nettool_install.yml
1:---
2:- hosts: 192.168.0.1
3: sudo: yes
4: tasks:
5: - name: Install net-tools
6: yum: pkg=net-tools state=latest



2行:対象ホストを記述。/etc/ansible/hostsに書かれている必要あり。
3行:sudoを有効
5行:タスクのタイトル
6行:yumでnet-toolsをインストール。"state=latest"は最新版があればアップグレード。

2.ansible/hostsへの設定追加
必須ではないですが、ansible/ansible-playbookコマンド実行時に、毎回ユーザ名と鍵ファイルの指定を行わなくて良いよう、/etc/ansible/hostsファイルに設定を追加します。

192.168.0.1 ansible_ssh_user=ansible ansible_ssh_private_key_file=/home/ansible/.ssh/id_rsa


ホスト名/IPアドレスの後に、"ansible_ssh_user" "ansible_ssh_private_key_file"オプションを追記しました。

3.playbookの実行
ansible-playbookコマンドを実行します。"-k"オプションはsshパスワードを、"-K"オプションはsudoパスワードを渡すオプションです。

$ ansible-playbook nettool_install.yml -k -K
SSH password:
sudo password [defaults to SSH password]:

PLAY [192.168.0.1] ************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.0.1]

TASK: [Install net-tools] *****************************************************
changed: [192.168.0.1]

PLAY RECAP ********************************************************************
192.168.0.1 : ok=2 changed=1 unreachable=0 failed=0

$


PIDORAにログインしてnettoolがインストールされていることを確認できました。ifconfig,netstatもOKです。

パッケージのインストールではsudo権限が必要になるため、-Kオプションを付ける必要があることに気づかずハマりました。

実行時にパスフレーズ/パスワードを入力しないようにすることも、以下の方法で可能ですが、安全性とのトレードオフです。
・SSHのパスフレーズ
→sshの鍵ペア生成時にパスフレーズを入力しない。
・sudoパスワード
→sudo設定時にNOPASSWDを設定する。

今日はここまで。
Raspberry Piをセットアップしていきますが、闇雲にやると訳が分からなくなるのは目に見えているので、最近よく聞くようになった構成管理ツールを試してみます。Chefの本を買って細々と読んでいたのですが、偉い人が「オレはAnsibleだと思うんだよね!」を言っていたのを小耳に挟んだので、長いものに巻かれてAnsibleをやってみます。

やり方は以下のサイトを参考にさせて頂きました。
http://yteraoka.github.io/ansible-tutorial/
http://demand-side-science.jp/blog/2014/ansible-in-wonderland-01/

本家サイトも大事ですね。
http://docs.ansible.com/intro_getting_started.html

1.Ansibleサーバを用意する
ドキュメントを見るとWindowsへはインストールできない※ようなので、VagrantでLinuxサーバを立ち上げて、そこにAnsibleをインストールします。
※Windowsマシンを管理することはできるようです。

1-1.Ansible用に新規でboxファイルをインストール
VagrantとVirtualBoxのインストールは割愛します。

Windows端末でPoworShellを起動して、適当なフォルダにboxをインストールします。このサイトから、CentOS6.5の最小構成版をインストールしました。
> vagrant box add ansible <boxファイルのURL>

インストールできたら、CentOSを起動します。
> vagrant up

起動後、TeraTermでlocalhost:2222にssh接続します。
ユーザ名とパスワードはvagrantです。

1-2.CentOSにAnsibleをインストール
AnsibleをインストールするためEPELリポジトリを追加します。

$ su -
# yum install epel-release

Package epel-release-6-8.noarch already installed and latest version
Nothing to do


今回導入したCentOSには既にEPELがインストールされていたので、already installedと出てきました。
次にansibleをインストールします。

# yum -y install ansible
~省略~
Complete!
[root@vagrant-centos65 ~]#

特に問題なくインストールできました。

1-3.管理用ユーザの作成
必須ではないですが、Ansibleはデフォルトでは現在のユーザで管理対象サーバに接続するので、Ansible用のユーザを作成しておきます。

# useradd -g users ansible
# passwd ansible
# su - ansible
$



1-4.ssh鍵ペアを作成
Ansibleは管理対象サーバに対しssh接続できる必要がありますが、鍵認証が推奨されているので、鍵ペアを作成しておきます。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ansible/.ssh/id_rsa):<デフォルトのままEnter>
Enter passphrase (empty for no passphrase):<パスフレーズを入力しEnter>
Enter same passphrase again:<パスフレーズを再入力しEnter>
Your identification has been saved in /home/ansible/.ssh/id_rsa.
Your public key has been saved in /home/ansible/.ssh/id_rsa.pub.
~略~
$ cd ~/.ssh
$ ls -l


※公開鍵id_rsa.pubと秘密鍵id_rsaが生成されています。

ここで一度ハマったのですが、PIDORA(Raspberry Pi)上で作成すると、鍵が「AES-128-CBC」形式で作成されてしまい、ansibleコマンドを発行した時に以下のメッセージが表示されてしまいます。回避のためAnsibleサーバ上で作成しました。
FAILED: Unknown private key cipher "AES-128-CBC"

作成した公開鍵は、管理対象サーバ(Raspberry Pi)にコピーしておきます。
※Raspberry PiのIPアドレスを「192.168.0.1」としています。

$ scp ~/.ssh/id_rsa.pub root@192.168.0.1:~/



2.Raspberry Pi側の準備
管理対象サーバ側でも多少設定が必要です。以降はRaspberry Piにログインして作業しています。

2-1.作業用のユーザを作成
作業用のユーザを作成します。
※作成するユーザ名を「ansible」としています。

# useradd -g users ansible
# passwd ansible



2-2.sudo権限を付与

# visudo
※以下の記述を追加して上書き保存
--------------
ansible ALL=(ALL) ALL
--------------



2-3.公開鍵ファイルの配置
1.4でコピーしておいた公開鍵を、管理ユーザのauthorized_keysファイルに追記します。

# su - ansible
$ pwd
/home/ansible
$ mkdir .ssh
$ cd .ssh
$ sudo cat /root/id_rsa.pub >> authorized_keys


authorized_keysの権限を変更します。

$ chmod 600 authorized_keys



3.Ansibleサーバ側から接続確認
Ansibleサーバから、管理対象サーバへansibleで接続できるか確認します。

3-1.ping実行

$ ansible 192.168.1.5 -m ping --private-key ~/.ssh/id_rsa -k
SSH password: ※パスフレーズを入力しEnter
192.168.1.5 | success >> {
"changed": false,
"ping": "pong"
}



「"ping": "pong」の表示があれば接続成功です!

3-2.パスフレーズの付与
毎回秘密鍵とパスフレーズを入力するのが面倒な場合は、sshエージェントを起動して秘密鍵にパスフレーズを付与します。

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/ansible/.ssh/id_rsa:  ※パスフレーズを入力しEnter
Identity added: /home/ansible/.ssh/id_rsa (/home/ansible/.ssh/id_rsa)
$
$ ansible 192.168.1.5 -m ping
192.168.1.5 | success >> {
"changed": false,
"ping": "pong"
}



管理対象サーバ側でやったことは、ユーザ作成、sudo設定、鍵設定だけで10行未満のコマンドでできたので、やり方さえ押さえてれば確かに簡単ですね。次はPlaybookを書いてみます。
引き続きRaspberry Pi関連です。

Raspberry Piの推奨OS「Raspbian」はDebian系のOSなので、普段Redhat系を使っている身としてはちょっと慣れない点が多いです。
http://www.raspberrypi.org/downloads/
ダウンロードサイトには「PIDORA」なるRaspberry Pi向けFedora、つまりRedhat系のOSがあったので、そちらを使ってみることにします。
ググってみると詳しく解説されている方がたくさんいらっしゃったので、やった事だけ書きます。

■イメージの書き込み
ダウンロードサイトからOSイメージをダウンロードして、SDカードに書き込むまではRaspbianの時と同じ。
インストールしたバージョンは以下の通りです。
Version:20
Release date:2014-07-24

■初期設定
初回起動時は初期設定画面が起動するので、以下のように設定しました。
1.Welcome
Forwordをクリック
2.License information
Forwordをクリック
3.Keyboad
Japaneseを選択しForwordをクリック
4.Create User
一般ユーザは後で作るので、何も入力せずにForwordをクリック
※「一般ユーザも作った方が良いよ」的なメッセージが出てきましたが、無視して続行
5.Root User
rootユーザのパスワードを2回入力してForwardをクリック
6.Date and Time
何も変更せずにForwardをクリック
7.Time Zone
Tokyoを選択しForwardをクリック
8.Filesystem
何も変更せずにForwardをクリック
9.System Settings
HostName:変更せず
Boot Type:Graphical
Video Configuration:HDMI only, with overscan
ここが思いがけず引っかかったのですが、Boot TypeでTextを設定したあと、rootログインしてstartxを実行するとエラーが発生しました。Video Configurationの選択がまずいのかと思っていろいろ試しましたが、どの設定に変えても変化なし。結局初期設定時はGraphicalにし、あとでデフォルトのランレベルを変更しました。(別にGUIで使用するつもりはなかったので、今思うと不要な対応でした)

■ランレベルの設定
初期設定時にデフォルトのランレベルをグラフィカルログインに設定したので、テキストログインに変更します。/etc/inittabファイルを確認すると、全行コメントで以下のように記載されていました。

# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To set a default target, run:
#
# ln -sf /lib/systemd/system/.target /etc/systemd/system/default.target
#

どうやらデフォルトのランレベル設定は/etc/inittabでは行わなくなったようです。記載内容を参考に以下コマンドを実行しました。

# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
シンボリックリンク「default.target」のリンク先を、「multi-user.target」に変更しています。変更前は「graphical.target」でした。

■ネットワークの設定
サーバとして使用したいので、固定IPの設定を行います。

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLLED=no
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=xxxxxxxxxxxx
IPADDR0=192.168.x.x
PREFIX0=24
GATEWAY0=192.168.x.x
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
→インタフェース名。変更せず。
→スタティックIPを設定
→OS起動時にインタフェースを起動する。
→NetworkManagerは使用しない。
→種類はEthernet
→このポートをデフォルトルートにする。
→IPv4が使用できない場合にIPv6を使用しない
→IPv6を使用しない
→NetworkManagerが使用する名前。変更せず。
→UUID。変更せず。
→IPv4アドレスを設定
→サブネットマスクをプリフィックスで設定
→デフォルトルートを設定
→プライマリDNSサーバを設定
→セカンダリDNSサーバを設定

上書き保存後、ネットワークを再起動します。
[root@pidora network-scripts]# /etc/init.d/network restart
Restarting network (via systemctl):                        [  OK  ]

ネットワークケーブルを繋げるとPingの疎通がとれました。

今日はここまで。

24時間365日動く自宅サーバを構築したいのですが、技術的なことより、騒音と電気代がどうしてもネックになります。いくら静音型PCといっても静かにしていれば音が気になりますし、LEDが点滅していれば、家族から見ればなんで使ってないのに電源を切らないの?電気代の無駄!という話になってしまうので。

いろいろ調べたところ、Raspberry Piなるものがありました。
http://www.rs-online.com/designspark/electronics/jpn/nodes/view/type:design-centre/slug:raspberry-pi

名刺サイズのシングルボードコンピュータで、ファンレスで低消費電力、価格はケース込みで5000円以下。
飲み会1回分の値段で手に入ります。

とはいえ飲み会1回は惜しい!という器の小さな悩みで半年ほど引っ張りましたが、先週末に注文。翌々日には到着しました。

早速開封
カラフルな方が基盤本体の箱、もう1つの箱はケースが入っています。
Post29_01.jpg

基盤はこんな感じ。
Post29_02.jpg

ケースに入れてみる。分かりづらいですが、ケースの上に名刺を乗せてます。ケースでこのサイズなので、中身は本当に名刺サイズです。
Post29_03.jpg

電源になる5V2AのACアダプタ、microSDカード、USBマウス/キーボードは持っていたものを使用しました。
しばらくこれを弄ってみようと思います。


■とりあえず起動してみる
http://www.rs-online.com/designspark/electronics/jpn/nodes/view/type:design-centre/slug:raspberry-pi
上記サイトの「Raspberry Pi クイックスタートガイド」に添ってOSをインストールし起動します。

1. Raspbian OSをダウンロード
イックスタートガイドの通りの「2012-12-16-wheezy-raspbian」では全く起動しなかったので、以下ダウンロードサイトより最新版のRASPBIAN「2014-12-24-wheezy-raspbian.img」をダウンロード
http://www.raspberrypi.org/downloads/

2. SDFormatter4を使用してMicroSDカードをFAT32でフォーマット
https://www.sdcard.org/jp/downloads/formatter_4/
※上記ツールを使うとデフォルトでFAT32でフォーマットされます。Windows7上でFAT,exFAT,NTFSでフォーマットしてイメージを書き込んでも起動は可能で、特に問題も見受けられませんでした。しかし厳密に検証したわけではないので、ググってみると使っている方が多かったSDFormatterでフォーマットしました。
※1度Raspbianを書き込むと56MBの起動パーティションが作成され、Windows上からは削除できないため、そのSDカードを別用途で使用したい場合は、SDFormatter等のフォーマットツールでのフォーマットが必要です。

3. Win32DiskImager-0.9.5を使用してイメージをMicroSDカードに書き込み
http://sourceforge.jp/projects/sfnet_win32diskimager/

4. 5V2Aの電源で起動
古いOSだと上手くいかなかった際、電源のアンペア数の問題か?と思って5V1Aと5V2Aを試しましたが、結果的にどちらでも問題ありませんでした。
Post29_04.jpg

5. 初期設定
初回起動時は設定画面が出てきます。細かい設定は後にして、「Expand Filesystem」のみを実行し、「Finish」して再起動します。「Expand Filesystem」を実行すると、イメージ書き込み後では3GB程度のrootパーティションが、SDカードの最大容量まで拡張され、さらにext4でフォーマットされます。
Post29_05.jpg

6. 再起動後、ログインプロンプトが表示されたらユーザ名「pi」、パスワード「raspberry」でログインします。

7. startxコマンドを実行すると、デスクトップ画面が起動しました!
Post29_06.jpg


今日はここまで。

Before  | Copyright © ふたごパパのサーバ構築日記 All rights reserved. |  Next

 / Template by 無料ブログ テンプレート カスタマイズ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。