駄文置場

PC、ガジェット、音楽に関して自分が興味がある事をツラツラと書いていく駄文置場です。

Raspberry Pi 3 Model B

Raspberry Pi 3でHDDブートを行う。

先日PCのパーツ類を整理していたら、2.5インチの東芝製HDDが出てきました。

手元のRaspberry Pi 3はSDカードの延命か対策は行っているものの、
どうせなら更なる延命化を進めるべく、HDDからブートする対策をとってみました。

★前提のお話

Raspberry Pi 3でHDDからブートする場合、2つの方法があります。

1)SDカートからブートし、ブートローダ以外のデータを全てすべてHDDに置く方法
2)完全に全てのデータをHDDに移し、純粋にHDDからブートする方法

それぞれメリット・デメリットがあるのですが、今回は1)の方法を取ります。

2)の方法の場合SDカードレスになるので、
延命化という意味では(延命もなにもSDカードを取り外してしまうので)最適です。

しかしRaspberry Pi 3の場合、起動時は最初にSDカードを見に行き、
SDカードが接続されていない事を認識し、
それから数秒の時間をおいてHDDを見に行って起動するというプロセスを取るために、
起動に時間がかかってしまうようです。

もう1点問題があります。

USB-HDDを認識するためのタイムアウトは5秒に固定されています。
よって5秒でちゃんとシークし、ブートできるHDDであれば問題ないのですが、
相性だったり、やや古いHDDで遅かったりすると、
5秒ではHDDがブート可能状態にならず、ブートが失敗するリスクがあります。

一方1)の方法は、SDカードにブートローダがあり、
実データはHDDにあるため、起動時間が大きく損なわれる事はありませんし、
ブートが失敗するという事もありません。

という事で、実は1)の方法を選択した場合、
実際にはSDカードからブートするのでタイトルには偽りありですが、
延命対策と安定性の高さから、こちらを採用しました。

★下準備

今回は東芝のMK5059GSXPいう500GBの2.5インチHDDを使用しました。
ケースはOWL-EGP25/U3を利用し、
Raspberry Pi 3のUSBポート2本に差し込んで使っています。
写真で見るとこのような感じです。(ゴチャゴチャしていてすみません…)


cameringo_20171204_200824

★設定作業開始

今回もこちらの記事に書いた環境で作業を行っています。
毎度毎度ですがTeraTermを起動し、SSHでRaspberry Pi 3にログインします。

1)/dev/sda にマウントされている事を確認します。

$ sudo fdisk -l

2)パーティションの作成します。
$ sudo fdisk /dev/sda

d → n → エンター4回 → w
※最後に赤字で警告がでても正常終了しています。

3)パーティションをアンマウントします

$ sudo umount /dev/sda1

4)パーティションをフォーマットします

$ sudo mkfs.ext4 /dev/sda1

5)SDカードの内容をHDDにコピーします。

$ sudo mkdir /mnt/usd /mnt/hdd
$ sudo mount /dev/mmcblk0p2 /mnt/usd
$ sudo mount /dev/sda1 /mnt/hdd
$ (cd /mnt/usd; sudo tar --backup -c *)|sudo tar -C /mnt/hdd -xv

6)cmdline.txtをバックアップします。

$ sudo cp /boot/cmdline.txt /boot/cmdline_ORG.txt

7)HDDを起動用として使えるように変更をします。

$ sudo mkdir /mnt/boot
$ sudo mount /dev/mmcblk0p1 /mnt/boot
$ sudo nano /mnt/boot/cmdline.txt

nanoが開いたらcmdline.txtのroot部分を、

… root=/dev/sda1 … 

のように変更します。

8)メモリの内容をシンクした後リブートします。

$ sudo sync
$ sudo reboot

9)起動後  /mnt を削除し / の容量が増えているか確認します。

$ sudo rm -r /mnt
$ df -h

※ / の容量が大幅に増えていれば無事成功です。

---------------------------------

これで /boot 以外は全てHDD上のファイルを見に行く事になりますので、
実行中はSDカードへの負担はかからないようになりました。

心配していたのは、Rasberry Pi 3のUSBからの給電のみで、
HDDにアクセス(ブート)出来るかだったのですが、問題なく起動したのでひと安心です。
5V-2.5AのACアダプタを使っており、電源に余裕があった事が功を奏したのかもしれませんね。

これで当面、死活監視用サーバー(?)として活躍してくれそうです。

Raspberry Pi 3でサーバー死活監視+エラー時にGmail送信環境を構築する。

WindowsPCからリモートSSHにて作業する事を想定しています。

また、TeraTermを使って作業をしておりますが、
リンク先の作業が住んでいるRasberry Pi を使っての作業を想定しています。

1)TeraTermでRasberry Piにリモートログインし最初に nagios3 をインストールします。

nagiosは既にver5(?)まで更新が進んでいるようですが、
nagios3はパッケージ化されており、
Rasnerry Piへのインストールが簡単なため、Ver3で構築しています。

$ sudo apt-get install nagios3

インストール途中でCUI画面でパスワードを聞かれるので、
2回とも同じパスワードを入力します。
このパスワードが管理画面のログインパスワードになるので忘れない事。

2)自分で監視したいローカルサーバー用の設定ファイルを作成します。

$ sudo nano /etc/nagios3/conf.d/my-server.cfg

PING監視する設定です。
192.168.x.xは監視するローカルPCのIPアドレスを設定します。
今回は死活監視のみなのでhost{}だけ記述します。
死活監視はPINGを飛ばす事で実行されます。

service{}で監視先PCのサービスを監視する事もできますが、
今回は利用しないのでコメントアウトにし更に消し線で消していますが、
書くとすればこのように記載するようです。

---------------------------------

define host{
use generic-host
host_name name(任意)
address 192.168.x.x
}
#define service{
# use generic-service
# host_name name(任意)
# service_description PING
# check_command check_ping!100.0,20%!500.0,60%
#}

---------------------------------

3)nagios3を再起動します。

$ sudo /etc/init.d/nagios3 restart

4)管理画面にアクセスできるかブラウザでチェックします。

http://192.168.x.x/nagios3

ID:nagiosadmin
PASS:CUI画面で設定したもの

左側のメニューのhostの中に、
自分で設定したPCが追加されている事を確認し、
ブラウザを閉じてターミナルに戻り設定を続ける。

5)localhostのDISK監視を外します。

$ sudo nano /etc/nagios3/conf.d/localhost_nagios2.cfg

以下の部分をコメントアウトします。

---------------------------------

# Define a service to check the disk space of the root partition
# on the local machine.  Warning if < 20% free, critical if
# < 10% free space on partition.

# define service{
# use generic-service         ; Name of service template to use
# host_name localhost
# service_description Disk Space
# check_command check_all_disks!20%!10%
#        }

---------------------------------

6)ホスト監視時間を30分に伸ばします。(デフォルト5分)

$ sudo nano /etc/nagios3/conf.d/generic-host_nagios2.cfg

normal_check_interval 30を追加する。(赤字)

---------------------------------

# Generic host definition template - This is NOT a real host, just a template!

define host{
name                            generic-host    ; The name of this host template
notifications_enabled 1       ; Host notifications are enabled
event_handler_enabled 1       ; Host event handler is enabled
flap_detection_enabled 1       ; Flap detection is enabled
failure_prediction_enabled 1       ; Failure prediction is enabled
process_perf_data 1       ; Process performance data
retain_status_information 1       ; Retain status information across program restarts
retain_nonstatus_information 1       ; Retain non-status information across program restarts
check_command                    check-host-alive
max_check_attempts 10
normal_check_interval 30
notification_interval 0
notification_period 24x7
notification_options d,u,r
contact_groups admins
register 0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
        }

---------------------------------

7)サービス監視時間を30分に伸ばします。(デフォルト5分)

$ sudo nano /etc/nagios3/conf.d/generic-service_nagios2.cfg

normal_check_interval 30に変更する。(赤字)

---------------------------------

# generic service template definition
define service{
name generic-service ; The 'name' of this service template
active_checks_enabled 1       ; Active service checks are enabled
passive_checks_enabled 1       ; Passive service checks are enabled/accepted
parallelize_check 1       ; Active service checks should be parallelized (disabling this can lead to ma$
obsess_over_service 1       ; We should obsess over this service (if necessary)
check_freshness 0       ; Default is to NOT check service 'freshness' notifications_enabled 1       ; Service notifications are enabled
event_handler_enabled 1       ; Service event handler is enabled
flap_detection_enabled 1       ; Flap detection is enabled
failure_prediction_enabled 1       ; Failure prediction is enabled
process_perf_data 1       ; Process performance data
retain_status_information 1       ; Retain status information across program restartsretain_nonstatus_information 1       ; Retain non-status information across program restarts
  notification_interval 0               ; Only send notifications on status change by default.
is_volatile 0
                check_period 24x7
                normal_check_interval 30
retry_check_interval 1
max_check_attempts 4
notification_period 24x7
notification_options w,u,c,r
contact_groups admins
register 0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

---------------------------------

8)logアーカイブをテンポラリフォルダに作るようにする。

$ sudo nano /etc/nagios3/nagios.cfg

初期値では1日に1回ログがアーカイブされるようになっています。
アーカイブされるログは/tmpに作るようにして、
再起動の度に消去するようにします。
中段あたりを以下のように変更します。
---------------------------------

# LOG ARCHIVE PATH

# This is the directory where archived (rotated) log files should be

# placed (assuming you've chosen to do log rotation).


log_archive_path=/tmp/archives

---------------------------------

9)メール送信に必要なアプリをインストールします。

続いてエラーが発生したらGmailが届くようにします。
なおGmailの2段階認証にも対応させる事もきるのですが、
自分は2段階認証を使わないのでOFFにしています。

$ sudo apt-get install ssmtp
$ sudo apt-get install mailutils

10)Gmailを送信できるように設定します。

$ sudo nano /etc/ssmtp/ssmtp.conf

---------------------------------

root=*****@gmail.com →自分のGmailメールアドレス
mailhub=smtp.gmail.com:587 →Gmailのサーバのアドレス
AuthUser=*****@gmail.com →自分のGmailメールアドレス
AuthPass=password →自分のGmailのパスワード
UseSTARTTLS=YES →メールの暗号化設定でGmailはYES。

---------------------------------

11)メール送信テストを実施します。

$ mail xxx@gmail.com
Subject:test
テスト送信
"Ctrl + d" 
Cc:
"Ctrl + d" 

この後Gmailの送信がブロックされ、警告が管理者メールに届きます。
そのため対応できるようにGmailにログインし設定を変更します。
以下の画面のように設定してください。


名称未設定

12)Gmailのメールアドレスを送信先に設定します。(赤字)

$ sudo nano /etc/nagios3/conf.d/contacts_nagios2.cfg

---------------------------------

define contact{
        contact_name root
        alias Root
        service_notification_period 24x7
        host_notification_period 24x7
        service_notification_options w,u,c,r
        host_notification_options d,r
        service_notification_commands notify-service-by-email
        host_notification_commands notify-host-by-email
        email hogehoge@gmail.com
       }

---------------------------------

13)nagios3を再起動します。

$ sudo /etc/init.d/nagios3 restart

以上でnagios3の監視の構築と、エラーになったらGmailが届くようになります。

Raspberry Pi 3の初期設定、セキュリティ、VPN

Raspberry Pi 3を購入したので、
初期設定、セキュリティ設定、VPNサーバー立ち上げまでの流れを書いてみます。
基本的にWindows上で操作しますが、一部だけRaspberry Pi 3で操作します。

1)Raspbian Jessie with PIXELのダウンロード

https://www.raspberrypi.org/downloads/raspbian/

Version: April 2017
Release date: 2017-04-10
Kernel version: 4.4

これを落とした。

2)Win32 Disk Imagerのダウンロード

https://sourceforge.net/projects/win32diskimager/files/Archive/

Win32DiskImager-1.0.0-binary.zip

これを落とした。

3)SDカードへの書き込み(Transcend microSDHCカード 16GB Class10 UHS-I対応 TS16GUSDU1P)

Writeで書き込む。

a

4)USBマウスとキーボード、HDMIケーブルでモニタを取り付けた上で Raspberryの設定で以下を設定(Raspberry Pi 3で作業)

Raspberry Pi 3にSDカードを装着し、起動してから以下を設定
これらはGUIのraspberry pi configurationから変更できる

・ホスト名変更(任意)
・SSHの有効化
・ロケール、タイムゾーン、キーボード、無線LANを日本に設定

5)IPアドレスの固定化(Raspberry Pi 3で作業)

ターミナルを開き以下の設定を最下段に追加(xxの所は自分の環境にあわせて設定)

$ sudo nano /etc/dhcpcd.conf

----------------------------------------
interface eth0
static ip_address=192.168.xx.xx/24
static routers=192.168.xx.xx
static domain_name_servers=192.168.xx.xx
----------------------------------------

$ sudo reboot

6)Tera Termのダウンロード

https://ja.osdn.net/projects/ttssh2/

zip版の最新版を落とした。

7)Tera TermでSSH接続

192.168.xx.xx に接続

ユーザ名 pi
パスワード raspberry

8)pi / rootのパスワードを設定

$ sudo passwd pi
$ sudo passwd root

9)Swap廃止、ramdisk構築(ramdiskは64mb)

$ sudo swapoff --all
$ sudo apt-get remove dphys-swapfile
$ sudo nano /etc/fstab

----------------------------------------
tmpfs    /tmp    tmpfs    defaults,size=64m,noatime,mode=1777 0 0
tmpfs    /var/tmp    tmpfs    defaults,size=64m,noatime,mode=1777 0 0
----------------------------------------

$ sudo reboot

10)アプリのインストール
リモートデスクトップと、ファイアウォールを入れた。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install tightvncserver
$ sudo apt-get install xrdp
$ sudo apt-get install ufw
$ sudo reboot

11)xrdp(リモートデスクトップ)の初期設定


$ cd /etc/xrdp/
$ sudo wget http://w.vmeta.jp/temp/km-0411.ini
$ sudo ln -s km-0411.ini km-e0010411.ini
$ sudo ln -s km-0411.ini km-e0200411.ini
$ sudo ln -s km-0411.ini km-e0210411.ini
$ sudo service xrdp restart

12)ファイアウォールの初期設定


$ sudo ufw disable
$ sudo ufw default deny
$ sudo ufw allow from 192.168.x.0/24
$ sudo ufw enable

※ローカル接続のみ許可しそれ以外の外部接続をすべて拒否に。

13)ログファイルを最低限しか作成しないように変更

$ sudo nano /etc/rsyslog.conf

----------------------------------------
〜〜中略〜〜
###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
#kern.*                         -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
#mail.*                         -/var/log/mail.log
#user.*                         -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info                      -/var/log/mail.info
#mail.warn                      -/var/log/mail.warn
#mail.err                       /var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         :omusrmsg:*
----------------------------------------

14)1日1回再起動するように変更

$ sudo crontab -e

----------------------------------------
00 11 * * * /sbin/reboot
----------------------------------------

例では11時に再起動。

==== ここまでで基本的な初期設定完了 ===

以下VPN構築をしたい場合のみ作業を行う。

15)ファイアウォールの追加設定

以下はVPNを構築したい場合のみ作業となります。

500と4500=vpn
443=SoftEtherクライアント(ローカルからの接続のみ許可)

外部へは500/udp 4500udpのみ開放となる。
それ以外は全て閉じている状態になります。

公開されたポートはL2TP/IPsecで接続を許可する事になるので、
ここのセキュリティ管理(SoftEtherの初期設定、一番最後に記載)を重視しておけば
ほぼセキュリティは問題ないと考えます。

$ sudo ufw disable
$ sudo ufw allow 500/udp
$ sudo ufw allow 4500/udp
$ sudo ufw allow from 192.168.x.0/24 to any port 443 proto tcp
$ sudo ufw enable

16)SoftEther VPN Serverのインストール

最新の製造工程版、SoftEther VPN Server (Ver 4.20, Build 9608, rtm) を入れる事にした。

$ su-

# wget http://jp.softether-download.com/files/softether/v4.20-9608-rtm-2016.04.17-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.20-9608-rtm-2016.04.17-linux-arm_eabi-32bit.tar.gz

# tar zxvf softether-vpnserver-v4.20-9608-rtm-2016.04.17-linux-arm_eabi-32bit.tar.gz

# cd vpnserver
# make
# cd ../
# mv vpnserver /usr/local/
# cd /usr/local/vpnserver
# chmod 600 *
# chmod 700 vpn*

起動スクリプトを作成する

# nano /etc/init.d/vpnserver

----------------------------------------
#!/bin/sh
### BEGIN INIT INFO
# Provides:                 vpnserver
# Required-Start:           $local_fs $network
# Required-Stop:            $local_fs $network
# Default-Start:            2 3 4 5
# Default-Stop:             0 1 6
# Short-Description:        SoftEther VPN 4.20 RTM
# Description:              Start vpnserver daemon SoftEther VPN 4.20 Server
### END INIT INFO

DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver

. /lib/lsb/init-functions
test -x $DAEMON || exit 0

case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN 4.20 Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3

# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;

stop)
log_daemon_msg "Stopping SoftEther VPN 4.20 Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2
;;

restart)
$DAEMON stop
sleep 2

$DAEMON start
sleep 5
# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;

status)
    if [ -e $LOCK ]
    then
        echo "vpnserver is running."
    else
        echo "vpnserver is not running."
    fi
;;
*)

echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
----------------------------------------

# chmod +x /etc/init.d/vpnserver
# apt-get -y install chkconfig
# chkconfig --add vpnserver
# reboot

17)SoftEtherの初期設定

以後クライアント側の設定となりWindows上で作業をするが、
画面がないと煩雑なので以下URL参照の事。(リンクは貼っていません)

http://俺の技術メモ.net/raspberry-pi2-vpnserver-part2/

ただしこのURLの一番最後にある「本番設定」「起動スクリプトを作り直す」の2つは、
仮想HUBを作っていないので、作業不要。

==== ここまででVPNの設定完了 ===

==== 以下余談です。 ===

本体の設定方法

IMG_0337

こんな感じで背面の熱を放熱しやすい向きに設置すると良いかと。

vcgencmd measure_temp

このコマンドでCPU温度を見ることができる。
ラズバイ3のCPUは最大85度まで動く模様。
我が家はケース装着、自然冷却で60度~67度の間をウロウロ。

<2017/6/21追記>
ケースファンを追加した。
見た目は格好悪いですが、ケースの横に紐でくくりつけて運用中。

IMG_0342

Scythe AS-71G2 [USB変換ケーブル]
オウルテック Owltech FANGuard-M8(B)/II [ファンガード 8cm ブラック]
オウルテック Owltech SF8-S2 [ケースファン 1300RPM 80mm角 25mm厚 リブ無し]


この3点セットです。最大10dbと超静音でノイズは全くきにならず。
これを常時まわしてあげると、
48~49度で飽和し-15度位さがったので十分かと!
これで電源を入れっぱなしでも熱暴走リスクはないと思います。

それと最後に少しだけ。

セキュリティ対策で"pi"という初期ユーザ名を別の名前に変更したり、
sshのポートを22番以外に変更する方もいるようですが、
メンテナンス性に影響がでるので今回は行っていません。

またSDカードの寿命対策で、swapを止めたり、
/tmp や /var/tmp のRAMDISK化はしましたが、
アプリによって細かな設定変更や、
起動時にRAMDISKを構成するスクリプトの記載が必要になるため、
/var/log の RAMDISK化はトラブル防止で行っていません。

そもそもSDカードは安価なものはTLCが多く、
1000回書き換えすると寿命を迎えるとありますが、
ここで言う1000回というのは、SDカード上の全く同じ場所・同じ領域を、
上書きで延々1000回書き換えたら壊れるかも?という意味を示します。

通常はSDカードは同じ場所に延々書き込みしないように、
書き込みする場所をうまくローテーションする
ウェアレベリング機能という仕組みが組み込まれているので、
1000回リブートしたらSDカードが壊れてしまうという事はありません。

仮に壊れて起動できなくなっても再構築はさほど難しくありませんので、
その時に考えればいいかな・・・と、笑
livedoor プロフィール
記事検索
最新コメント
アーカイブ