kraftsrv.net

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

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

ディスクの増設

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

パーティションスキーム MBR
ファイルシステムフォーマット FFSv1

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

ディスクの接続

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

raspberrypi# sysctl hw.disknames
hw.disknames = ld0 sd0

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

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

raspberrypi# dd if=/dev/zero of=/dev/rsd0c bs=1m count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.042 secs (24966095 bytes/sec)

パーティションの作成

ディスクにパーティションを作成します。
ディスクのレイアウト変更のプロンプトが表示されます。
そのまま Enter を押下 (『n』を選択) します。

raspberrypi# fdisk -u sd0
fdisk: primary partition table invalid, no magic in sector 0
fdisk: Cannot determine the number of heads
Disk: /dev/rsd0
NetBSD disklabel disk geometry:
cylinders: 305245, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
total sectors: 625142448, bytes/sector: 512

BIOS disk geometry:
cylinders: 1023, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 625142448

Partitions aligned to 2048 sector boundaries, offset 2048

Do you want to change our idea of what BIOS thinks? [n]

操作対象パーティション選択のプロンプトが表示されます。
『0』を入力して Enter を押下します。

Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 0

sysid 入力のプロンプトが表示されます。
そのまま Enter を押下 (『169』を設定) します。

The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169]

開始位置入力のプロンプトが表示されます。
そのまま Enter を押下します。

start: [0..38913cyl default: 2048, 0cyl, 1MB]

サイズ入力のプロンプトが表示されます。
そのまま Enter を押下します。

size: [0..38913cyl default: 625140400, 38913cyl, 305244MB]

操作対象パーティション選択のプロンプトが再度表示されます。
そのまま Enter を押下 (『none』を選択) します。

Partition table:
0: NetBSD (sysid 169)
    start 2048, size 625140400 (305244 MB, Cyls 0-38913/80/63)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none]

パーティション作成確認のプロンプトが表示されます。
『y』を入力して Enter を押下します。

We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
    start 2048, size 625140400 (305244 MB, Cyls 0-38913/80/63)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
No active partition.
Drive serial number: 0 (0x00000000)
Should we write new partition table? [n] y

ディスクラベルの作成

ディスクラベル (on-disk label) を作成します。

raspberrypi# disklabel -e sd0

エディタ (vi) が起動して、カーネルが生成したディスクラベル (in-core label) の情報が表示されます。
この内容のままでエディタを保存終了します。

# /dev/rsd0:
type: SCSI
disk:
label: fictitious
flags:
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 305245
total sectors: 625142448
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 625142448         0     unused      0     0        # (Cyl.      0 - 305245*)
 e: 625140400      2048     4.2BSD      0     0     0  # (Cyl.      1 - 305245*)

ディスクラベル (on-disk label) の作成を確認します。

raspberrypi# disklabel -r sd0
# /dev/rsd0:
type: SCSI
disk:
label: fictitious
flags:
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 305245
total sectors: 625142448
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 625142448         0     unused      0     0        # (Cyl.      0 - 305245*)
 e: 625140400      2048     4.2BSD      0     0     0  # (Cyl.      1 - 305245*)

ファイルシステムの作成

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

raspberrypi# newfs /dev/rsd0e
/dev/rsd0e: 305244.3MB (625140400 sectors) block size 32768, fragment size 4096
        using 412 cylinder groups of 740.91MB, 23709 blks, 47104 inodes.

マウント

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

raspberrypi# mkdir /data

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

raspberrypi# mount /dev/sd0e /data

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

/dev/sd0e       /data           ffs     rw,noatime      0 0

Samba のインストール

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

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

raspberrypi# pkgin install samba-4.13.14
calculating dependencies...done.

43 packages to install:
  samba-4.13.14 tevent-0.10.2nb1 talloc-2.3.3 readline-8.1 python38-3.8.12 py38-markdown-3.1.1 py38-iso8601-0.1.16
  py38-expat-3.8.12 py38-dns-1.16.0nb1 popt-1.18 perl-5.34.0nb3 p5-Parse-Yapp-1.21nb4 lmdb-0.9.29 libiconv-1.14nb3
  libgcrypt-1.9.4 ldb-2.2.3 jansson-2.13.1 gnutls-3.7.2 gettext-lib-0.21 cmocka-1.1.5 avahi-0.8nb4 libdaemon-0.14nb2
  glib2-2.68.4nb1 gdbm-1.21 dbus-1.12.20nb1 p11-kit-0.24.0nb3 nettle-3.7.3 mozilla-rootcerts-1.0.20201204 lzo-2.10
  libunistring-0.9.10 libtasn1-4.17.0 libcfg+-0.7.0 gmp-6.2.1nb1 tdb-1.4.5 libgpg-error-1.42 py38-idna-2.10
  py38-ecdsa-0.17.0 py38-cryptodome-3.10.1 py38-setuptools-57.5.0 libuuid-2.32.1 libffi-3.3nb5 py38-six-1.16.0
  pcre-8.45

0 to refresh, 0 to upgrade, 43 to install
109M to download, 409M to install

proceed ? [Y/n]

設定ファイルは /usr/pkg/etc/samba ディレクトリ以下に配置されます。

raspberrypi# ls -l /usr/pkg/etc/samba/smb.conf
-rw-r--r--  1 root  wheel  7921 Apr  7 23:06 /usr/pkg/etc/samba/smb.conf

設定ファイルの編集

本稿では Samba はユーザホーム機能の提供のみを行うこととします。
以下は /usr/pkg/etc/samba/smb.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.d/smbd を新規作成します。

raspberrypi# cp -p /usr/pkg/share/examples/rc.d/smbd /etc/rc.d/smbd

Samba を起動します。

raspberrypi# service smbd onestart
Starting smbd.

自動起動設定

Samba の自動起動が行われるようにする場合は、/etc/rc.conf に『smbd=YES』の設定を追加します。

smbd=YES

なお自動起動の設定後は、service コマンドでの起動は onestart ではなく start を指定 (『service smbd start』を実行) となります。

ログローテーション

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

/var/log/log.smbd                       644  7    *    @T00 ZN

ユーザの作成

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

OS ユーザの作成

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

raspberrypi# useradd -c "Samba Share User" -d /nonexistent -s /sbin/nologin fsuser01
useradd: Warning: home directory `/nonexistent' doesn't exist, and -m was not specified

Samba 接続用ユーザの作成

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

raspberrypi# /usr/pkg/bin/pdbedit -a fsuser01
new password:
retype new password:

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

Unix username:        fsuser01
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-3864389441-2988535220-1215696492-1000
Primary Group SID:    S-1-5-21-3864389441-2988535220-1215696492-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:    Thu, 07 Apr 2022 23:21:30 JST
Password can change:  Thu, 07 Apr 2022 23:21:30 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

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

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

raspberrypi# mkdir -m 700 /data/fsuser01
raspberrypi# chown fsuser01:users /data/fsuser01

ログイン確認

Samba にログインします。

raspberrypi# /usr/pkg/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