試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

x86_64版Mandriva Linux上でi586版のchroot環境を作成(RPMパッケージ作成用途)

x86_64版Mandriva上でRPMパッケージを作成すると通常はx86_64向けのものが出来上がるが、i586版のパッケージも作成したいときがある。そのときは「一般ユーザでrpmbuildを行うための準備とエイリアスメモ」の「rpmbuild-spec2rpm-586」を使用することで作成できる場合があるのだが、作成するパッケージによってはビルドに必要な幾つかのパッケージ(lib[名前]-devel)は何故かx86_64版とぶつかってインストールできず、パッケージは作成できない。
しかし、そのような場合でも、i586向けchroot環境を作成することでi586向けパッケージが作成できる。

  1. chroot環境作成スクリプト
  2. chroot環境へのパッケージ追加インストール方法
  3. chrootラッパースクリプト

chroot環境作成スクリプト

下のスクリプトは、パッケージをシステムに追加するときに使われるのと同じurpmiコマンドにより、システムとは別のディレクトリ(下のスクリプトでは変数CHROOT_DIR)以下にi586chroot環境を作成する。
[任意]ファイル名: make-chroot-586.sh

#! /bin/sh
CHROOT_DIR=/opt/i586-chroot
MANDRIVA_MIRROR=[ミラーサーバURL]
PACKAGES="basesystem urpmi locales-ja rpm-build"
# ここで追加のパッケージを記述する
PACKAGES="${PACKAGES} libalsa2-devel libncurses-devel libgtk+2.0_0-devel libwxgtku2.6-devel"
sudo mkdir ${CHROOT_DIR} -p
sudo urpmi.addmedia --distrib --urpmi-root ${CHROOT_DIR} ${MANDRIVA_MIRROR}
sudo urpmi --urpmi-root ${CHROOT_DIR} ${PACKAGES}
# /etc/以下の幾つかのファイルをコピー・場合によっては他のファイルも必要?
yes | sudo cp -a /etc/{passwd,group,shadow,localtime} ${CHROOT_DIR}/etc/

(2009/1/26)/etc/localtimeもコピーするように修正
変数MANDRIVA_MIRRORには国内ミラーサーバのofficial/[OSバージョン]/i586/ディレクトリを指定する。2009/1/21現在

が利用できる。
途中、カーネルなど、複数のパッケージ候補から1つを選択してEnterする場面がある。

chroot環境へのパッケージ追加インストール方法

パッケージの追加は、chroot環境のから

sudo urpmi --urpmi-root /opt/i586-chroot [パッケージ名...]

を実行することで行う。「/opt/i586-chroot」の部分は上のスクリプト内のCHROOT_DIRに合わせる。

chrootラッパースクリプト

下のスクリプトは、システム上の幾つかのディレクトリをchroot内の同じ場所へ結びつける(bindマウント)作業の後にこの環境へ入り、作業完了(chroot環境からのログアウト)後にその後始末をして終了する。
[任意]ファイル名: chroot-586.sh

#! /bin/sh
CHROOT_DIR=/opt/i586-chroot
for D in dev proc sys tmp home; do mount -o bind /${D} ${CHROOT_DIR}/${D}; done
linux32 chroot ${CHROOT_DIR} /bin/bash
for D in dev proc sys tmp home; do umount ${CHROOT_DIR}/${D}; done

(2009/6/22)「/」などの微調整・機能は同じ
このスクリプトを管理者権限で実行するとchroot環境に入る。

$ sudo [chroot-586.shの場所]
[root]# su [rpmbuild用ユーザ]
[rpmbuild用ユーザ]$ 

あとは通常と同じようにパッケージの作成作業を行う。

参考URL: