maehachi08 Anything Blog

2012年04月17日
Cobblerで自前yumレポジトリ構築

Cobblerで自前yumレポジトリ構築

以前、CobblerでOSインストール自動化環境構築でCobblerのインストールから最低限のキックスタートインストールが動作する設定までを紹介しました。
しかし、前回の設定ではOSインストールメディアに含まれるパッケージしかインストールパッケージとしてksファイルに指定できない状態です。
実際には様々な運用ツールや自前ツールなどをRPMパッケージ化したものをCobblerで入れれたら便利だと思います。

しかし、CobblerはあくまでOSをデプロイすることに集中すべきであり、パッケージのインストールは近々記事にする予定のPuppetで管理したほうが良いと思います。
それでもCobblerでインストールしたいパッケージとは何があるのでしょうか。
1つはbonnie++などのディスクエージング/ベンチマークツールだろう。
ディスクベンチマークはOSインストール直後、出来るだけ早い段階で実施できるのが望ましいだろう!
せっかくあれこれインストール&設定したところでディスクが壊れそうな兆候だったら嫌やん!!
まぁ、ディスクに限らず、ハードウェアが健康かどうかを見極めるのは早い目がいいだろう。yumやPuppetでパッケージをインストールしようとするとyumレポジトリを設定してネットワーク周りの設定して。。。色々作業に時間をかけた結果、ディスクの予防交換になったら構築時間の無駄やし、2度手間になるでしょう。

だったらCobblerで入れたいよね?
ってことで、OSインストールメディアに入っていないパッケージをインストールするために、自前yumレポジトリをCobblerで構築したいと思います。

Cobblerで構築可能な自前yumレポジトリについて

自前yumレポジトリをCobblerで構築する場合、以下の2つのパターンから構築を検討します。

  • 他のyumレポジトリサイトのミラーサイト
  • 好きなパッケージを管理するオリジナルのyumレポジトリサイト

オリジナルのyumレポジトリ構築

今回は必要なパッケージのみ持つオリジナルのyumレポジトリを構築します。

まず、yumレポジトリの基点となるディレクトリを作成します。

# mkdir -p /var/www/html/pachi-repo/RPMS

yumレポジトリの基点となるディレクトリにRPMパッケージを配置します。今回はbonnie++をwgetコマンドでダウンロードして配置したいと思います。

# cd /var/www/html/pachi-repo/RPMS/

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/bonnie++-1.96-2.el6.x86_64.rpm
--2012-03-26 10:07:26-- http://dl.fedoraproject.org/pub/epel/6/x86_64/bonnie++-1.96-2.el6.x86_64.rpm
dl.fedoraproject.org をDNSに問いあわせています... 209.132.181.23, 209.132.181.24, 209.132.181.25, ...
dl.fedoraproject.org|209.132.181.23|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 68348 (67K) [application/x-rpm]
`bonnie++-1.96-2.el6.x86_64.rpm' に保存中

100%[===============================================================================================================>] 68,348 237K/s 時間 0.3s

2012-03-26 10:07:26 (237 KB/s) - `bonnie++-1.96-2.el6.x86_64.rpm' へ保存完了 [68348/68348]

普通にyumレポジトリを構築する場合はここでcreaterepoコマンドを実行するのだが、
後述するcobbler reposyncコマンドがcreaterepoコマンドを自動的に実行するので
ここでは実行しません。

yumレポジトリをcobblerに登録します。

# cobbler repo add --name="pachi-repo" --mirror=/var/www/html/pachi-repo

# cobbler repo report --name="pachi-repo"
Name : pachi-repo
Arch :
Breed : rsync
Comment :
Createrepo Flags : <>
Environment Variables : {}
Keep Updated : True
Mirror : /var/www/html/pachi-repo
Mirror locally : True
Owners : ['admin']
Priority : 99
RPM List : []
Yum Options : {}

cobbler reposyncコマンドでApacheで公開されているディレクトリにコピーされて、
自動的にcreaterepoコマンドが実行されます。

# cobbler reposync
task started: 2012-03-26_112416_reposync
task started (id=Reposync, time=Mon Mar 26 11:24:16 2012)
hello, reposync
run, reposync, run!
running: rsync -rltDv --delete --exclude-from=/etc/cobbler/rsync.exclude /var/www/html/pachi-repo/ /var/www/cobbler/repo_mirror/pachi-repo
received on stdout: sending incremental file list
./
RPMS/
RPMS/bonnie++-1.96-2.el6.x86_64.rpm
RPMS/repodata/
RPMS/repodata/filelists.xml.gz
RPMS/repodata/other.xml.gz
RPMS/repodata/primary.xml.gz
RPMS/repodata/repomd.xml

sent 72594 bytes received 118 bytes 145424.00 bytes/sec
total size is 72157 speedup is 0.99

received on stderr:
running: createrepo -c cache -s sha /var/www/cobbler/repo_mirror/pachi-repo
1/1 - RPMS/bonnie++-1.96-2.el6.x86_64.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata

received on stderr:
creating: /var/www/cobbler/repo_mirror/pachi-repo/config.repo
running: chown -R root:apache /var/www/cobbler/repo_mirror/pachi-repo
received on stdout:
received on stderr:
running: chmod -R 755 /var/www/cobbler/repo_mirror/pachi-repo
received on stdout:
received on stderr:
*** TASK COMPLETE ***

プロファイルのrepo設定に構築したyumレポジトリを登録してみましょう。
既存プロファイルの設定編集はcobbler profile edit --[項目名]="[値]" --name="[編集したいプロファイル名]"で行います。

# cobbler profile edit --repo=pachi-repo --name=CEMTOS62-x86_64

# cobbler profile report --name=CEMTOS62-x86_64
Name : CEMTOS62-x86_64
Comment :
DHCP Tag : default
Distribution : CEMTOS62-x86_64
Enable PXE Menu? : 1
Kernel Options : {}
Kernel Options (Post Install) : {}
Kickstart : /var/lib/cobbler/kickstarts/sample.ks
Kickstart Metadata : {}
Management Classes : []
Name Servers : []
Name Servers Search Path : []
Owners : ['admin']
Parent Profile :
Red Hat Management Key : <>
Red Hat Management Server : <>
Repos : ['pachi-repo']
Server Override : <>
Template Files : {}
Virt Auto Boot : 1
Virt Bridge : xenbr0
Virt CPUs : 1
Virt File Size(GB) : 5
Virt Path :
Virt RAM (MB) : 512
Virt Type : qemu

ksファイルへのインストールパッケージ追加

さて、自前yumレポジトリ構築もprofileのrepo設定への追加も行いました。
あとは、キックスタートで自前yumレポジトリに入っているパッケージがインストールされるように設定するだけです。ここではbonnie++がインストールされるように設定します(というか、現時点では自前yumレポジトリにはbonnie++しか入れてませんし)。

実際の設定に入る前に、CobblerでOSインストールする際の設定ポイントをおさらいしましょう。
インストール対象マシンとCobblerを紐付けるのはsystemという概念です。システムでは設定するホスト名やPXEを受け付けるMACアドレス、どのprofileが適用されるかなどが設定されています。もし、適用したいprofileが異なる場合はsystem addの際に変えるか、system editで変更することになります。profileはインストールOSに関する設定定義を持つ概念です。インストールOSを定義するdistribution定義を持ち、キックスタート中にanacondaブートローダーが読み込む設定情報であるksファイルのパスなどが含まれます。この中でOSインストール中に適用されるパッケージやパッケージグループなどの定義はksファイルに行います。ksファイルの中に%packagesという記載があるのですが、その下にインストールされるパッケージやパッケージグループ定義があります。その中にbonnie++という行を追記するればいいのです。

修正すべきksファイルはcobbler profile reportコマンドで確認します。
# cobbler profile report --name=CEMTOS62-x86_64 | grep ^Kickstart
Kickstart : /var/lib/cobbler/kickstarts/sample.ks

/var/lib/cobbler/kickstarts/sample.ksを修正します。
# vi /var/lib/cobbler/kickstarts/sample.ks
%packages
$SNIPPET('func_install_if_enabled')
$SNIPPET('puppet_install_if_enabled')
bonnie++

cobbler設定変更を反映します。
# cobbler sync
task started: 2012-03-26_113158_sync
task started (id=Sync, time=Mon Mar 26 11:31:58 2012)
running pre-sync triggers
cleaning trees
removing: /var/www/cobbler/images/CEMTOS62-x86_64
removing: /var/lib/tftpboot/pxelinux.cfg/01-00-0c-29-d1-96-21
removing: /var/lib/tftpboot/pxelinux.cfg/default
removing: /var/lib/tftpboot/grub/images
removing: /var/lib/tftpboot/grub/grub-x86_64.efi
removing: /var/lib/tftpboot/grub/efidefault
removing: /var/lib/tftpboot/grub/grub-x86.efi
removing: /var/lib/tftpboot/grub/01-00-0C-29-D1-96-21
removing: /var/lib/tftpboot/images/CEMTOS62-x86_64
removing: /var/lib/tftpboot/s390x/profile_list
copying bootloaders
trying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi
trying hardlink /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
copying distros
copying files for distro: CEMTOS62-x86_64
trying hardlink /var/www/cobbler/ks_mirror/CEMTOS62-x86_64/images/pxeboot/vmlinuz -> /var/lib/tftpboot/images/CEMTOS62-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CEMTOS62-x86_64/images/pxeboot/initrd.img -> /var/lib/tftpboot/images/CEMTOS62-x86_64/initrd.img
trying hardlink /var/www/cobbler/ks_mirror/CEMTOS62-x86_64/images/pxeboot/vmlinuz -> /var/www/cobbler/images/CEMTOS62-x86_64/vmlinuz
trying hardlink /var/www/cobbler/ks_mirror/CEMTOS62-x86_64/images/pxeboot/initrd.img -> /var/www/cobbler/images/CEMTOS62-x86_64/initrd.img
copying images
generating PXE configuration files
generating: /var/lib/tftpboot/pxelinux.cfg/01-00-0c-29-d1-96-21
generating: /var/lib/tftpboot/grub/01-00-0C-29-D1-96-21
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
cleaning link caches
generating PXE menu structure
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout:
received on stderr:
running: /etc/rc.d/init.d/dhcpd restart
received on stdout: dhcpd を停止中: [ OK ]
dhcpd を起動中: [ OK ]

received on stderr:
running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***

このprofileを指定したsystemを1つ定義してインストールしてみてください。
インストール直後からbonnie++コマンドが使えるようになり、詳細なディスクベンチマークを取得することが可能なはずです。

インストールOSがCentOS4の場合

私が試した結果、cobblerのprofileにあるrepo設定はCentOS4のanacondaではうまく認識できないようです。
おそらく、profileのrepo定義をanacondaのrepoオプションにうまく渡せていないのだと思います。
この現象はCentOS5では発生しなかったので、CentOS4のanacondaバージョンのバグか何かなのだと思います。