Raspberry Pi 3+の設定（忘備録）その7 sambaで共有フォルダを作成し、ローカルネットワーク用のgitのリモートリポジトリを置く

自分がやったことの忘備録代わりにこれを書いています。素人が試行錯誤しながらやっているのでお手柔らかにお願いします。誤り等ございましたらご指摘ください。

今回やろうとしていることを大まかに書くと
1. Raspberry Pi 3+にsambaを入れて設定。windowsとファイル共有ができるようにする
2. ローカルネットワークのラズパイに作成したディレクトリにgitのリモートリポジトリを作成、既存のリポジトリをそこにプッシュ・プルできるようにする

の二本立てです。NASのHDD買ってくれば済む問題なんですが、勉強がてらやってみることにします。

現在の我が家の環境は、デスクトップ機とノートの２台体制です。双方でソースコードのやり取りがしたい。現状ではGitHub経由で行っていたが、個人での開発であるのでわざわざGitHub使わなくてもいいんじゃないかと思い、この作業を始めました。

# 1.samba関連

## 1-1.Raspberry Pi OSを更新する
まずはOS周りを更新します。
```console
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt dist-upgrade -y
$ sudo rpi-update
$ sudo apt autoremove -y
$ sudo apt autoclean

#最後にラズパイを再起動します。
$ sudo reboot now
```

## 1-2.sambaをインストールする
続いてsambaをインストールします。
```console
$ sudo apt install samba
```
インストール中、「DHCP から WINS 設定を使うよう smb.conf を変更しますか？」と聞かれますがここは「いいえ」で。
![スクリーンショット (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/d7bdde52-a483-dfaf-e403-28d642f23427.png)

## 1-3.samba用のユーザーの追加とディレクトリ作成
インストール後、samba用のユーザーを登録をします。
普段使用しているRaspberry Pi OSユーザーをsamba用にしてもよいそうなんですが、それもどうかと思ったので専用ユーザーを作成してみます。
その際についでにsambaで共有するディレクトリも作成します。このディレクトリのパーミッションには777が必要になります。

以下、例をhogeうんたらとしますので適時値を修正して使用してください。
```console
#sambaで使うRaspberry Pi OS用ユーザーを作成
$ sudo adduser hoge_usr

#任意のディレクトリを指定
$ sudo mkdir /hoge/hogehoge
#↑で作成したディレクトリに権限を与える
$ sudo chmod 777 /hoge/hogehoge
```

## 1-4.smb.confの修正
/etc/samba/smb.confを編集し、以下をファイル末尾にコピペし、適時値を修正します。
参考url

https://tks2.co.jp/2021/12/26/raspberry-pi-samba/

```conf:/etc/samba/smb.conf
#外部から見える共有ディレクトリ名
[hoge_dir]
#1-3で作成したディレクトリのパス
    path = /hoge/hogehoge
    browseable = yes
    writable = yes
    guest ok = yes
    guest only = yes
    create mode = 0777
    directory mode = 0777
#1-3で作成したsambaで使うRaspberry Pi OS用ユーザー名
    force user = hoge_usr
```

smb.conf追記後、confファイルが正常であるかのテストができます。testparmと入力してください。
```shell-session
$ testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[share]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions
```
Loaded services file OK.が出れば正常だそうです。

## 1-5.sambaにユーザー登録
sambaにユーザーとパスワードを設定します。Raspberry Pi OSに登録してあるユーザーのみが登録できます。（一回登録していないユーザー名を試してみたけどダメでした。）ここでは先ほど追加したユーザーを登録してみます。
```console
# 1-3で作成したユーザーを追加
$ sudo smbpasswd -a hoge_usr

# 2回パスワードを聞かれます。
New SMB password:
Retype new SMB password:
Added user hoge_usr.
```

これでwindows側からラズパイを見れる設定が完了しました。サービスを再起動します。

```console
$ sudo systemctl restart smbd
```
windowsのエクスプローラにipもしくはマシン名を入力し、ディレクトリがみれるか確認してみてください。smb.confで設定したディレクトリが見えていると思います。
![スクリーンショット (46).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/d3f148cd-8f5b-9f66-954b-e20b1b04843f.png)

## 1-6.windows側からラズパイにアクセスできない場合
※　ファイアウォール関連の設定を追記しました。（2023/04/25）

まずはラズパイのファイアウォール関連の設定を、https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744 を参考にして見直してください。それでも見えない場合は以下を検討してください。

本来なら、エクスプローラでラズパイを参照したときに、ユーザー名とパスワードを入力する画面が表示と思うのですが、それすら出ない場合があります。その場合は以下を試してください。
![スクリーンショット (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/2e0aa3d2-f87c-b9a7-f531-bf48694c970d.png)

参考url

https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=0111-1738

コントロール パネル\ユーザー アカウント\資格情報マネージャーを表示してください。
Windows資格情報の追加を行います。
![スクリーンショット (44).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/b7d74cf1-cf60-093f-4e1a-3e335afe2a37.png)

ラズパイのマシン名もしくはip、1-5でsambaに登録したユーザー名、パスワードを入力して保存します。
![スクリーンショット (45).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/0d98fd40-5f33-77c7-47b7-bfdd20fd927e.png)

再びエクスプローラで参照すると、ラズパイと共有フォルダが見えていると思います。見えなかったらwindowsマシンを再起動してください。

## ユーザー名と同じフォルダ名が見えてしまっているとき
```conf:/etc/samba/smb.conf
#[global]に１行追加
browseable = no
```

# 2.git関連

参考url

https://qiita.com/masatomix/items/19f4604c939567929ee8

https://qiita.com/shuntaro_tamura/items/d04fb892c9a6b7e1ab42

既存のリポジトリのリモートリポジトリ先をローカルネットワークのラズパイに設定します。

## 2-1.ネットワークドライブの割り当て

まずはネットワークドライブの割り当てを行います。ラズパイの共有ディレクトリを右クリックして、「ネットワークドライブの割り当て」を選択。ドライブレターは任意のもので構いません。
![スクリーンショット (51).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/faf95f9c-69a5-8d24-6345-5b665fae14ce.png)
![スクリーンショット (52).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/2bfa049e-3f42-5f6c-cd67-00c6c1bd572a.png)

## 2-2.空のリモートリポジトリを作成
次に2-1で設定したネットワークドライブ以下に空のリポジトリを作成します。「リポジトリ名+.git」と名付けた方が無難なようです。

ここからはローカルのWindowsからコマンドラインで「test.git」というリポジトリ作成します。

```shell-session:git
# git init --bare --shared (作成したいリポジトリのパス)

$ git init -bare --shared Y:\test.git
Initialized empty shared Git repository in //(マシン名)/hoge_dir/test.git
```
なぜかドライブレターがもともとのネットワークパス+共有ディレクトリ名になりますが空リポジトリが作成されます
※　リポジトリ作成を行うディレクトリはパーミッション777がついていないとコマンド実行時に怒られます。

ディレクトリ内を覗くと、無事リポジトリが作成されたことが確認できます。
![スクリーンショット (54).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/d95bc465-ceef-59b5-43a6-732ca8abd26b.png)

## 2-3.既存のリポジトリのプッシュ先を変更

参考url

https://kde.hateblo.jp/entry/2018/02/18/200459

```console:git
# git remote set-url origin (変更先のURL)

$ git remote set-url origin Y:\test.git
```

git remote -vでリモートリポジトリの変更が確認できれば成功です。
```console:git
$ git remote -v

origin  y:\test.git (fetch)
origin  git@hogehoge.com:hogehoge_repo/test.git (push)
```

私の場合、なぜかpush先だけが変更されなかったので、オプション--pushをつけて実行したところ問題解決しました。
```console:git
# git remote set-url --push origin (変更先のURL)

$ git remote set-url --push origin Y:\test.git

$ git remote -v
origin  y:\test.git (fetch)
origin  y:\test.git (push)
```

gitのコマンドを使用しなくてもSourceTreeでも設定できます。
![スクリーンショット (55).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/722b28af-588d-d8fb-763d-4311542a49c1.png)

これで１台目の設定完了です。リモートリポジトリに既存のリポジトリをプッシュしましょう。

２台目以降のマシンは2-3のみ設定を行います。ドライブレターはマシンごと違っていてもかまいません。

これで、複数台のマシンからそれぞれプッシュ、プルができれば作業は完了です。お疲れ様でした。

# 関連ページ

https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744

https://qiita.com/cafe-capitola/items/283f41793cde409a36a6

https://qiita.com/cafe-capitola/items/d167b4e96fa78dc8878c

https://qiita.com/cafe-capitola/items/97dd713185049d4a8274

https://qiita.com/cafe-capitola/items/2b80853490c88d6eae0c?1

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

https://qiita.com/cafe-capitola/items/9f97c791a598420a7e57