Samba ソースコードコンパイル・インストール完全ガイド(Linuxシステム向け)

本ガイドでは、Sambaをソースからコンパイル・インストールする方法を詳細に解説します。依存関係インストール、設定オプション、ビルド構築、systemdサービス設定、起動管理、基本的な使用方法を含め、Fedora、CentOS、Rocky Linux、Ubuntu、Debian、openSUSEなど主要なLinuxディストリビューションに対応しています。

注意:Sambaの公式コードリポジトリは主にGitLab에 있지만、ソースパッケージはSamba公式サイトやGitHubからも取得できます。


1. ソースパッケージの展開

まず、Sambaソースパッケージをダウンロードして展開します(バージョンx.y.zを例として使用):

tar -zxf samba-x.y.z.tar.gz
cd samba-x.y.z

2. 依存関係のインストール

2.1 公式スクリプトの使用(Fedora / CentOS / Ubuntu / Debian / openSUSE向け)

Sambaは一般的なディストリビューション向けの依存関係インストールスクリプトを提供しています:

cd <samba-source-dir>/bootstrap/generated-dists/<distro-with-version>
./bootstrap.sh

<distro-with-version>を実際のディレクトリ名に置き換えてください(例:fedora38)。

2.2 手動での依存関係インストール(Rocky Linuxの例)

公式スクリプトでカバーされていないシステムの場合は、以下の依存関係を手動でインストールしてください:

dnf install -y gcc libtirpc-devel glibc-devel zlib-devel gnutls-devel \
libattr-devel python3-devel lmdb-devel gpgme-devel perl-Parse-Yapp \
jansson-devel libarchive-devel libacl-devel openldap-devel pam-devel \
rpcgen libtalloc-devel libtdb-devel libtevent-devel

2.3 Samba 4.19.3以上の追加依存関係

Samba 4.19.3以降では、追加のPythonおよびD-Bus関連コンポーネントをインストールする必要がある場合があります:

pip install markdown dnspython3
dnf install -y dbus-c++-devel dbus-python-devel python3-markdown python3-dns

3. コンパイルオプションの設定

3.1 すべての設定オプションの表示

./configure --help

3.2 デフォルト設定

./configure

3.3 カスタム設定例

以下は、本番環境で一般的に使用されるFHS互換の設定です:

./configure \
  --sbindir=/usr/sbin \
  --with-piddir=/run \
  --with-configdir=/etc/samba \
  --bindir=/usr/bin \
  --localstatedir=/var \
  --enable-fhs \
  --libdir=/usr/lib64 \
  --with-modulesdir=/usr/lib64/samba \
  --sysconfdir=/etc \
  --with-lockdir=/var/lib/samba/lock \
  --with-cachedir=/var/lib/samba \
  --enable-debug \
  --enable-pthreadpool \
  --valgrind \
  --valgrind-log="/var/log/samba/" \
  --with-systemd

⚠️ 注意:Sambaを二次開発している場合、./configureの前環境変数を設定してリンクの問題を避けてください。例えば:

export LDFLAGS="-lrt"

3.4 一般的なconfigureパラメータの説明

パラメータ説明
--prefix=/usr/local/myinstall統一インストールプレフィックスを指定(デフォルトは分散インストール)
--with-tk=/usr/localTkライブラリパスを指定
--with-php-config=/path/to/php-configPHP設定ツールパスを指定(モジュール競合時用)
--without-gnu-ldシステムのGNU ldリンカを使用しない

3.5 コンパイル環境変数の設定(クロスコンパイルなど)

CC=/usr/bin/mipsel-linux-gcc
CFLAGS="-g -O2 -I/home/a/buildspace/termcap-1.3.1/install/include"
LDFLAGS="-L/home/a/buildspace/termcap-1.3.1/install/lib"
LIBS="-lpthread"

4. コンパイルとインストール

SambaはWAFビルドシステムを使用していますが、makeインターフェースと互換性があります:

make && make install

⚠️ 重要:システムのデフォルトPythonがv2の場合、WAFが失敗する可能性があります。Python 3を明示的に指定してください:

PYTHON=python3.9 make -j6
PYTHON=python3.9 make install

5. systemdサービスの設定(Fedoraの例)

デフォルトインストール後、systemdユニットファイルがない場合があります。お使いのシステムに従って以下の3つのサービスファイルを作成してください(パスはディストリビューションによって異なる場合があります):

5.1 /usr/lib/systemd/system/smb.service

[Unit]
Description=Samba SMB Daemon
Documentation=man:smbd(8) man:samba(7) man:smb.conf(5)
Wants=network-online.target
After=network.target network-online.target nmb.service winbind.service

[Service]
Type=simple
PIDFile=/run/smbd.pid
LimitNOFILE=16384
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitCORE=infinity
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba

[Install]
WantedBy=multi-user.target

5.2 /usr/lib/systemd/system/nmb.service

[Unit]
Description=Samba NMB Daemon
Documentation=man:nmbd(8) man:samba(7) man:smb.conf(5)
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=simple
PIDFile=/run/nmbd.pid
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitCORE=infinity
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba

[Install]
WantedBy=multi-user.target

5.3 /usr/lib/systemd/system/winbind.service

[Unit]
Description=Samba Winbind Daemon
After=syslog.target network.target nmb.service

[Service]
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
Type=simple
NotifyAccess=all
PIDFile=/run/winbindd.pid
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/winbindd --foreground --no-process-group "$WINBINDOPTIONS"
ExecReload=/usr/bin/kill -HUP $MAINPID
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

推奨:デフォルトの設定ファイルはType=notifyを使用しています。起動タイムアウトによるサービス失敗を避けるため、Type=simpleに変更することをお勧めします。

5.4 systemdの再読み込みとサービスの起動

systemctl daemon-reload
systemctl start smb nmb winbind
# または(旧世代のエイリアス、一部システムで対応)
systemctl start samba

5.5 Sambaサービスの停止

  • 方法1(推奨)

    systemctl stop smb nmb winbind
  • 方法2(手動kill)

    ps -aux | grep smbd
    kill <pid1> <pid2>

    注意:smbstatusで表示されたPIDは特定のクライアント接続を終了できますが、サービス全体には影響しません。

5.6 サービスの状態確認

# 方法1
systemctl status smb nmb winbind

# 方法2
smbstatus

qまたはCtrl+Csmbstatusを終了します。


6. 基本的な使用と設定

6.1 Samba設定ファイルの作成

/etc/samba/smb.confを編集します(存在しない場合は新規作成):

[global]
    client max protocol = SMB3
    load printers = No
    map to guest = Bad User
    printcap name = cups
    security = USER
    workgroup = SAMBA
    idmap config * : backend = tdb
    cups options = raw
    guest ok = Yes

[homes]
    comment = Home Directories
    inherit acls = Yes
    read only = No
    valid users = %S %D%w%S

[printers]
    browseable = No
    comment = All Printers
    create mask = 0600
    path = /var/tmp
    printable = Yes

[print$]
    comment = Printer Drivers
    create mask = 0664
    directory mask = 0775
    force group = @printadmin
    path = /var/lib/samba/drivers
    write list = @printadmin root

[myshare]
    comment = public document
    create mask = 0777
    directory mask = 0777
    path = /home/a/share
    read only = No
    valid users = a root smb_user

⚠️ 権限要件:共有ディレクトリが存在し、権限が一致していることを確認してください。例えば:

mkdir -p /home/a/share
chmod 777 /home/a/share

6.2 Sambaユーザーの追加

# システムユーザーの作成(オプション)
sudo useradd username -g usergroup

# Sambaパスワードの設定(必須)
sudo smbpasswd -a username

6.3 クライアントからの共有アクセス

Linuxクライアント

# マウントポイントの存在確認
mkdir -p /cifs

# CIFS共有のマウント(SMB3)
mount -t cifs \
  -o username=a,password=12345678,dir_mode=0777,file_mode=0777,nounix,vers=3.0 \
  //10.0.0.10/myshare /cifs

Windowsクライアント

タスクバーの検索ボックスに入力:

\\10.0.0.10\myshare

その後、ユーザー名とパスワードを入力してアクセスします。


まとめ

本ガイドを通じて、ソースからSambaをコンパイル・インストールする完全なプロセスをマスターしました。依存関係処理、カスタム設定、systemd統合、基本的な共有設定が含まれています。このソリューションは、セキュリティ、パフォーマンス、またはカスタマイズ性に高い要件がある本番環境に適しています。