[Spread-users] RPM package and some questions

Daniel Rall dlr at finemaltcoding.com
Tue Aug 20 15:33:25 EDT 2002


Juan Carlos CORUÑA <jcoruna at ibdosnorte.com> writes:

> I'm trying to compile a RPM package, but I still have problems
> writing a script to start and stop spread.

Performing quick restarts (especially on loaded servers) is not
possible on some operating systems (Linux, for instance) without my
SO_REUSEADDR patch (still not committed to CVS by the maintainers for
some unknown reason).  You can grab it out of the list archive.

> Has anybody compiled a RPM package yet? Can you mail me a copy?

CollabNet has one which we use internally, but it's a bit of a mess
(specifically, the installation section).  If you're able to clean it
up, would you mind posting your improvments?

--- snip ---
Summary: Spread
Name: spread
%define spread_dir /var/run/spread
%define dir_version 3.16.2
Version: %{dir_version}
Epoch: 1
Release: sourcecast.6
Source: %{name}-src-%{version}.tar.gz
Patch0: build.xml.patch
Patch1: so_reuseaddr.patch
Patch2: server_msg_queue_size.patch
Group: Networking/Daemons
URL: http://www.spread.org
Copyright: Spread Open Source License
BuildRoot: %{_tmppath}/%{name}-buildroot
Packager: CollabNet Release Engineering <dev at releng.extranet.collab.net>
BuildRequires: ant

%package perl
Summary: perl
Group: Networking/Daemons

%package java
Summary: java
Group: Networking/Daemons

%description
spread

%description perl
Spread client library Perl implementation

%description java
Spread client library Java implementation

%prep

%setup -n %{name}-src-%{version}
%patch0 -p1
%patch1 -p0
%patch2 -p0

%build
%ifos Linux
ln -s $RPM_BUILD_DIR/%{name}-src-%{dir_version}/LINUX_makefile $RPM_BUILD_DIR/%{name}-src-%{dir_version}/Makefile
%endif

%ifos solaris2.8
ln -s $RPM_BUILD_DIR/%{name}-src-%{dir_version}/SOLARIS_makefile $RPM_BUILD_DIR/%{name}-src-%{dir_version}/Makefile
%endif

make

cd $RPM_BUILD_DIR/%{name}-src-%{dir_version}/perl/Spread
CFLAGS="$RPM_OPT_FLAGS" perl Makefile.PL
make PREFIX=$RPM_BUILD_ROOT/%{_prefix}

cd $RPM_BUILD_DIR/%{name}-src-%{dir_version}/java
ant -Dsrc.java.dir=%{name}
%install


[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_prefix}/bin
mkdir -p $RPM_BUILD_ROOT/usr/local/lib
mkdir -p $RPM_BUILD_ROOT/usr/lib/java
mkdir -p $RPM_BUILD_ROOT%{_prefix}/include
mkdir -p $RPM_BUILD_ROOT%{_prefix}/man/man1
mkdir -p $RPM_BUILD_ROOT%{_prefix}/man/man3


cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/spread $RPM_BUILD_ROOT%{_prefix}/bin/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/spflooder $RPM_BUILD_ROOT%{_prefix}/bin/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/spmonitor $RPM_BUILD_ROOT%{_prefix}/bin/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/spuser $RPM_BUILD_ROOT%{_prefix}/bin/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/sptuser $RPM_BUILD_ROOT%{_prefix}/bin/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/libsp.a $RPM_BUILD_ROOT/usr/local/lib/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/libtsp.a $RPM_BUILD_ROOT/usr/local/lib/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/sp.h $RPM_BUILD_ROOT%{_prefix}/include/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/sp_func.h $RPM_BUILD_ROOT%{_prefix}/include/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/sp_events.h $RPM_BUILD_ROOT%{_prefix}/include/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/docs/*.3 $RPM_BUILD_ROOT%{_prefix}/man/man3/
cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/docs/*.1 $RPM_BUILD_ROOT%{_prefix}/man/man1/


cd $RPM_BUILD_DIR/%{name}-src-%{dir_version}/perl/Spread
eval `perl '-V:installarchlib'`
mkdir -p $RPM_BUILD_ROOT/$installarchlib
make PREFIX=$RPM_BUILD_ROOT%{_prefix} install

[ -x %{_prefix}/lib/rpm/brp-compress ] && %{_prefix}/lib/rpm/brp-compress

find $RPM_BUILD_ROOT%{_prefix}/lib/perl5 -type f -print | sed "s@^$RPM_BUILD_ROOT@@g" | grep -v perllocal.pod > $RPM_BUILD_DIR/%{name}-src-%{dir_version}/%{name}-%{dir_version}-filelist

cp $RPM_BUILD_DIR/%{name}-src-%{dir_version}/java/dest/*.jar $RPM_BUILD_ROOT/usr/lib/java/.

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

%files
%defattr(- root root)
%attr(0755, root, root) %{_prefix}/bin/*
%{_prefix}/include/*
/usr/local/lib/lib*
%{_prefix}/man/man1/*
%{_prefix}/man/man3/*


%files perl -f %{name}-%{dir_version}-filelist
%defattr(- root root)

%files java
%defattr(- root root)
/usr/lib/java/*

%pre
groupadd -g 5600 spread
useradd -u 5600 -d %{spread_dir} -g spread -c 'Spread daemon user' -s /bin/false spread || /bin/true

%postun
if [ $1 = 0 ]; then
    userdel spread
    groupdel spread || true
    rm -rf %{spread_dir}
fi

%changelog
* Fri Apr 19 2002 <dlr at collab.net>
 - Fixed socket creation in so_reuseaddr.patch and .spec BUILD path
* Fri Apr 05 2002 <dlr at collab.net>
 - Updated to 3.16.2
* Mon Apr 01 2002 <dlr at collab.net>
 - Increased dameon msg queue size from 1k to 5k
 - Updated to 3.16.2rc1
* Tue Jan 08 2002 <dlr at collab.net>
 - Added use of the socket option SO_REUSEADDR to the daemon
* Fri Dec 14 2001 <lucas at collab.net>
 - Updated to 3.16.1
* Thu Nov 01 2001 <lucas at collab.net>
 - Updated to 3.16.1rc1
 - used new dir_version variable
 - took out some of the patches 
* Tue Aug 07 2001 <dlr at collab.net>
 - Added Leonard Richardson's <leonardr at collab.net> impls. of hashCode()
* Tue Aug 07 2001 <lucas at collab.net>
 - Giving the spread user a set UID/GID
 - Hard-coding the path to the spread.jar
 - Fixed Summary
 - Bumped release number
* Tue Aug 07 2001 <dlr at collab.net>
 - Added creation/deletion of Unix user and group for Spread daemon, with a
   home directory of /var/run/spread (as per spread_params.h)
* Mon Aug 06 2001 <stephane at collab.net>
 - Added brp-compress line so perl filelist is built correctly.
 - Changed RPM to use %{_prefix}.
* Thu Aug 02 2001 <dlr at collab.net>
 - Added patches to Java code.  Code reduction to SpreadGroup, and major
   bug fix to SpreadConnection which brings connect() in line with the C API
   version of the same.
* Tue Jul 24 2001 <stephane at collab.net>
 - Initial packaging.
--- snip ---


> Another question is about the user/group you run spread. What is the
> recommendation? Do you create a system user/group called spread?

Yes.

> How do you run spread? Maybe "su -c spread spread"? And the
> redirection of the stdout?

We run spread via DJB's supervise; if the daemon process crashes,
supervise will re-start it.
-- 

Daniel Rall <dlr at finemaltcoding.com>




More information about the Spread-users mailing list