ラズパイにSambaをインストールしてWindowsのファイル置き場にする

## はじめに

Robocopyの検証をするために、ラズパイでNASを構築する

Windowsマシン1台でも検証は可能であるが、より本番環境に近しい環境のほうが安心できる
また、UNCパスで指定した場合とネットワークドライブにマウントした際で挙動が違ったような気もするので
そのへんを検証するためにも、NASがあると便利だと思った次第

### 余談：UNCパスとは

Gigazineさんの記事が分かりやすかったので、文章を引用させていただきます
（引用元；https://gigazine.net/news/20230429-windows-file-path/）

>UNCは「Universal Naming Convention」の略で、UNCパスはネットワーク上のデバイスに保存されたフォルダやファイルの位置を示すパスです。例えば、IPアドレス「192.168.1.15」に存在するデバイス内の「Media」フォルダの位置は、以下のように表記できます。
```
\\192.168.1.15\Media
```

>また、以下のように自身のアドレスを指定することで、ローカルのフォルダにアクセスすることも可能です。

```
\\localhost\C$\Windows
\\コンピューター名\C$\Users\Windows
\\ローカルIPアドレス\C$\Users\Windows
```

## 私の環境紹介

- Windows 11 Home
- Raspberry Pi3 Modle B＋
    - OS: Debian 12 (Bookworm)
- USBフラッシュメモリ

Windows11マシンとラズパイは`192.168.10.0/24`セグメントに属している
ラズパイにはUSBフラッシュメモリを挿しておく

## ラズパイを最新の状態にする

平均して半年に１回くらいしかラズパイは触らないので
まずは`apt update && apt upgrade`する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/54d54d54-daad-df40-42fc-1af2b7c8591b.png)

bullseyeからbookwormにアップデートされた
Wikipediaでも加筆が望まれているくらい新しいOSってこと（違う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/0583e893-19d9-c04b-4552-a3060d683c10.png)


## [OpenMediaValut](https://www.openmediavault.org/)をインストール・・・できなかった

Copilotに要約してもらったところによると、以下のようなアプリらしい
Debianベースで、SMB対応して、小規模向けとのこと。

>openmediavault は、Debian Linux ベースの次世代ネットワークアタッチドストレージ（NAS）ソリューションです。SSH、(S)FTP、SMB/CIFS、RSync などのサービスを含んでおり、これらはすぐに利用できます。フレームワークのモジュラーデザインにより、プラグインを追加して機能を拡張できます。openmediavault は主に小規模オフィスや自宅オフィス向けに設計されていますが、これに限定されることはありません。深い知識を必要とせずに、誰でも簡単にインストールしてネットワークアタッチドストレージを管理できる、使いやすいアウトオブザボックスのソリューションです。 😊📦🔗

[こちらの記事](https://qiita.com/YaezakuraP/items/d0c41d6c5ee8438fecbb#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C)に従って、インストールスクリプトを実行したところ
**ラズパイのライト版じゃないとダメだと**と怒られた
GUIで操作できないライト版ではないと動かないらしい
ラズパイは１つしか持っておらず、GUIが無いのは心もとないので、このアプリのインストールは断念

## Sambaで我慢する

>Sambaは、Linux上でWindowsのネットワーク機能を実現するソフトウェアです。

https://atmarkit.itmedia.co.jp/ait/articles/1612/01/news183.html

### Sambaをインストールする

```bash
sudo apt install samba
```

### Windowsのエクスプローラーでラズパイにアクセスする

Windowsボタン＋R　で、出てきた窓に`\\{ラズパイのIPアドレス}`を入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/e6028648-5516-e3f5-8fa8-7b76980f6a17.png)

資格情報を聞かれるので、ひとまず`pi`アカウントで入る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/8271bf05-7a59-2cf6-3d97-05aa7e750040.png)

デフォルトではこんな感じ
nobodyフォルダに入ろうとしても、再度資格情報が聞かれて、ここは`pi`ユーザでも入れない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/330f0217-3f3f-73b6-2541-782686597e80.png)

### フォルダをつくる

`share`と`notshare`をつくる。`notshare`が見えないよね？の確認もかねて。

```bash
sudo mkdir /samba-share-dir
sudo mkdir /samba-share-dir/share
sudo mkdir /samba-share-dir/notshare

# shareだけに権限付与
sudo chmod 777 /samba-share-dir/share
```

### Sambaコンフィグ設定

`/etc/samba/smb.conf`の末尾に以下を追加

```bash
[samba-share-dir]
path = /samba-share-dir/share
browseable = yes
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
force user = pi
```

サービス再起動

```bash
sudo systemctl restart smbd
```

### Windowsからアクセスする

エクスプローラーでF5を押して更新すると、新しいフォルダが見えた
コンフィグの`[ ]`で囲んだ文字列が共有フォルダとして見えるらしい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/805b3163-e1c1-36c1-fa9e-23e51a737b44.png)

単純に`share`にしてわかりやすくした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/15c47a8a-261e-5e5b-bcd1-c3d47dee8d08.png)

ためしに`test.txt`を作って、中に文字列を書いてみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/0efbb1bf-290a-c360-bf79-37c057ed1fa2.png)

### ラズパイ側でファイル確認

ラズパイ側でも同じ結果が見えた

```bash
cat /samba-share-dir/share/test.txt
this is test message!!
```

## ラズパイをネットワークドライブに割り当てる

共有フォルダを右クリックして、ネットワークドライブに割り当てるだけ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/60b4f149-196e-bb1f-b81f-8987b4910c3b.png)

ラズパイの空き容量が見えるという副次的な効果があることを発見

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/2e642610-bca7-8e3f-f286-511ae0eb2feb.png)

## おわりに

ラズパイのアップデートやら、Sambaセットアップやらで記事を書き始めて４時間くらいかかったけど
本題はこれから...Robocopyの検証をせねば

## 追記（2024.6.2）

Robocopyを試した結果
正常時と異常時のそれぞれのログを掲載する
なお、試行回数は３回に制限している

```text:正常時
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                              
-------------------------------------------------------------------------------

  開始: 2024年6月2日 16:12:28
   コピー元 : C:\batch\src\
     コピー先 : \\192.168.10.81\share\

    ファイル: *.*
	    
  オプション: *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /R:3 /W:3 

------------------------------------------------------------------------------

	                   1	C:\batch\src\
	                   1	C:\batch\src\新しいフォルダー\
	                   0	C:\batch\src\新しいフォルダー - コピー\

------------------------------------------------------------------------------

                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:         3         0         3         0         0         0
     ファイル:         2         0         2         0         0         0
      バイト:         8         0         8         0         0         0
       時刻:   0:00:00   0:00:00                       0:00:00   0:00:00
   終了: 2024年6月2日 16:12:28
```

```text:ネットワーク遮断時のログ
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                              
-------------------------------------------------------------------------------

  開始: 2024年6月2日 16:14:18
2024/06/02 16:14:18 エラー 53 (0x00000035) コピー先のファイル システムの種類を取得しています \\192.168.10.81\share\
ネットワーク パスが見つかりません。

   コピー元 : C:\batch\src\
     コピー先 = \\192.168.10.81\share\

    ファイル: *.*
	    
  オプション: *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /R:3 /W:3 

------------------------------------------------------------------------------

2024/06/02 16:14:18 エラー 53 (0x00000035) コピー先ディレクトリにアクセスしています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
3 秒間待機しています... 再試行しています...
2024/06/02 16:14:21 エラー 53 (0x00000035) コピー先ディレクトリにアクセスしています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
3 秒間待機しています... 再試行しています...
2024/06/02 16:14:24 エラー 53 (0x00000035) コピー先ディレクトリにアクセスしています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
3 秒間待機しています... 再試行しています...
2024/06/02 16:14:48 エラー 53 (0x00000035) コピー先ディレクトリにアクセスしています \\192.168.10.81\share\
ネットワーク パスが見つかりません。

エラー: 再試行が制限回数を超えました。

2024/06/02 16:14:48 エラー 53 (0x00000035) コピー先ディレクトリを作成しています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
3 秒間待機しています... 再試行しています...
2024/06/02 16:14:51 エラー 53 (0x00000035) コピー先ディレクトリを作成しています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
3 秒間待機しています... 再試行しています...
2024/06/02 16:14:54 エラー 53 (0x00000035) コピー先ディレクトリを作成しています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
3 秒間待機しています... 再試行しています...
2024/06/02 16:14:57 エラー 53 (0x00000035) コピー先ディレクトリを作成しています \\192.168.10.81\share\
ネットワーク パスが見つかりません。

エラー: 再試行が制限回数を超えました。

2024/06/02 16:14:57 エラー 53 (0x00000035) コピー先ディレクトリを作成しています \\192.168.10.81\share\
ネットワーク パスが見つかりません。
```

## 追記（2024.6.8）

Robocpyバッチファイルを載せるのを忘れていた

```bat
@echo off

rem ミラーリング元
set src="C:\batch\src"

rem ミラーリング先
set dst="\\192.168.10.81\share"
net use %dst% {ここにパスワードを入力} /user:pi

rem ログファイルを作成するフォルダ
set logfolder="C:\batch\log"
set logfile=%logfolder%"\robocopy_%date:~0,4%-%date:~5,2%-%date:~8,2%.log"

robocopy.exe "%src%" "%dst%" /MIR /LOG+:"%logfile%" /COPY:DAT /R:3 /W:3

exit
```

## 参考

https://qiita.com/cafe-capitola/items/91e10926bfbe9cea61e0