APT for RPMの使い方

nogajun
nogajun

_

前にMandrakeでやったけど日本じゃRedhatかなっつーことで、RedhatにAPT for RPMを入れた記録です。

オイラはSPECの書き方も知らないし、修正もバータリ的なので、試すときは 「at your own risk」 でおながいします。

conectiviaからsrpmを取ってきて、ソースをインストールする。

SPECファイル修正する

RedhatとConectivaではbzip2とpoptのファイル名が違うので、BuildRequiresの所を直すだけ。

 *** apt.spec.old        Sat Dec 22 16:24:08 2001
 --- apt.spec    Sat Dec 22 16:41:49 2001
 ***************
 *** 15,21 ****
   Patch3: %{name}-rpmpriorities-cl7.patch
   Patch5: %{name}-mirrors.patch
   Requires: rpm >= 4.0.0, gnupg
 ! BuildRequires: rpm-devel >= 4.0.0, libbz2-devel, zlib-devel, db3, db3-devel, glibc-devel, popt-devel
   BuildRoot: %{_tmppath}/%{name}-%{version}-root

   %description
 --- 15,21 ----
   Patch3: %{name}-rpmpriorities-cl7.patch
   Patch5: %{name}-mirrors.patch
   Requires: rpm >= 4.0.0, gnupg
 ! BuildRequires: rpm-devel >= 4.0.0, bzip2-devel, zlib-devel, db3, db3-devel, glibc-devel, popt
   BuildRoot: %{_tmppath}/%{name}-%{version}-root

   %description

リビルドしてインストール。

 # cd /usr/src/redhat/SPECS
 # rpm -bb apt.spec
 # cd ../RPMS/i386/
 # rpm -ivh apt*

RPMファイルを置いておくリポジトリの設定。

とりあえずテストなので、ローカルのHDDにCD-ROMからファイルをコピーして作ってみます。ftpでもhttpでも設定方法は同じです。

ファイルをコピーするディレクトリを用意します。(ex. /var/mirror/7.2)

 # mkdir -p /var/mirror/7.2

そこに、CD-ROMのRedHat以下のディレクトリをコピーします。

 # cp -r /mnt/cdrom/RedHat/ /var/mirror/7.2/

RPMSディレクトリに「RPMS.コンポーネント名」のシンボリックリンクを貼ります。

コンポーネント名はなんでもいいですが、ここではmainとつけました。

 # cd /var/mirror/7.2/RedHat
 # ln -s RPMS/ RPMS.main

ソースがあれば、RedHatディレクトリと同じ階層にSRPMSをコピーして、「SRPMS.コンポーネント名」でリンクを貼っておきます。

genbasedirでpkglistを作ります。

書式: genbasedir [-s | --sign] [--topdir=ディレクトリ] ディストリビューション名 コンポーネント名 [コンポーネント名...]

baseディレクトリに下りてgenbasedirを実行します。

ディレクトリ名とディストリビューション名の区切り方がいまいちわかんないけど、こんな風にしてみました。

  • ディレクトリ名=/var/mirror
  • ディストリビューション名=7.2/RedHat
  • コンポーネント名=main

    cd /var/mirror/7.2/RedHat/base

    genbasedir --topdir=/var/mirror 7.2/RedHat main

source.listの編集

ftpならftp:、httpならhttp:、ローカルディレクトリならfile:でgenbasedirで設定したとおり書きます。ソースもあるなら、同じようにしてrpm-srcも書きます。

 rpm ftil:/var/mirror 7.2/RedHat main
 rpm-src ftil:/var/mirror 7.2/RedHat main

終ればapt-get updateしてみましょう。

その後、apt-cache search (パッケージ名)で検索したりしてみてください。でも、 apt-get upgradeはまだやっちゃダメ!! (理由は下)

apt-get upgradeすると、GNOMEの一部パッケージがアンインストールされてしまうぞ!!

どうやら、xscreensaverの依存性でひっかかり、関係するものはアンインストールされるみたいです。こういうとき、debianならパッケージをホールドしたらいいけど、RPMにはパッケージのホールドという概念がない!

というわけで、xscreensaver-3.33-4.src.rpmをとってきて修正しませう。修正箇所は、Requiresの/usr/games/fortuneをfortune-modに変えるだけ。

 *** xscreensaver.spec.old       Fri Aug 24 01:55:47 2001
 --- xscreensaver.spec   Sun Dec 23 00:21:16 2001
 ***************
 *** 21,27 ****
   Patch11: xscreensaver-3.33-memlimit.patch
   Patch12: xscreensaver-3.33-time.patch
   BuildPrereq: /usr/games/fortune /usr/bin/gnome-config pam-devel XFree86-devel
 ! Requires: xloadimage, /usr/games/fortune, redhat-logos >= 1.1.1, /etc/pam.d/system-auth
   Obsoletes: xscreensaver-gl
   Buildroot: /var/tmp/xscreensaver-root
   Prefix: /usr/X11R6
 --- 21,27 ----
   Patch11: xscreensaver-3.33-memlimit.patch
   Patch12: xscreensaver-3.33-time.patch
   BuildPrereq: /usr/games/fortune /usr/bin/gnome-config pam-devel XFree86-devel
 ! Requires: xloadimage, fortune-mod, redhat-logos >= 1.1.1, /etc/pam.d/system-auth
   Obsoletes: xscreensaver-gl
   Buildroot: /var/tmp/xscreensaver-root
   Prefix: /usr/X11R6

これでapt-get updateも使えます。

使うメリットは?

アップデートにはup2dateがあるし、パッケージの検索インストールにはrpmfindがあるので、特にないかもしれません。

up2dateはMicrosoftのアクティベーションチックなRedHat Networkに登録しないと使えないし、基本的にGUIで使うようになってるし、rpmfindは結構落ちてたりするので考えてみました。

  • RPMパッケージを入れるとき、依存するパッケージを気にする必要がない。
  • アップデートパッケージをローカルにミラーしたら、RHNに登録しなくても楽々アップデートができる。

しかし、なんかムリあるね。

なんか考えて(わら

こーいうのもある。

Mandrakeに入ってて気がついた。