突然ですが、上司から「Raspberry Piで社内NASを作って」という指令が来ました。遊びつつ、実用的なものを作りつつ、一石二鳥なミッションです!
ところでNASって……なんだっけ? 共有サーバ?
確認も兼ねて、いつものようにGoogle先生に聞くところからスタートしていきたいと思います!
NASってなに?
Network Attached Storage(ネットワーク アタッチ ストレージ)
ネットワークに直接接続し、コンピュータなどからネットワークを通じてアクセスできる外部記憶装置(ストレージ)。企業や家庭内のLANで共有ファイルなどの保存に利用されたり、デジタルビデオレコーダー(HDDレコーダーやBlu-rayレコーダー)が動画の保存先として利用したりする。
簡易なコンピュータ本体にハードディスクやSSDなどの記憶装置と、ネットワークインターフェース、OS、管理用ソフトウェアなどを内蔵したファイルサーバ専用機で、記憶装置をネットワークに直に接続したように扱うことができることからこのように呼ばれる。
NAS=共有サーバのように思っていたのですが、ファイルサーバ専用機のことを指すようですね。このRaspberry Piを使ってもっといろいろ遊んでみたいので、しばらくは「専用機」にはできそうにないですが、「将来的にNASにできるもの」を目指して作っていきたいと思います。
Raspberry PiでNAS、できるの?
ゼロから調べて自力で作り上げられるだけのスキルはまだ無いので、ここは先輩たちのお知恵を拝借させていただきたいと思います!引き続きGoogle先生を経由して、参考になりそうなサイトを探してみました。
「Samba」というパッケージを使うとできるみたいです。実現可能ということは分かったので、自信を持って進めていけそうです!
で、Sambaとは?
Samba (サンバ) は、マイクロソフトのWindowsネットワークを実装したフリーソフトウェア。 Linux、Solaris、BSD、Mac OS XなどのUnix系OS を用いて、Windows のファイルサーバやプリントサービス、ドメインコントローラ機能、ドメイン参加機能を提供する。
共有フォルダと呼ばれるサーバ側の空間に、ファイルを格納する機能。NAS としての機能を果たす。アクセス権を設定できるため、特定のユーザーに同じファイルを提供するといった用途が実現できる。
文章だとなんだかむずかしいですが……LinuxをWindowsから読み書き可能にするために必要なパッケージ、ということみたいです。
NAS化に挑戦!まずはSambaをインストール
外付けハードディスクを使って大容量のNASを作ることもできるのですが、まずはRaspberry PiのSDカードをそのまま共有領域として使えるようにしてみたいと思います。現在使用中のSDカードは8GBで、空き容量は3GB程度。NAS初級編としては十分ですね。それでは、実際にやってみましょう!LX Terminalで、コマンドを入力します。
sudo apt-get install samba
一度容量確認があるので、[Y]を入力します。インストール完了までは数分かかりますので、のんびり待ちましょう。
Sambaのバージョンを確認
自己流で調べながら作業していくと、バージョンによる違いを知らずに進めて行き詰ることがよくあります。調べた情報が古いバージョンのものだったのでもう一度やり直し!なんてことが(起こらないようにするのは初心者にはなかなか難しいので)もし発生しても早い段階で気付けるように、インストールしたSambaのバージョンを確認しておきましょう。
smbd -V
このコマンドをLX Terminalから入力します。「-V」は大文字です。小文字だとエラーになるので注意。
「Version 3.6.6」と教えてくれました!
NAS用のディレクトリを準備します!
今回は、誰でもアクセス可能な「all」というディレクトリを作成してみたいと思います。
先に、データの保存場所をRaspberry Piの中に用意しておきます。
/home/pi/nas_all/
とりあえず今回はこのようなフォルダを用意しました!
自分以外のユーザーも使えるフォルダにしたいので、フォルダのアクセス権を設定しておきましょう。フォルダを右クリックして、プロパティを開きます。「パーミッション」タブをクリックすると、アクセス制御の設定を行うことができます。
パーミッション=アクセス制御は、「所有者」「グループ」「他のユーザ」の3項目を、それぞれ「読み書き」「読み込みのみ」「書き込みのみ」「なし」の4種類から選択することができます。デフォルト値は、所有者のみ読み書き可能で、それ以外は読み込みのみとなっています。
今回は誰でも使えるフォルダにしたいので、全部「読み書き」に設定しておきます。
設定ファイルをカスタマイズ!
Sambaの設定ファイルは「smb.conf」というファイルです。
ファイルの位置はここです。
/etc/samba/smb.conf
エディタで直に触れるのかな? と、まずはファイルマネージャから開いてみましたが、編集も複製もできませんでした。
調べてみると、root権限でログインしていなかったことが原因でした。今回はRaspberry Piデフォルトのpiユーザーでログインしていたので、コマンドを使って設定ファイルのバックアップを残しておきました。
sudo cp -p /etc/samba/smb.conf /etc/samba/smb.conf.org
cp:ファイルをコピー
-p:オプション値。オーナー、グループ、パーミッション、タイムスタンプを保持
元ファイルと同じディレクトリに「smb.conf.org」という名前でファイルをコピーしました。「sudo」を入れないと「許可がありません」と表示されて実行できないので注意。
次は、設定ファイルの編集に移ります。
sudo nano /etc/samba/smb.conf
nano:テキストエディタ(nano)でファイルを開く。無い場合は作成する。
いつものコマンド入力画面とは少し変わって、ファイルの内容がそのまま表示されるような状態になります。ここでも「sudo」が重要です!管理者権限で実行しないとファイルの書き込みができません。
画面の下の方に操作方法が表示されています。「^」は「[Ctrl]キーを押しながら」という意味です。方向キーまたはマウスのトラックボールでファイルの一番下までカーソルを持っていき(なぜかスクロールバーが触れなかったので)、最低限必要なパラメータを追加していきます。
smb.confの設定項目は、バージョンによって少々異なるので注意が必要です。
バージョンが3.6なので、こちらのページを参考に進めていきましょう。
今回やりたいのは、「home/pi/nas_all」を「誰でも」「書き換え可能」な「all」というディレクトリ、を作ること。そのまま設定項目に当てはめていきます。
[all] path = home/pi/nas_all guest ok = Yes read only = No
一番上はセクション名。アクセスしたときに表示される名前です。[global]、[homes]、[printers] 以外であれば任意の名前で追加できます。
その他のパラメータは、次のような意味になります。
path:サービスに接続したユーザーがアクセスするディレクトリを指定する。
guest ok:「public」も同じ。デフォルトはNo
read only:ファイルの書き込み権限の設定。「writable」の反意語。デフォルトはYes
入力が終わったら保存です。「WriteOut」なので、上段の左から2番目にあるように[Ctrl]+[O]を入力します。ファイル名が表示されますが、今回は上書き保存なので、そのままEnterでOKです。
保存が完了すると、メニューの表示が元に戻るので、下段左端の「Exit」にあたる[Ctrl]+[X]を入力すると、元のコマンドラインに戻ることができます。
ファイルを直に開いて確認してみると、入力した文字列がそのまま追加されていました!これでSambaの設定は完了です。
Sambaを動かしてみます!
それではSambaを動かしてみましょう!
sudo service samba restart
service:指定したサービスの起動や停止(start,stop,status等)を行う。
restart:再起動
コマンド入力が終わったら、同じネットワークにあるマシンから確認してみます。
ネットワークの中に「RASPBERRYPI」が表示されているのが確認できます。中に入ってみると、
「all」フォルダが表示されています!
read only=noの設定が効いているかどうかも確認しておきましょう。新規作成やコピーなどのファイル操作を「all」フォルダ内で行うことができれば、問題なく動作しています。
さて、今度は停止してみましょう。
sudo service samba stop
Raspberry Pi側でSambaを終了するコマンドを入力します。
この状態でLinuxから「RASPBERRYPI」にアクセスしようとすると、
今度はアクセスできなくなりましたので、無事にSambaが停止していることを確認できました。
一度Raspberry Piの電源を落として、もう一度起動してみたのですが、特に何も操作をしなくてもWindows側から接続することができました。Sambaはインストール後、自動で起動してくれるようです。
そしてここまで作業してみて思いました。
……コマンド入力が面倒です!!
もっと簡単な方法は無いのでしょうか?
Sambaの設定ツール「SWAT」
コマンド入力の手間をどうにか省きたい!ということで調べてみると、Sambaの設定ツール「SWAT」というものがあるらしいです。読み方は「スワット」でいいのかなぁ?
早速インストールしてみたいと思います!
Sambaには、Webブラウザ経由で管理を行うことの出来るツール「SWAT(Samba Web Administration Tool)」が標準で用意されています。Sambaの起動/停止から各種設定の変更までの全てをWebブラウザ上で行うことが出来るので、Sambaの設定ファイルを直接編集するという面倒な作業をする必要がなくなります。
まずはいつものようにコマンド入力です。パッケージ名はそのまま「swat」で大丈夫でした。
sudo apt-get install swat
インストールが完了したら、ブラウザから、
http://localhost:901/
にアクセスします。(※ホスト名を指定している場合は、「localhost」と差し替えてください)
ここで、IDとパスワードを聞かれます!(設定した覚えがないので)とりあえず現状使っている「pi」アカウントのログインID・パスワードを入力してみると、あっさり入れてしまいました!
あれ、なんだかメニューが少ない……globalやprintersなど「smb.conf」の設定項目に対応するような設定画面が見当たりません。
調べてみると、SWATには「root」ユーザーが必要だそうです。Raspberry Piのデフォルトユーザーは「pi」だったので、「root」ユーザーを新たに作成しましょう。
再びLX Terminalに戻ってコマンド入力です。
sudo adduser root
ユーザー追加のコマンドを入力すると、「adduser : ユーザ ‘root’はすでに存在しています」というエラーが表示されました。rootユーザー、最初から居るらしいです!piユーザーだけじゃなかったのですね!
調べた結果、無効化されているだけで、アカウント自体はあるようです。しかもデフォルトはパスワード無し!それはちょっと怖いです!なので、ここでパスワードを設定してしまいましょう。
sudo passwd root
「sudo」で強制的に実行です。パスワード入力を2回求められるので、言われた通りに入力します。
sudoのせいか、旧パスワードを聞かれることなく何度でも好き勝手に設定できてしまいます。(管理者権限ってこういうものなのでしょうか)
ここからはrootアカウントでログインし直してから進めていきます。
準備が整ったところで、改めてSWATにアクセスします。
ヘッダーのアイコンが8種類表示されたら成功です!
「HOME」「GLOBALS」「SHARES」「PRINTERS」から、smb.confの設定を書き換えることができます。
SWATを使ってみます!
先程作った「all」ディレクトリを確認してみましょう!
自作したディレクトリになるので「SHARES」アイコンをクリックします。
画面が切り替わります。リストから「all」を選択し、左隣りの「Choose Shere」ボタンをクリックします。右隣りは「Delete」ボタンなので要注意!(誤って押してしまいそうな位置にありますね!)
デフォルトのブラウザだとテキストボックスがうまく表示されなかったので、NetSurfというブラウザで立ち上げ直しました。(※NetSurfだと「Set Default」等のボタンがうまく動作しないようですので、実際に設定を行う場合は「Midori」を使ったほうが良さそうです)
「path」「read only」「guest ok」の欄に、先程コマンドラインから設定した値が入っているのが確認できます。
設定を追加修正した場合は、「Commit Changes」ボタンをクリックすると保存することができます。
これなら楽にSambaを使うことができそうです!
動きは少し遅いですが、コマンド入力に比べるとかなり手間が減りました!
まとめ
Raspberry PiのNAS、できました!
とはいえ、今のままでは誰でもアクセスできてしまうので、セキュリティ的には不安が残りますね。共有フォルダの他に、ログインを必要とするような、自分専用や社内専用のディレクトリがあると便利に使えそうです。目標のゴールまでもう少し!
次回(第7回)はSWATを使って、社内NASとして便利に使えるようにカスタマイズをしていきたいと思います!