Linux の 302 (Mixed Environment) 試験対策: Samba を構成し、ソースからビルドする

Samba を一から組み立てる

ほとんどの Linux ソフトウェアと同じく、Samba はオープンソースです。したがって、Samba のプログラマーたちが使用したオリジナルのソース・コード・ファイルを入手して、自分のシステムに合わせたバイナリー・パッケージをコンパイルすることができます。ソースからコンパイルすることで、ディストリビューションの保守管理者が提供しているソフトウェアよりも新しいソフトウェアを実行したり、コンパイル時のオプションを調整したりすることができます。また、最適なパフォーマンスを得られるようにコンパイラーの機能を設定することも、さらには、ソース・コードを変更することも可能です。今回の記事で、その方法を学びましょう。

Roderick W. Smith, Consultant and author

Roderick Smith author photoRoderick W. Smith はコンサルタントであり、『The Definitive Guide to Samba 3』、『Linux in a Windows World』、『Linux Professional Institute Certification Study Guide』など、UNIX や Linux に関する数々の著作もあります。彼は現在、ロードアイランドのウーンソケットに住んでいます。



2011年 4月 14日

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、LPIC-3 (Linux Professional Institute Certification レベル 3) 試験に備えるための教材にもなります。

連載の各記事についての説明とリンクについては、developerWorks の LPIC-3 ロードマップを参照してください。現在進行中のこのロードマップは、LPIC-3 試験の最新の目標 (2010年 11月) を反映しています。完成した記事はその都度ロードマップに追加されていきます。

この記事で学ぶのは、以下の内容です。

  • 重要な Samba パッケージとそのコンテンツを明らかにします。
  • 依存するソフトウェアを見つけてインストールします。
  • Samba ソフトウェアの構造を記述します。
  • 重要な Samba のコンパイル・オプションを明らかにします。

この記事は、LPIC-3 (Linux Professional Institute Certification レベル 3) の LPI-302 試験の主題 311 の目標 311.1 の試験対策に役立ちます。この目標の重要度は 1 です。

前提条件

この記事では、読者が Linux コマンドライン関数の実用的な知識を持っていること、そしてソフトウェア構造 (ソース・コードとバイナリー・コードの違い) およびコンパイル手順について、少なくとも概要を理解していることを前提とします。記事で説明するアクションを実行するには、お手持ちのコンピューターで実際にインターネットに接続できること、そして C コンパイラー (GCC (GNU Compiler Collection) など) を使用できることが必要です。


Samba ソース・コードの取得

選択的な LPI-302 試験について

LPIC (Linux Professional Institute Certification) には、さまざまなレベルがあり、レベルが上がるにつれ、より深い知識と経験が必要になってくるという点で、他の多くの認定と似ています。LPI-302 試験は、LPIC レベル階層のレベル 3 に位置する選択的な Specialty 認定試験であり、Linux システム管理に関する高度な知識が求められます。

LPIC レベル 3 (LPIC-3) 認定を取得するには、2 つのレベル 1 試験 (101 と 102)、2 つのレベル 2 試験 (201 と 202)、そして LPIC-3 Core Exam (301) に合格しなければなりません。これらの試験に合格した後、LPI-302 などの選択的な Specialty 認定試験を受けることができます。

Samba ソース・コードは、Samba Web サイトから簡単に入手することができます (リンクについては、「参考文献」を参照)。ソース・コードからソフトウェアをコンパイルおよびインストールする作業に慣れているとしたら、Samba の場合もほとんど問題ないはずです。ただし、多くの環境にとって Samba は極めて重要な性質を持つことから、くれぐれも、ダウンロードしたソフトウェアが自分の考えている通りのソフトウェアであることを確実にしてください。そのために、Samba 開発者たちはダウンロードの検証用に使用できる認証キーを提供しています。

ソースの tarball をダウンロードする

Samba ソース・コードは、Samba のメイン Web ページからダウンロードすることができます。メイン・ページには、最新の安定版 (この記事を執筆している時点では 3.5.6) へのリンクが表示されます。このリンクをクリックすると、安定版のソフトウェアを入手することができます。Web ブラウザーがダウンロードをどこに配置するかに関わらず、tarball はダウンロードされて表示されます。メイン・ページには、Samba の次世代版であるバージョン 4 のダウンロード・リンクも表示されます。しかし、Samba バージョン 4 はアルファ・テスト段階の状態が何年も続いているので、バージョン 4 を使用するのは、その機能が必要な場合、または Samba 開発に貢献したい場合に限ります。

皆さん独自のフィードを作成してください

新しい記事が追加された際、あるいは内容が更新された際に通知を受けられるように、RSS、Atom、または HTML によるカスタム・フィードを作成することができます。それには、developerWorks RSS フィードにアクセスしてください。対象のゾーンとしては「Linux」を選択し、情報のタイプとしては「Articles」を選択して、キーワードには「Linux Professional Institute」と入力します。そして最後にフィードのタイプを選択します。

メイン・ダウンロード・リンクの近くに、最新バージョンのリリース・ノートへのリンクと、ソフトウェアの完全性を検証する際に使用する署名へのリンクがあります。ソフトウェアの完全性を検証することを予定している場合は、署名ファイルをダウンロードしてください (ダウンロードするには、リンクを右クリックする必要があります)。このファイルは、samba-version.tar.asc という名前になっています (ここで、version は Samba のバージョン番号です)。

追加のダウンロード・オプションは、Samba ダウンロード・ページに表示されます。このページには、Samba のこれまでのバージョンのアーカイブへのリンクや、Git、Control Version System、その他のツールを使用してソフトウェアをダウンロードする手順へのリンク、グラフィカル・ユーザー・インターフェース・マネージャーなどの関連ツールへのリンク、そして他のプラットフォーム向けの SMB (Server Message Block)/CIFS (Common Internet File System) パッケージへのリンクなどがあります。これらのリンクのなかで特に重要なのは、Samba パッケージの GPG (GnuPG) 鍵へのリンクです。次に説明する Samba パッケージの真正性を検証する予定であれば、このファイル (samba-pubkey.asc) をダウンロードしてください。

ソフトウェアの真正性を検証する

ソフトウェアの真正性を検証することなく、Samba を解凍してインストールし、使用することはできます。けれども、Samba サーバーの決定的な重要性を考えると、通常は、ソフトウェアの真正性を検証するために必要なわずかな数のコマンドを実行したほうが得策です。検証の手順は、以下のとおりです。

  1. samba-version.tar.asc ファイルと samba-pubkey.asc ファイルがダウンロードされていることを確認します。
  2. gunzip samba-version.tar.gz と入力してパッケージ・ファイルを解凍します (untar しないこと)。
  3. Samba 公開鍵をまだ GPG 鍵リングにインポートしていない場合は、gpg --import samba-pubkey.asc と入力してインポートします。
  4. gpg --verify samba-version.tar.asc と入力して鍵を検証します。すると、プログラムが以下のようなメッセージで応答するはずです。

    gpg: Signature made Thu 07 Oct 2010 02:23:24 PM EDT using DSA key ID 6568B7EA
    gpg: Good signature from "Samba Distribution Verification Key 
    <samba-bugs@samba.org\>"

出力には、その鍵は信頼できる署名を使って証明されていない旨のメッセージが続く可能性があります。このメッセージは、上記に説明した検証手順の限界を明らかにするものです。Samba のメイン Web サイトのセキュリティーが侵害された場合、アタッカーが Samba パッケージと両方の鍵を偽のバージョンで置き換えているかもしれません。その場合、ユーザーは偽造された鍵を受け入れることになります。自衛策としてある程度の効果を期待できるのは、上記のステップ 4 で、gpg--keyserver wwwkeys.pgp.net オプションを指定することです。このオプションにより、gpg は検証プロセスの一環として wwwkeys.gpg.net から鍵を取得します。したがって、誰かが偽の Samba パッケージを配布するとしたら、Samba サーバーだけでなく、この鍵サーバーのセキュリティーも侵害しなければならないというわけです。

tarball をアンパックする

パッケージが検証手順に合格すれば (または、この手順が面倒だという場合には)、ソース・コードの tarball をアンパックしても構いません。tarball は、ホーム・ディレクトリーか、ローカルにインストールしたソフトウェアのソース・コードを保管するように意図されたディレクトリー (/usr/src/ など) にアンパックしてください。ソース・コードを /usr/src/ にアンパックする場合は、root 権限が必要になる場合があります。あるいは、一般ユーザーが /usr/src/ に書き込めるように、このディレクトリーに設定されたアクセス許可を変更してください。

いずれにしても、tarball のソース・コードの展開先とするディレクトリーのベースへと、カレント・ディレクトリーを変更して、以下のコマンドを実行します。

$ tar xvf ~/samba-version.tar

上記のコマンドは、tarball がすでに解凍されていて、ホーム・ディレクトリーのベースに配置されていることを前提とします。tarball がまだ圧縮されている場合には、解凍してからコマンドを実行するか、あるいは以下のように、tar コマンドに z を追加してファイル名を変更するという方法を使うことができます。

$ tar xvzf ~/samba-version.tar.gz

ファイルがホーム・ディレクトリーのベース以外の場所に配置されているとしたら、その場所に応じてパスを調整してください。当然ながら、ファイル名も使用するバージョンに応じて変更する必要があります。

このコマンドは、ファイルが解凍されると同時に、これらのファイルのリストを生成します。エラー・メッセージが表示された場合は、カレント・ディレクトリーへの書き込み権限がないか、ディスク・スペースが足りない可能性が考えられます。タスクが正常に完了すると、samba-version というサブディレクトリーが新規に作成されます。このディレクトリーが、Samba ソース・コードのディレクトリー・ツリーになります。


Samba のコンパイル

ソース・コードが使用できるようになったら、コンパイル・プロセスに取り掛かれますが、その前に、必要な前提条件ソフトウェアがシステムに揃っていることを確認してください。その上でソフトウェアを構成し、実際のコンパイルを始める必要があります。コンパイル前のこの準備作業では、解決しなければならない問題に突き当たる可能性もあります。

前提条件ソフトウェアをインストールする

Samba をコンパイルするには、他にもいくつものソフトウェア・パッケージを使用できるはずですが、最も注目に値するのは GCC です。GCC には、Samba の大部分を作成するために使われている C 言語用のコンパイラー・セットです。ほとんどの Linux ディストリビューションでは、その名も gcc というパッケージから GCC をインストールすることができます。もう 1 つの重要な開発ツールは、gcc とその他の開発ツールを Samba 開発者が決めたパターンで呼び出す make です。

Samba コードは、他のいくつかのライブラリー (つまり、他のプログラムが用いるサポート関数を提供するソフトウェア・パッケージ) を使用しています。これらのライブラリーはおそらくすでにコンピューターにインストールされていると思いますが、プログラムをコンパイルする際に必要なライブラリーのヘッダー・ファイルは、名前が -dev または -devel で終わる別個のパッケージにインストールされていることがよくあります。少なくとも、ディストリビューションのパッケージング・ツールを使用して libc または libc6 開発ライブラリーがインストールされていることを確認してください。一部のライブラリーは、どのような構成を選ぶかによって必要になる場合もあれば、必要でない場合もあります。見つからないライブラリーがあると、configure スクリプト (あるいは、ビルド・プロセス自体) によってエラー・メッセージが生成されるので、このエラー・メッセージから、該当するライブラリーを突き止めることができるはずです。

多くのディストリビューションは、基本的な開発ツールとライブラリー一式を 1 回の操作で簡単にまとめてインストールできるようになっています。例えば Ubuntu の場合は、build-essential パッケージをインストールすることができます。Fedora などのディストリビューションでは、オペレーティング・システムのインストール時に大量のパッケージをインストールすることができるので、オペレーティング・システムをインストールする時点でソフトウェア開発用に使用するコンピューターがわかっていれば、インストール時にそのコンピューターに関連するパッケージのグループを選択することができます。使用するオペレーティング・システムに対応するオプションが見つからない場合は、個々のパッケージをインストールして、この難局をどうにか切り抜けなければなりません。

Samba を構成する

Samba を構成するには、まずカレント・ディレクトリーをメインの Samba ソース・コード・ディレクトリー内の source3 サブディレクトリーへと変更します。このサブディレクトリーに、Samba のメイン・パッケージのソース・コードが保管されています。

注: Samba ソース・コードのメイン・ディレクトリー内にある他のサブディレクトリーに保管されているのは、補助プログラム、サポート・プログラム、ドキュメントなどのソース・コードです。例えば、client サブディレクトリーには Linux が SMB/CIFS 共有をクライアントとしてマウントできるようにするためのファイル、swat サブディレクトリーには SWAT (Samba Web Administration Tool) のソース・コードが保管されています。Samba のメイン・パッケージをビルドすると、プログラムのいくつかは自動的にコンパイルされますが、その他のプログラムについては手動でコンパイルしなければなりません。source3 サブディレクトリー内の Samba 本体をコンパイルすると、必須の smbd および nmbd サーバー・プログラムと併せ、サポート・ライブラリーと多数の関連ツールもビルドされます。

構成プロセスは、configure スクリプトが処理します。最も単純な場合には、./configure と入力すれば、デフォルトのオプションを使用して Samba を構成することができますが、Samba のコンパイル時のオプションは、かなりの数のパラメーターを使って調整することが可能です。これらのオプションのリストは、./configure --help と入力すると表示されます (スクロールに対応しないコンソールから作業している場合は、出力をファイルにリダイレクトし、less を使ってオプションのリストを詳細に調べるか、テキスト・エディターにリストを読み込んでください)。

各種の環境変数を設定することもできます。これらの環境変数についても、./configure --help の出力に詳細が記載されます。大抵はデフォルト設定で有効に機能しますが、関連するシステムについて十分に把握している場合には、ニーズに合わせてオプションを細かく調整することができます。例えば、C コンパイラー・フラグを細かく調整するには、CFLAGS 環境変数を設定することができます。環境変数について理解していない場合は、そのままにしておくのが無難です。

オプションと環境変数について十分に調べた後は、例えば以下のようにして Samba ビルドを構成することができます。

$ CFLAGS="-O3" ./configure --without-ldap

上記の例はスクリプトに対し、LDAP (Lightweight Directory Access Protocol) のサポートは使用せずに、-O3 GCC コンパイラー・フラグを使用して Samba をコンパイルするように指示しています。もちろん、これらのオプションは、インストール済み環境に合わせて変更することも、省略することもできます。

ソフトウェアをコンパイルする

ソフトウェアを実際にコンパイルするために必要な作業は、ただ単に、以下のコマンドを入力することだけです。

$ make

このコマンドを実行すると、以下のように、make ユーティリティーが行っている処理を説明する一連の行が出力されます。

Compiling lib/netapi/joindomain.c
Compiling lib/netapi/serverinfo.c
Compiling lib/netapi/getdc.c

上手く行けば、このプロセスはソフトウェアがコンパイルされるまで続きます。その所要時間はおそらく数分になるはずですが、正確な時間はコンピューターの速度次第で変わってきます。コンピューターに複数のプロセッサーまたはマルチコア・プロセッサーが搭載されているとしたら、-j オプションを使用して make を実行し、コンピューターに複数のコンパイル・ジョブを同時に実行させることで、プロセスを短時間で処理することができます。例えば、make -j 4 と入力すると、最大 4 つのソース・コード・ファイルが同時にコンパイルされることになります。ソフトウェアのコンパイルが完了したら、make install を使用してターゲットをインストールすることができます。

# make install

これまでのアクションは一般ユーザーとして実行することができますが (ただし、一般ユーザーとしてソース・コードのディレクトリー・ツリーへの書き込みアクセスできることが前提)、make install を使用するには、root 権限が必要になります。このコマンドは、Samba バイナリーとドキュメント・ファイルをコンピューター上のシステム・ディレクトリー (configure スクリプトのオプションで場所を変更しない限り、通常は /usr/local/) にコピーするためです。

問題を解決する

残念ながら、構成およびコンパイルは失敗することもあります。その最も一般的な原因は、ライブラリーが見つからないことです。構成ステップで失敗すると、出力の終わりのほうに、例えば Pluggable Authentication Module ライブラリーが見つからないなど、何らかのライブラリーが見つからないことを示すメッセージが表示されることがよくあります。その場合、Synaptic や Yumex などのシステムのパッケージ管理ツールを使用して該当するソフトウェアを探し、インストールしてください。前にも説明したように、開発ライブラリーはメイン・ライブラリー・パッケージとは別にインストールしなければならない場合があります。

make 段階でのエラーも同じような方法で対処することができますが、この場合のエラーは大抵、膨大な数のエラー・メッセージを生成します。後のほうのエラーは無視して、最初のエラー・メッセージが見つかるまでスクロールアップしてください。1 つのエラーが別のエラーを引き起こし、それがまた別のエラーの原因となることは珍しくありません。最初のエラーを修正してこの連鎖を断ち切ることで、大抵の場合はソフトウェアを正しくコンパイルできるようになります。

make のエラーを修正するには、configure のエラーを修正する場合よりも、踏み込んだ解釈が必要になるかもしれません。make のエラーは、ファイルが見つからないことや、ファイル内で不適切な構文が使われていることが原因となっている可能性があるからです。ファイルが見つからないことが問題の原因である場合、そのファイル名が手掛かりとなる可能性があるので、ディストリビューションのパッケージで拡張子を省いたファイル名を検索してみてください。そうすることで、configure でフラグを立て損なったために見つからなかった開発ライブラリーが見つかる場合があります。それでも問題を解決できない場合には、ファイル名で Web を検索すると、インストールする必要のあるライブラリーの名前がわかる可能性もあります。エラーの原因が誤った構文に関連するものである場合、問題はさらに深刻です。関連する configure スクリプトのオプションを使って機能を無効にできる場合もありますが、そうすると、C コンパイラーまたはコンパイルしようとしている Samba のバージョンをアップグレード (またはダウングレード) しなければならなくなることもあり得ます。プレリリース・バージョンのソフトウェアに取り組んでいる場合には、バグを見つけたとしても自分でパッチを当てなければなりません。この種の作業については、この記事では説明しないため、Samba 開発者または知識の豊富なプログラマーに助けを求めてください。


次回の予告

LPIC-3 の目標 311.2 (そして連載の次の記事) は、Samba をソースおよびバイナリー・パッケージからインストールする方法を対象としています。このタスクでは必然的に、Samba サーバー・プログラムの smbdnmbd を起動することになります (Web ベースの構成に対処する SWAT をはじめ、追加のサーバーが補助タスクを処理します)。

参考文献

学ぶために

製品や技術を入手するために

  • Samba Web サイトから、Samba のダウンロードおよび情報を入手できます。
  • 追加の Samba ダウンロード・オプションは、Samba Web サイトの Samba ダウロード・ページに用意されています。
  • GCC (GNU Compiler Collection) および関連するツールとライブラリーのダウンロードに関する情報は、GCC Web サイトで入手してください。
  • GNU の make ユーティリティーに関する情報およびダウンロードを入手するには、GNU make Web ページにアクセスしてください。
  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

議論するために

  • My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=659374
ArticleTitle=Linux の 302 (Mixed Environment) 試験対策: Samba を構成し、ソースからビルドする
publish-date=04142011