気の向くままに辿るIT/ICT
webzoit.netウェブサイトホームページ
Server

Raspbianで各種サーバ設定

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Raspberry Piって?

Raspbianで各種サーバ設定

Raspbianで各種サーバ設定

2016/04/21

 今回、Raspberry Pi(Raspberry Pi 2 Model B)を導入するにあたっての想定としては、ファイルサーバ(NAS)、メディアサーバ(UPnP/DLNA)、他には漠然とDNSサーバーやNTPサーバーも盛り込んでもいいのかな?、また、あまり使うことはないもののプリンタやスキャナ、更にイレギュラーではありますが、グラフィカルなメーラーの共有もしたいと考えています。

 尚、RAIDは見送りつつ、外付けHDDにせよ何にせよ、デバイスやパーティションを柔軟に追加・調整できるLVMは使おうと思います。

 ただ、よく考えると前者2つについては、同一LAN上の他のクライアントマシンが1台以上起動している時にRaspberry Piも起動していれば良いですが、後者、DNSサーバやNTPサーバは、実質、常時起動している必要がある?ファイルサーバとして外付けHDDを接続することを考えると常時起動しておくのは外付けHDDの分、無駄に思えてきて、やるなら別サーバを立てた方がよいかと思うに至りました。

 ちなみに外付けHDDの電源を必要に応じてON/OFFするという可能性については、LVMを使うと使用する物理ボリュームに割り当てられたパーティションやそれ全体が外付けHDDに含まれる場合、少なくともラズパイと同時に起動しないと、後から外付けHDDの電源を入れたり、USB接続したりしても/dev/VG/LVデバイスをマウントできなくなり、LVMに限らず、/etc/fstabに書かれたデバイスが外付けHDDである場合、これを接続しないで、かつ少なくともエラー時のオプションを付与せずに/etc/fstabに書いてあるとラズパイ(サーバマシン)にSSH接続すらできなくなることから、外付けHDDだけ起動したりしなかったりするというのは運用上、微妙なことになる為、このラズパイと外付けHDDはセットで起動が前提となります。(そもそもそのつもりだったので別に構いませんが。)

 他に必要なものが思い浮かぶまでは、先の前者2つを運用するものとし、このページでは、これらのインストールと設定を行ないます。

Raspbian JessieとRaspbian Jessie Lite

 今回、できるだけ最小限の構成にしたい為、標準版のRaspbian Jessie(zip圧縮時1.3GB/展開後3.5GB程度)ではなく、敢えてRaspbian Jessie Lite版(zip圧縮時284MB/展開後1.3GB程度)を使っています。

 前者はログイン後、startxすればLXDEが起動しますが、Lite版はグラフィカルを望むならCLIベースで新たに構成する必要があります(Lite版には、xorgも入っていません)。

Raspbian Jessie Lite

 最小構成とは言っても要件の1つとしてグラフィカルメーラーの共有があるのでメーラーにしても、これを各マシンから利用するにしてもSSH X11ForwardingやVNCを利用する必要がある為、xorgは必要となる一方、LXDEといえどもウィンドウマネージャよりは嵩むので軽量化の為、FluxboxかOpenboxを入れようと思っています。

 UPnP/DLNAメディアサーバーも想定していますが、サーバーとしてMediaTombの管理画面にしても、MiniDLNA(後のReadyMedia)の確認画面にしてもクライアントマシンのブラウザからアクセスすれば事足りるのでメディアサーバーを使うにあたっては、必ずしもRaspberry Pi側にブラウザは(もちろん、xorgも)入っている必要はありません。

Raspbian Jessie LiteにXとFluxboxをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install fluxbox
NEW_USERNAME@raspberrypi:~ $ sudo apt-get install xorg xserver-xorg xbase-clients
NEW_USERNAME@raspberrypi:~ $ which startx
/usr/bin/startx
NEW_USERNAME@raspberrypi:~ $ startx
X: user not authorized to run the X server, aborting.
NEW_USERNAME@raspberrypi:~ $ sudo dpkg-reconfigure --priority=low x11-common
NEW_USERNAME@raspberrypi:~ $ startx
...
Ctrl+C
NEW_USERNAME@raspberrypi:~ $

 というわけでFluxboxを使うことにしてxorg関連共々インストール。

 最初、Fluxboxをインストールすれば、芋づる式にxorg類が入ることを期待しましたが、startxも存在せず、そうはいかなかったのでDebianリファレンスの『7.1. 重要パッケージ』からホントに重要そうなxorg、xserver-xorg、xbase-clientsを追加でインストール。

 これでstartxも入ったし、いけるだろ。。。と思ったら、[X: user not authorized to run the X server, aborting.]なるメッセージが。。。あ、[sudo dpkg-reconfigure --priority=low x11-common]か?と思ったが、途中で止まってしまう。。。あ!

Raspbian Jessie Liteにtightvncserverをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install tightvncserver
NEW_USERNAME@raspberrypi:~ $ sudo vncserver :2
...
NEW_USERNAME@raspberrypi:~ $

 これって今のDISPLAYを使おうとしてるかなんかに起因してるんだよね?きっと。。。つまり、クライアントマシンからVNCで開けば、いけるってことだろう。。。ということでtightvncserverをインストールし、vncserverを5900番台の任意のポート(今回は5902)の例えば下1桁を指定して起動。

$ vncviewer RPi_IP_ADDRESS:5902
...

 案の定、クライアントPCからアクセスしたら、すんなり表示されました。
(普通は、ここで一度、vncserverを起動して~/.vnc/xstartupが生成されたことを確認し、編集するところですが、以前、クライアントマシンにDebianを入れた際にVNCの確認をしたところ、FedoraやNetBSDと違って~/.vnc/xstartupを編集しても、なぜかDebianで起動しているデスクトップしか表示されないということがあったのでRaspbianも起動はしていないが、何もしなくても唯一入っているFluxboxを起動するだろうとタカをくくったらその通りでした。)

$ ssh -N -L 49201:RPi_IP_ADDRESS:5902 RPi_IP_ADDRESS
$ vncviewer :49201
...

 速度の話はあるにしても、もちろんSSHポートフォワーディングの方が賢明。

 と思ったら、(Debianではデフォルトだったか簡単にできるのに)Raspbianでは、なぜか、SSHポートフォワーディングするには、結構手間がかかりそうですが。

外付けHDDをNASとして使う

 このRaspberry Piは、ファイルサーバであるNAS(Network Attached Storage)としても機能させたいので今回は、そのストレージに手持ちの外付けHDD(WD/Western Digital Elements Desktop 2TB)を使うことにしました。

 バックアップは考えず、RAID構成にはしない一方、後で柔軟にストレージデバイスやパーティションを追加・削除できるようにLVMを、NASとする為にSambaを使おうと思います。

 まず、直接、または、USBハブ経由でラズパイとつなげた外付けHDDにおいて既存の、もしくは、必要に応じて作成したパーティションを、ラズパイ上でpvcreate/vgcreate/lvcreateを使ってLVMの物理ボリューム(PV/Physical Volume)として追加/ボリュームグループ(VG/Volume Group)作成/論理ボリューム(LV/Logical Volume)作成を行なうとデバイスとして/dev/VGNAME/LVNAME/dev/mapper/VGNAME-LVNAMEが生成されます。

 ちなみに当該外付けHDDのみならず、LVMには他のHDDやUSBメモリなども単独や併せて物理ボリュームとして追加したり、削除したりすることもできます。

 次に後述のSambaのインストールと設定の要領でSambaを構成、何かあった際の問題の切り分けの為にもSambaサーバにSambaクライアントからアクセスできることを事前に確認しておくとよいでしょう。

 この時、アクセスする可能性のある各マシンの一般ユーザーやSambaユーザー(アカウント)は同名だと後が楽、他方、Samba共有名、例えば、[nas]、やSamba共有するパス、例えば、/mnt/nasは、NASとしてのマウントポイントとなるのでわかりやすい名称にするのが良いでしょう。

RPI_USERNAME@raspberrypi:~ $ sudo vi /etc/fstab
...
/dev/VGNAME/LVNAME  /mnt/nas  ext3  defaults,noatime  0  0
...
RPI_USERNAME@raspberrypi:~ $

 ラズパイ上で先のLVMで作った結果できたデバイス/dev/VGNAME/LVNAME、もしくは、/dev/mapper/VGNAME-LVNAMEをマウントポイントであるSamba共有パス(例:/mnt/nas)にマウントすべく、/etc/fstabに追記します。

 ここまでで次回以降、個別スイッチ付きか否かに関わらず、同一電源タップ上につなぐなどしてラズパイと同時に外付けHDDの電源をONにすれば、ラズパイ上の(作成されたLVMのデバイスではなく、それをマウントした)NAS用マウントポイントをSambaクライアントとなる各クライアントマシンからマウントすれば、NASにアクセスできるようになります。

name@client:~ $ sudo vi /etc/hosts
...
192.168.0.2  raspi raspi.
name@client:~ $ sudo mkdir /mnt/nas
name@client:~ $ sudo vi /etc/fstab
...
//RPI_USERNAME@raspi/nas  /mnt/nas  ...
...
name@client:~ $

 各クライアントマシンでは、個別にIPアドレス指定は面倒でしょうから、例えば、ラズパイのIPアドレスが192.168.0.2ならば、ホスト名raspiなどとして/etc/hostsなどでホスト名解決しておくとよいでしょう。

 ちょっと話が逸れますが、DHCP任せだとIPアドレスは変わってしまう可能性があるのでラズパイのIPだけは固定にしておくとか、別途、DNSサーバをたててLAN内ホスト全ての名前解決をしておくといった方法もあります。

 そしてラズパイ上のSamba共有パス(例://RPI_USERNAME@raspi/nas)をマウントする為のマウントポイントを作成、必要なマシン上では、/etc/fstabに追記しておくのが便利でしょう。

 Sambaクライアント側の/etc/fstabの書き方は、一種独特かつ、OSによって異なる場合があるので前述のリンク先などで要確認。

 こうしておけば、次回以降、オートマウントでき、NASとして利用できるようになるでしょう。

name@client:~ $ df -h
...
name@client:~ $ sudo mount -a

 もし、df -hなどで確認してみた結果、/etc/fstabに正しく追記したにも関わらず、オートマウントされていない場合には、mount -aとすれば、とりあえず、マウントされるはずです。

 尚、ラズパイ上もクライアントマシン上もマウントポイントを/mnt/nas、Samba共有名を[nas]として書いた結果、かえってわかりずらいかもしれませんが、これらネーミングは当然任意で自由です。

Raspbian Jessie LiteにSambaをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install samba
...
NEW_USERNAME@raspberrypi:~ $

 ファイルサーバ・NASにするのでSambaを入れて設定しておきます。

NEW_USERNAME@raspberrypi:~ $ sudo smbpasswd NEW_USERNAME
...
NEW_USERNAME@raspberrypi:~ $

 Sambaをインストールしたら、Sambaアクセス用にシステムを通常利用するアカウントであるユーザーとSamba用のパスワードを設定しておきます。

NEW_USERNAME@raspberrypi:~ $ sudo vi /etc/samba/smb.conf
...
[shared]
comment = Shared
path = /mnt/sharedir
browseable = yes
writable = yes
#guest ok = yes
#guest only = yes
create mode = 0777
directory mode = 0777
share modes = yes
valid users = samba,NEW_USERNAME
...
NEW_USERNAME@raspberrypi:~ $

 Sambaの設定ファイルは、Raspbianに限らず、Linuxなら普通/etc/samba/smb.confです。

 Raspbian(Debian)では、smb.confのデフォルトの内容(ちなみにworkgroup = WORKGROUP)に共有パスや共有プリンタの設定を追記しただけでも利用できるはず、プリンタは既にデフォルト設定はなされているでしょう。

NEW_USERNAME@raspberrypi:~ $ sudo systemctl restart smbd.service
NEW_USERNAME@raspberrypi:~ $

 また、Raspbian(Debian)では、たいていの場合、インストール後は、必要なグループ、ユーザーが追加され、サービスが有効かつ起動した状態になっており、Jessieからは、inetdでもxinetdでもなく、systemdが標準となっており、Sambaの場合もsmb.confの設定が終わったら、reloadかrestartしておきます。

 サンプルでは共有パスが/mnt/sharedirとなっていますが、これは、NASにするにあたり、予め、/etc/fstabにおいて外付けHDDなどの当該パーティションに割り当てられる/dev/sd?*やLVMなら/dev/VGNAME/VGNAMEなどのデバイスがマウントされるように記述されていてシステム起動時には/mnt/sharedirがマウントされた状態にあることを想定しています。

 Samba共有へのSambaクライアントからのアクセス方法については、NetBSD上のSamba共有パスにWindows/Fedora/NetBSDからアクセスでRaspbian(Debian)ならLinuxは基本的に同様なのでのFedoraの項を、WindowsやNetBSDなどは、それぞれを参照下さい。

Raspbian Jessie LiteにCUPS/Common Unix Printing Systemをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install cups
NEW_USERNAME@raspberrypi:~ $

 滅多に使うことはありませんが、プリンタも共有しておきたいのでCUPSもインストールしておきます。

NEW_USERNAME@raspberrypi:~ $ sudo vi /etc/cups/cupsd.conf
...
# Allow remote access
#Port localhost:631
Port *:631
...
<Location />
...
Allow From xxx.xxx.xxx
...
<Location /admin>
...
Allow From xxx.xxx.xxx
...
<Location /admin/conf>
...
Allow From xxx.xxx.xxx
...
NEW_USERNAME@raspberrypi:~ $

 CUPSの構成ファイルは、Linuxでは、/etc/cups/cupsd.confであり、適宜、Listenポートや許可するネットワークアドレスを追記設定しておきます。

NEW_USERNAME@raspberrypi:~ $ sudo vi /etc/cups/cupsd.conf
...
# Allow remote access
Port 631
...
<Location />
...
Allow @LOCAL
...
<Location /admin>
...
Allow @LOCAL
...
<Location /admin/conf>
...
Allow @LOCAL
...
NEW_USERNAME@raspberrypi:~ $

 が、Raspbian(Debian)は、加えた変更をよりよく改善してくれるらしく、設定保存後、改めて確認してみたら[Port *:631]とした部分が[Port 631]に、[Allow From xxx.xxx.xxx]と詳細なネットワークアドレスなどを追記したところが全て[Allow @LOCAL]に置き換えられていました(優秀・・・)。

 @LOCALって一見、自ホスト(local host)のみ?と思いましたが、同じネットワークアドレス(local network)上にあるホストも含まれるようなのでローカルネットワークのローカルである模様。

NEW_USERNAME@raspberrypi:~ $ sudo usermod -a -G sys,lpadmin
NEW_USERNAME@raspberrypi:~ $

 CUPSは、使う度?ディストロによって?設定内容が変わる気がしなくもありませんが、ユーザーをsysグループとlpadminグループに追加します。
(これらグループに追加しないとブラウザ上のCUPS管理画面とか[プリンタの追加]ボタン押下時とかどっかこっかでForbiddenではじかれる。)

 cupsd.confでPortを631にしてあるならブラウザのURL入力欄にlocalhost:631とすればアクセスでき、同様にLAN内の許可されたネットワークドメイン上にある他のホストからアクセスする場合には、localhost部をIPアドレス(やホスト名)で置き換えればアクセスできます。

 このようにすれば、ラズパイからでなくともクライアントのブラウザからプリンタの追加を行なうことができますし、追加されたCUPSプリンタは、たいていのアプリでは認識・検出されるのでテキストエディタやLibreOfficeなどでも認識されるはずですというか、実際、検出されました。

Raspbian Jessie LiteにSane/XSaneをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install sane sane-utils xsane
NEW_USERNAME@raspberrypi:~ $ sudo sane-find-scanner
...
found USB scanner (vendor=0x04b8 [EPSON], product=0x0104 [GT-7600]) at libusb:001:006
found USB scanner (vendor=0x0424, product=0xec00) at libusb:001:003
...
NEW_USERNAME@raspberrypi:~ $ sudo chmod 666 /dev/bus/usb/001/006
NEW_USERNAME@raspberrypi:~ $

 これまた滅多に使うことはありませんが、スキャナも共有しておきたいと思います。

 スキャナの共有には、saneを使うのが妥当なようです。

 単なるUSB接続の古いスキャナでもやりようによっては、プリンタのようなネットワーク越しの共有もできるようですが、ほぼ使うこともないし、面倒になってきたのでSSH X11ForwardingやVNC越しに利用する方法で共有することにしてsaneと併せて作業用にsane-utils、グラフィカルフロントエンドxsaneをインストール。

 何れにしてもsudoなど管理者権限で[sane-find-scanner]コマンドを実行、見つかったスキャナの行にある、ここでは[libusb:001:006]の数値が、/dev/bus/usb以下のパスに相当するので誰でも読み書きできるように当該キャラクタデバイスのパーミッションを666にしておきます。(そうなっていないとスキャナの操作ができません。)

 [sane-find-scanner]コマンドはsane-utilsパッケージに入っている為、インストールしましたが、一通り作業が終わって運用する段になれば、なくても構いません。

 尚、当該USB機器に割り当てられるデバイス(値)は、一定ではないようなので都度、[sane-find-scanner]コマンド、もしくは、[lsusb]コマンドなどでデバイス(値)を確認すると共に当該デバイス(/dev/bus/usb/001/xxx)のパーミッションが666になっているかも併せて確認・変更しておくとよいでしょう。

Raspbian Jessie LiteにClaws-Mailをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install claws-mail claws-mail-i18n
NEW_USERNAME@raspberrypi:~ $

 メーラーは、Icedove(Thunderbird)にしようかとも思いましたが、以前、シングルコアCPU/RAM512MBマシンにNetBSDを入れた当初、スリム化を図って絞り込んだ際に使っていた軽量なClaws-Mailにすることに。

 日本語対応させる為、claws-mail-i18nもインストール。

 (サーバ上なのに)メールクライアントについては、最初から想定していた通り、SSH X11ForwardingかVNC越しで。

Raspbian Jessie LiteにMediaTombとMiniDLNAをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install mediatomb minidlna
NEW_USERNAME@raspberrypi:~ $

 メディアサーバー(/ホームサーバー/リビングサーバー)は、とりあえず、MediaTombとMiniDLNAを入れて後で吟味して選定後、使わない方を削除します。

 MediaTombの設定MiniDLNAの設定も比較的簡単です。

 結果、MediaTombもMiniDLNAもうまく機能し、UPnP/DLNAメディアクライアントもいろいろやってみたところ、音源だけならRhthmbox、動画だけならTotemでも良いですが、音源と動画両方となるとBansheeやVLCあたりがいい(Kodi/XBMCが最も洗練されてはいると思いますが、仮想ディスプレイ切り替えとか方法はあるにしてもクライアントが半ば専用マシンと化し、ながら作業には向かない)かなと。

 これでRaspberry Piのセットアップから初期設定、今回想定するパッケージのインストールや設定も一応完了し、運用していますが、次は、今回揃えたものや運用状況についてあれこれ。