3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi 4 でSamba 4.11を使ってファイルサーバー&TimeMachine

Last updated at Posted at 2019-11-05

環境

  • Raspberry Pi 4 ModelB
  • Raspbian 4.19
  • USB HDD (ext4 format)

例として
FileServerディレクトリ
/media/backup

TimeMachineディレクトリ
/media/backup/TimeMachine
としています。

まえおき

Raspi4にSambaを入れてファイルサーバー&Timemachine環境を作った際の
構築方法を残します。

aptitudeで取得できるSamba 4.9.5では、後述のバグがあり、Timemachineが
動作しなかったため、4.11.2をソースコードから入手して、パッチを当てています。

おことわり

USB HDDはext4でformatしたものをUSB3.0ポートに繋いでいます。
hfsplus等を使用したい場合は、別記事を参照してください。

また、samba 4.11では、Sambaプロトコルのバージョン1が非対応になっています。
古い端末やアプリで利用する場合は、互換性がなく接続出来ない可能性があります。
上記、4.11.0のバグだったようで、4.11.2で試した所、smb.confのglobalセクションに

client min protocol = NT1

設定で起動できることを確認しました。

構築方法

1. 外付けHDDの自動マウント

1.1 HDDのデバイス名を取得

$ sudo fdisk -l

1.2 UUIDを確認

$ sudo blkid [デバイス名]

1.3 fstabにマウントポイントを追加しマウント

ここでは、マウントポイントを"/media/backup"とする。

$ sudo vi /etc/fstab
--- 下記を追記
UUID=[1.2で確認したUUID]       /media/backup   ext4    defaults        0       0

保存後、マウントし直す

$ sudo mount -a

マウントポジションのオーナーをSambaで利用するアカウントへ変更

$ sudo chown [sambaユーザー]:[グループ] -R /media/backup

2. Sambaコンパイル

2.1 ソースコードを入手して展開

記事時点では、4.11.2でしたが、最新が出ている場合は、そちらを入れたほうが良いです。

$ wget https://download.samba.org/pub/samba/stable/samba-4.11.2.tar.gz
$ tar zxvf samba-4.11.2.tar.gz

2.2 手動パッチ

fruitモジュールの一部にバグがあり、ARM CPUだとsambaのコンフィグレーションでtimemachineの最大サイズを利用した時にsize overflowが発生するため、手動でパッチする。
(https://bugzilla.samba.org/show_bug.cgi?id=13622)

以下にdiffを記載

$ diff -u ~/samba-4.11.2/source3/modules/vfs_fruit.c ~/local/source3/modules/vfs_fruit.c
--- ~/samba-4.11.2/source3/modules/vfs_fruit.c       2019-09-11 15:44:24.000000000 +0900
+++ ~/local/source3/modules/vfs_fruit.c
2019-10-26 13:49:05.180629648 +0900
@@ -118,6 +118,18 @@
 #define AFPRESOURCE_EA_NETATALK "user." NETATALK_RSRC_XATTR
 #endif
 
+#ifndef OFF_T_MAX
+#if SIZEOF_OFF_T == SIZEOF_INT8_T
+#define OFF_T_MAX INT8_MAX
+#elif SIZEOF_OFF_T == SIZEOF_INT16_T
+#define OFF_T_MAX INT16_MAX
+#elif SIZEOF_OFF_T == SIZEOF_INT32_T
+#define OFF_T_MAX INT32_MAX
+#elif SIZEOF_OFF_T == SIZEOF_INT64_T
+#define OFF_T_MAX INT64_MAX
+#endif
+#endif
+
 enum apple_fork {APPLE_FORK_DATA, APPLE_FORK_RSRC};
 
 enum fruit_rsrc {FRUIT_RSRC_STREAM, FRUIT_RSRC_ADFILE, FRUIT_RSRC_XATTR};
@@ -6964,7 +6976,8 @@
                return true;
        }
 
-       if (bandsize > SIZE_MAX/nbands) {
+       //if (bandsize > SIZE_MAX/nbands) {
+       if (bandsize > OFF_T_MAX/nbands) {
                DBG_ERR("tmsize overflow: bandsize [%zu] nbands [%zu]\n",
                        bandsize, nbands);
                return false;

2.3 依存パッケージの入手

面倒くさいので、debian9のbootstrup.shを利用。
https://git.samba.org/?p=samba.git;a=blob_plain;f=bootstrap/generated-dists/debian9/bootstrap.sh;hb=v4-11-test

拘る人は、自分でパッケージを落としてきてください。

$ chmod +x bootstrup.sh
$ sudo ./bootstrup.sh

2.4 Sambaのconfigureとコンパイル

configure。smb.confを/usr/local/samba配下に置きたくないため、
sysconfdirをオプション指定。

$ ./configure --sysconfdir=/etc/samba/

make
せっかちなのでcore3でコンパイル。
15分くらいかかります。

$ make -j 3

インスール

$ sudo make install

3. ファイルサーバー&Timemachine環境構築

3.1. systemctlにサービス登録

サービス登録用のファイルを作成して、保存。
ファイル内容をそのまま貼りますので保存してください。

/usr/lib/systemd/system/smb.service
[Unit]
Description=Samba SMB Daemon
After=syslog.target network.target nmb.service winbind.service

[Service]
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
Type=forking
NotifyAccess=all
PIDFile=/usr/local/samba/var/run/smbd.pid
LimitNOFILE=65535
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/local/samba/sbin/smbd $SMBDOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID
LimitCORE=infinity

[Install]
WantedBy=multi-user.target
/usr/lib/systemd/system/nmb.service
[Unit]
Description=Samba NMB Daemon
After=syslog.target network.target

[Service]
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
Type=forking
NotifyAccess=all
PIDFile=/usr/local/samba/var/run/nmbd.pid
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/local/samba/sbin/nmbd $NMBDOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

systemctlのサービス登録

$ sudo systemctl enable smb nmb

3.2 sambaユーザー作成

システムに登録されているユーザーで、ファイルサーバーログイン時に
使用するユーザーを登録する。

$ sudo /usr/local/samba/bin/pdbedit -a [ユーザー名]

3.3 smb.conf作成

/etc/samba配下にsmb.confを作成
必要項以外省いてますが、起動しない場合は全部公開します。

/etc/samba/smb.conf
[global]
ea support = yes
vfs objects = catia fruit streams_xattr
fruit:model = MacSamba
fruit:resource = file
fruit:metadata = netatalk
fruit:locking = netatalk
fruit:encoding = native
streams_xattr:store_stream_type = no
streams_xattr:prefix = user.
load printers = no
printing = bsd
unix charset = UTF-8
unix extensions = no
security = user
workgroup = WORKGROUP
dns proxy = no
interfaces = [raspi4に割り当てているstaticIP/subnet] [インタフェース名]
bind interfaces only = yes
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user

## FileServer config
[backup]
    comment = backup
    path = /media/backup
    writeable = yes
    guest ok = no
    force user = [sambaユーザー]
    force create mode = 0777
    force directory mode = 0777
    browsable = yes

## TimeMachine config
[TimeMachine]
    comment = Backup for Mac
    path = /media/backup/timemachine
    guest ok = no
    force user = [sambaユーザー]
    browsable = yes
    writable = yes
    fruit:time machine = yes
    fruit:time machine max size = [TimeMachineで使用するディスクサイズ。2TBなら2T、500GBなら500G]

4. Samba起動と確認

起動

$ sudo systemctl start nmb.service
$ sudo systemctl start smb.service

確認。Active状態が"active (running)"になっていればOK

$ sudo systemctl status smb.service
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: enabled)                                                                     
   Active: active (running) since Sun 2019-10-27 03:22:42 JST; 1 weeks 2 days ago                                                                            
 Main PID: 18627 (smbd)
   Status: "smbd: ready to serve connections..."
    Tasks: 5 (limit: 4915)
   Memory: 8.4M
   CGroup: /system.slice/smb.service
           ├─18627 /usr/local/samba/sbin/smbd
           ├─18633 /usr/local/samba/sbin/smbd
           ├─18634 /usr/local/samba/sbin/smbd
           ├─18635 /usr/local/samba/sbin/smbd
           └─20448 /usr/local/samba/sbin/smbd

5. 端末からファイルサーバーへアクセス

MacならFinderから
移動>サーバーへ接続で

smb://[raspi4のアドレス]

6. TimeMachine設定

システム環境設定>TimeMachine
ディスクを選択で、自動的に設定したTimeMachineが表示されるはず。

以上です。

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?