Building a custom CentOS 6 kickstart disc, part 2

http://smorgasbork.com/component/content/article/35-linux/129-building-a-custom-centos-6-kickstart-disc-part-2

  1. 1回、あなたがkickstartディスクに入れようとしているパッケージを決めて、全て引き出します。
  2. どのRPMが必要でしょうか。少なくとも、@coreと@baseパッケージグループは含めるとすると、それらのグループに含まれる全てのRPMが必要になります。
  3. RPMのリストを取得する一つの方法はcomps.xmlファイルのcoreとbaseグループを見ることです。
  4. XMLは以下のようになっています。
      <group>
        <id>core</id>
        <name>Core</name>
        ...
        <packagelist>
          <packagereq type="default">Deployment_Guide-en-US</packagereq>
          <packagereq type="mandatory">SysVinit</packagereq>
          <packagereq type="mandatory">authconfig</packagereq>
          <packagereq type="mandatory">basesystem</packagereq>
          <packagereq type="mandatory">bash</packagereq>
          <packagereq type="mandatory">centos-release</packagereq>
          <packagereq type="mandatory">coreutils</packagereq>
          <packagereq type="mandatory">cpio</packagereq>
          ... 
        </packagelist>
      </group>
  5. 最低限、baseとcoreグループの全てのパッケージが必要です。<group>タグ内に含まれる<packagereq type=“mandatory”>と <packagereq type=“default”>のエントリを見てください。これは取得するパッケージを示しています。これらのパッケージ名はRPMファイルの名前に対応しています。
  6. より簡単に作るために、comps.xmlを解析してbaseとcoreグループの非オプションパッケージ同梱するスクリプトを作りました。parse_comps.plをダウンロードして、~/kickstart_build/utilsディレクトリに保存してください。
  7. parse_comps.plを実行する前に、perlライブラリをインストールする必要があります。
    cd ~/kickstart_build/all_rpms
    sudo rpm -Uvh \
     perl-Compress-Raw-Zlib-2.023-119.el6.x86_64.rpm \
     perl-Compress-Zlib-2.020-119.el6.x86_64.rpm \
     perl-HTML-Parser-3.64-2.el6.x86_64.rpm \
     perl-HTML-Tagset-3.20-4.el6.noarch.rpm \
     perl-IO-Compress-Base-2.020-119.el6.x86_64.rpm \
     perl-IO-Compress-Zlib-2.020-119.el6.x86_64.rpm \
     perl-libwww-perl-5.833-2.el6.noarch.rpm \
     perl-URI-1.40-2.el6.noarch.rpm \
     perl-XML-Parser-2.36-7.el6.x86_64.rpm \
     perl-XML-Simple-2.18-6.el6.noarch.rpm 
    sudo rpm -Uvh \
     perl-Compress-Raw-Zlib-2.020-127.el6.x86_64.rpm \
     perl-Compress-Zlib-2.020-127.el6.x86_64.rpm \
     perl-HTML-Parser-3.64-2.el6.x86_64.rpm \
     perl-HTML-Tagset-3.20-4.el6.noarch.rpm \
     perl-IO-Compress-Base-2.020-127.el6.x86_64.rpm \
     perl-IO-Compress-Zlib-2.020-127.el6.x86_64.rpm \
     perl-libwww-perl-5.833-2.el6.noarch.rpm \
     perl-URI-1.40-2.el6.noarch.rpm \
     perl-XML-Parser-2.36-7.el6.x86_64.rpm \
     perl-XML-Simple-2.18-6.el6.noarch.rpm
  8. 以下のようにして実行します。
    cd ~/kickstart_build/isolinux/Packages
    ~/kickstart_build/utils/parse_comps.pl ~/kickstart_build/comps.xml ~/kickstart_build/all_rpms x86_64
この項はcoreとbaseの構成のみ作る場合です。他のパッケージが必要な場合は、手動でインストールした後に/root/install.logをみてインストールされたRPMパッケージを全てコピーするのが簡単です。
  1. baseとcoreに含まれていないRPM(例: httpd,php,mysql)を追加したい場合は、このタイミングで~/kickstart_build/isolinux/Packagesディレクトリにコピーします。
  1. この時点で~/kickstart_build/isolinux/PackagesディレクトリにあるbaseとcoreのRPMは、他に追加したRPMも含めて多くは依存関係が欠落している。次のステップでこれらのパッケージの依存関係を解決し、ディレクトリに配置することになります。以下の手順でfollow_deps.plのスクリプトを使うことができます。
    cd ~/kickstart_build/isolinux/Packages
    ~/kickstart_build/utils/follow_deps.pl ~/kickstart_build/all_rpms x86_64
  1. RPMセットの準備ができたら、依存関係のテストを行う必要があります。
  2. 各RPMはインストールするために他のRPMが既にインストールされている必要があります。
  3. 各RPMの依存関係がRPMセットの中に含まれている場合は、全ての依存関係は解決されます。
  4. 依存関係がないRPMがない状態にすることが目的です。
  5. 依存関係のテストを行うためには以下のコマンドを実行します
    mkdir /tmp/testdb
    rpm --initdb --dbpath /tmp/testdb
    rpm --test --dbpath /tmp/testdb -Uvh *.rpm
  6. 未解決の依存関係を(ほぼ確実に発生します)を持って発見した場合は、以下の二つのうちのいずれかを実行します。
    1. 未解決の依存関係のRPMを削除(例:使わないのであればサーバクラスのインストール上のX Windows)
    2. 依存関係を解決するRPMを見つける
  7. ここで、パッケージを消すべきかどうか少し知っている必要があります。明示的にbaseとcoreグループに追加したものであれば、おそらく依存関係を見つけて追加した方が良いです。RPMが不要(例:ワイルドカードにマッチしたもの)であれば、除外して構いません。
  1. follow_deps.plスクリプトは自動的に依存関係を取得するはずだが、独自のRPMを追加した場合などそれができなかった場合は、手動で依存関係を解決します。
  2. 依存関係を満たすRPMを見つけることは簡単にできます。たまにRPMの名前と記載されている依存関係が一致しないことがあります。例えば、以下のように
    /usr/bin/strip is needed by redhat-lsb-3.1-12.3.EL.el5.centos.x86_64
  3. /usr/bin/stripはbinutilsによって提供されています。
  4. どうしても依存関係がわからないRPMがある場合は、RPMのクエリを使ってパッケージを調べることができます。
    rpm -q --whatprovides /usr/bin/strip
  5. これは反則的なやり方です。
  6. 依存関係が全て解決されるように調整されたRPMコレクションをビルドするために時間を費やす覚悟をしてください。

補足

http://ken-etsu-tech.blogspot.jp/2008/01/anaconda-kickstartpost.html

%post
exec < /dev/tty3 > /dev/tty3
/usr/bin/chvt 3

~略~

/usr/bin/chvt 1
%end