【linux】ラズパイをサーバとして色々テストと覚書(゚∀゚)
かなり出遅れた感はありますが・・(;^ω^)
先日購入したラズパイに、Rasbianを導入し、72時間程電源入れっぱなしで、問題無いことを確認しましたので、本稼働に向けて設定しております。
サーバ用途として色々と雑多な事を覚え書き。
ネット上には沢山情報がありますが、自分なりにまとめました。これから始める方の参考に。
電子工作とかは、まったくの無知なので、省電力Linuxサーバとしての利用に特化しております。本記事は追記や修正があるかと思います。
スペックや用意したもの
Raspberry Pi Type-B(UK版)、Trancend SD 8GB(Class10)、有線LAN利用、AC-DC電源(5V2A※DynabookVT484用)、HDMIケーブル+モニタ(初期設定時)、USBファン、スピーカ(アンプ3W程度)
他、USB2.0-Hub(SelfPower)、Logicool C300ウェブカメラ、Lenovo TrackPointKeyboard、SSD 120GB(2.5Case/USB3.0)
※OSのインストール方法や初期設定は割愛します(日本語環境やSSH稼働)
WinならTeratermやPoderosaなどのTermソフトからリモートで設定した方が便利です。電源とLANケーブルだけ接続しとけば良いので。
ちょっとしたメモ
セットアップ起動(初期起動するセットアップ画面)
raspi-config
再起動
reboot
CPU温度計測(精度:1/1000)
cat /sys/class/thermal/thermal_zone0/temp
※ファンでいくら冷やしても、室温+6度が限界
CPU速度表示(精度:1/1000)
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
※OCしても、さほど向上しない。だが、されどOC
Linuxカーネルバージョン
uname -a
CPU&メモリ使用量
cat /proc/meminfo
free –m
top (タスクマネージャっぽく)
NTP(時間)同期状況
ntpq –p
日本語フォント(ローカルで利用する場合)
apt-get install fonts-vlgothic fonts-ipafont fonts-ipaexfont
ラズパイの食事と消費電力と熱
どんなに負荷をかけても、USB定格の500mAを超える事は無いよう(通常は400mA動作)ですので、パソコンのUSB端子なら、内部でハブ化されて無い事を確認して、500mAを確保しなくてはなりません。
セルフパワーUSBハブでも同様です、余計なUSBデバイスを外して、電流低下を防ぎます。
LANチップが大飯食らい(約50mA)で、Type-Aは本当に300mAで動作するようです。
AC-DC(USB)アダプタを利用する場合は、OUTPUTスペックを確認しておいた方が良いです。結構、定格外のモノがあります。
ヒートシンクを付けても、ー5度程度の効果です。空冷がベストです。空冷だと、室温+6度で維持できます。CPUよりも、LANチップの方が発熱が酷い。
ターミナルで簡単接続
こちらではTeraTermを利用。
ショートカット内に、以下のように記述しておくとパスワード入力無く接続できます。
ショートカットを作成し、「リンク先」を以下のように編集します。
“C:\Program Files (x86)\teraterm\ttermpro.exe" (固定IP設定後ラズ倍):22 /ssh2 /auth=password /user=(ユーザー) /passwd=(パスワード)
これで気兼ねなく再起動を繰り返せますし、ラズパイを覗きたい時に気軽に好きなだけ接続できます。
作業の前に色々おまずない
rootパスワードの設定
sudo passwd root
ユーザーの追加
adduser (user ID)
アップデート(Rasbianパッケージ&ファームウェア)
apt-get update
apt-get upgrade
rpi-update (古ラズパイなら必須、色々改善されます)
VIMエディタのインストール
apt-get install vim
コンソールカスタマイズ(使い易い様に)
vi ~/.bashrc
source .bashrc (設定の反映)
ホストネームの変更(便宜上変更)
/etc/hostname
/etc/hosts
ネット関連&IP固定(サーバだし)
vi /etc/network/interfaces (インターフェース関連)
iface eth0 inet static (IP固定の指定)
address 192.168.1.100 (IPアドレス)
netmask 255.255.255.0
gateway 192.168.1.1 (LANの玄関)
vi /etc/resolv.conf (名前解決先)
nameserver 192.168.1.1
/etc/init.d/networking reload (設定の適用)
chkconfigのインストール(サービスの管理ツール)
apt-get install chkconfig
chkconfig (不要なサービスはOFF)
サーバ用途ならビデオメモリ解放
sudo raspi-config (Advancedからビデオメモリ最低16M)
SSH関連
vi /etc/ssh/sshd_config
PermitRootLogin no(rootログインを不可にする)
RAMディスク関連(tmpやlog)※SDカード延命化
chkconfig dphys-swapfile off(swapサービス無効)
vi /etc/fstab
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
vi /etc/rsyslog.conf (sysログが最少になるよう改変)
(要再起動)
※カーネル変更で、SDカードに一切書き込みを行わないという方法もあるようです。利便性がめっちゃ損なわれますけども
定期的時間調整
apt-get install ntpdate
vi /etc/default/ntpdate (NTP設定、国内NTPサーバ指定)
NTPSERVERS="0.ntp.nict.jp 1.ntp.jst.mfeed.ad.jp 2.ntp.ring.gr.jp"
crontab -e (CRONタスクスケジューラ)
0 0 * * * /etc/network/if-up.d/ntpdate > /dev/null 2>&1
※ここでは毎日0:00に調整
Windowsファイル共有(NAS化)
個人的にはこれが主目的です。
SAMBAサーバのインストール
apt-get install samba
vi /etc/samba/smb.conf (設定)
※ログ作成などは最少化、プリンタ等は無効、必要ならWINSサーバを有効にする(名前でアクセスできる)
[global]
unix charset=utf-8
dos charset=cp932
[share]
path=/var/share/ (共有先)
browsable=yes
guest ok = no
read only = no
valid users = (User ID)
SAMBAにユーザー追加
pdbedit -a (User ID) ※システムにユーザー登録済のもの
SAMBA設定の適用
service samba restart (SAMBAの再起動)
※”reload”もあるのですが、個人的に信用できないので
Windows PCから見えるか確認
ネットワークから、ラズパイが見えて、共有ホルダーが利用できれば成功です。
外部USBストレージの利用
USB-HDDなどを利用する場合は、”lsusb”、”dmesg”等でデバイスが認識されているのを確認します。
fdisk –l
ドライブとして見えていればそのままマウントすれば利用できるのですが、HDDフォーマット種類によって利用できない場合があります(FAT32の方がLinux上では速度が断然速いようです。未確認←木の精)
apt-get install ntfs-3g (Windows/NTFSを利用)
マウント先の準備
mkdir /mnt/share
chmod 0757 /mnt/share
mount -t ntfs-3g /dev/sda1 /mnt/share (NTFSとしてマウント)
ls /mnt/share –l (マウントの確認)
起動時に自動マウント
vi /etc/fstab
/dev/sda1 /mnt/share ntfs-3g defaults 0 0 (これを追記)
defaultsに続けて、”,noatime”とすると、アクセス時刻が記録されなくなり、負荷が少なくなります。
SAMBAに共有化設定
vi /etc/samba/smb.conf
先ほど設定した、”path=/var/share/”を、”path=/mnt/share/”にしても良し、新しく追加しても良し。
service samba restart (SAMBAの再起動)
アクセスできるか確認します。
ラズパイを常時稼働させるなら、ネットワークドライブを設定しても良いでしょう。
当初、手持ちのUSBメモリ(シリコンパワーUSB3.0)はOKだったんだけど、エレコムの2.5ケース(USB3.0)は見えない。直付なので電源不足かもしれない。
追記:
たとえSSDでも、ラズパイに直付では電源不足のようでした。
ELECOM U2SWB27SBKという変態USBハブですw
型番は不明ですがロジテックの2.5ケース(USB3.0)。
中身は、intelのSSD 120GBです。
省エネと静音目的なので、CP悪いですがこれにしてます。
サウンド関連設定
サーバ用途ですが、せっかく部屋に置くので、時報とかお知らせとか鳴らすつもりでいます。
※マイク・録音関連は、訳あって「カメラ編」で
アナログ出力を優先
vi /boot/config.txt (raspi_config設定ファイル)
hdmi_drive=2 (こうしないといけない様)
ボリューム設定可能なリスト
amixer controls
amixer cset numid=3 1 (アナログを選択)
ボリューム設定
amixer cset numid=3 88% (88%辺りが音割れ無しで最大)
alsamixer グラフィカルに音量調整(意味無)
テスト音の再生
aplay /usr/share/sounds/alsa/Noise.wav (ノイズ)
speaker-test (スピーカーテスト)
設定の保存
alsactl store
ひとまず音を鳴らしてみる(mpg321/Ogg導入)
sudo apt-get install mpg321 vorbis-tools (一式インストール)
ネット上のフリー素材を鳴らす
mpg321 http://www.hmix.net/music/c/c7.mp3
勢い余ってネットラジオを鳴らす
apt-get install mplayer (一式インストール)
apt-get install rtmpdump swftools libxml2-utils
NHKラジオ(らじるらじる)
上から、AM第一、AM第二、FM。
mplayer -playlist http://mfile.akamai.com/129931/live/reflector:46032.asx
mplayer -playlist http://mfile.akamai.com/129932/live/reflector:46056.asx
mplayer -playlist http://mfile.akamai.com/129933/live/reflector:46051.asx
※負荷は10%ほどでしょうか、しかし一切コマ落ち無しで綺麗に聞こえます
時報を鳴らす
1時間毎に時報を鳴らしてみます。
まず適当な場所に、シェルスクリプトを用意します。コマンドを書くだけですが。
設定
crontab -e
0 7-11,13-23 * * * (適当な場所)/hour_sound
0 0,12 * * * (適当な場所)/bell_sound
※深夜は鳴らさず、0:00と24:00は特別なサウンドとか
シェルスクリプト
CRONに直接コマンド書いても良いんですが、別ファイルにしておいた方が管理が楽です。
vi hour_sound
#!/bin/sh
mpg321 /mnt/share/bell.mp3 (サウンドファイルを鳴らす)
※USB-HDDマウントした先のMP3を鳴らしてます、”mpg321”では、"-g"で音量設定が可能(0-100)時報は音量低めなら必要
さらに自分では、30分毎や、起床時間などに特別なサウンドを鳴らしてます。
また、以下の「音声合成」コマンドとかで、時報というのも良いですね。ただ時報なら、その都度作成で負荷を上げるよりか、事前にMP3化しておいた方がいいでしょうね。
音声合成
想像以上に実用レベルでしたので、これはヨサゲです。
apt-get install open-jtalk (エンジン)
apt-get install hts-voice-nitech-jp-atr503-m001 (ボイス)
apt-get install open-jtalk-mecab-naist-jdic (辞書・解析等)
これだけで利用できますが、発声の際にパラメーターの指定が大量にあるため、スクリプトを利用した方が良さそうです。
どこかのサイトのコピペとなりますが、以下を作成すると便利です。
#!/bin/bash
VOICE=/usr/share/hts-voice/nitech-jp-atr503-m001
DIC=/var/lib/mecab/dic/open-jtalk/naist-jdic
open_jtalk \
-td $VOICE/tree-dur.inf \
-tf $VOICE/tree-lf0.inf \
-tm $VOICE/tree-mgc.inf \
-md $VOICE/dur.pdf \
-mf $VOICE/lf0.pdf \
-mm $VOICE/mgc.pdf \
-df $VOICE/lf0.win1 \
-df $VOICE/lf0.win2 \
-df $VOICE/lf0.win3 \
-dm $VOICE/mgc.win1 \
-dm $VOICE/mgc.win2 \
-dm $VOICE/mgc.win3 \
-ef $VOICE/tree-gv-lf0.inf \
-em $VOICE/tree-gv-mgc.inf \
-cf $VOICE/gv-lf0.pdf \
-cm $VOICE/gv-mgc.pdf \
-k $VOICE/gv-switch.inf \
-s 48000 \
-a 0.56 \
-p 220 \
-x $DIC \
-ow /tmp/ojtalktmpvoice.wav \ (tmpに作成指示)
$1
aplay /tmp/ojtalktmpvoice.wav (鳴らす)
rm /tmp/ojtalktmpvoice.wav (そして、消す)
“chmod +x”にて実行権限を付けて、あとは、日本語文の入ったファイルを渡すだけとなります。
WAVファイルを作成となりますが、処理はそれなりに時間が掛かります。1文字1秒位でしょうか。
※RAMディスク化してる場合は、大きな文章は作成できません。スクリト内の”-ow”引数を、変更して対応する必要有り
音声は男性のものとなりますが、オープンで女性版(ミク?)なども配布されているようです。
カメラの設定
手持ちのWebカメラ、Logicool C300(型番怪しい)です。
ラズパイには、”Webcam B500”として認識されているようです。
UVC規格のカメラなので、関係ありませんけども。
ちなみに、このウェブカメラは、マイクも内蔵してます。よって、自動的にマイクデバイスも認識しています。
ラズパイでカメラだとここが詳しいです。色々なソフトで確認してます。http://linux.yebisu.jp/memo/800
とりあえずワンショット欲しいので、シンプルなソフトから。
fswebcamのインストール
apt-get install fswebcam
ワンショット(VGAサイズ/jpeg90%/ディレイ無)
fswebcam -d /dev/video0 \
-D 0 -S 3 -r 640×480 \
–jpeg 90 –line-colour '#FF000000’ \
–text-colour '#00FFFFFF’ –banner-colour '#FF000000’ \
–top-banner \
–title “Very cool guy ;-)" \
–shadow \
–font “/usr/share/fonts/truetype/vlgothic/VL-PGothic-Regular.ttf:12" \
/mnt/share/camera_%Y-%m-%d_%H%M.jpg
※最後行が出力先、日付を付与してます
この設定で、一枚辺り70Kbのようです。このまま、CRONなどで定期的に撮影すれば、防犯用途に利用できそうです。
監視ソフトのインストール
motionという監視ソフトを導入する記事をよく見かけます。
単純な画像変化量による記録ソフトで、サービスでも動作可能で、想像以上に高機能で使えるシロモノです。
監視(画像&ビデオ)、ライブ配信、リモート管理(Web)が可能です。CPU負荷が高めなので、微調整が必要です。
motionのインストール
apt-get install motion
メイン設定
vi /etc/motion/motion.conf
daemon on (サービスとして起動)
norm 1 (日本向け、必要無いような気もします)
v4l2_palette 6 (パレットモード、必要無いような気もします)
threshold 3000 (しきい値、ピクセル数のよう。要調整)
auto_brightness on (自動ホワイトバランス)
ffmpeg_video_codec swf (動画のフォーマット)
target_dir /mnt/share (データの保存先)
gap 60 (監視1認識の時間、秒)
output_normal off (画像保存不要の場合、ビデオのみ保存)
webcam_port 0 (ライブカメラモード無効、ON:ポート指定)
webcam_localhost off (ローカルPC外からのアクセス可)
control_port 8080 (Web管理ポート)
control_localhost off (ローカル外でも管理可)
control_authentication username:password (管理用ログイン設定)
設定(サービス化のため)
vi /etc/default/motion
start_motion_daemon=yes
起動
service motion start
ちょっと、動いただけで、ゴミのようにファイルが生成されていくのが分かります。
私は、しきい値を3000と大きめ(緩め)にしましたが、これは調整が必要でしょう。
”output_normal off”とすれば、画像保存は無くなります。ビデオのみとなります。
デフォルトではSWFなので、ブラウザから一連の動作を動画で見ることができます。mpeg1/mpeg4なども選べますが、負荷が高めだったため、デフォのままにしてます。
動作検出時に、コマンドを走らせる事もできて、まぁ・・音を鳴らしたりとか出来ます。
ウェブ(遠隔)から管理できるので、指定のURLにアクセスすれば良いだけです。考えられてます(IPアドレス:8080)
ライブカメラは、ポートを8081となります。ただ、ChromeやIEでアクセスしても見ることができません。FireFoxなら、無設定で見れます。
配信サーバともなるのでメモリや負荷が気になったのですが、+3%程度のようです。
肝心のCPU負荷ですが、私のこの設定で、常時3~5%程度です。メモリも2%程消費してます(ライブ配信時は、さらに+3~5%)
Androidスマホで見る
Androidスマホなどで見る場合は、MJPEG対応のアプリが必要です。私は、以下の「簡単MJPEGビューア」を利用してます。
https://play.google.com/store/apps/details?id=com.tk.android.simplemjpeg&hl=ja
画像サイズ、IPアドレスの指定、ポートの指定(8081)、コマンドは不要にて、見ることができます。
マイクで録音
このウェブカメラには、マイクも内蔵しており、同時にUSBマイクとしても別個に認識されています。モノラルですけど。
ミキサーでデバイスIDを確認
arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: U0x46d0x807 [USB Device 0x46d:0x807], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
上から、カード番号とデバイスIDの“1,0”として指定する事で、マイクを利用できます。複数のオーディオデバイスを接続してる場合は、複数表示されるので目的のマイクを確認します。
マイクレベルを最大に設定
amixer -c (カード番号) sset 'Mic’ 100%
alsactl store (必要なら設定値を保存)
5秒だけ録音
arecord -d 5 -f S16_LE -D hw:1,0 record.wav
※”hw:”のところに、カード番号,デバイスIDを指定します