限定された (restricted) bin 配布ファイル作成方法

					作成	小金丸信幸
					E-Mail:	kogane@koganemaru.co.jp
				07版	修正日	平成19年(2007年)05月06日 (日)

1. はじめに
    Linux には色々なディストリビューションがあります。FreeBSD は単一のディ
    ストリビューションが特徴の一つでもありますが、FreeBSD が使われる場面は
    個々の環境によって異なっています。例えば、ファイアウォールや Web サー
    バーを動かしている環境では、C コンパイラやアセンブラ、ローダーは不要で
    す。そして、クラッカーに侵入された場合、それらのコマンドがあるほうがセ
    キュリティ上より危険になります。

    標準の FreeBSD 配布ファイルからプログラム開発用のコマンドを削除して、
    新しい base 配布ファイルを作成できるツールを作成しました。これにより、
    base 配布ファイルの容量が少なくなり、容量が少ない HDD (ハードディスク)
    にインストールすることも可能になります。

    インストールには作成した base 配布ファイルを標準の base 配布ファイルと
    置き換えてインストールします。標準のインストーラや私が作成した日本語イ
    ンストーラなどでもでインストールできます。

    プログラム開発用コマンドだけでなく、環境によって不要なコマンドを削除し
    たり追加した base 配布ファイルも作成できます。もちろんウィルス入りの配
    布ファイルも作成できますので、自分で作成する場合以外は信頼のある作成者
    の配布ファイルのみインストールするように心がけてください。

    例えば、ファイアウォール用のカーネルには options IPFIREWALL, options
    IPDIVERT などのオプションを追加したカーネルを作成する必要があります。
    base 配布ファイルを作成する前に kernel.GENERIC を置き換えれば、ファイ
    アウォール専用の配布ファイルが作成できます。

2. 準備
     1) 標準の FreeBSD 配布ファイルが必要です。
        base 配布ファイル等の利用するファイルのみでも可能です。
     2) 配布ファイルを作成するために、/usr/src/release/script に含まれるの
	シェル手続きを使用しますので、これらのファイルを適当なディレクトリ
	に置いておく必要があります。
     3) 配布ファイルを展開できるディレクトリと新規作成する限定された配布フ
	ァイルを格納できる容量の作業用ディレクトリが必要です。
     4) RBIN.6.2.yymmdd.tar.gz 作成ツール
	yymmdd は日付になっています。
	次のファイルが含まれています。
	RBIN.Tree.sh	配布ファイルを trees ディレクトリに展開するシェル
	                手続き
	RBIN.Rm.sh	不要なファイルを削除するシェル手続き
	RBIN.Dist.sh	配布ファイル等作成シェル手続き
	README		本ファイル
	BASE_RM_FILES	base 削除ファイル一覧ファイル

3. 作成方法
	次のコマンドを順に実行します。

3.1. base リリース配布ファイルを trees ディレクトリに展開

	次の RBIN.Tree.sh を実行します。

	使用法: RBIN.Tree.sh [-v] [-d base] [-n base] release_dir work_dir
	-v              展開するファイルを表示します。
	-d base		配布ファイル名を指定します。省略した場合は base と
			なります。
	-n base		配布ファイル中のファイル名を指定します。省略した場
			合は -d オプションと同様となります。
			配布ファイルと配布ファイル中のファイル名が異なる場
			合に指定します。例えば 4.X-RELEASE の crypto 配布
			ファイル中の krb4, krb5 等のファイル名の場合指定し
			ます。
	release_dir     リリース配布ファイルのディレクトリを指定します。
			/dsk2/6.2-RELEASE/base に base 配布ファイルがあれば
			/dsk2/6.2-RELEASE を指定します。
	work_dir        作業ディレクトリ。このディレクトリ名は後の作業のた
			めに $HOME/.rbin.rc に書き込まれます。

	例:
		# RBIN.Tree.sh /dsk2/6.2-RELEASE /dsk1/work

	/dsk1/work/trees/base に base 配布ファイルが展開されます。

	作業ディレクトリ名は続くコマンドで参照するために $HOME/.rbin.rc に
	保存されます。

	4.X-RELEASE では base 配布ファイルでなく bin 配布ファイルとなります。

	例:
		# RBIN.Tree.sh -d bin /dsk2/4.11-RELEASE /dsk1/work

	例:
		# RBIN.Tree.sh -d crypto /dsk2/4.11-RELEASE /dsk1/work

	これで、4.X-RELEASE の crypto 配布ファイルも展開されます。

	後に実行する RBIN.Dist.sh では /usr/src/release ディレクトリ下のフ
	ァイルを使用します。このディレクトリが無ければ、次のようにして作成
	することができます。

	例:
		# RBIN.Tree.sh -d src -n srelease /dsk2/6.2-RELEASE /dsk1/work

	上記の例の場合、RBIN.Dist.sh の引数には -s /dsk1/work/src を指定します。

3.2. trees ディレクトリから不要なファイルを削除

	次の RBIN.Rm.sh を実行します。

	使用法: RBIN.Rm.sh [-v] [-d base] [-n base] [work_dir] <remove_files_list
	-v              削除するファイル名を表示します。
	-d base		配布ファイル名を指定します。省略した場合は base と
			なります。
	-n base		配布ファイル中のファイル名を指定します。省略した場
			合は -d オプションと同様となります。
			配布ファイルと配布ファイル中のファイル名が異なる場
			合に指定します。例えば 4.X-RELEASE の crypto 配布
			ファイル中の krb4, krb5 等のファイル名の場合指定し
			ます。
	work_dir        作業ディレクトリ。(省略可)
	remove_files_list 標準入力で削除するファイルの一覧を指定します。

	例:
		# RBIN.Rm.sh -v <BASE_RM_FILES

	添付している BASE_RM_FILES にはプログラム開発用コマンドのファイル
	一覧が含まれています。

3.3. /usr/src/release ファイルを準備する

	次の RBIN.Dist.sh を実行する前に RBIN.Dist.sh の中で参照される
	release 用のシェル手続きを準備する必要があります。
	上記の RBIN.Tree.sh を使用する方法もありますが、標準の /usr/src に
	ファイルを展開する方法です。
	src 配布ファイルの srelease ファイルから展開します。

	例:
		# cd /dsk2/6.2-RELEASE/src
		# sh install.sh release

	これで /usr/src/release の下にファイルが展開されます。

3.4. trees ディレクトリから限定された base 配布ファイルを作成

	次の RBIN.Dist.sh を実行します。

	使用法: RBIN.Dist.sh [-654] [-d base] [-n base] [-s src_dir] [work_dir]
	-6		配布ファイルのサイズは 6.X-RELEASE と同様のサイズ
			となります。6.X-RELEASE で実行した場合の省略値はこ
			のサイズとなります。省略時はこのサイズとなります。
			チェックサムとして CHECKSUM.MD5 と CHECKSUM.SHA256
			を出力します。
	-5		-6 と同様です。
	-4		配布ファイルのサイズは 4.X-RELEASE と同様のサイズ
			となります。チェックサムとして CHECKSUM.MD5 のみを
			出力します。
	-d base		配布ファイル名を指定します。省略した場合は base と
			なります。
	-n base		配布ファイル中のファイル名を指定します。省略した場
			合は -d オプションと同様となります。
			配布ファイルと配布ファイル中のファイル名が異なる場
			合に指定します。例えば 4.X-RELEASE の crypto 配布
			ファイル中の krb4, krb5 等のファイル名の場合指定し
			ます。
	src_dir		release ディレクトリが存在するソースディレクトリを
			指定します。/usr/src/release があるなら、/usr/src
			を指定します。省略した場合は /usr/src となります。
	work_dir        作業ディレクトリ。(省略可)

	例:
		# RBIN.Dist.sh

	これで、/dsk1/work/dist/base に base 配布ファイルが作成されます。

	例:
		# RBIN.Dist.sh -d crypto

	4.X-RELEASE の場合、これで、/dsk1/work/dist/crypto に crypto 配布
	ファイルが作成されます。

3.5. 配布ファイルの置き換え
	ファイアウォール用のカーネルに置き換える場合は、/usr/src/sys/i386/conf
	の GENERIC ファイルに次のように options を追加します。
	これは 6.2-RELEASE の場合です。

--- GENERIC.orig	Sun Jun 27 02:50:14 2004
+++ GENERIC	Thu Sep  9 00:18:16 2004
@@ -60,6 +60,11 @@
 options 	AHD_REG_PRETTY_PRINT	# Print register bitfields in debug 
 					# output.  Adds ~215k to driver.
 
+options 	IPFIREWALL		#firewall
+options 	IPFIREWALL_VERBOSE	#enable logging to syslogd(8)
+options 	IPFIREWALL_VERBOSE_LIMIT=100	#limit verbosity
+options 	IPDIVERT		#divert sockets
+
 # To make an SMP kernel, the next two are needed
 #options 	SMP			# Symmetric MultiProcessor Kernel
 #options 	APIC_IO			# Symmetric (APIC) I/O

	RBIN.Dist.sh コマンドを実行する前に次の作業を行います。

	# /usr/src/sys/i386/conf

	GENERIC ファイルを修正します。

	# config GENERIC
	4.X-RELEASE の場合。
	# cd /usr/src/sys/compile/GENERIC
	5.X-RELEASE, 6.X-RELEASE の場合。
	# cd /usr/src/sys/i386/compile/GENERIC
	# make depend ; make
	を実行します。

	6.X-RELEASE の場合は次のようにインストールを行います。
	# setenv NO_MAN		<- sh の場合は # export NO_MAN
	# make DESTDIR=/dsk1/work/trees/kernels install
	を実行します。
	/dsk1/work/trees/kernels には boot/kernel が作成されますので、
	/dsk1/work/trees/kernels/GENERIC に名前を変えます。
	# cd /dsk1/work/trees/kernels
	# mv boot/kernel GENERIC
	# rmdir boot

	5.X-RELEASE の場合は次のようにインストールを行います。
	# setenv NO_MAN		<- sh の場合は # export NO_MAN
	# make DESTDIR=/dsk1/work/trees/base install
	を実行します。

	そして、4.X-RELEASE の場合は
	# setenv NOMAN		<- sh の場合は # export NOMAN
	# make DESTDIR=/dsk1/work/trees/bin install
	# cd /dsk1/work/trees/bin
	# chflags noschg kernel
	# mv kernel kernel.GENERIC
	# rm -r modules.old
	を実行します。

4. その他
	6.2-RELEASE の場合 base 配布ファイルを展開すると du コマンドで
	118.278M バイトになりますが、BASE_RM_FILES で指定されたファイルを削
	除すると 67.570M バイトとなり、50.708M バイトが削減できます。

5. 改版履歴
	01版	作成日	平成15年(2003年)07月08日 (火)
	02版	修正日	平成15年(2003年)07月10日 (木)
		crypto 配布ファイル等他の配布ファイルも処理できるようにした。
	03版	修正日	平成15年(2003年)07月13日 (日)
		説明の誤りを訂正。RBIN.Dist.sh を 5.X-RELEASE に対応しまし
		た。
	04版	修正日	平成15年(2003年)11月09日 (日)
		FreeBSD 4.9-RELEASE に対応した。
	05版	修正日	平成16年(2004年)09月08日 (水)
		「/usr/src/release ファイルを準備する」の項目を追加。
		FreeBSD 4.10-RELEASE, 5.3-RELEASE に対応した。
	06版	修正日	平成16年(2004年)11月09日 (火)
		「 3.5. 配布ファイルの置き換え」部分の kernel の置き換え
		操作が 5.X-RELEASE では不要なことを追加。
	07版	修正日	平成19年(2007年)05月06日 (日)
		6.X-RELEASE 対応に修正した。

以上.
--
	Copyright (C) 2003-2007 (有)小金丸コンピュータエンジニアリングサービス
	Copyright (C) 2003-2007, N. Koganemaru