Sceneries through the lenses

その場の気分でもやっと投稿していくブログ。内容はころころ変わります…(汗。

rpm : xrdp 4.1/JA for CentOS 5.3

2009-05-04 12:03:14 | OSS/Programming
だいぶ時間が空きましたが、続きです。

rpm作成用環境の準備
http://blog.goo.ne.jp/thaniwa/e/d187f537b1e0eb1bfdf239f21b9dd96e

xrdp 4.1 のパッチの準備、ビルド
http://blog.goo.ne.jp/thaniwa/e/9b776ad1721686a4984b31170fbcf09d

を前提にしています。今回は xrdp を rpm 化しておきます。
rpm 化する利点は2つ。

- インストール・削除が簡単になる(使いまわせる)
- specファイル、src.rpm によるメモ効果

autoconfを利用したソフトの場合、
./configure, make, make install を使うと簡単にインストールできることが多いんですが、
メモを取らないことが多いので、いざ、バージョンアップするときに以前の設定が
分からないというオチが待っていることがあります。
src.rpm 化しておけば、それが防げるので、多少面倒ですが、
中途半端でも specファイルを書いておく方が良いのではないかと思ってます。
#私の spec ファイルもかなり中途半端ですしね。^-^;

簡単な作り方です。

1) ソースファイル、パッチは rpm/SOURCES におく。
# cp xrdp-4.1.tar.gz xrdp-0.4.1-ja.diff /home/username/rpm/SOURCES

2) rpm/SPECSディレクトリで specファイルを作成 (詳細は後述)
# cd /home/username/rpm/SPECS
# vi xrdp-4.1-1.spec

3) rpm, src.rpm パッケージの作成
ここは、何度も繰り返しながら完成に近づける…という感じでしょうか。
spec ファイルが完璧なら繰り返す必要はありませんが。^-^;

パッチの適用、コンパイル、パッケージのインストールがちゃんと行えるか
どうかをチェックする場合は、下記のオプションを利用するとよいです。

%prep まで行う (ソースの展開とパッチの適用)
# rpmbuild -bp xrdp-4.1-1.spec
%build まで (makeに該当)
# rpmbuild -bc xrdp-4.1-1.spec
%install まで (make installに該当)
# rpmbuild -bi xrdp-4.1-1.spec

バイナリ作成がうまくできる場合は、下記のオプションを利用し、
rpmを作成します。

rpm のみを作成
# rpmbuild -bb xrdp-4.1-1.spec
src.rpm を作成
# rpmbuild -bs xrdp-4.1-1.spec
rpm, src.rpm を作成
# rpmbuild -ba xrdp-4.1-1.spec

src.rpm を元に作る場合は下記の通り。
src.rpm をインストールした後に上記を使うのもありです。
# rpmbuild --rebuild xrdp-4.1-1.src.rpm

===========================================================
spec ファイル
===========================================================

spec ファイルにはパッケージの概要、ソースファイル、パッチ、
ビルド方法、パッケージの構成ファイル、チェンジログなどが
含まれています。
CentOS などの場合、バイナリ・ライブラリ・開発者向けパッケージのように
複数の rpm パッケージに分けられている場合があります。

bzip2 の場合:
- bzip2-1.0.3-4.el5_2
- bzip2-libs-1.0.3-4.el5_2
- bzip2-devel-1.0.3-4.el5_2

このような形で作成する場合も spec ファイルは 1つで済みます。
今回はそこまでこだわっていないので xrdp-4.1-1.rpm という
ファイル1つのみ作成するようにしています。
(分ける必要があるほどの内容ではないので)

下記は spec ファイルの内容の簡単な説明です。
xrdp-4.1用のspecファイルはかなり大雑把に作っています。
気が向いたら、そのうち修正するかもしれません。

Summary: 概要
Name: パッケージの名前
Version: バージョン
Release: 内部リリース
License: ライセンス
Group: パッケージのグループ(情報は/usr/share/doc/rpm-*/GROUPSに書いてある)
Source0: %{name}-%{version}.tar.gz
ソースファイル名、複数ある場合は Source1, Source2 のようにする
Patch0: %{name}-%{version}-ja.diff
パッチファイル名、複数ある場合は Patch1, Patch2 のようにする
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
rpm作成時に利用するディレクトリ
Provides: /bin/sh
Requires: vnc-server
利用時に必要なパッケージ、コマンド

これら以外にバイナリ作成に必要なパッケージの定義などが行えます。
これらの変数は %{name} のようにすることで、使い回せます。
(ソース、パッチを参照)

%description は詳細情報

%prep は準備(rpm -bp で行う)を定義
%setup -q -n %{name}-%{version} はセットアップ用のマクロです。
tar.gz, tar.bz2 等を自動的に補完し、ソースファイルを
rpm/BUILD 以下に展開します。
%patch0 -p1 はパッチの適用マクロです。
ここでは Patch0 で定義されたパッチを適用します。
オプションはpatchコマンドのもので、必要な場合は追加します。

%build はバイナリの作成部分。
マクロだけではなく、コマンドをそのまま書くこともできます。
今回は make コマンドを記述。

%install は make install 部分。
$RPM_BUILD_ROOT はバイナリインストール先。
作業用ディレクトリを作成している場合は一回削除しています。
その後、インストール。
./configure, make, make install を利用するアプリケーションの場合、
Makefile にインストール先を変更できるようにされていたりするので、

make prefix="RPM_BUILD_ROOT" install

とすれば良かったりします。
#この場合、1行で済む

今回の xrdp はそこまでちゃんと作られていないため、
Makefile から install 部分を抽出して、インストール先を変更しています。
そのため、かなり長くになっています。


%clean は make clean と同じ
%post は rpm をインストール後にファイルの書き換え等の作業を行いたい場合、
定義します。
%postun は rpm のアンインストール時に作業を行いたい場合に書きます。

%files はrpm作成時のファイルを定義。
ディレクトリを定義することで、それ以下のファイルをすべてパッケージに加えます。

%changelog は変更時のメモ。ここに記述しておくと rpm コマンドで確認できる。
今回は面倒だったので省略。^-^;

と大体こんな感じ。

Summary: xrdp - An open source remote desktop protocol(rdp) server.
Name: xrdp
Version: 0.4.1
Release: 1
License: GPL
Group: Applications/Communications
Source0: %{name}-%{version}.tar.gz
Patch0: %{name}-%{version}-ja.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Provides: /bin/sh
Requires: vnc-server

%description
Based on the work of rdesktop, xrdp uses the remote desktop protocol to 
present a GUI to the user.

The goal of this project is to provide a fully functional Linux terminal 
server, capable of accepting connections from rdesktop and Microsoft's own 
terminal server / remote desktop clients.

Unlike Windows NT/2000/2003/2008 server, xrdp will not display a Windows 
desktop but an X window desktop to the user.

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

%build
make

%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
DESTDIR="${RPM_BUILD_ROOT}/usr/local/xrdp"
CFGDIR="${RPM_BUILD_ROOT}/etc/xrdp"
PIDDIR="${RPM_BUILD_ROOT}/var/run"
MANDIR="${RPM_BUILD_ROOT}/usr/local/man"
DOCDIR="${RPM_BUILD_ROOT}/usr/doc/xrdp"
 mkdir -p ${DESTDIR}
 mkdir -p ${CFGDIR}
 mkdir -p ${PIDDIR}
 mkdir -p ${MANDIR}
 mkdir -p ${DOCDIR}
  #make -C vnc install
  install vnc/libvnc.so ${DESTDIR}/libvnc.so
  #make -C libxrdp install
  install libxrdp/libxrdp.so ${DESTDIR}/libxrdp.so
  #make -C xrdp install
  install xrdp/ad256.bmp ${DESTDIR}/ad256.bmp
  install xrdp/xrdp256.bmp ${DESTDIR}/xrdp256.bmp
  install xrdp/cursor0.cur ${DESTDIR}/cursor0.cur
  install xrdp/cursor1.cur ${DESTDIR}/cursor1.cur
  install xrdp/Tahoma-10.fv1 ${DESTDIR}/Tahoma-10.fv1
  install xrdp/xrdp.ini ${CFGDIR}/xrdp.ini
  install xrdp/rsakeys.ini ${CFGDIR}/rsakeys.ini
  install xrdp/xrdp ${DESTDIR}/xrdp
  #make -C rdp install
  install rdp/librdp.so ${DESTDIR}/librdp.so
  #make -C sesman install
  install sesman/sesman ${DESTDIR}/sesman
  install sesman/startwm.sh ${DESTDIR}/startwm.sh
  install sesman/sesman.ini ${CFGDIR}/sesman.ini
  install sesman/sessvc ${DESTDIR}/sessvc
   #make -C tools install
   install sesman/tools/sesrun ${DESTDIR}/sesrun
   install sesman/tools/sestest ${DESTDIR}/sestest
   #make -C libscp install
   install sesman/libscp/libscp.so ${DESTDIR}/libscp.so
  #make -C xup install
  install xup/libxup.so ${DESTDIR}/libxup.so
  #make -C docs install
  #make -C docs installdeb
  mkdir ${MANDIR}/man8
  install docs/man/sesman.8 ${MANDIR}/man8/sesman.8
  install docs/man/sesrun.8 ${MANDIR}/man8/sesrun.8
  install docs/man/xrdp.8 ${MANDIR}/man8/xrdp.8
  mkdir ${MANDIR}/man5
  install docs/man/sesman.ini.5 ${MANDIR}/man5/sesman.ini.5
  install docs/man/xrdp.ini.5 ${MANDIR}/man5/xrdp.ini.5

 if [ -d /etc/pam.d ]; then
  [ "$RPM_BUILD_ROOT" != "/" ] && mkdir ${RPM_BUILD_ROOT}/etc/pam.d
  install instfiles/pam.d/sesman ${RPM_BUILD_ROOT}/etc/pam.d/sesman;
 fi
 install instfiles/xrdp_control.sh ${DESTDIR}/xrdp_control.sh


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

%post
%postun

%files
%defattr(-,root,root)
/usr
/etc
/var

%changelog


最新の画像もっと見る

コメントを投稿