raspberry pi 5を使ってファイルサーバを作ろう n回目

## raspberry pi5+外付けHDDでファイルサーバを作成
### 【やったこと】
　もうみんながやってるこれですが
　以外なところに落とし穴があり一晩さまよったのですが
　このような人が減ることを願って記事を書きます

<br>
<br>

### 【自己紹介】
　初めましてえぢぢーんと申します
　元々はハードの研究開発を6年やってましたが
　転職してサーバ開発やってます

　私の家は私も奥さんも写真を撮る機会が多く
　それぞれの写真はLINEのアルバムに保存していたのですが

　動画が載せれなくなった＋いつか消えるか心配
　ということもありNASでもつくるか～ということになりました

　せっかくだからraspberry piの勉強もしちゃうかという下心もあり
　枯れた技術であろうrasberry piでファイルサーバを作成に挑戦です
　（初記事なので見にくかったらごめんね）
<br>
<br>

### 【本日のお品書き】
自分のやった手順なので参考にしていただければ
- 【揃えたもの】
    - まったくの 無 から構築した手順
- 【raspberry piのセットアップ】
    - 起動～raspberry pi connectまで
- 【NASの準備】
    - HDDがラズパイから見えるとこまで
- 【sambaのセットアップ】
    - sambaのインストールから共有ファイルみえるまで
- 【トラブルシューティング】
    - 戦いの記録

<br>
<br>

## 【揃えたもの】
秋月さんでこいつらを購入しました
- raspberrypi 5
- HDMI の片方がmicroになってるやつ
- SDカード (rasberry pi OSインストール済)
- 純正アクティブクーラー
- ACアダプター

![秋月購入品.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/9b9d109d-cf9b-1af7-aeee-96795bb6f3a9.png)

アマゾンとかを見たけど若干割高だったのと
周辺機器もそろえたかったので秋月さんにお願いしました
２日で届きました秋月さんありがとう

面倒な人はスターターキットもあるみたいなのでこれでもよいと思いますし

https://akizukidenshi.com/catalog/g/g129363/

普通にraspberry pi 5はオーバースペックなので3、４とかでも全然いいと思います
自分はこの後拡張予定だったのでケースなしのこの構成にしました

<br>
<br>

## 【raspberry piのセットアップ】
まずはraspberry pi5に最低限のものをつないで
remoteで操作できるとこまでもっていきます

<div align="center">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/d0df9911-503e-4a80-80c6-52fd718649c2.png">
</div>

キーボード操作がだるい方はマウスもつなげてください

あと余談ですがraspberry piの電源は5V/5A規格らしいので
今回購入したものだと若干足りないけど全然動きます
（実験機器とかだとクリティカルですが、こういうものは大丈夫なんですね）

ここからの手順ですが以下になります。

- 【rapberry piの電源ON~desk top画面まで】
    - 秋月さんのインストール済SDカードを使った場合は画面指示に従うだけ
    - 自分で用意した方は先人の方々を参考にしてください
- 【LAN設定：固定IP】
    - DHCPでも大丈夫ですが、メンテナンスの時に代わってると面倒なので
- 【raspberry pi connect設定】
    - raspberry pi connect IDと実機の紐付けをするため
- 【remote shell画面へ】
    - 環境構築完了


インストール部分は特に説明することがないのでLAN設定から始めます。

### 【LAN設定：固定IP】
raspberry piコンソールを立ち上げ以下を入力


```tex:console
sudo nmcli con
```
こんな感じに出力されます

![nmcli_con.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/c8412fe5-d708-f016-d212-87f66c693c38.png)

NAMEとDEVICEがあるのですが、使うほうはNAMEのほうです
日本語環境にしたので有線接続 1となってますが
英語のままの方は Wired connection 1とかだと思います

```tex:console
sudo nmcli con modify '有線接続 1' ipv4.addresses <固定したいIP>/24
sudo nmcli con modify '有線接続 1' ipv4.gateway 192.168.0.1
sudo nmcli con modify '有線接続 1' ipv4.dns 192.168.0.1
sudo nmcli con modify '有線接続 1' ipv4.method manual
```

普通の家庭だったらルータは192.168.0.1ですのでgatewayとdnsは一緒でいいです
そうじゃない人は多分詳しい方なので説明は省きます

これがおわったらcon upでもいいですが、ラズパイ実機を再起動しときましょう

### 【raspberry pi connect設定】
まずはここでraspberry pi IDを作成しましょう

https://www.raspberrypi.com/software/connect/

ID作成が終わったらラズパイ実機にもどって

raspberry pi 5にはconnectが標準装備されてましたが
それ以外のやつらは以下でインストールします。(raspberry pi 5の人は無視してください）

```tex:console
sudo apt install rpi-connect
```
```tex:console
rpi-connect on
```

rpi connectのインストールが終わったら以下で紐づけ

```tex:console
rpi-connect signin
```

あとは指示通りに入力すればraspberry pi IDと実機の紐づけ完了です
GUI上にこんな感じのアイコンがでてるとおもいます。

![raspberry pi connect.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/195ef6da-19f9-d0f0-1487-6fdf294c464f.png)

使い方はraspberry pi connectにアクセスして

https://connect.raspberrypi.com/devices

さっき紐づけしたIDでログインすると
作成したデバイスが見えてると思います（私の環境ではhome_serverで作成しました）

![raspberry pi connect2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/24c4c760-3c2e-5b74-3275-0270ad600967.png)

ここまでくればラズパイの実機に張り付く必要はないので
電源とネットワークだけ接続して、温かい部屋でリモート設定できるようになります
<br>
<br>

## 【NASの準備】
NASの実体になる記憶媒体を用意します
USBメモリでもHDDでもSSDでもなんでもいいです

我が家に眠っていたHDDを引っ張り出して、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/d455101a-e3dc-9139-36ff-31f335d510a9.jpeg" width="30%">

exFATでフォーマットします

![hdd format.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/4fca13c2-3637-eac6-7796-60bd5c6efb7c.png)

フォーマットが終わったらラズパイ実機に戻ってexFATをみれるようにする

```tex:console
sudo apt install exfat-fuse
```
これでラズパイ画面の記憶媒体をクリックすれば中身が見えるようになります

![hdd OK.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/7ab443ca-c45d-fecf-e9a6-7d1d45ae18e3.png)
<br>
<br>


## 【sambaのセットアップ】
ファイルサーバの機能はsambaで行います
さっき作った記憶媒体をNASとして運用するために必要になります

```tex:console
sudo apt install -y samba
```
インストールが終わったらsamba用のuserを作ります


インストールが終わったらコンフィグファイルをいじります。

```tex:console
sudo vi /etc/samba/smb.conf
```
<br>

:::note
余談：raspberry piがまっさらの状態のときはviが互換モードでめちゃ使いにくい

```tex:console
sudo apt install vim
```
vimをインストールして.vimrcに以下記載すると治ります
(vimをインストールしないと.vimrcが効かない)
```tex:.vimrc
set nocompatible
set backspace=indent,eol,start
:syntax on
```
:::
<br>

ファイルサーバに使うフォルダを作成します
```tex:console
sudo mkdir /media/<user名>/<記憶媒体名>/<NASに使うフォルダ>
```
<br>

次にファイルサーバアクセスに使うログインuserを作成します
```tex:console
useradd <user名>
```
※ちょっと躓きポイント：既存のuserしかsambaのuserになれない
　いろんな手順を見て回りましたが意外と書いてなかった

<br>

userを作成できたのでsamba用のパスワードを作成します
```tex:console
sudo smbpasswd -a <user名>
```
ここで設定したものがsamba用のuserとパスワードになります

<br>

viでsambaのconfigを開いたら以下を記載

```tex:.smbconf
[home_NAS]
    comment = Share
    path = /media/<user名>/<記憶媒体名>/<NASに使うフォルダ>
    public = yes
    read only = no
    browsable = yes
    force user = <samba用user名>
```

項目はこんな感じ
- public
    - guest=yesと同じでguestアクセスを許可する(後でここは消す)
- read only
    - 読み取りのみかどうかを設定する
- browsable
    - ファイル検索を許可するかどうかを設定する
- force user
    -  共有フォルダ内の作成するフォルダなどを強制的に設定したuserにする

<br>

コンフィグファイルを作成したら、sambaをリスタートです

```tex:console
sudo service smbd restart
```
<br>

 ここまですれば他のPCから共有フォルダが見えるはずです
 例ではWindowsのフォルダ欄に"\\raspberrypi"でいれると出るとのことですが、
 自分の環境では192.168.xxx.xxx(固定したIP)をぶち込むと認識しました
 
![folder_added.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/8ddec016-fb57-019c-de69-a610fbde2958.png)

<br>

でも<font color="OrangeRed">**ここからがマグマなんです**</span>

<br>
<br>

## 【トラブルシューティング】
やった～構築おわり～じゃあ使いますか

![network_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/acecd836-35fd-a092-e043-10283083c0a3.png)

**アクセス許可できません**

![neko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935049/a86f5e09-e09e-8abe-4e49-ac2738f70ced.png)


ここからは私の環境で起きたエラーに対する戦いの記録になります
いろんな症状の人がいると思うので試したことを全部書いていきます

<br>

こちらをページを参考にするのもよいかもしれません

https://www.samba.gr.jp/doc/diag.html

<br>

私のやったことは以下です
- ping確認
    - ラズパイ⇔PCからのpingを確認ここで引っかかったら
    ネットワーク共有設定かファイヤーウォールを疑うといいかも
- samba userの確認
    - userを作り直したりパスワードを変えたりするも改善せず
- conf設定の確認
    - guest=yesやpublic=yesやcreate mode=xxxxなど試すも改善せず
- sambaのrestart
    -  再起動での状況の改善せず
- ファイアウォールの確認
    -  そもそも私のラズパイではファイアウォールが設定されてなかった

こちらを参考にさせていただきましたhttps://scribble.washo3.com/win-samba-trouble
- SMB1.0 クライアントを有効にする
    -  設定したが改善せず、セキュリティが低下するため元に戻す
- ネットワークプロファイルをプライベートにする
    -  設定したが改善せず

こちらを参考にさせていただきましたhttps://qiita.com/loxsols/items/ecc7f757a543bd130c1a
- 安全でないゲスト ログオンを有効にする
    -  設定したが改善せず、セキュリティが低下するため元に戻す

<br>
・
<br>
・
<br>
・
<br>
<br>

- フォルダの権限の変更
    -  設定したが改善せず・・・？なぜか権限自体が変更できない


```tex:console
sudo chmod 777 /media/<user名>/<記憶媒体名>/<NASに使うフォルダ>
ls -l

>>drwxr--r-- 4 <user> <user> 1048576 11月 14 18:24 <NASに使うフォルダ>
```

??フル権限にしたのに反映されてない？？

<br>

調べたところマウントされているデバイスはchmodでは変更されないみたい
なので変更すべくデバイスのマウントを外す

```tex:console
sudo umount /media/<user名>/<記憶媒体名>/<NASに使うフォルダ>
```

新たにマウント用のディレクトリを作る（必須ではないです）
```tex:console
sudo mkdir /media/NAS
```

デバイス名を調べる
```tex:console
sudo blkid
```
```tex:output
/dev/sdb2: LABEL="NAS_backup" UUID="4CE6-4A04" BLOCK_SIZE="512" TYPE="exfat" PARTLABEL="Basic data partition" PARTUUID="d90f98ad-5ac7-475c-ade4-ab3b86a86e02"
/dev/mmcblk0p1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="AAE0-77E1" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="de4a7c14-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="ca2be9ef-61a4-4400-a5a1-dc17d7ea790d" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="de4a7c14-02"
/dev/sda2: LABEL="NAS" UUID="2EC7-43AA" BLOCK_SIZE="512" TYPE="exfat" PARTLABEL="Basic data partition" PARTUUID="8bcdd2cf-3a45-4f07-affa-6f3d499f4f9d"
/dev/sdb1: PARTLABEL="Microsoft reserved partition" PARTUUID="99d6726a-26f5-4675-b9c4-eb8d89978df8
```
それっぽいやつ容量などで判断大体/dev/sdxみたいなやつ
今回は/dev/sda2だった

権限を設定してマウント
```tex:console
sudo mount -t exfat /dev/sda2 /media/NAS -o umask=000
```
<br>
<br>

<font color="OrangeRed">**アクセスできました**</span>
対戦ありがとうございました・・・・・

<br>
<br>


毎度マウント設定をするのは面倒なので以下設定をやっとくといいです
viで開いて末尾に追加
```tex:/etc/fstab
UUID = "<blkidで調べたUUID>" /media/NAS exfat defaults,umask=000 0 0
```
/media/NASは私の環境ですが、作成したディレクトリに合わせてください

<br>

設定をリロードしてオートマウントすれば・・・工事完了です

```tex:console
sudo systemctl daemon-reload
sudo mount -a
```

<br>
<br>


## おわり
**いやー構築出来てよかった**

**現状は認証情報なしでの運用になっているので**
**次では認証有にする記事を書こうと思います**

**しばらくはraspberry pi 5で遊びます！！！**