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/local | Tkライブラリパスを指定 |
--with-php-config=/path/to/php-config | PHP設定ツールパスを指定(モジュール競合時用) |
--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+Cでsmbstatusを終了します。
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統合、基本的な共有設定が含まれています。このソリューションは、セキュリティ、パフォーマンス、またはカスタマイズ性に高い要件がある本番環境に適しています。