本サイトではSoqAlbumというファイル転送サービスを展開しています。その宣伝も兼ねてラズパイで使えるファイル転送・共有方法について、これまで解説してきました。
以前のポストではwindowsで動いてるvscode(エディタ)でラズパイにアクセス。vscodeを使ってラズパイとファイルを交換できることを解説しました。
エディタでファイル転送は実はねらい目だということを力説したのですが、たしかに、自分でもこれは正直やりすぎたと思いました(いやでもほんと便利なんですが…)
yagiも反省しました。今回はこれ以上ないくらいのスーパースタンダードな企画でいきます。
sambaでラズパイをPC向けファイルサーバーにしよう
いや、もうありふれ過ぎて顔が赤くなりそうなテーマでして、設定も山のようにネットに転がっているのですが、それを眺めていてふと思いました。
sambaにアクセスするのに
IPアドレス使ってる設定例が
なんかすごく多い
windowsについてはあまりまじめに勉強したことがないのですが、smb関係ではNetBIOSとかいうのがあって、これまたよく分からないやり方(wins?)でNetBIOS名からIPアドレスへの名前解決ができるらしく、とにかくwindowsからsambaのファイルサーバーにアクセスする時に、IPアドレスをわざわざ調べて入力した記憶が私にはあまりないのです。
なぜこうなってるんだと思って調べ始めて驚きました。
Windows 10でNetBIOS廃止ってまじか~!?
WSDって何よ?
いや、私の知識が古すぎるのですね(まあ、あのよく分からない名前解決が死んでくれたことは良いことだが)。どうしてこうなるかというと
私がsambaをいじるのは、かれこれ10年ぶりくらい…
なんですね。
たしかlinuxでfuseが普及して、ssh経由でリモートディレクトリをマウントできるようになったあたりで「もうsshでいいや」になってしまって、sambaは忘却の彼方に… そもそもwindows自体をvista以降まともにいじっていなかった気もします(笑)。
もっと調べて驚きました。sambaといえばweb経由のguiで設定するもんだと思っていたのですが、
swatが…ない(絶望)
頼みの綱のweb経由のguiはすでにお亡くなりになっていました(笑)
NetBIOSが廃止されたからIP直打ちになっているわけではないかもしれませんが、いずれにしろ、IPアドレス直打ちがsambaの利便性を相当損なっていることだけは確かです。また、ネットでよく見る設定では、デフォルトの設定の最後に、共有したいユーザーのディレクトリをハードコードしてるだけの例が多いです。実はsambaのデフォルトの設定ファイルにはhomesと呼ばれるセクションが用意されていて、元からlinux側ユーザー全員のホームディレクトリを簡単な設定で一挙に公開でき、強力なマルチユーザー対応ファイルサーバーを作ることができる仕組みが整っているのですが、この機能を活用した設定例は少なく感じました。
そういうわけで、今回は、IPアドレスの直打ちが必要なくて、多ユーザーでも現実的に使えるsambaの設定を解説していきます。
でも、このsambaの設定、1分や2分で終わるものではありません。もっと手っ取り早くファイルを送りたいというあなたにお勧めのサービスが、本サイトで展開中のSoqAlbumなのです。
- とりあえず、今すぐ2,3個のファイルをラズパイに送りたい。
- sambaの設定を読んでみたけど、難しすぎてラズパイも人生も嫌になった。
- スマホからsambaにつながる方法が分からない。
など、ファイル転送で困った時はsambaではなくSoqAlbumを思い出しましょう。 スマホならQRコードで1分以内にラズパイに接続できますが、PCからラズパイでも2分ほどで十分です。詳しい情報をページの最後にまとめました。
このページで目指すファイルサーバー
- RPI OS bookwormをインストールしたラズパイを使用。
- 少なくともWindowsからは、IPアドレスを調べなくてもつながるファイルサーバーを作る。
- マルチユーザー対応。ラズパイにアカウントを持つ全ユーザーのホームディレクトリを公開して読み書き可能にする設定を、homesセクションを使って実現する。
- ホームディレクトリとは別に、複数のユーザーが共同作業できる共有ディレクトリを作って、そこへPCからアクセスできるようにする。
- sambaインストール直後のデフォルトのsmb.confを、できる限り活かして設定。
linuxユーザー全員のホームディレクトリをsambaで共有
サーバー名を決める
どうやら、sambaのサーバー名(Windows PCのエクスプローラのネットワークを見ると表示される名前)は、linuxで設定するホスト名と同じになるようです(ラズパイで調べただけなので、他では違うかもしれません)
ラズパイの場合はraspi-configで変更できます。
sudo raspi-config で
System Options > Hostname
ホスト名設定後、再起動
今回はzooというホスト名を使います。
通常のlinuxではhostnameやhostnamectlコマンドで変更できるようです。
なお、私の環境ではホスト名を変えるとchromiumが起動できなくなりました。意外な盲点です。
sambaをインストール
これは簡単!
sudo apt update
sudo apt install samba
パスワードを設定する
sambaで利用するパスワードはlinux側のパスワードとは別管理となります。次のようにユーザーpiをsambaに追加してパスワードを設定します。
sudo smbpasswd -a pi
(その後パスワードを設定するプロンプトとその確認が表示される)
ユーザー名piはlinux側ユーザー名と同じである必要があります。オプション -a は初回だけ必要で、その後パスワードを変更したい場合は
sudo smbpasswd pi
だけでかまいません。
sambaでファイルを公開したくないユーザーに対しては、smbpasswdを使ったユーザー登録をしないことで対応できるでしょう。
smb.confのhomesセクションによるホームディレクトリ公開設定
linux側にuser1とuser2がいて、ホームディレクトリを公開するために別個に2箇所設定を書くのは面倒です。2人ならまだしも、10人とか100人とかになると手書きじゃ無理です。
それを解決するのがhomesセクションです。homesセクションで公開されるディレクトリはwindowsからアクセスするユーザー名によって変化します。例えばuser1という名のwindowsユーザーがアクセスするとuser1のホームディレクトリ(通常は/home/user1)が公開されます。この仕組みにより、homesセクションという一か所の設定で、linuxユーザー全員のディレクトリ公開に対処できます。
homesセクションの設定はデフォルトで既に準備されていますが、読み取り専用に設定されていますので、書き込みもできるように設定を変更します。
cd /etc/samba
sudo cp smb.conf smb.conf.bk (バックアップ)
sudo nano smb.conf
[homes]で以下の設定を変更
read only = no
create mask = 0775
directory mask = 0775
sudo systemctl restart smbd # sambaに設定を反映する
windowsのエクスプローラのネットワークにサーバー名が表示されるようにする
先に書きましたとおり、現在のwindowsではNetBIOSによるブラウジングが廃止されたため、sambaだけではwindowsのエクスプローラのネットワークにサーバー名が表示されません。これを解決するため、wsddをインストールします。
bookwormより以前のRPI OS(あるいはdebian)ではwsddをインストールするために、aptのリポジトリ設定が必要でしたが、bookwormでは標準リポジトリから簡単にインストールできるようになりました。最新OSの恩恵ですね。
sudo apt update
sudo apt install wsdd
インストール後自動的にwsddデーモンが起動します。今回の場合はwsddに関して特別な設定をする必要はありません。smb.confでWORKGROUP以外のワークグループを設定した場合等では、wsddの設定を変更する必要があるようです。
標準リポジトリからインストールできないlinuxディストリビューションではリポジトリの追加などが必要です。wsddのページの”others”や”Generic Installation Instructions”を参考にしてください。
以上でlinux側の準備が完了しました。
windowsからファイルサーバーにアクセスする
Windowsのエクスプローラのネットワークを開くと、サーバー名zooが表示されているはずです。
ただし、このままzooをクリックすると問題が生じます。最初の一回だけは直接\\zoo\piにアクセスしてください。windowsのエクスプローラのアドレス欄に
\\zoo\pi
を入力します。ユーザー名とパスワードを入力を求められて、その後ホームディレクトリにアクセスできるはずです。
その後はwindowsのネットワークから問題なくアクセス出来て、zooの中にpiのホームディレクトリが表示されるはずです。
最初の1回だけパスの入力が必要な理由ですが、最初のアクセスではwindows側のユーザー名が確定しておらず、samba側のhomesセクションでどのユーザーのホームディレクトリを表示してよいか分からないため問題が生じるようです(nobodyというディレクトリが表示されたりします)windows側から\\zoo\piにアクセスしてユーザー名を入力すれば、ユーザー名piが確定して、その後は\\zoo\piが正しくネットワークに表示されるようになります。
ユーザーグループの共有ディレクトリを作成して、sambaで公開する
ホームディレクトリに加えて、次のような共有ディレクトリを作ります。なおこのようなディレクトリが必要なければ、ここから先を設定しなくても特に影響はありません。
- グループcapybara(カピバラ)を作成。capybaraに複数ユーザ(今回はPiだけ)を登録。
- グループcapybara用の共有ディレクトリ/srv/capybaraを作成。
- /srv/capybaraをsambaで公開。各ユーザーが外部PCからファイル・ディレクトリを編集できるようにする。
- 各ユーザーがlinuxにログインして/srv/capybaraのファイルを編集しても破綻しないようにパーミッションを調整する。
まずsambaとは関係なく、capybaraグループのユーザーがlinuxにログインした状態で円滑に共同作業できるようなディレクトリを準備します。
グループcapybaraを作成して、共有ディレクトリ/srv/capybaraを作成。capybaraグループに必要なユーザーを追加します。
# capybaraグループと、その共有ディレクトリを作成
sudo groupadd capybara
sudo mkdir -p /srv/capybara
sudo chown :capybara /srv/capybara
sudo chmod 2770 /srv/capybara
# capybaraグループにユーザーを追加
sudo usermod -aG capybara pi
# 追加したユーザーの.profileを編集してumask 002とする
cp ~/.profile ~/.profile.bk (バックアップ)
nano ~/.profile に"umask 002"を追加してセーブ。
# 追加したグループなどを反映させるために再起動
sudo reboot
ディレクトリ/srv/capybaraのグループ属性はcapybaraに設定され、chmodの2の部分によりSGIDが設定されます。~/.profileの編集は、追加したユーザーごとに行ってください(ちなみに ~/.profile の ~ はホームディレクトリを意味します)。”umask 002″は”# umask 022″と書いてある部分をコメントアウトして、”umask 002″と書き換えてもいいですし、最後に追加する形でもかまいません。
このような共有ディレクトリの作成で難しい問題は、例えばuser1とuser2がcapybaraに属する場合、user1が書いた書類を、user2が変更しようとしても、パーミッションが調整されていないと拒否されてしまうことです。SGIDとumaskの設定により、所有者ではなくグループの権限でファイルを編集できるようになり、問題が解決します。
これで/var/capybara内でのlinuxユーザー間の権利関係が調整できました。これをsambaで公開します。
sudo nano /etc/samba/smb.conf
以下を追加します。
[capybara]
comment = Capybara Group Workspace
path = /srv/capybara
guest ok = no
create mask = 0775
directory mask = 0775
read only = no
sudo systemctl restart smbd
これでwindowsのエクスプローラーから\\zoo\capybaraにアクセスできるはずです。
今回の/srv/capybaraディレクトリの設定の利点は、ユーザーの追加に柔軟に対応できることです。例えばuser3をlinuxに追加する場合、smb.confを新たに編集する必要はありません。
- まずsudo adduser user3などでlinuxにユーザーを追加。
- sudo smbpasswd -a user3 でsambaのパスワードを発行。
- sudo usermod -aG capybara user3 でuser3をcapybaraに追加。
- user3の権限で、~/.profileを編集。umask 002を追加。
すれば、user3のホームディレクトリと共有ディレクトリcapybaraの二つがuser3向けにsambaで公開されます。Linux内部から共有ディレクトリ/var/capybaraで作業した場合でも、sambaでアクセスした場合と同様にパーミッションがうまく調整され、「書き込み権限がありません」などのエラーが防止されます。
ヒント: macからアクセスしたときに作られる.DS_Storeやwindowsが作るThumbs.dbを拒否する
sambaで作成したファイルサーバーはmacからもアクセスできます。macのfinderで「移動」>「サーバへ接続」でsmb://zoo/piなどと入力してください(私の古いmacではzooでいけましたが、環境によってはzooの部分をIPアドレスに変える必要があるかもしれません。macがこのあたりの名前解決をどうしているのか私はよく分かりません)
macでファイルサーバーにアクセスすると、macが.DS_Storeという隠しディレクトリを勝手に作ってしまいます。これを拒否する設定が以下になります。下の例ではwindowsが作るサムネイルのキャッシュファイルThumbs.dbの作成も拒否されます。
[global] に以下の設定を追加
veto files = /*.DS_Store/Thumbs.db/
delete veto files = yes
その後
sudo systemctl restart smbd
トラブルシューティング
問題: Windowsで「ネットワーク探索が無効です」と表示されてsambaにアクセスできない
Wifiのプロファイルが「パブリック」(スタバ向けの厳しめな設定)になっている可能性があります。これを「プライベート」(自宅向けのリラックスした設定)に変更してください。
タスクバーのwifiアイコンをクリック。接続済みAPのプロパティーをクリック、設定を変更してください。
問題: ネットワークにsambaサーバー名が表示されない
wsddが起動に失敗した可能性があります。
sudo systemctl restart wsdd
などとして、wsddを起動してください。
問題: Windowsのエクスプローラのネットワークで、サーバーをクリックするとエラーになる。もしくはnobodyというディレクトリが表示される
smb.confのhomesセクションは、windows側のユーザー名によってアクセスできるホームディレクトリ名が変わります。初めてのクリックではwindows側のユーザー名が不明なため、エラーになったり、ユーザー名をnobody扱いにしたディレクトリが表示されたりするようです。
一度だけエクスプローラーで\\zoo\piといった具体的なパスを指定してアクセス、ユーザー名とパスワードを確定させてください。その後は問題なくエクスプローラでアクセスできるはずです。
問題: ホスト名を変えたらchromiumが起動しなくなった
sambaとは関係なく、ホスト名を変えると起こる問題のようです。
ターミナルからchromium-browserを起動してみると、「プロフィールは、別のコンピュータxxxの別のChromium プロセスxxxで使用されているようです。… プロフィールが破損しないようにプロフィールをロックしています。…」等と表示され、停止してしまいます。
このような場合はターミナルから
rm -rf ~/.config/chromium/Singleton*
とすると解決します。
Windowsの進化でsmbも変化、それに対応しなければならないsambaは大変?
久々に設定したsambaですが、便利は便利ですね。たしかに便利なのですが、
sambaの設定だけで
まさかの半日が飛んでしまった~
当初の見込みでは1時間で設定が終わるはずだったのですが、やはり10年のブランクはでかかったです(笑)
SoqAlbum(無料)なら設定ゼロで今すぐファイルが転送できます
今日解説しましたように、sambaの設定はちょっと昔経験があったとしてもやはり大変です。例えば2個とか3個とかのファイルを送るのにsambaを設定するのは、ぜんぜん割に合いません。そんなときは設定ゼロで使えるSoqAlbumを使いましょう。
ラズパイはもちろん、win, mac, linux, ChromeOSとiPhone, androidのどのデバイスからもブラウザだけでスタートできて、どのスマホ・PCともアプリインストールなしで相互にファイルを交換できます。SoqAlbumの概要とQRコードを使ったスマホのリンク方法について、以前の記事をどうぞ。
QRコードが使えないPCの場合は、こちらのやり方が便利。
SoqAlbumはMicrosoft Storeの公式アプリです。Windowsの方はMicrosoft Storeにアクセスしてアプリをゲットすればすぐにファイルを交換できますよ。
コメント