1.はじめに
 cloopは、Debian系の1CD Linuxとして有名なKNOPPIXのルートファイルシステムとして利用されていることで有名であるが、redhat系カーネルでの動作事例はインターネット上にあまりなく、あっても多くが古い情報である。
 今回、FedoraCore5とRHEL4にcloopしたので、その導入手順を纏める。(手順はFedoraCore5ベースで記述するが、RHEL4でもほとんど手順は同じである。)

cloopは、読み込み専用のファイルシステム

2.手順(cloopデバイスの組み込み)
(1)前提のパッケージ
 (i) カーネルソースコード
  適用するカーネルのソースコードを用意する。
   ※ディストリビューションによっては、
    カーネルのヘッダファイルが標準でインストール
    されている。(/usr/src/kenelの下など)その場合は、
    別途ソースコードをインストールする必要はない。(2007.7.21追記)

   FedoraCoreの場合は、こちらの記事を参照 -> こちら
   RHEL4の場合は、こちらの記事を参照 -> こちら

 (ii) zlib-devel(zlib開発用ライブラリ)
  zlib-develがインストールされてなければインストールする。
    ・zlib-develの確認
# rpm -q zlib-devel
    ・zlib-develがなければインストール
# yum install zlib-devel



(2)cloopソースコードの入手
 cloopのREADMEには、KNOPPIXの公式サイトの記載があるが、最新のソースコードは見当たらない。探したところ、Debianのunstableパッケージから入手が可能である。
 最新版は、"cloop-2.05~20060829"(2007.3.2現在)

 (i)Debian公式サイトへ行く
 (ii)下記順番でクリックする
  ・「Debian パッケージ」
  ・「不安定版 (unstable) ディストリビューションのパッケージを見る」
  ・「Miscellaneous」
  ・「cloop-src」パッケージを選択

 (iii)記事執筆時点の最新版(と思われる)「cloop_2.05~20060829-1.tar.gz」をダウンロード


(3)cloopのソースの展開とコンパイル&インストール
 (i)ソースコードの展開
  任意の場所(手順では/tmp)にtarのデータを展開する。
$ cd /tmp
$ tar -zxvf cloop_2.05~20060829-1.tar.gz
$ cd cloop-2.05~20060829/

 (ii)【RHEL4のみ】RHEL用にソースコードを修正
  RHELの場合、そのままではコンパイルが通らないため一部のソースを修正する。
$ vi compressed_loop.c

29行目の"REDHAT_KERNEL"のdefineのコメントをはずす。
before: 29: /* #define REDHAT_KERNEL */
after: 29: #define REDHAT_KERNEL

 (iii)【任意】cloopデバイス最大数の変更
  必要に応じて、cloopデバイスの最大数を変更する。デフォルトは、8。
$ vi compressed_loop.c

26行目の"CLOOP_MAX"の値を必要に応じ変更する。
before: 26 #define CLOOP_MAX 8
after: 26 #define CLOOP_MAX 16

 (vi)コンパイル
# make KERNEL_DIR=/usr/src/redhat/BUILD/kernel-2.6.19/linux-2.6.19.i686/
       ※KERNEL_DIR:カーネルソースコードのディレクトリ

 (v)モジュールのインストール
   kernel2.6系の場合cloop.koを使用する。
   cloop.koをカーネルライブラリのディレクトリにコピーし、
   モジュールの依存関係をチェックするする。
# mkdir -p /lib/modules/`uname -r`/misc && \
   cp cloop.ko /lib/modules/`uname -r`/misc;

# depmod -a

(4)cloopモジュールの組み込みテスト
 正常にcloopが組み込めるか確認する。
 (i)モジュール情報の確認
   cloopのモジュール情報が出力されることを確認
# modinfo cloop
filename: /lib/modules/2.6.19-1.2288.2.1.fc5/misc/cloop.ko
description: Transparently decompressing loopback block device
author: Klaus Knopper (Kernel 2.4 and up, Knoppix version), Paul Russel (initial version)
<以下略>

 (ii)モジュールの組み込みテスト
   モジュールの組み込み可否を確認する。
# modprobe cloop
# lsmod|grep cloop
cloop 15264 0 <-表示されることを確認

 (iii)cloopデバイスの確認。
    udev機能により、cloopモジュール組み込みときcloopデバイスが自動的に生成される。
    cloopデバイスの有無を確認する。
# ls /dev/cloop*
/dev/cloop0 ・・・ <-表示されることを確認

(5)cloop関連コマンドのコピー
 create_compressed_fsとextract_compressed_fs(cloopソースコード内に梱包)をコピーする。
# install -m0755 create_compressed_fs /usr/local/bin/
# install -m0755 extract_compressed_fs /usr/local/bin/


3.手順(cloopファイルの作成とマウント)
(1)cloopファイルシステムの作成
 下記コマンドで、cloopファイルシステムにしたいデータがあるディレクトリをcloopのフォーマットに変換する。
# mkisofs -r datadir | \
create_compressed_fs - 65536 > datadir.iso.compressed ;

datadir : 対象データのディレクトリ名
datadir.iso.compressed : cloopフォーマットのファイル名

(2)ファイルシステムのマウント
 (i) cloopファイルをcloopデバイスにバインドする
   下記コマンドで、生成したcloopファイルとcloopのデバイスをくくりつける。
<例:cloop0デバイスに、iso.compressedファイルを括り付ける>
# losetup /dev/cloop0 /tmp/datadir.iso.compressed

 (ii) cloopをマウントする
   ファイルシステムをマウントする。
# mount -o ro -t whatever /dev/cloop0 /mnt/compressed


※OS起動停止時のcloopファイルシステムの自動マウント・アンマウントシェル(rcシェル)はこちらを参照→ 【Fedora/RHEL】cloop自動マウント用rcスクリプト

−参考資料−
Landscape : Linuxの圧縮ファイルシステム
knoppix.net : KNOPPIXドキュメント(情報古いです)
Network Project 3.0: KNOPPIX-5.0.1のカーネルを2.6.19に差し替える
Knoppix Temporary Directory : cloopについての覚え書き
RHELでは、redhat社が提供するバイナリ以外はサポート対象外となります。

cloopはユーザがソースコードからビルドしているため当然RHELのサポート対象外ですが、場合によっては未サポートのcloopドライバを組み込んだ環境自体もサポート対象外となる恐れがあります。

Posted by: |
22:56[ edit ]
post a comment













管理者にだけ表示を許可する