Messages in cipher reflected in the looking glass

http://blogs.sun.com/thaniwa/date/20061011 2006年 10月 11日 水曜日

(JA) rpm on Solaris(SPARC)

以前、rpmを使ってSolaris用のパッケージを作成し、ソースを管理するということを書きました。 その時はx86版Solarisは OpenSolaris のサイトから rpm をダウンロードして使いましょうということで SPARC版はしませんでした。 ということで SPARC版で rpm を使うまでをまとめてみます。

rpmを別途ビルドするのは面倒なので、バイナリ提供されていれば そちらを使いたいところです。
それでちょっと調べてみたのですが、Sun U.S. のSolarisサイト(下記URL参照) にSolaris用フリーウェアの案内があることがわかりました。


Solaris 用 フリーウェアサイト :
http://www.sun.com/software/solaris/freeware/

ここを見ると、 「Shipped with Solaris 10 6/06 OS Community (not Sun) supported」という項目の 「Application/Utilities」の部分に思い切り「rpm-4.1」 と書いてあります。
ということで、これを利用するというのが良いでしょう。
上記のサイトでは、DVDイメージおよび個別パッケージのダウンロードが提供されていますが、DVDイメージにはrpmは含まれていないようなので、個別にダウンロードします。


個別パッケージダウンロード :
http://www.sun.com/software/solaris/freeware/s10pkgs_download.xml

上記からダウンロードサイトにアクセスし、パッケージのダウンロードを行います。ログインするためにはアカウントが必要です。
ダウンロードするのは以下の2つです。

  • Dependency bundle, English : Depend-sparc-pkgs.tar.bz2
  • rpm - Red Hat Package Manager, English : SFWrpm.bz2

「Dependency bundle, English : Depend-sparc-pkgs.tar.bz2」は要らないと思うのですが、 「Required (These files must be downloaded for the product to work.)」 と書いてあるので、とりあえずぶち込みます。
インストール方法は以下のような感じです。 出力メッセージは省略しています。

# bunzip2 -c Depend-sparc-pkgs.tar.bz2 | tar xvf -
# pkgadd -d . all
# bunzip2  SFWrpm.bz2
# pkgadd -d ./SFWrpm

SFWrpmが rpm パッケージなのですが、インストールを行うと以下のエラーが発生し、インストールが部分的に失敗します。 (下記のエラー以外のものはインストールされています。)

[ verifying class <none> ]
ERROR: attribute verification of </opt/sfw/lib/libpopt.a> failed
    pathname does not exist
ERROR: attribute verification of </opt/sfw/lib/libpopt.la> failed
    pathname does not exist
ERROR: attribute verification of </opt/sfw/lib/libpopt.so.0.0.0> failed
    pathname does not exist

Installation of <SFWrpm> partially failed.

パッケージの中身を見ると、 /opt/sfw/lib/libpopt.so , /opt/sfw/lib/libpopt.so.0 は含まれているのですが、エラーの出たものは含まれていないっぽいです。 とりあえず気にしない、気にしない。^-^;
rpm, rpmbuildコマンドのヘルプメッセージを出してみると ちゃんと出てきますし、問題ないでしょう。

# /opt/sfw/bin/rpm
RPM version 4.1
Copyright (C) 1998-2002 - Red Hat, Inc.
This program may be freely redistributed under the terms of the GNU GPL

Usage: rpm [-a|--all] [-f|--file] [-g|--group] [-p|--package] [--specfile]
        [--whatrequires] [--whatprovides] [-c|--configfiles] [-d|--docfiles]
        [--dump] [-l|--list] [--queryformat=QUERYFORMAT] [-s|--state]
        [--nomd5] [--nofiles] [--nodeps] [--noscript] [--addsign]
        [-K|--checksig] [--import] [--resign] [--nodigest] [--nosignature]
        [--initdb] [--rebuilddb] [--allfiles] [--allmatches] [--badreloc]
        [-e|--erase <package>+] [--excludedocs] [--excludepath=<path>]
        [--force] [-F|--freshen <packagefile>+] [-h|--hash] [--ignorearch]
        [--ignoreos] [--ignoresize] [-i|--install] [--justdb] [--nodeps]
        [--nomd5] [--noorder] [--nosuggest] [--noscripts] [--notriggers]
        [--oldpackage] [--percent] [--prefix=<dir>] [--relocate=<old>=<new>]
        [--repackage] [--replacefiles] [--replacepkgs] [--test]
        [-U|--upgrade <packagefile>+] [-D|--define 'MACRO EXPR']
        [-E|--eval 'EXPR'] [--macros=<FILE:...>] [--nodigest] [--nosignature]
        [--rcfile=<FILE:...>] [-r|--root ROOT] [--querytags] [--showrc]
        [--quiet] [-v|--verbose] [--version] [-?|--help] [--usage]
        [--scripts] [--setperms] [--setugids] [--conflicts] [--obsoletes]
        [--provides] [--requires] [--info] [--changelog] [--triggers]
        [--last] [--filesbypkg] [--redhatprovides] [--redhatrequires]
        [--buildpolicy=<policy>] [--with=<option>] [--without=<option>]


# /opt/sfw/bin/rpmbuild --help
Usage: rpmbuild [OPTION...]

Build options with [ <specfile> | <tarball> | <source package> ]:
  -bp                           build through %prep (unpack sources and apply
                                patches) from <specfile>
  -bc                           build through %build (%prep, then compile)
                                from <specfile>
  -bi                           build through %install (%prep, %build, then
                                install) from <specfile>
  -bl                           verify %files section from <specfile>
  -ba                           build source and binary packages from
                                <specfile>
  -bb                           build binary package only from <specfile>
  -bs                           build source package only from <specfile>
  -tp                           build through %prep (unpack sources and apply
                                patches) from <tarball>
  -tc                           build through %build (%prep, then compile)
                                from <tarball>
  -ti                           build through %install (%prep, %build, then
                                install) from <tarball>
  -ta                           build source and binary packages from <tarball>
  -tb                           build binary package only from <tarball>
  -ts                           build source package only from <tarball>
  --rebuild                     build binary package from <source package>
  --recompile                   build through %install (%prep, %build, then
                                install) from <source package>
  --buildroot=DIRECTORY         override build root
  --clean                       remove build tree when done
  --nobuild                     do not execute any stages of the build
  --nodeps                      do not verify build dependencies
  --nodirtokens                 generate package header(s) compatible with
                                (legacy) rpm[23] packaging
  --rmsource                    remove sources when done
  --rmspec                      remove specfile when done
  --short-circuit               skip straight to specified stage (only for c,i)
  --target=CPU-VENDOR-OS        override target platform

Common options for all rpm modes:
  -D, --define='MACRO EXPR'     define MACRO with value EXPR
  -E, --eval='EXPR'             print macro expansion of EXPR
  --macros=<FILE:...>           read <FILE:...> instead of default file(s)
  --nodigest                    don't verify package digest(s)
  --nosignature                 don't verify package signature(s)
  --rcfile=<FILE:...>           read <FILE:...> instead of default file(s)
  -r, --root=ROOT               use ROOT as top level directory (default: "/")
  --querytags                   display known query tags
  --showrc                      display final rpmrc and macro configuration
  --quiet                       provide less detailed output
  -v, --verbose                 provide more detailed output
  --version                     print the version of rpm being used

Options implemented via popt alias/exec:
  --dbpath=DIRECTORY            use database in DIRECTORY
  --with=<option>               enable configure <option> for build
  --without=<option>            disable configure <option> for build

Help options:
  -?, --help                    Show this help message
  --usage                       Display brief usage message



Solaris用rpmはバージョン 4.1 と、最新の rpm を追っかけている場合にはちょっと古く感じるかもしれませんが、特に問題は無いと思います。
rpmbuildをちょっとだけ利用するのみですし。

ということで、実際に使ってみます。

今回は、
(JA) Solaris pkg (Part 3) : build pkg using rpm
と同様に rdesktop のパッケージを作ってみます。 実際に利用した SPEC ファイルは次の通りです。 最新版の rdesktop 1.5.0 にしています。
インストール先を /opt/sfw として、パッケージ名を SFWrdesktop にしています。

Summary: rdesktop
Name: rdesktop
Version: 1.5.0
Release: 1
License: GPL
Group: Applications/Communications
Source0: http://prdownloads.sourceforge.net/rdesktop/%{name}-%{version}.tar.gz
Requires: /usr/sfw/lib/libssl.so /usr/sfw/lib/libcrypt.so
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
#Prereq:

%description
rdesktop is an open source client for Windows NT Terminal Server and Windows 2000/2003 Terminal Services,
capable of natively speaking Remote Desktop Protocol (RDP) in order to present the user\'s NT desktop.
Unlike Citrix ICA, no server extensions are required.

%prep
%setup -q -n %{name}-%{version}

%build
%configure --with-openssl=/usr/sfw
gmake

%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/opt/sfw/bin
/opt/sfw/bin/install -c rdesktop $RPM_BUILD_ROOT/opt/sfw/bin
/usr/sfw/bin/gstrip $RPM_BUILD_ROOT/opt/sfw/bin/rdesktop
chmod 755 $RPM_BUILD_ROOT/opt/sfw/bin/rdesktop
mkdir -p $RPM_BUILD_ROOT/opt/sfw/share/rdesktop/keymaps/
cp keymaps/?? keymaps/??-?? $RPM_BUILD_ROOT/opt/sfw/share/rdesktop/keymaps/
cp keymaps/common $RPM_BUILD_ROOT/opt/sfw/share/rdesktop/keymaps/
cp keymaps/modifiers $RPM_BUILD_ROOT/opt/sfw/share/rdesktop/keymaps/
chmod 644 $RPM_BUILD_ROOT/opt/sfw/share/rdesktop/keymaps/*
mkdir -p $RPM_BUILD_ROOT/opt/sfw/share/man/man1
cp doc/rdesktop.1 $RPM_BUILD_ROOT/opt/sfw/share/man/man1
chmod 644 $RPM_BUILD_ROOT/opt/sfw/share/man/man1/rdesktop.1


# build solaris pkg
cd $RPM_BUILD_ROOT/opt/sfw
mkpkg SFW%{name}-%{version} -g -p SFWrdesktop -n %{name} -v %{version} -a sparc -b \"/opt/sfw\"
mv SFW%{name}-%{version}.gz %{_topdir}/DIST/.
rm -fr SFWrdesktop
rm pkginfo prototype


%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

%post

%postun

%files
%defattr(-,root,root)
/opt/sfw/bin/rdesktop
/opt/sfw/share/man/man1/rdesktop.1
/opt/sfw/share/rdesktop

%changelog


実行は以下のような感じでした。

# rpmbuild -bi rdesktop.spec
Executing(%prep): /bin/sh -e /root/rpm/tmp/rpm-tmp.12678
+ umask 022
+ cd /root/rpm/BUILD
+ cd /root/rpm/BUILD
+ rm -rf rdesktop-1.5.0
+ tar -xf -
..........
## Validating control scripts.
## Packaging complete.
Transferring  package instance

done.
+ mv SFWrdesktop-1.5.0.gz /root/rpm/DIST/.
+ rm -fr SFWrdesktop
+ rm pkginfo prototype
+ exit 0
Processing files: rdesktop-1.5.0-1
Finding  Provides: /opt/sfw/lib/rpm/find-provides
Finding  Requires: /opt/sfw/lib/rpm/find-requires
PreReq: /bin/sh /bin/sh rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Requires(interp): /bin/sh /bin/sh
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Requires(post): /bin/sh
Requires(postun): /bin/sh
Requires: /usr/sfw/lib/libssl.so /usr/sfw/lib/libcrypt.so libX11.so.4 libXext.so.0 libc.so.1 libcrypto.so.0.9.7 libdl.so.1 libdoor.so.1 libm.so.2 libmd5.so.1 libmp.so.2 libnsl.so.1 libresolv.so.2 libscf.so.1 libsocket.so.1 libuutil.so.1
Checking for unpackaged file(s): /opt/sfw/lib/rpm/check-files /root/rpm/tmp/rdesktop-1.5.0-1-root
# ls ../DIST
SFWrdesktop-1.5.0.gz


実際に pkgadd を実行してみると、

# gunzip SFWrdesktop-1.5.0.gz
# pkgadd -d ./SFWrdesktop-1.5.0

The following packages are available:
  1  SFWrdesktop     rdesktop
                     (sparc) 1.5.0

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:                     

ということで、SPARC環境のSolarisでもrpmを活用できます。

rpmを利用すると、rpmbuild -bs を利用することにより、 ソース、パッチ、SPEC情報をsrc.rpmにひとまとめに保存することができるので、便利かと思います。
インストールメモ等を別途用意せずに、src.rpm をまとめておけば良いですし。^-^;
(SPECファイルのみでも良い場合もありますが。)

# rpmbuild -bs rdesktop.spec
Wrote: /root/rpm/SRPMS/rdesktop-1.5.0-1.src.rpm


投稿されたコメント:

コメント
コメントは無効になっています。