Archive for 2月, 2009

2月 21st, 2009

シェルぜ for文で区切り位置を改? にする

Posted in Linux by admin

 あるファイルからshぜ for文を利用してリスト処理をさせたい場合、以? のようなファイルの場合では改? ではなぜ 、空白を区切り位置として扱ってしまう。

$ cat test
aaa bbb ccc
111 222

$ for var in `cat list.txt`; do echo $var; done
aaa
bbb
ccc
111
222

 これを改? ? にリスト処理させたい場合は、予約変? IFSを定義してからfor文を実行すればいい。以? のようになります。

$ IFS=$'\n'; for var in `cat list.txt`; do echo $var; done
aaa bbb ccc
111 222
2月 9th, 2009

カスタムRPM作成方?

Posted in Linux by admin

 Redhat上でカスタムRPMを作成する場合、/usr/src/redhat配下で? 業を行います。ソー゜ RPMをインストールした場合もここにソースがインストールされるようになっています。root権限がない場合は、以? のような手順で別ディレクトリで? 業することも可能です。

$ vi ~/.rpmmacros
%_topdir    /home/user/redhat
$ rpm --eval %_topdir
/home/user/redhat
$ mkdir -p ~/redhat/{BUILD,SOURCES,SPECS,RPMS,SRPMS}

 カスタムRPM作成時に? 番やっかいな? 業がspecファイルの? 成です。specファイルは、RPMを作成に? 要な情報をすべて? 述した設? ファイルです。このファイルさえあれば、あとは以下のコマンドで? 成可能です。rpmbuildのオプションは、bbぜ RPMのみを作成、baぜ SRPMぜ RPMを作成します。

# cd /usr/src/redhat
# ls SOURCES/httpd-2.2.10.tar.gz
# ls SPECS/httpd.spec
# rpmbuild -bb SPECS/httpd.spec

 specファイルを一から作るのは大変なので、既圭 のファイルを流用するのが一番です。Apache httpdの場合、展開したディレクトリ直? に「httpd.spec」というファイルが存在しているのでこれを利用します。
httpdの場合、以? のセクションをカスタマイズしました。インストール先ディレクトリぜ configure時のコンパイルオプションを変更できればだいたいのカスタマイズに対応できるのではないでしょうか。

%define installdir /usr/local/apache
%build
function mpmbuild()
{
mpm=$1; shift
cat > config.cache <<EOF
ac_cv_func_pthread_mutexattr_setpshared=no
ac_cv_func_sem_open=no
EOF
./configure -C \
	--prefix=%{installdir} \
	--with-included-apr \
	--enable-suexec --with-suexec \
	--with-suexec-caller=%{suexec_caller} \
	--enable-pie \
	--with-pcre \
	--enable-ssl --with-ssl --enable-distcache \
	--enable-proxy \
	--enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
	--with-ldap --enable-ldap --enable-authnz-ldap \
	--enable-cgid \
	--enable-authn-anon --enable-authn-alias \
	$*

make %{?_smp_mflags}
}

さらぜ Apache2.0系ぜ Apache付属ぜ APRを使用する場合を想? し、以? のように? 更してみました。

function mpmbuild()
{
mpm=$1; shift
cat > config.cache <<EOF
ac_cv_func_pthread_mutexattr_setpshared=no
ac_cv_func_sem_open=no
EOF
rm -rf $RPM_BUILD_ROOT
pushd srclib/apr
./configure \
	--prefix=%{installdir}/apr
make
make DESTDIR=$RPM_BUILD_ROOT install
popd
pushd srclib/apr-util
./configure \
	--prefix=%{installdir}/apr \
	--with-apr=%{installdir}/apr \
	--with-ldap \
	--with-ldap-include=/usr/include \
	--with-ldap-lib=/usr/lib
make
make DESTDIR=$RPM_BUILD_ROOT install
popd
LDFLAGS="-L%{installdir}/apr/lib" \
CFLAGS="-I%{installdir}/apr/include" \
./configure \
	--prefix=%{installdir} \
	--enable-suexec --with-suexec-caller \
	--enable-mods-shared=all \
	--enable-ssl --with-ssl --enable-distcache \
	--enable-proxy \
	--enable-cache --enable-mem-cache \
	--enable-file-cache --enable-disk-cache \
	--enable-ldap --enable-auth-ldap \
	--enable-cgid \
	--enable-auth-anon \
	--with-apr=%{installdir}/apr \
	--with-apr-util=%{installdir}/apr \
	$*

make %{?_smp_mflags}
}

Tomcatの場合、バイナリ版であればビルドは? 要なので、以? のようにシンプルぜ specファイルになります。

%define installdir /usr/local/tomcat
%define debug_package %{nil}
%define __os_install_post %{nil}

Summary: Apache Servlet/JSP Engine
Name: tomcat6
Version: 6.0.18
Release: 1
URL: http://tomcat.apache.org/
Vendor: Apache Software Foundation
Source0: http://archive.apache.org/dist/tomcat/tomcat-6/v%{version}/bin/apache-tomcat-%{version}.tar.gz
License: Apache software License
Group: Networking/Daemons
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-root

%description
Tomcat is the servlet container that is used in the official Reference
Implementation for the Java Servlet and JavaServer Pages technologies.
The Java Servlet and JavaServer Pages specifications are developed by
Sun under the Java Community Process.

Tomcat is developed in an open and participatory environment and
released under the Apache Software License. Tomcat is intended to be
a collaboration of the best-of-breed developers from around the world.
We invite you to participate in this open development project. To
learn more about getting involved, click here.

%prep
%setup -q -n apache-tomcat-%{version}

%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{installdir}
cp -pr * $RPM_BUILD_ROOT%{installdir}

%pre

%post

%preun

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)

%dir %{installdir}/
%{installdir}/bin
%{installdir}/conf
%{installdir}/lib
%{installdir}/logs
%{installdir}/temp
%{installdir}/webapps
%{installdir}/work
%{installdir}/RELEASE-NOTES
%{installdir}/RUNNING.txt
%{installdir}/LICENSE
%{installdir}/NOTICE