kraftsrv.net

Raspberry Pi 上の FreeBSD 環境にディスクの増設と Samba のインストール

Raspberry Pi 3 Model B+ 上の FreeBSD 13.0-RELEASE 環境にディスク (USB 接続の SATA HDD) の増設と Samba をインストールする手順です。
Samba の基本的な設定変更までを行います。

ディスクの増設

本稿ではブートディスク (SD カードの領域) に行われている設定に倣い、以下の方針例の通りディスク増設に関する設定を行うこととします。

パーティションスキーム MBR
ファイルシステム作成時のオプション ソフトアップデートの適用 (-U) のみ設定
ラベル ufs ラベルのみ設定
マウント ラベル名を使用

diskid ならびに ufsid ラベル設定の無効化

diskid ラベル設定の無効化を行います。
※diskid ラベルはディスク接続時に自動的に設定されます。

root@raspberrypi:~ # sysctl kern.geom.label.disk_ident.enable=0
kern.geom.label.disk_ident.enable: 1 -> 0

ufsid ラベル設定の無効化を行います。
※ufsid ラベルはファイルシステム作成時に自動的に設定されます。

root@raspberrypi:~ # sysctl kern.geom.label.ufsid.enable=0
kern.geom.label.ufsid.enable: 1 -> 0

/boot/loader.conf に FreeBSD の再起動後も無効化を行う設定を追加します。

kern.geom.label.disk_ident.enable="0"
kern.geom.label.ufsid.enable="0"

データ格納用パーティションの作成

ディスクの接続

Raspberry Pi にディスクを接続します。
『da0』として認識されます。

root@raspberrypi:~ # geom disk list
Geom name: mmcsd0
Providers:
1. Name: mmcsd0
   Mediasize: 15685648384 (15G)
   Sectorsize: 512
   Stripesize: 4194304
   Stripeoffset: 0
   Mode: r2w2e7
   descr: SDHC USDU1 2.0 SN 05006A60 MFG 02/2017 by 116 J`
   ident: 05006A60
   rotationrate: 0
   fwsectors: 0
   fwheads: 0

Geom name: da0
Providers:
1. Name: da0
   Mediasize: 320072933376 (298G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   descr: Logitec
   lunname: Logitec                 17307000000024E5
   lunid: 3017307000000024
   ident: 17307000000024E5
   rotationrate: unknown
   fwsectors: 63
   fwheads: 255

既存パーティションの削除

ディスクにパーティションが存在している場合は削除します。

root@raspberrypi:/ # gpart destroy -F da0
da0 destroyed

ディクスへのパーティションスキームの作成

ディスクにパーティションスキームを作成します。

root@raspberrypi:~ # gpart create -s mbr da0
da0 created

スライスの作成

ディスクにスライスを作成します。

root@raspberrypi:~ # gpart add -t freebsd da0
da0s1 added

スライスへのパーティションスキームの作成

スライスにパーティションスキームを作成します。

root@raspberrypi:~ # gpart create -s bsd da0s1
da0s1 created

パーティションの作成

スライスにパーティションを作成します。
本稿では開始アドレス (論理ブロックアドレス) は『16』、インデックスは『4』とします。

root@raspberrypi:~ # gpart add -t freebsd-ufs -b 16 -i 4 da0s1
da0s1d added

パーティションの作成を確認します。

root@raspberrypi:~ # gpart show -p
=>      63  30635969    mmcsd0  MBR  (15G)
        63      2016            - free -  (1.0M)
      2079    102312  mmcsd0s1  fat32lba  [active]  (50M)
    104391  30525497  mmcsd0s2  freebsd  (15G)
  30629888      6144            - free -  (3.0M)

=>       0  30525497   mmcsd0s2  BSD  (15G)
         0        57             - free -  (29K)
        57  30525440  mmcsd0s2a  freebsd-ufs  (15G)

=>       63  625142385    da0  MBR  (298G)
         63          1         - free -  (512B)
         64  625142384  da0s1  freebsd  (298G)

=>        0  625142384   da0s1  BSD  (298G)
          0         16          - free -  (8.0K)
         16  625142368  da0s1d  freebsd-ufs  (298G)

ファイルシステムの作成

パーティションにファイルシステムを作成します。

root@raspberrypi:~ # newfs -U /dev/da0s1d
/dev/da0s1d: 305245.3MB (625142368 sectors) block size 32768, fragment size 4096
        using 489 cylinder groups of 625.22MB, 20007 blks, 80128 inodes.
        with soft updates

ラベルの設定

パーティションにラベルを設定します。
本稿ではラベル名は『datafs』とします。

root@raspberrypi:~ # tunefs -L datafs /dev/da0s1d

マウント

パーティションのマウントポイントを作成します。
本稿では『/data』ディレクトリとします。

# mkdir /data

パーティションをマウントします。

# mount /dev/ufs/datafs /data

/etc/fstab に FreeBSD の再起動後もマウントを行う設定を追加します。
本稿ではマウントオプションは『rw,late』、ダンプならびにファイルシステムチェックの実行は無しとします。

/dev/ufs/datafs   /data   ufs     rw,late 0       0

Samba のインストール

バイナリパッケージのインストール

パッケージをインストールします。
本稿では Samba のバージョンは 4.13 を選択することとします。

root@raspberrypi:~ # pkg install samba413
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 59 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        avahi-app: 0.8
        ca_root_nss: 3.71
        cyrus-sasl: 2.1.28
        dbus: 1.12.20_5
        dbus-glib: 0.112
        expat: 2.4.4
        gamin: 0.1.10_10
        gdbm: 1.22
        gettext-runtime: 0.21
        glib: 2.70.4,2
        gmp: 6.2.1
        gnome_subr: 1.0
        gnutls: 3.6.16
        indexinfo: 0.3.1
        jansson: 2.14
        libICE: 1.0.10,1
        libSM: 1.2.3,1
        libX11: 1.7.2,1
        libXau: 1.0.9
        libXdmcp: 1.1.3
        libarchive: 3.5.2,1
        libdaemon: 0.14_1
        libevent: 2.1.12
        libffi: 3.3_1
        libgcrypt: 1.9.4
        libgpg-error: 1.43
        libiconv: 1.16
        libidn2: 2.3.2
        libinotify: 20180201_2
        liblz4: 1.9.3,1
        libpthread-stubs: 0.4
        libsunacl: 1.0.1
        libtasn1: 4.18.0
        libunistring: 0.9.10_1
        libunwind: 20201110
        libxcb: 1.14_1
        libxml2: 2.9.12
        lmdb: 0.9.29,1
        mpdecimal: 2.5.1
        nettle: 3.7.3
        openldap24-client: 2.4.59_4
        p11-kit: 0.24.0
        pcre: 8.45
        popt: 1.18_1
        py38-dnspython: 1.16.0
        py38-importlib-metadata: 4.8.1
        py38-markdown: 3.3.4
        py38-setuptools: 57.0.0
        py38-zipp: 3.4.0
        python38: 3.8.12_1
        readline: 8.1.1
        samba413: 4.13.14
        talloc: 2.3.1
        tdb: 1.4.3,1
        tevent: 0.10.2_1
        tpm-emulator: 0.7.4_2
        trousers: 0.3.14_3
        xorgproto: 2021.5
        zstd: 1.5.0

Number of packages to be installed: 59

The process will require 308 MiB more space.
50 MiB to be downloaded.

Proceed with this action? [y/N]: y

起動スクリプトは /usr/local/etc/rc.d ディレクトリ以下に配置されます。

root@raspberrypi:~ # ls -l /usr/local/etc/rc.d/samba_server
-rwxr-xr-x  1 root  wheel  6535 Mar  8 06:47 /usr/local/etc/rc.d/samba_server

設定ファイルの作成

/usr/local/etc/smb4.conf を新規作成します。
本稿では Samba はユーザホーム機能の提供のみを行うこととします。
以下は /usr/local/etc/smb4.conf の内容例となります。

[global]
    security = user
    logging = file
    dos charset = CP932

[homes]
    path = /data/%S
    browseable = No
    valid users = %S
    read only = No

サービスの起動設定

本稿では以下の方針例の通りサービスの起動設定を行うこととします。

smbd 起動する
nmbd 起動しない (無効化)
winbind 起動しない (無効化)

/etc/rc.conf に以下の設定を追加します。
なお nmbd と winbindd の無効化には『samba_server_enable="YES"』の設定の追加が必要となるため、Samba (smbd) は自動起動が行われるようになります。

samba_server_enable="YES"
nmbd_enable="NO"
winbindd_enable="NO"

起動

Samba を起動します。

root@raspberrypi:~ # service samba_server start
Performing sanity check on Samba configuration: OK
Starting smbd.

ログローテーション

/etc/newsyslog.conf.d/samba.conf を新規作成してログローテーションの設定を行います。
以下は /var/log/samba4/log.smbd に対して、毎日 00:00 に bzip2 圧縮を行い 7 世代保存を行う場合の例となります。
※log.smbd のローテーションに関して smbd へのシグナルの送信は不要です。

/var/log/samba4/log.smbd                644  7     *    @T00  JN

ユーザの作成

Samba 接続用のユーザを作成します。
本稿ではユーザ名は『fsuser01』とします。

OS ユーザの作成

OS ユーザを作成します。
※Samba 接続用ユーザの作成には OS ユーザが必要となります。
但し OS へのログイン権限は不要のため、ホームディレクトリやログインシェルの指定、パスワードの設定は行わないこととします。

root@raspberrypi:~ # pw useradd fsuser01 -c "Samba Share User" -d /nonexistent -s /usr/sbin/nologin

Samba 接続用ユーザの作成

Samba 接続用ユーザを作成します。
pdbedit コマンド実行後、パスワード入力のプロンプトが表示されます。
パスワードを入力して Enter を押下します。

root@raspberrypi:~ # /usr/local/bin/pdbedit -a fsuser01
new password:
retype new password:

パスワードを入力後、ユーザの詳細情報が表示されます。

Unix username:        fsuser01
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-1533095059-4261278251-1847181010-1000
Primary Group SID:    S-1-5-21-1533095059-4261278251-1847181010-513
Full Name:            Samba Share User
Home Directory:       \\RASPBERRYPI\fsuser01
HomeDir Drive:
Logon Script:
Profile Path:         \\RASPBERRYPI\fsuser01\profile
Domain:               RASPBERRYPI
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          9223372036854775807 seconds since the Epoch
Kickoff time:         9223372036854775807 seconds since the Epoch
Password last set:    Tue, 15 Mar 2022 22:02:21 JST
Password can change:  Tue, 15 Mar 2022 22:02:21 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Samba 接続用ユーザのディレクトリの作成

Samba 接続用ユーザのディレクトリを作成します。
作成先は増設したディスクのパーティション内とします。

root@raspberrypi:~ # mkdir -m 700 /data/fsuser01
root@raspberrypi:~ # chown fsuser01:fsuser01 /data/fsuser01

ログイン確認

Samba にログインします。

root@raspberrypi:~ # /usr/local/bin/smbclient -U fsuser01 //127.0.0.1/fsuser01
Enter WORKGROUP\fsuser01's password:
Try "help" to get a list of possible commands.
smb: \>

ログアウトします。

smb: \> exit