|
|
- Welcome to
Hiroshi's Home Page - |
|
|
|
||
|
||
|
▼ ▼ ▼ |
||
|
||
|
▼ ▼ ▼ |
||
|
||
|
▼ ▼ ▼ |
||
|
||
zlibとmodutils…
はじめに
コンパクトなLinuxを作りたかったため、参考にSlackware 8.0をインストールしてみました。
RedHat 7.2を、カスタムで何も選択しない状態でインストールすると、ディスクを約200M程度使用しますが、Slackware 8.0のA(Base Linux System)とN(Networking)の必要なパッケージのみを選択した場合、約66M程度となります。
この差は、ドキュメントが最小限に抑えられていることや、不要なパッケージが入らないこと(多機能のために他のパッケージに依存しているものが多いので、芋づる式に入ってしまう)、それとカーネルのモジュールが圧縮されていることにあるようです。
今回は、最後の部分である、圧縮されてカーネルモジュールのサポートについて調べてみました。
modutilsの調査
圧縮されたモジュールのままmodprobeできることから、このあたりにヒントが隠されているようなので、Slackwareのソースからmodutilsに関する部分を拾ってきます。
パッケージ作成には、SlackBuildを使用するので、ここを調査します。
気になる点が2点、1点目は、パッチをあてている部分
と、2点目は、コンフィグレーションする部分# Do not link with a dynamic libz, as this may not be on the root partition: zcat $CWD/modutils.staticlibz.diff.gz | patch -p1 --verbose --backup -E./configure i386-slackware-linux --enable-zlib # --enable-compat-2-0 --enable-kerneldです。
modutils自体が、zlibによる圧縮をサポートさせるためには、configure時に--enable-zlibを付けてやればいいことがわかりました。
前者のパッチは、zlibのリンク方法を、共有ライブラリの使用(-lz)から静的リンク(/usr/lib/libz.a)に変更しているようです。
これは、通常、zlibが/usr/libにあるため、起動時に/usrをmountする前に(/と/usrを別にしている場合等)、モジュールが必要になると、不都合が起きるためでしょう。
モジュールの圧縮
それぞれのモジュールを圧縮するには、ごく普通にgzipで、gzip -9 <モジュール名> を使用します。
圧縮後はdepmodを使用し、依存関係を更新する必要があります。全てについて行う場合は、depmod -a です。
まとめ
zlibを静的リンクしたmodutilsのオブジェクトは、それぞれ60K程度大きくなります。
もし、zlibを/libに移動することで、解決するのであれば、共有ライブラリを使用するのがいいかもしれません。
多くの機能をモジュール化している場合(RedHatのカーネル等)は、モジュールだけでも20Mを越えることがあります。
この機能を用いることにより、半分程度に抑えることが可能でした。
なお、Slackware 8.0インストール時にmenuモードで選択したものは、以下の通りです。
i245 - Linux 2.4.5 no SCSI kbd - Change keyboard mappings and console fonts pcmcia - PCMCIA card services support zoneinfo - Configure your time zone dhcp DHCP - client and server utilities ipchains - Firewall configuration utility for 2.2 iptables - Firewall configuration utility for 2.4 ppp - Point-to-point protocol tcpip1 - TCP/IP networking programs
(2002/02/04)
|
||
|
▲ ▲ ▲ |
||
|
||
|
▲ ▲ ▲ |
||
|
||
|
▲ ▲ ▲ |
||
|
||
|
|
||
|
(c) Copyright 1998-2002 Hiroshi OHNO All
right reserved. |
||