Ubuntu Server 20.04.3 ファイルサーバを構築

# Ubuntu Server上にデータサーバを構築

Windows から識別可能なファイルサーバを Ubuntu Server 20.04.3 に構築

写真や動画などを実作業用のパソコンから引っ越ししたいけど、いざとなったときはササっとアクセスしたい、というときにローカルに立てるサーバを目的にしています。

# 構築手順

Sambaインストール
```shell
$ sudo apt install -y samba
$ sudo pdbedit -a [username]
```

[username]についてはサーバのユーザを指定すること。


共有フォルダの設定
```shell
$ sudo mkdir /mnt/share
$ sudo chmod 777 /mnt/share
```

サーバのネットワークIPについて調べる
```shell
$ ip address show
```

```shell
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.xx.0/24 brd 192.168.xx.255 scope global dynamic eth0
       valid_lft 00000sec preferred_lft 00000sec
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link 
       valid_lft forever preferred_lft forever
```

192.168.xx.0/24 eth0 の部分についてはsambaの設定に使用するため記録しておくこと。

sambaの設定
```
$ cp /usr/share/samba/smb.conf /etc/samba
$ sudo nano /etc/samba/smb.conf
```

以下の設定を修正する。

ipコマンドで調べた内容をコピーすること。

```
#### Networking ####

# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
   interfaces = 192.168.xx.0/24 eth0 # ipコマンドでの結果に修正

# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself.  However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
   bind interfaces only = yes     # セミコロンの削除
   map to guest = bad User        # 追記部分
```

以下の設定を追記する。

```
[share]
   path = /mnt/share
   writable = yes
   guest ok = yes
   guest only = yes
   create mode = 0777
   directory mode = 0777
```

smb.confの構文チェック
```
$ testparm
```

構文の間違えがなければ以下の出力が行われる。

```
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
```

sambaの実行・自動起動の設定

```
$ sudo systemctl restart smbd nmbd
$ sudo systemctl enable smbd nmbd
```

もし実行時にエラーを発生させた場合はsmb.confの追記項目を再度確認すること。

設定したIPの間違いや追記設定の間違いなどで構文間違いのチェックをすり抜けているものがあると起動時に正常に立ち上がらないことがある。

あとはWindowsからはネットワークからアクセスが可能になっているか確認する。

もしくはエクスプローラから192.168.xx.xxに直接アクセスする。

---

### sambaインストール時のエラー

```shell
Setting up php7.4-fpm (7.4.3-4ubuntu2.12) ...
Job for php7.4-fpm.service failed because the control process exited with error code.
See "systemctl status php7.4-fpm.service" and "journalctl -xe" for details.
invoke-rc.d: initscript php7.4-fpm, action "restart" failed.
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2022-11-12 08:56:31 UTC; 5ms ago
       Docs: man:php-fpm7.4(8)
    Process: 95165 ExecStart=/usr/sbin/php-fpm7.4 --nodaemonize --fpm-config /etc/php/7.4/fpm/php-fpm.conf (code=exited, status=78)
    Process: 95178 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
   Main PID: 95165 (code=exited, status=78)

Nov 12 08:56:31 helium systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
Nov 12 08:56:31 helium php-fpm7.4[95165]: [12-Nov-2022 08:56:31] ERROR: [pool www] cannot get uid for user 'nginx'
Nov 12 08:56:31 helium php-fpm7.4[95165]: [12-Nov-2022 08:56:31] ERROR: FPM initialization failed
Nov 12 08:56:31 helium systemd[1]: php7.4-fpm.service: Main process exited, code=exited, status=78/CONFIG
Nov 12 08:56:31 helium systemd[1]: php7.4-fpm.service: Failed with result 'exit-code'.
Nov 12 08:56:31 helium systemd[1]: Failed to start The PHP 7.4 FastCGI Process Manager.
dpkg: error processing package php7.4-fpm (--configure):
 installed php7.4-fpm package post-installation script subprocess returned error exit status 1
dpkg: dependency problems prevent configuration of php7.4:
 php7.4 depends on libapache2-mod-php7.4 | php7.4-fpm | php7.4-cgi; however:
  Package libapache2-mod-php7.4 is not installed.
  Package php7.4-fpm is not configured yet.
  Package php7.4-cgi is not installed.

dpkg: error processing package php7.4 (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 php7.4-fpm
 php7.4
```

他のアプリケーションやプログラムにより既にphpが入っている場合、sambaインストール時にこのようなエラーが発生する場合がある。

phpファイルをパージすることで正常にインストール可能にする。

```
sudo apt-get purge php7.*
```

# 参考

[Ubuntu 20.04 でファイルサーバー（NAS）を作ろう！](https://beightlyouch.com/blog/programming/ubuntu-fileserver-nas/)

[Sub-process /usr/bin/dpkg returned an error code を解決する手順](https://virment.com/fix-sub-process-returned-an-error-code/)

[Linux：ネットワーク設定の確認を行う、ipコマンドを読み解く](https://slacknotebook.com/checking-network-configs-on-linux-using-ip-command/)