RaspberryPiのSDカードを作成するところからopenmediavaultとminidlnaのインストールまでをヘッドレスで行う。
ついでに、ぼくのかんがえたさいきょうのラズパイバックアップ手順も書く。
#準備
必要なものリスト。
- Mac
- Raspiberry Pi2 Model B
- USB Wi-Fi アダプタ
- 2Aぐらい対応のUSBアダプタ
- MicroSDカードリーダライタ
- 4GB以上のMicroSDカード
- 2GBのMicroSDカード(システムバックアップに使う)
これからハードを買い集める人はRaspberryPi3にするといいと思う。その場合はWi-Fiアダプタは不要。
基本的にはeth0に接続するが、ネットワークの設定変更時のバックアップにwlan0も使うため、Wi-Fiも使えたほうが良い。
SDカードは、システムに挿しておくものと、バックアップ用にそれぞれ1枚確保。トラブル時や、テストする際にはSDカード入れ替えるだけでまるっとシステム切り替えられて便利なので、その辺に落ちているSDカードをかき集めておく。
常時起動するので、ファン付きのケースも確保しておくと良い。ファンは3.3Vに接続してヒートシンクも付けたらCPU温度30度前後で落ち着いている。
ヘッドレスで構築するので、キーボード/モニタなどは基本不要。ただし、bootstrapでのトラブルシュートには必要になるので、以下も持っておいたほうが良い。全てその辺に落ちているはずなので探しておく。
- HDMIが接続できるモニタ(TVでOK)
- USBキーボード
- HDMIケーブル
構築手順
参考:
Raspberry Pi 2の初期設定(外付けモニタ・USBキーボードなし、OS:Raspbian)
http://qiita.com/kozykana/items/df6aa52cbb8917abc268
Raspberry Pi開封から無線LAN経由でSSH接続して初期設定するまでのマイ・ウェイ(モニタ・キーボード無し)
http://qiita.com/morizotter/items/48ad0b17207b0dd66cac
Raspberry Pi 2でファイルサーバを作るまでのまとめ
http://qiita.com/Cinosura/items/6ab435331ea2b3671a1d
1.raspbian-liteをダウンロード
Download Raspbian for Raspberry Pi
https://www.raspberrypi.org/downloads/raspbian/
ヘッドレスなのでliteを使う。
torrentのほうが当然早いのでオススメ。ダウンロードしたらsha1ハッシュを確認して解凍する。
$ openssl sha1 2016-05-27-raspbian-jessie-lite.zip
$ unzip 2016-05-27-raspbian-jessie-lite.zip
2.イメージ書き込み
diskutilでパスを確認してアンマウントと書き込みを行う。書き込み中はCtrl+T
で進捗確認できる。
$ diskutil list
$ sudo diskutil unmountDisk /dev/disk2
$ sudo dd bs=1m if=*.img of=/dev/rdisk2
$ sudo diskutil unmountDisk /dev/disk2
3.RaspberryPiにSSH接続
RaspberryPiにSDカードを挿し、EtherケーブルとWi-Fiアダプタを挿して起動する。
raspberry.localに接続しても良いが、広告されるまで時間がかかる。待ちきれないのでping sweepする。以下は、192.168.1.100が割り振られていた場合。
$ nmap -sP 192.168.1.0/24
$ ssh pi@192.168.1.100
パスワードはraspberry
4.raspi-config
Console起動/タイムゾーンを東京に/Wi-Fiを日本設定に/ホスト名変更/ビデオメモリを最小設定に/
$ sudo raspi-config
3 Boot Options > B1 Console
5 Internationalization Options > Change Timezone > Asia > Tokyo
5 Internationalization Options > Change Wi-fi Country > JP Japan
9 Advanced Options -> A2 Hostname -> raspiomv
9 Advanced Options -> A3 Memory Split -> 16
reboot
5.wifiに接続
基本的にはWi-Fiは使わないが、eth0の設定変更を行う際のバックアップとして使う。
$ ip addr
$ sudo sh -c 'wpa_passphrase ESSID PRESHAREDKEY \
>> /etc/wpa_supplicant/wpa_supplicant.conf'
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=ESSID
# 下の行を削除する
#psk=PRESHAREDKEY
psk=なんかすごい長い16進文字列
# 以下を追記する
# WPA2-PSK/TKIP/ステルスAPの場合の設定
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
group=CCMP
priority=2
scan_ssid=1
}
Wi-FiのIPを固定する。jessieは/etc/network/interfaces
を見ない。
$ sudo vi /etc/dhcpcd.conf
以下を追記。Wi-Fiは192.168.1.3にする。バックアップ用なのでgatewayは設定しない。
interface wlan0
static ip_address=192.168.1.3/24
設定が終わったらwlan0を起動し、結果を確認。
$ sudo ifdown wlan0
$ sudo ifup wlan0
$ ifconfig wlan0
$ iwconfig wlan0
nicにトラブルがあると再起動時に文鎮と化す。せめて、コンソールログインできるように、起動プロセスが止まらないようにするおまじない。
参考 : dhcpcd.service takes longer time on Lite
https://www.raspberrypi.org/forums/viewtopic.php?t=152757
$ sudo vi /etc/default/networking
# 以下の行を追加する
CONFIGURE_INTERFACES=no
6.有線LANの設定を変更
Wi-Fiのnicからssh接続してeth0の設定を変更する。eth0のアドレスは192.168.1.2にする。
$ ssh pi@192.168.1.3
$ sudo ifconfig eth0 down
$ sudo vi /etc/dhcpcd.conf
#以下を追記
interface eth0
static ip_address=192.168.1.2/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8
eth0を再起動して結果を確認。
$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 up
$ ifconfig
$ ip addr
$ route
同じネットワークにeth0とwlan0が繋がっていて、デフォルトルートはeth0になっていることを確認。
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
192.168.1.0 * 255.255.255.0 U 202 0 0 eth0
192.168.1.0 * 255.255.255.0 U 303 0 0 wlan0
7.アップデート
raspbianのリポジトリをjaistのミラーに変更する。
$ sudo vi /etc/apt/sources.list
deb http://ftp.jaist.ac.jp/raspbian jessie main contrib non-free rpi
アップデートする。
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ sudo apt-get autoremove
$ sudo apr-get autoclean
$ sudo rbi-update
不要なパッケージを削除する。たぶん無いけど。
$ dpkg -l | awk '/^rc/ { print $2 }'
$ sudo apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }')
後々必要になるパッケージをインストールする。
$ sudo apt-get install dnsutils chkconfig git resolvconf
8.swapoff
参考 : Raspberry PiのSDカード/マイクロSDカードの寿命を延ばす
http://denshikousaku.net/extend-life-expectancy-of-raspberry-pi-sd-card
sdカードにswap領域があると精神衛生上よろしくないのでoffにする。
$ free
$ sudo swapoff --all
$ sudo chkconfig dphys-swapfile off
$ sudo shutdown -r now
結果を確認。
$ free
total used free shared buffers cached
Mem: 996476 862672 133804 15024 54548 716968
-/+ buffers/cache: 91156 905320
Swap: 0 0 0
Swapのところが全部0になってればOK。
9.moperonユーザを追加してpiユーザをロック
moperonユーザを追加する。groupsはpiユーザと同じものをセットする。
$ sudo adduser moperon
$ groups pi
$ sudo usermod -aG adm,dialout,cdrom,sudo,audio,video,plugdev,\
games,users,input,netdev,spi,i2c,gpio moperon
$ groups moperon
$ exit
新しく作ったユーザでssh接続。
$ ssh moperon@192.168.1.2
piユーザをロックする。
$ sudo passwd -l pi
10.ntpサーバを変更
$ sudo vi /etc/ntp.conf
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
pool ntp.nict.jp iburst
$ sudo service ntp restart
11.システムバックアップ
別添のバックアップ手順に従う
12.OpenMediaVaultをインストール
参考 : Install OpenMediaVault Raspberry Pi NAS Server Minibian
http://www.htpcguides.com/install-openmediavault-raspberry-pi-nas-server-minibian/
$ sudo sh -c 'echo "deb http://packages.openmediavault.org/public erasmus main" > /etc/apt/sources.list.d/openmediavault.list'
$ wget -O - http://packages.openmediavault.org/public/archive.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install openmediavault-keyring
$ sudo apt-get --yes --force-yes --fix-missing --auto-remove \
--allow-unauthenticated --show-upgraded \
--option Dpkg::Options::="--force-confdef" \
--option DPkg::Options::="--force-confold" \
--no-install-recommends \
install openmediavault
postfixとかmdadmとかになんか聞かれる。
General type of mail configuration: localonly
System mail name: raspiomv
MD arrays needed for the root file system: none
Run proftpd: standalone
手元では3.0.35が入った(2016/9/19時点)。
インストールが無事完了したら、openmediavautを初期化する。
$ sudo omv-initsystem
うまくいったら、ブラウザ80/tcpに接続してログインする(admin/openmediavault)。
sshの設定の追加オプションに以下を追加して保存->適用。openmediavaultの設定画面でSSHを有効にした場合、この設定を行わないとSSHログインできなくなる。
AllowGroups adm
あと、WebUIの管理者アカウント(admin)のパスワードを変更しておく。
adminのアカウント名を変更する方法はないかと色々調べたが、無いらしい。
参考 : Can i change username of admin ?
http://forum.openmediavault.org/index.php/Thread/3105-Can-i-change-username-of-admin/?postID=23064#post23064
13.不要なサービスを停止
Webコンソール上のサービス起動状態と実態が異なるので、とりあえず不要なサービスはコマンドラインで停止する。
$ sudo chkconfig nfs-kernel-server off
$ sudo service nfs-kernel-server stop
$ sudo chkconfig nfs-common off
$ sudo sudo service nfs-common stop
$ sudo chkconfig proftpd off
$ sudo service proftpd stop
$ sudo chkconfig snmpd off
$ sudo service snmpd stop
$ sudo chkconfig tftpd-hpa off
$ sudo service tftpd-hpa stop
なんやかやしてopenmediavaultの診断>サービスの画面がこんな感じになってればOK。
14.minidlnaのインストール
omv-extras.org のプラグインがうまく動かないので、apt-getする。
$ sudo apt-get install minidlna
ToDo:openmediavault/3.0(erasmus)が正式リリースしたら、ここの手順は見直す。
15.tmpフォルダをRAMディスクに移す
参考 : Raspberry PiのログをRAMDISKに置く方法
https://curecode.jp/tech/raspberrypi-ramdisk/
ログファイルをRAMディスクに移すと、SDカードの寿命的な意味で精神衛生上良い。
$ sudo vi /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p5 /boot vfat defaults 0 2
/dev/mmcblk0p6 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
#### ramdisk
#以下を追加
tmpfs /var/tmp tmpfs defaults,size=16m 0 0
tmpfs /var/log tmpfs defaults,size=32m 0 0
/var/log
以下に作られるファイルやフォルダをあらかじめ作成するスクリプトを作る。
実際のパスや所有者などは、RAMディスクに移す前の状態を確認してスクリプトを適宜修正する。
$ sudo vi /etc/init.d/make-varlog-files
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: make-varlog-files
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Required-Start:
# Required-Stop:
# Short-Description: Create /var/log/... files on tmpfs at startup
# Description: Create /var/log/... files needed by system daemon
### END INIT INFO
#
# main()
#
case "${1:-''}" in
'start')
############################
# prepare /var/log subdir for ramdisk init on every boot
mkdir -p /var/log/apt
mkdir -p /var/log/cron-apt
mkdir -p /var/log/fsck
mkdir -p /var/log/nginx
mkdir -p /var/log/ntpstats
mkdir -p /var/log/openmediavault
mkdir -p /var/log/proftpd
mkdir -p /var/log/samba
mkdir -p /var/log/watchdog
chown www-data.adm /var/log/nginx
chown ntp.ntp /var/log/ntpstats
chown root.adm /var/log/samba
############################
# prepare /var/log file for ramdisk init on every boot
touch /var/log/lastlog
touch /var/log/wtmp
touch /var/log/btmp
chown root.utmp /var/log/lastlog
chown root.utmp /var/log/wtmp
chown root.utmp /var/log/btmp
;;
'stop')
;;
'restart')
;;
'reload'|'force-reload')
;;
'status')
;;
*)
echo "Usage: $SELF start"
exit 1
;;
esac
$ sudo chmod +x /etc/init.d/make-varlog-files
$ sudo update-rc.d make-varlog-files defaults 01 10
$ sudo shutdown -r now
再起動後、確認する
$ df -h
バックアップ手順
参考 : Raspberry PiでIoTなシステム開発:SDカードのバックアップはrpi-cloneでやろう
http://www.homu.net/raspberry-piでiotなシステム開発:sdカードのバックアップはrpi/
2GBのMicroSDカードにシステムクローンし、そのカードからddでimgファイルを吸い出すことで、バックアップを作る。imgファイルをまたddで戻せばリストアできる。システム起動中にスナップショットを取れるし、imgファイルは2GBに制限できるので圧縮の必要もなかろう、という手順。
1.rbi-cloneをインストール
$ wget https://raw.githubusercontent.com/billw2/rpi-clone/master/rpi-clone
$ sudo mv rpi-clone /usr/local/bin/
$ sudo chmod +x /usr/local/bin/rpi-clone
2.システムクローン
インストールできたらMicroSDカードリーダライタに2GBのSDカードを挿して、RaspberryPiのUSBポートに接続し、クローンする。
$ sudo fdisk -l # コピー先を確認
$ sudo rpi-clone sda -f
いくつか聞かれるけど、適当に答える。
Do you want to initialize the destination disk /dev/sda? (yes/no): yes
You may enter a label for the destination rootfs /dev/sda2:
Final check, is it Ok to proceed with the clone (yes/no)?: yes
Hit Enter when ready to unmount the /dev/sda partitions... [Enter]
3.バックアップ
コピーしたSDカードをmacに接続してimgファイルを作成
$ sudo dd bs=1m if=/dev/rdisk2 of=filename.img
4.リストア
参考URLでは、ddでリストアすると起動しないとあるが、当方の手元ではうまくいっている。
$ sudo diskutil unmountDisk /dev/disk2
$ sudo dd bs=1m if=filename.img of=/dev/rdisk2
RaspberryPiに接続し、起動後にExpand Filesystemする。
$ sudo raspi-config
1 Expand Filesystem
残りのお仕事
HDDを接続してRAIDを組んでsmbで共有したり、minidlnaを設定してDLNA配信したり、Wi-Fiカメラと接続して写真を自動バックアップしたりと、夢を広げる。