Subversion Repositories livecd

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

# -------------------------------------------------------------------------------------------
#
# How to build for SMP and UP kernel
#
#  rpmbuild -ba --target i686   --define 'kernel 2.6.9-42.0.2.EL' unionfs.spec
#  rpmbuild -ba --target x86_64 --define 'kernel 2.6.9-42.0.2.EL' unionfs.spec
#
# or only for UP kernel
#
#  rpmbuild -ba --target i686   --define 'kernel 2.6.9-42.0.2.EL' --define 'buildsmp 0' unionfs.spec
#  rpmbuild -ba --target x86_64 --define 'kernel 2.6.9-42.0.2.EL' --define 'buildsmp 0' unionfs.spec
#
#
# for the running kernel:
#
#  rpmbuild -ba --target i686   unionfs.spec
#  rpmbuild -ba --target x86_64 unionfs.spec
#
# -------------------------------------------------------------------------------------------

%{!?buildsmp:%define buildsmp 1}

%{?!kernel:%define kernel %(rpm -q kernel-devel | tail -1 | sed -e 's|kernel-devel-||')}

%define kversion %(echo "%{kernel}" | sed -e 's|-.*||')
%define krelease %(echo "%{kernel}" | sed -e 's|.*-||')

%define kernel_src_path %{_usrsrc}/kernels/%{kernel}-%{_target_cpu}
%define kernel_smp_src_path %{_usrsrc}/kernels/%{kernel}-smp-%{_target_cpu}

%define kernel_moduledir /lib/modules/%{kernel}
%define kernel_smp_moduledir /lib/modules/%{kernel}smp

%define pkg_name unionfs
%define kmdl_name kernel-module-%{pkg_name}-%{kernel}

# -------------------------------------------------------------------------------------------

Summary:        A Stackable Unification File System
Name:           %{pkg_name}
Version:        1.1.5
Release:        2.sl4.psi
Epoch:          0
Packager:       Urs Beyerle <urs.beyerle@psi.ch>
License:        GPL
Group:          System Environment/Kernel
Source0:        ftp://ftp.fsl.cs.sunysb.edu/pub/unionfs/%{name}-%{version}.tar.gz
URL:            http://www.am-utils.org/project-unionfs.html
Patch0:         unionfs-1.1.5-rhel4.patch
Patch1:         unionfs-1.1.5-kernel-2.6.9-42.0.2.EL.patch
Patch2:         unionfs-1.1.5-Makefile.patch
Patch3:         unionfs-1.1.5-copyup-security.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Requires:       kernel-module-%{pkg_name} >= %{version}-%{release}
BuildRequires:  kernel-devel = %{kernel}, 
%if %{buildsmp}
BuildRequires:  kernel-smp-devel = %{kernel}
%endif

%description
This project builds a stackable unification file system, which 
can appear to merge the contents of several directories (branches), 
while keeping their physical content separate. Unionfs is useful 
for unified source tree management, merged contents of split 
CD-ROM, merged separate software package directories, data grids, 
and more. Unionfs allows any mix of read-only and read-write 
branches, as well as insertion and deletion of branches anywhere 
in the fan-out. To maintain unix semantics, Unionfs handles 
elimination of duplicates, partial-error conditions, and more. 
Unionfs is part of the larger FiST project.

Kernel modules for unionfs are in kernel-module-%{pkg_name} rpms.

%package -n     %{kmdl_name}
Summary:        kernel modules for %{name}.
Group:          System Environment/Kernel
License:        GPL
Provides:       kernel-module-%{pkg_name} = %{epoch}:%{version}-%{release}
Requires:       %{pkg_name}

%description -n %{kmdl_name}
Kernel modules for %{name}.

%if %{buildsmp}

%package -n     %{kmdl_name}smp
Summary:        smp kernel modules for %{name}.
Group:          System Environment/Kernel
License:        GPL
Provides:       kernel-module-%{pkg_name} = %{epoch}:%{version}-%{release}
Requires:       %{pkg_name}

%description -n %{kmdl_name}smp
SMP kernel modules for %{name}.

%endif

%prep
%setup -q

%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1

%build
echo -e "\nDriver version: %{version}\nKernel version: %{kernel}\n"

### build statically linked unionctl
make clean
cp -a Makefile Makefile.ori
sed -i "s|^CC.*=.*gcc|CC      = gcc -static|" Makefile
make unionctl
cp -a unionctl unionctl.static
mv -f Makefile.ori Makefile

### UP kernel
make clean
KVERS="%{kernel}" PREFIX=${RPM_BUILD_ROOT}%{_prefix} make

INST_MODLIB="${RPM_BUILD_ROOT}/lib/modules/%{kernel}/kernel"
mkdir -p "${INST_MODLIB}/fs/unionfs"
install -p -m 744 unionfs.ko "${INST_MODLIB}/fs/unionfs/"

### SMP kernel
%if %{buildsmp}

make clean
KVERS="%{kernel}smp" PREFIX=${RPM_BUILD_ROOT}%{_prefix} make

INST_MODLIB="${RPM_BUILD_ROOT}/lib/modules/%{kernel}smp/kernel"
mkdir -p "${INST_MODLIB}/fs/unionfs"
install -p -m 744 unionfs.ko "${INST_MODLIB}/fs/unionfs/"

%endif

%install
# "make install-utils" does not work - we do it manually
# PREFIX=${RPM_BUILD_ROOT}/%{_prefix} make install-utils

mkdir -p ${RPM_BUILD_ROOT}/%{_prefix}/sbin
mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man4
mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man8

cp unionctl ${RPM_BUILD_ROOT}/%{_prefix}/sbin
cp unionctl.static ${RPM_BUILD_ROOT}/%{_prefix}/sbin
cp uniondbg ${RPM_BUILD_ROOT}/%{_prefix}/sbin
cp unionimap ${RPM_BUILD_ROOT}/%{_prefix}/sbin

cp man/unionfs.4 ${RPM_BUILD_ROOT}/%{_mandir}/man4
cp man/unionctl.8 ${RPM_BUILD_ROOT}/%{_mandir}/man8
cp man/uniondbg.8 ${RPM_BUILD_ROOT}/%{_mandir}/man8

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

%postun -n %{kmdl_name}
depmod -a %{kernel} >/dev/null 2>&1 || :        

%post -n %{kmdl_name}
depmod -a %{kernel} >/dev/null 2>&1 || :

%if %{buildsmp}
%postun -n %{kmdl_name}smp
depmod -a %{kernel}smp >/dev/null 2>&1 || :

%post -n %{kmdl_name}smp
depmod -a %{kernel}smp >/dev/null 2>&1 || :
%endif

%files 
%defattr(-,root,root,-)
%doc AUTHORS BUGS ChangeLog COPYING INSTALL NEWS README
%{_prefix}/sbin/*
%{_mandir}/man4/*
%{_mandir}/man8/*

%files -n %{kmdl_name}
%defattr(-,root,root,-)
/lib/modules/%{kernel}/kernel/fs/unionfs

%if %{buildsmp}
%files -n %{kmdl_name}smp
%defattr(-,root,root,-)
/lib/modules/%{kernel}smp/kernel/fs/unionfs
%endif

%changelog
* Mon Oct 16 2006 Urs Beyerle <urs.beyerle@psi.ch>  1.1.5-2.sl4.psi
- add unionctl.static (statically linked unionctl), needed for LiveCD

* Thu Aug 31 2006 Urs Beyerle <urs.beyerle@psi.ch>  1.1.5-1.sl4.psi
- inital build.