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' squashfs.spec
# rpmbuild -ba --target x86_64 --define 'kernel 2.6.9-42.0.2.EL' squashfs.spec
#
# or only for UP kernel
#
# rpmbuild -ba --target i686 --define 'kernel 2.6.9-42.0.2.EL' --define 'buildsmp 0' squashfs.spec
# rpmbuild -ba --target x86_64 --define 'kernel 2.6.9-42.0.2.EL' --define 'buildsmp 0' squashfs.spec
#
#
# for the running kernel:
#
# rpmbuild -ba --target i686 squashfs.spec
# rpmbuild -ba --target x86_64 squashfs.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 squashfs
%define kmdl_name kernel-module-%{pkg_name}-%{kernel}
# -------------------------------------------------------------------------------------------
%define kernel_patch_version 2.6.10
# this is for 3.1-r2
%define squashfs_release 2
%define squashfs_version 3.1
Summary: A Read-Only File System with Efficient Compression
Name: %{pkg_name}
Version: %{squashfs_version}.%{squashfs_release}
Release: 1.sl4.psi
Epoch: 0
Packager: Urs Beyerle <urs.beyerle@psi.ch>
License: GPL
Group: System Environment/Kernel
Source0: %{name}%{squashfs_version}-r%{squashfs_release}.tar.gz
URL: http://squashfs.sourceforge.net/
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
Squashfs is a compressed read-only filesystem for Linux.
Squashfs is intended for general read-only filesystem use.
This package contains the userland utilities to create and read
squashfs images.
Kernel modules for squashfs 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 -n %{name}%{squashfs_version}-r%{squashfs_release}
# %patch
# turn patch into plain sources :-/
patch -f -p2 < linux-%{kernel_patch_version}/squashfs3.1-patch || true
mv linux squashfs/.
echo '#define CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE 3' >> squashfs/squashfs.h
%build
echo -e "\nDriver version: %{version}\nKernel version: %{kernel}\n"
### build the squashfs-tools
make -C squashfs-tools \
CFLAGS="-I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $RPM_OPT_FLAGS"
### prepare source
rm -rf obj
mkdir obj
cp -r squashfs obj
cd obj/squashfs
# point to right header files
sed -i 's|#include <linux/squashfs_fs.h>|#include "linux/squashfs_fs.h"|' *.c
sed -i 's|#include <linux/squashfs_fs_sb.h>|#include "linux/squashfs_fs_sb.h"|' *.c
sed -i 's|#include <linux/squashfs_fs_i.h>|#include "linux/squashfs_fs_i.h"|' *.c
sed -i 's|#include <linux/squashfs_fs.h>|#include "squashfs_fs.h"|' linux/*.h
sed -i 's|#include <linux/squashfs_fs_sb.h>|#include "squashfs_fs_sb.h"|' linux/*.h
sed -i 's|#include <linux/squashfs_fs_i.h>|#include "squashfs_fs_i.h"|' linux/*.h
export CONFIG_SQUASHFS=m
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
export INSTALL_MOD_DIR=kernel/fs
### UP kernel module
make -C %{kernel_src_path} M=$PWD clean
rm -f *.o *.ko
make -C %{kernel_src_path} M=$PWD modules
mkdir -p $RPM_BUILD_ROOT/%{kernel_moduledir}/kernel/fs/squashfs
cp -a squashfs.ko $RPM_BUILD_ROOT/%{kernel_moduledir}/kernel/fs/squashfs/
### SMP kernel module
%if %{buildsmp}
make -C %{kernel_smp_src_path} M=$PWD clean
rm -f *.o *.ko
make -C %{kernel_smp_src_path} M=$PWD modules
mkdir -p $RPM_BUILD_ROOT/%{kernel_smp_moduledir}/kernel/fs/squashfs
cp -a squashfs.ko $RPM_BUILD_ROOT/%{kernel_smp_moduledir}/kernel/fs/squashfs/
%endif
%install
mkdir -p $RPM_BUILD_ROOT/usr/bin
cp -p squashfs-tools/*squashfs $RPM_BUILD_ROOT/usr/bin
%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 README README-3.1 PERFORMANCE.README COPYING CHANGES ACKNOWLEDGEMENTS INSTALL
/usr/bin/mksquashfs
/usr/bin/unsquashfs
%files -n %{kmdl_name}
%defattr(-,root,root,-)
%{kernel_moduledir}/kernel/fs/squashfs
%if %{buildsmp}
%files -n %{kmdl_name}smp
%defattr(-,root,root,-)
%{kernel_smp_moduledir}/kernel/fs/squashfs
%endif
%changelog
* Sun Oct 15 2006 Urs Beyerle <urs.beyerle@psi.ch> 3.1.r2-1.sl4.psi
- #include <linux/squash...> -> #include "squash..."
- #define CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE 3 (the default)
- no patching of do_mounts, so no initrd support
- build for RHEL kernel 2.6.9