環境
- 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にサービス登録
サービス登録用のファイルを作成して、保存。
ファイル内容をそのまま貼りますので保存してください。
[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
[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を作成
必要項以外省いてますが、起動しない場合は全部公開します。
[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が表示されるはず。
以上です。