Raspberry Piを使ってファイル共有サーバと+α

Raspberry Pi に Sambaをインストールしてファイル共有サーバを構築してみた話.

BEAN

まえがき

放置されていた Raspberry Pi 2

家で放置されていたRaspberry Pi 2(以降RPi2). そもそもなぜ放置されてたかというと家にはRaspberry Pi 3(以降RPi3)があったからで, またそのRPi3も放置されているようなもの(えぇ.

電子工作ですぐ使えるように1つは今は使わなくてもすぐ使えるようにはしておきたい. そのためにRPi3はストックしていることにしてる().

何をするか

最近思うことがあって, それがPC間のデータのやり取り. 家には家族共用Win7 PC, 自分のMac, 自分のUbuntu/Win10機があってたまに家族共有PCとMacとの間でデータのやり取りを行うわけですが, どのようにデータのやり取りを行っていたかというとUSBメモリでやり取りをしていたわけです. しかしこのデータのやり取り, なかなかに面倒で. USBメモリはいくつか持っていたはずなのですが, 必要な時に雲隠れしたりして… そこでRPi2をファイル共有サーバに仕上げれば便利ではないだろうか. と思ったわけです.

データの他にもURLなどの微小の情報も交換したい時があり, これを期に家内チャットとしてRocket.Chatを導入してみようと思います. このRocket.Chatは試験導入のような位置付けで導入を行うため, 詳しい設定や外部に公開する時としての設定, セキュリティの確保は行わないのでそういう感じで読んでもらえば…

本題

目次

  • 環境
  • Raspberry Piのセットアップ
  • Sambaの導入
  • Rocket.Chatの導入

環境

自分が行った時の環境は以下です.

  • サーバ: Raspberry Pi 2 Model B, Raspbian Stretch lite(2017-11-29)
  • クライアント: MacBook Pro (Retina, 13-inch, Early 2015), macOS High Sierra(10.13.3)

Raspberry Piのセットアップ

Raspberry Pi の基本的なセットアップはRaspberry Pi 3 をセットアップ+α(丸投げしてるけど)や他のサイトでよく取り上げられているのでそちらを参照してください.

ここではRaspbianを焼き, IPアドレスの固定を行いSSH接続が出来るという条件からのセットアップを書いておきます. まずはpi以外のユーザ(この中ではhogeとする)を作る.

$ sudo useradd -c "main user" -d /home/hoge -m hoge

このユーザをメインで使用するためpiが所属しているグループに所属させる.

# piのグループを表示
$ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

# hogeにpiのセカンダリグループに所属させる.
$ sudo usermod -G adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

次にhogeのパスワードを設定する

$ sudo passwd hoge

次にhogeがsudoを使えるようにする.

$ sudo visudo -f /etc/sudoers.d/hoge

書き込む内容は

$ hoge ALL=(ALL) ALL

これで保存する.

これで一旦exitし, 再度hogeユーザでssh接続し直す.

ここでホームディレクトリやグループ, sudoで普通に使えるかどうかの確認をする.

問題がないようであればユーザ piを消す.

$ sudo userdel -r pi

Sambaの導入

Sambaとは

Sambaにはいくつかの機能があるが, 今回はそのいくつかの機能のうちのファイルサーバ機能を使用します. 最もポピュラな使われ方だと思うので, ネット上には多くの情報があり構築しやすいです.

ファイルサーバとはネットワーク上からアクセスできるフォルダを実装することで, これによりネットワーク内のクライアントはファイルサーバ上のデータを読み書きすることができるようになります.

Sambaのインストール

$ sudo apt install samba

おわり

Sambaのセットアップ

Samba用のユーザを作る.

$ sudo useradd -c "smb user" -d /home/samba -s /bin/false -m samba

-sオプションでデフォルトシェルを/bin/falseにしているのはsambaユーザでログインされるのを防ぐため. シェルが/bin/falseだと, ログインしようにもfalseが返って来るためログインすることができなくなります.

Sambaの設定ファイルである/etc/samba/smb.conf を編集して設定を行います.

$ sudo vim /etc/samba/smb.conf

Sambaの設定ファイルのうち

[grobal]セクションで全般設定を行います.

以下を追記/上書き

unix charset = UTF-8
dos charset = CP932
hosts allow = 192.168.1.
security = user
map to guest = Never
load printers = no
bind interfaces only = yes
interfaces = 192.168.XXX.XXX/NN ethM

これらの設定は

UNIXの文字コードとしてUTF-8, Windows機の文字コードとしてShift-JISに設定.

192.168.1.XXXのホストからのみ接続を許し, security = userでユーザ名とパスワードを使う認証をデフォルトに設定. また, 不正なユーザからのアクセスは拒否する.

プリンタは使用しないのでload printers = no, ユーザ定義共有は行わないので usershare allow guest = no.

またbind interfaces only = yes, interfaces = 192.168.XXX.XXX/NN ethMで接続されるインターフェースを192.168.XXX.XXXでネットマスクがNN ethMに制限.

[homes], [printers]セクションは使用しないのでこれらを全てコメントアウト.

共有フォルダを設けるため, 以下を最終行に追記します.

[share]
     comment = Public space
     path = /home/samba
     valid users = samba
     force user = samba
     writable = yes
     create mask = 600
     directory mask = 700
     browseable = yes
     vfs objects = recycle
     recycle:repository = .Trash
     recycle:keeptree = no
     recycle:versions = yes
     recycle:touch = no
     recycle:maxsize = 0
     recycle:exclude = *.tmp *.temp

これらの設定は共有するフォルダのパスを/home/sambaにし, ログイン可能なユーザはsambaのみで, 共有フォルダ内ではsambaユーザが絶対操作するようになっています. また, 書き込み許可, ゲスト接続のみ許可し, ファイルのパーミッションは644, ディレクトリは755, FinderやExplorで表示されるようにし, ゴミ箱(消しても.Trashディレクトリに残る)を有効にしています.

/etc/samba.smb.confの編集が終わった後, 構文チェックを行います.

testparm /etc/samba/smb.conf

ここで異常が見られなけれOKです.

次にsambaユーザをsambaのデータベースに登録します.

sudo pdbedit -a -u samba

ここでパスワードを聞かれるが, /etc/samba/smb.confでunix password sync = yesがデフォルト設定なので, RPi上のユーザと同じものを入力.

ここでsambaを再起動.

sudo systemctl restart smbd.service

これでネットワーク上のRPiの共有フォルダにアクセスできれば, 完了です.

WindowsならWin+Rをし, ¥¥192.168.XXX.XXXでアクセスできますし, macならFinderでcmd+Kをし, smb://192.168.XXX.XXXと入力する事でアクセスできます. Linux(Ubuntu 16.04 LTS)ならNautilus(標準ファイルマネージャ)でAlt+F, Sでsmb://192.168.XXX.XXXと入力する事でアクセスできます.

Rocket.Chatの導入

Rocket.Chat とは

簡単にいうと野生のSlack. SlackのOSS版.

インストール

—以下割と適当—

Rocket.ChatのGitHubを見てもらうとインストール方法がかかれてます.

RPiにはSnappyというパッケージ管理システムを用いてインストールを行います.

まずはSnappyを導入.

sudo apt install snapd

Snappyが導入できたら, Rocket.Chatの導入.

sudo snap install rocketchat-server

Rocket.Chatの導入が終わればもうRocket.Chatが起動しているはずなので, http://[RPiのIPアドレス]:3000 にアクセスするとログイン画面が表示される.

もしかしたら

sudo systemctl start snap.rocketchat-server.rocketchat-*

しなければ動かないかもしれないです.

Rocket.Chatは最初にユーザ登録をしたアカウントが管理者アカウントになる.

あとは適当に使う…

おわり.

まとめ

ファイル共有サーバとしては理想の働きをしていて便利です. が, 自分しか使わない. 家族の他のメンバはGoogle Driveなどのクラウドサービスも使わないし, そもそもスマホ持っていない人すらいるのでやはり出番は少ないなぁ.

Rocket.Chatは結局ほぼ使っていない. ぶっちゃけ入れてみたかっただけです. Rocket.Chat部分消しても良さそう() とはいえ, Rocket.Chatのサービスは素晴らしいので学部学科内には布教させたさを感じている. いや, Slackでいいだろという意見もあるかもしれないけど, 改造ができるので. 情報系の学部内のチャットサービスは自分たちで弄って, 構築したいという感じはある.

comments powered by Disqus