runit によるユーザ権限でのデーモン化
はじめに
ネタがなかったのでずっと更新してなかったのですが、久しぶりにブログ更新します。
今回はユーザ権限によるプログラムのデーモン化をrunitを使って試したのでそれをまとめようと思います。
今まで仕事でdaemontoolsを使うことが多かったのですがroot権限でservice登録する必要があり(私が回避方法を知らないだけかもしれませんが。。。)、runスクリプトを変更した際に毎回rootになる必要があって不便だと思っていました。
そこで最近runitというものがあることを知り調べて実際に使ってみたのでそれをまとめます。
適当なサンプルプログラムを作るのも味気ないので IRC proxy で有名な tiarra をrunit管理下においてデーモン化してみたいと思います。
tiarraのインストール・設定
まずさっそくですが tiarra 本体をインストールします。
私の環境が Debian lenny なので今回は Debian lenny 環境において話を進めます。
nhayashi@deb1:~$ mkdir deb && cd deb nhayashi@deb1:~/deb$ wget http://hanzubon.jp/Linux/Debian/sid/tiarra/tiarra_0.20100922.orig.tar.gz nhayashi@deb1:~/deb$ wget http://hanzubon.jp/Linux/Debian/sid/tiarra/tiarra_0.20100922-1.diff.gz nhayashi@deb1:~/deb$ tar zxvf tiarra_0.20100922.orig.tar.gz nhayashi@deb1:~/deb$ cd tiarra-0.20100922/ nhayashi@deb1:~/deb/tiarra-0.20100922$ zcat ../tiarra_0.20100922-1.diff.gz | patch -p1 nhayashi@deb1:~/deb/tiarra-0.20100922$ debuild -rfakeroot -uc -us nhayashi@deb1:~/deb/tiarra-0.20100922$ cd ../ nhayashi@deb1:~/deb$ sudo dpkg -i tiarra_0.20100922-1_all.deb
次に tiarra の設定をしておきます。tiarra の設定は各自お好みの設定でお願いします。
nhayashi@deb1:~$ cd nhayashi@deb1:~$ mkdir .tiarra nhayashi@deb1:~$ zcat /usr/share/doc/tiarra/examples/sample.conf.gz > .tiarra/tiarra.conf nhayashi@deb1:~$ tiarra --make-password (ここでパスワードを生成します。) nhayashi@deb1:~$ vi .tiarra/tiarra.conf
私の tiarra.conf の最低限の設定は下記になります。
- nick: tiarra - user: tiarra - name: Tiarra the "Aeon" + nick: nhayashi + user: nhayashi + name: nhayashi - tiarra-password: xl7cflIcH9AwE + tiarra-password: ij3N65pr8dPkI + name: freenode + channel: *@freenode +freenode { + server: irc.freenode.net 6667 + in-encoding: utf8 + out-encoding: utf8 }
ここまでで最低限の tiarra の設定はできました。
rootでのrunitの設定(一般ユーザ用runsvdirサービス登録)
次に今回の本題の runit の設定についてまとめます。
まずは runit をインストールします。
nhayashi@deb1:~$ sudo apt-get install -V runit
次にユーザ権限でrunit管理下のデーモンを扱うための設定をします。
nhayashi@deb1:~$ sudo mkdir /etc/sv/runsvdir-nhayashi
ユーザ権限でデーモンを扱うためのrunスクリプトは下記のようになります。
ここでは chpst という runit 付属のプロセス状態を変更するコマンドでユーザ権限でrunsvdirを実行します。
このrunsvdirというのがサービス登録されるプログラムのディレクトリを監視してくれます。
nhayashi@deb1:~$ sudo vi /etc/sv/runsvdir-nhayashi/run
#!/bin/sh exec 2>&1 exec chpst -unhayashi runsvdir /home/nhayashi/service
今回は /home/nhayashi/service というディレクトリをサービス登録されるプログラムの監視対象ディレクトリにしました。
忘れる前に /home/nhayashi/service ディレクトリを作っておきます。
nhayashi@deb1:~$ mkdir /home/nhayashi/service
プログラム起動できるように実行権限を与えておきます。
nhayashi@deb1:~$ sudo chmod +x /etc/sv/runsvdir-nhayashi/run
次にログ管理するrunスクリプトを用意しておきます。
nhayashi@deb1:~$ sudo mkdir /etc/sv/runsvdir-nhayashi/log
今回はログ出力先に /var/log/runsvdir/nhayashi を指定しました。
またここでも 一般ユーザでログを見れるように chpst を使って実行ユーザを一般ユーザに変えています。
runit 付属のコマンドに svlogd という daemontools でいう multilog 相当のものがあるのでこちらを利用してログ出力を行います。
nhayashi@deb1:~$ sudo vi /etc/sv/runsvdir-nhayashi/log/run
#!/bin/sh LOG=/var/log/runsvdir/nhayashi test -d "$LOG" || mkdir -p -m755 "$LOG" && chown nhayashi:adm "$LOG" exec chpst -unhayashi svlogd -t "$LOG"
忘れずに実行権限を与えておきます。
nhayashi@deb1:~$ sudo chmod +x /etc/sv/runsvdir-nhayashi/log/run
runit も daemontools を参考に実装されているため サービス登録されるプログラムと同じディレクトリに supervise ディレクトリを作成してデーモン管理します。
そのままだと /etc/sv/runsvdir-nhayashi/ 以下に状態管理ファイルが作成されてしまい気持ち悪いので /var/lib/supervise に変更します。
(ちなみにこの設定は runit で管理される git-daemon の実装を参考にしました。)
nhayashi@deb1:~$ sudo mkdir /var/lib/supervise/runsvdir-nhayashi nhayashi@deb1:~$ sudo mkdir /var/lib/supervise/runsvdir-nhayashi.log nhayashi@deb1:~$ sudo ln -s /var/lib/supervise/runsvdir-nhayashi /etc/sv/runsvdir-nhayashi/supervise nhayashi@deb1:~$ sudo ln -s /var/lib/supervise/runsvdir-nhayashi.log /etc/sv/runsvdir-nhayashi/log/supervise
ここまでできたらユーザ権限でrunit管理下のデーモンを管理できるようサービスを登録します。
サービス登録は /etc/service にシンボリックリンクを貼れば runsvdir が自動でサービス登録を検知してくれます。
nhayashi@deb1:~$ sudo ln -s /etc/sv/runsvdir-nhayashi /etc/service/ nhayashi@deb1:~$ sudo sv status runsvdir-nhayashi
ちゃんとサービス登録できているか確認します。
nhayashi@deb1:~$ pstree -acu init ├─runsvdir -P /etc/service... │ └─runsv runsvdir-nhayashi │ ├─runsvdir,nhayashi /home/nhayashi/service │ └─svlogd,nhayashi -t /var/log/runsvdir/nhayashi
runsv runsvdir-nhayashi から runsvdir,nhayashi /home/nhayashi/service と svlogd,nhayashi -t /var/log/runsvdir/nhayashi が起動できていることが確認できます。
一般ユーザでのrunitの設定(tiarraサービス登録)
ここからは一般ユーザにおけるデーモン化についてまとめます。
まずサービス登録するプログラムのディレクトリを用意します。
今回は tiarra をデーモン化するので ~/.tiarra/service にその設定をまとめます。
nhayashi@deb1:~$ mkdir ~/.tiarra/service
~/.tiarra/service/run に tiarra 起動プログラムを書きます。
実行権限を与えるのを忘れずに。
nhayashi@deb1:~$ vi ~/.tiarra/service/run
#!/bin/sh exec 2>&1 exec tiarra --config=/home/nhayashi/.tiarra/tiarra.conf
nhayashi@deb1:~$ chmod +x ~/.tiarra/service/run
tiarra のログ管理を行うrunスクリプトを用意します。ログ出力先は ~/.tiarra/log/ に設定します。
nhayashi@deb1:~$ mkdir ~/.tiarra/log nhayashi@deb1:~$ mkdir ~/.tiarra/service/log
nhayashi@deb1:~$ vi ~/.tiarra/service/log/run
#!/bin/sh LOG=/home/nhayashi/.tiarra/log exec svlogd -t "$LOG"
忘れずに実行権限を与えます。
nhayashi@deb1:~$ chmod +x .tiarra/service/log/run
一般ユーザでのrunitによるtiarraサービス起動
ここまでできたら準備は整ったので tiarra を runit 管理下のデーモンとして起動してみます。
起動方法は /home/nhayashi/service にサービス登録プログラムのシンボリックリンクを貼るだけです。
nhayashi@deb1:~$ ln -s /home/nhayashi/.tiarra/service /home/nhayashi/service/tiarra
ちゃんと起動できたか確認してみます。
nhayashi@deb1:~$ pstree -acu init ├─runsvdir -P /etc/service... │ └─runsv runsvdir-nhayashi │ ├─runsvdir,nhayashi /home/nhayashi/service │ │ └─runsv tiarra │ │ ├─svlogd -t /home/nhayashi/.tiarra/log │ │ └─tiarra /usr/share/tiarra/tiarra... │ │ └─{tiarra} │ └─svlogd,nhayashi -t /var/log/runsvdir/nhayashi
sv コマンドでサービス管理を行うのですが下記のように SVDIR=(サービス登録ディレクトリ) を指定してあげる必要があります。
SVDIR を未指定の場合は /etc/service が設定されたものと認識されてしまうので気をつけてください。
sv status コマンドで状態を確認してみます。
nhayashi@deb1:~$ SVDIR=~/service sv status tiarra run: tiarra: (pid 11202) 187s; run: log: (pid 11173) 380s
問題なく起動できてますね。
念のためログも正しく出力されているか確認してみようと思います。
と、その前に svlogd -t と指定してログ出力を行ったのですが、このままだと日時が意味の分からないものになっているので、daemontools 付属の tai64nlocal を使って人が読める形式に変換します。まずは daemontools のインストール。
nhayashi@deb1:~$ sudo apt-get install -V daemontools
下記のようにして見ることができます。
nhayashi@deb1:~$ tail -f ~/.tiarra/log/current | tai64nlocal
svlogd -tt とすれば人が読める形式にはなるのですが UTC timestamp で出力されるので日本より9時間遅い時間が出力されてしまいます。そのため私の環境では svlogd -t と設定して tai64nlocal で変換してみるようにしています。
(UTC timestamp で出力されたものを私が見る方法を知らないだけかもしれませんが。。。)
svコマンド例
デーモンの起動・停止は sv コマンドを使って下記のように行います。
nhayashi@deb1:~$ SVDIR=~/service sv start tiarra nhayashi@deb1:~$ SVDIR=~/service sv stop tiarra
また私が見落としていてはまったのが svlogd プログラムの停止を忘れることが多く下記のように指定します。
nhayashi@deb1:~$ SVDIR=~/service sv start tiarra/log nhayashi@deb1:~$ SVDIR=~/service sv stop tiarra/log
他にもいくつかコマンドがあるようなので試してみることをお勧めします。
まとめ
今回、ユーザ権限でデーモン管理ができる runit を試してみて現状問題なく動いているようです。
ただ実運用で使った実績はまだないのでもう少し検証して安定性を確認しようと思います。
runit 自体 daemontools を参考に実装されたこともあり、daemontools -> runit へ乗り換えるのは簡単にできそうです。
daemontools では コマンドが多かったり multilog の記述が難解だったり 最初使うのにすごい苦労した記憶があります。
runit だと コマンドも少ないですし、プロセスの起動フローもシンプルな印象を受けました。
daemontools と runit のプロセス起動を比較すると下記のようになると思います。
(daemontools) init `-svscanboot |-readproctitle `-svscan |-supervise prog | `-exec prog `-supervise log `-multilog (runit) init `-runsvdir `-runsv prog | `-exec prog `-svlogd
svscanboot, svscan が runsvdir にまとまっているためシンプルなのかなと思いました。
今回、runit を試してみて意外に簡単に感じたのはそのせい?かなと思います。
当初、想定より簡単に使えて安定性も確認できれば daemontools から runit に乗り換えるのは賢い選択なのかなと思います。
perlbrew, cpanminus で perl 環境構築
ほぼ自分用のメモとしてまとめを書きます。
curl -LO http://xrl.us/perlbrew perl perlbrew install ~/perl5/perlbrew/bin/perlbrew init source ~/perl5/perlbrew/etc/bashrc perlbrew install perl-5.8.9 cd ~/perl5/perlbrew/dists/ tar jxvf perl-5.8.9.tar.bz2 vi perl-5.8.9/lib/locale.t 460行目 - if ($v >= 8 and $v < 10) { + if ($v >= 8 and $v <= 10) { tar jcvf perl-5.8.9.tar.bz2 perl-5.8.9 perlbrew install perl-5.8.9 perlbrew switch perl-5.8.9 curl -L http://cpanmin.us/ | perl - App::cpanminus cpanm Module::Install cpanm App::cpanoutdated cpan-outdated | cpanm cpanm App::pmuninstall cpanm http://nodeload.github.com/tokuhirom/task-belike-tokuhirom/tarball/master
これで一通り perl 環境は整った。hidek++
.bashrc にも perlbrew の bashrc を読み込むように追記。
if [ -f $HOME/perl5/perlbrew/etc/bashrc ]; then . $HOME/perl5/perlbrew/etc/bashrc fi
vim RPMビルド
前回、MySQL-communityのRPMビルドを紹介したが今回はvimのRPMビルドについて手順をまとめる。
CentOS5標準付属のvimはバージョンが7.0と古いものなので今回はfedora13で提供されているvimからRPMビルドを作成しようと思う。
まず下記サイトよりfedora13のvim src.rpmを取得する。
検索時に「fedora13」のチェックボックスを選択して「vim-common」とキーワード指定して検索する。
検索結果の対象アーキテクチャからsrc.rpmを辿って手元にsrc.rpmを取得する。
$ wget ftp://ftp.rhnet.is/pub/fedora/linux/releases/13/Fedora/source/SRPMS/vim-7.2.411-1.fc13.src.rpm
いつも通りrpmで展開しようとするとfedora用src.rpmのため「MD5 sum mismatch」とエラーになってしまう。当然なんですが。。。
なのでMD5チェックサムを無視して展開する。
$ rpm -ivh --nomd5 vim-7.2.411-1.fc13.src.rpm
すると SPECS, SOURCES に展開されているので rpmbuild してみる。
$ rpmbuild -ba SPECS/vim.spec
が、ビルドに必要なパッケージが入っていないので入れる。
$ sudo yum install python-devel libacl-devel gpm-devel ruby-devel ruby gtk2-devel libSM-devel libXt-devel libXpm-devel
ただこれだけでもダメで perl-devel の依存関係が残ってしまう。
しかし、この perl-devel というパッケージは fedora13 にだけある新しいパッケージのため CentOS5 の yumリポジトリには存在しない。
そこでこの perl-devel のビルド依存関係を下記のようにspecファイルから除外する。
@@ -492,7 +492,7 @@ Patch3013: vim-7.2-elinks-parameter-518791.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: python-devel ncurses-devel gettext perl-devel +BuildRequires: python-devel ncurses-devel gettext BuildRequires: perl(ExtUtils::Embed) BuildRequires: libacl-devel gpm-devel autoconf %if %{WITH_SELINUX}
では実際にビルドしてみる。
$ rpmbuild -ba SPECS/vim.spec
うまくいけば下記のファイルが作られていると思う。
vim-common-7.2.411-1.i386.rpm vim-minimal-7.2.411-1.i386.rpm vim-enhanced-7.2.411-1.i386.rpm vim-X11-7.2.411-1.i386.rpm
MySQL-community RPMビルド
前回、curl, git 最新版のRPMビルド手順について書いたが今回はMySQL-communityのRPMビルドについて書こうと思う。
MySQL-community RPMビルド
何はともあれまずはオフィシャルからsrc.rpmを取得して展開する。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-community-5.1.51-1.rhel5.src.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/ $ rpm -ivh MySQL-community-5.1.51-1.rhel5.src.rpm
次にビルドするのに必要なRPMを入れる。
$ sudo yum install gperf readline-devel gcc-c++ ncurses-devel libtool automake autoconf
そして MySQL-community のビルドには専用の define 指定が必要になるのでそれを指定して rpmbuild を実行する。
$ cd ~/rpmbuild/ $ rpmbuild -ba --define 'community 1' SPECS/mysql-5.1.51.rhel5.spec
実際にソースからでもビルドしたことある方ならご存知だと思いますがものすごい時間がかかります。。。
無事にビルドできれば下記のRPMが作成される。
MySQL-server-community-5.1.51-1.rhel5.i386.rpm MySQL-client-community-5.1.51-1.rhel5.i386.rpm MySQL-test-community-5.1.51-1.rhel5.i386.rpm MySQL-devel-community-5.1.51-1.rhel5.i383.rpm MySQL-shared-community-5.1.51-1.rhel5.i386.rpm MySQL-embedded-community-5.1.51-1.rhel5.i386.rpm
自前yumリポジトリでのグループインストール設定
前回、yumリポジトリ構築について書いたが、グループインストールについて触れていなかったので今回は自前yumリポジトリでのグループインストール設定について書く。
yumリポジトリサーバ側でも自前リポジトリを指定する。
yumグループを作る際に yum-groups-manager というツールで既存パッケージを指定するが、yumリポジトリサーバ側でもyumコマンドでRPMが取得できないといけないのでまずはそれを設定する。
$ vi /etc/yum.repos.d/local.repo
[local] name=CentOS-$releasever - $basearch - Local Repository baseurl=http://192.168.1.12/centos/$releasever/$basearch/ enabled=1 gpgcheck=0
グループ定義XMLを用意する
グループ定義XMLを用意するために yum-groups-manager というツールを使う。
使い方は下記のようにする。
(新規の場合) $ yum-groups-manager --id=local-mysql --name='Local MySQL packages' --description='The package in this group are MySQL packages needed to DB servers.' --save=/var/www/html/centos/5/i386/groups.xml MySQL-client-community
すると下記のようなXMLができあがる。
$ cat /var/www/html/centos/5/i386/repodata/groups.xml
local-mysql false true 1024 Local MySQL packages The package in this group are MySQL packages needed to DB servers. MySQL-client-community
せっかくなので MySQL-server-community も同じグループに含める。
まずはオフィシャルからダウンロードする。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-server-community-5.1.51-1.rhel5.i386.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/
上記で既にグループ定義XMLは用意してあるのでそのXMLに追加してみる。コマンドは以下のようになる。
$ yum-groups-manager --id=local-mysql --load=/var/www/html/centos/5/i386/repodata/groups.xml --save=/var/www/html/centos/5/i386/repodata/groups.xml MySQL-server-community
--id もしくは --name に既にあるものを指定すれば追加することができる。念のため確認。
$ cat /var/www/html/centos/5/i386/repodata/groups.xml
local-mysql false true 1024 Local MySQL packages The package in this group are MySQL packages needed to DB servers. MySQL-client-community MySQL-server-community
最後にグループ定義XMLを指定してyumリポジトリを更新する。
$ createrepo -v -g /var/www/html/centos/5/i386/repodata/groups.xml /var/www/html/centos/5/i386/
yumクライアント側でグループインストールしてみる。
では実際にグループインストールでMySQL関連のRPMを入れてみる。
$ yum --disablerepo=* --enablerepo=local groupinstall mysql-local
===================================================================================== Package Arch Version Repository Size ===================================================================================== Installing: MySQL-client-community i386 5.1.51-1.rhel5 local 7.3 M MySQL-server-community i386 5.1.51-1.rhel5 local 20 M
無事にインストールできている。
curl, git の RPM ビルド
CentOS5にrpmforgeからgitを入れて使ってみるとcurlの古いバージョンが入った環境でビルドされているようで、git-http-pushが使えなかったのでcurl, gitともに最新版を手元でRPMビルドして入れたのでその時の手順を書こうと思う。
RPMビルド環境を用意する
まずはRPMビルド環境を用意する必要があるので下記コマンドを実行。
$ sudo yum install rpm-build $ mkdir rpmbuild $ cd rpmbuild $ mkdir BUILD RPMS SOURCES SPECS SRPMS
次に上記で作ったディレクトリ内でビルドを行うために .rpmmacros を設定する。
$ vi ~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
これで最低限のビルド環境は設定完了。
curl RPMビルド
gitをビルドする前にcurlの最新版をビルド、インストールしておく。
標準だと 7.15.5 が入っていたのでオフィシャルから最新版の 7.21.2 の src.rpm を落としてくる。
$ wget http://curl.haxx.se/download/curl-7.21.2-1.src.rpm
そしてそれを展開する。
$ rpm -ivh curl-7.21.2-1.src.rpm
$ ls rpmbuild/SPECS/ curl.spec
$ ls rpmbuild/SOURCES/ curl-7.21.2.tar.bz2
では実際にビルドして最新版のcurl RPMを作りたいがそのままの curl.spec ではうまくビルドできなかったので、curl.spec に下記の変更を加えた。
-Copyright: MIT/X derivate +License: MIT/X derivate
また他のRPMも必要だったのでrpmforgeのリポジトリを追加して下記のように入れておいた。
$ sudo yum install gcc $ wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm $ sudo rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm $ sudo yum install libssh2-devel
これでcurlビルドに必要な環境は整ったので実際にビルドしてみる。
$ cd ~/rpmbuild/ $ rpmbuild -ba SPEC/curl.spec ...
エラーが出ずにうまくいけば ~/rpmbuild/SRPMS/, ~/rpmbuild/RPMS/i386/ にRPM が作られている。
$ ls ~/rpmbuild/SRPMS/
curl-7.21.2-1.src.rpm
$ ls ~/rpmbuild/RPMS/i386/ curl-7.21.2-1.i386.rpm libcurl4-7.21.2-1.i386.rpm libcurl4-devel-7.21.2-1.i386.rpm
以上で最新版curlのRPMビルドは完了。
あとは自前のyumリポジトリなどに反映させてインストールする。
$ sudo cp ~/rpmbuild/RPMS/i386/*curl* /var/www/html/centos/5/i386/ $ sudo createrepo -v /var/www/html/centos/5/i386/ $ sudo yum remove curl $ sudo yum install curl
一応、バージョンを確認。
$ curl --version
curl 7.21.2 (i686-redhat-linux-gnu) libcurl/7.21.2 OpenSSL/0.9.8b zlib/1.2.3 libssh2/1.2.7
git RPMビルド
本題のgit RPMビルドに入る。
git も curl 同様、オフィシャルから src.rpm を取得して展開しておく。
$ wget http://kernel.org/pub/software/scm/git/RPMS/SRPMS/git-1.7.3.2-1.fc11.src.rpm $ rpm -ivh git-1.7.3.2-1.fc11.src.rpm
git のビルドにはたくさんのパッケージ依存があってすごい大変。
そのため rpmforge も使っています。
以下に依存のあったパッケージを入れた手順を書きます。
$ sudo yum install expat-devel xmlto asciidoc perl-Error libcurl4-devel
では実際にビルドしてみます。
$ cd ~/rpmbuild/ $ rpmbuild -ba SPECS/git.spec
うまくいけば ~/rpmbuild/SRPMS/, ~/rpmbuild/RPMS/i386/ に RPM が出来ているので、上記curlの時と同様に /var/www/html/centos/5/i386/ にコピーして createrepo を実行すれば git-http-push が実行できる git を RPM で入れることが出来る。
$ sudo cp ~/rpmbuild/RPMS/i386/git* /var/www/html/centos/5/i386/ $ sudo cp ~/rpmbuild/RPMS/i386/perl-Git* /var/www/html/centos/5/i386/ $ sudo createrepo -v /var/www/html/centos/5/i386/
実際にインストールしてバージョンを確認してみます。
$ yum --disablerepo=* --enablerepo=local install git $ git --version
git version 1.7.3.2
うまくいかない場合は rpmbuild 時の並列処理がうまく処理できていない場合があるので下記のように git.spec ファイルを変更して試してみてください。
@@ -112,7 +112,7 @@ %setup -q %build -make %{_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" \ +make CFLAGS="$RPM_OPT_FLAGS" \ %{path_settings} \ all %{!?_without_docs: doc}
privateネットワークにyumリポジトリを構築
仕事でyumリポジトリを立てる場面がありせっかくなのでまとめようと思います。
対象環境は以下です。
OS: CentOS5 アーキテクチャ: 32bit
yumリポジトリサーバの設定
まっさらな状態のサーバにyumリポジトリを立てます。
まずyumリポジトリを立てるのに必要なパッケージから入れます。
$ yum install createrepo
次にhttp経由でパッケージを送るためとりあえずapacheを入れて起動しておきます。
$ yum install httpd $ /etc/init.d/httpd start
$ mkdir -p /var/www/html/centos/5/i386
テスト用にCentOS標準のmysqlクライアントではなく mysql オフィシャルのMySQL-client-community RPMをyumリポジトリの対象アーキテクチャディレクトリにダウンロードします。
$ cd /var/www/html/centos/5/i386 $ wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-client-community-5.1.51-1.rhel5.i386.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/
$ createrepo -v /var/www/html/centos/5/i386
上記コマンドを実行すると下記のファイルができます。
$ ls /var/www/html/centos/5/i386/repodata/ filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml
yumリポジトリを利用するクライアントの設定
次に上記で設定したyumリポジトリからRPMを取得するクライアントの設定をします。
まず上記yumリポジトリの指定を行います。
$ vi /etc/yum.repos/local.repo
[local] name=CentOS-$releasever - $basearch - Local Repository baseurl=http://192.168.1.12/centos/$releasever/$basearch/ enabled=1 gpgcheck=0
下記のコマンドで現在設定されているyumリポジトリの一覧が見れる。
$ yum repolist
repo id repo name status addons CentOS-5 - Addons enabled: 0 base CentOS-5 - Base enabled: 2,599 extras CentOS-5 - Extras enabled: 337 local CentOS-5 - i386 - Local Repository enabled: 2 updates CentOS-5 - Updates enabled: 688 repolist: 3,626
では実際にRPMがprivateネットワークのyumリポジトリから取得できるか確認する。
$ yum --disablerepo=* --enablerepo=local install MySQL-client-community
===================================================================================== Package Arch Version Repository Size ===================================================================================== Installing: MySQL-client-community i386 5.1.51-1.rhel5 local 7.3 M