RPMs get upgraded by installing the new one, then uninstalling the
[util-vserver.git] / util-vserver.spec.in
index 77198bf..78fad84 100644 (file)
+# $Id: util-vserver.spec.in,v 1.49 2005/07/15 19:06:58 ensc Exp $
+
+## This package understands the following switches:
+## --without dietlibc        ...   disable usage of dietlibc
+## --without xalan           ...   do not require/use the xalan xslt processor
+
+%global confdir                %_sysconfdir/vservers
+%global confdefaultdir %confdir/.defaults
+%global pkglibdir      %_libdir/%name
+%global __chattr       /usr/bin/chattr
+%global chkconfig      /sbin/chkconfig
+
+%global _localstatedir %_var
+
+
+%{!?release_func:%global release_func() %1%{?dist}}
+
 %define name @PACKAGE@
 %define version @VERSION@
-%define release 6.planetlab%{?date:.%{date}}
+%define release 11%{?pldistro:.%{pldistro}}%{?date:.%{date}}
+
+%define _without_dietlibc 1
+%define _without_xalan 1
+
+# don't build debuginfo RPM
+%define debug_package %{nil}
 
 Vendor: PlanetLab
 Packager: PlanetLab Central <support@planet-lab.org>
 Distribution: PlanetLab 3.0
 URL: http://cvs.planet-lab.org/cvs/util-vserver
 
-%define __chattr       /usr/bin/chattr
-
 Summary:       Linux virtual server utilities
-Name:          %{name}
-Version:       %{version}
+Name:          @PACKAGE@
+Version:       @VERSION@
 Release:       %{release}
-Epoch:         0
-Copyright:     GPL
+License:       GPL
 Group:         System Environment/Base
+#URL:          http://savannah.nongnu.org/projects/util-vserver/
 Source0:       http://savannah.nongnu.org/download/util-vserver/stable.pkg/%version/%name-%version.tar.bz2
-Provides:      %name-devel = %epoch:%version-%release
 BuildRoot:     %_tmppath/%name-%version-%release-root
-Provides:      vserver = %epoch:%version-%release
-Conflicts:     vserver < %epoch:%version-%release
-Conflicts:     vserver > %epoch:%version-%release
-BuildRequires: e2fsprogs-devel
-Requires(post):        %__chattr
-
-%package linuxconf
-Summary:       Linuxconf administration modules for vservers
-Group:         Applications/System
-Requires:      %name = %epoch:%version-%release
-Provides:      vserver-admin = %epoch:%version-%release
-Conflicts:     vserver-admin < %epoch:%version-%release
-Conflicts:     vserver-admin > %epoch:%version-%release
+Requires:      init(%name)
+Requires:      %name-core = %version-%release
+Requires:      %name-lib  = %version-%release
+Requires:      diffutils mktemp sed
+Provides:      vserver = %version-%release
+Obsoletes:     vserver < %version
+BuildRequires: mount vconfig gawk iproute iptables
+BuildRequires: gcc-c++ wget which diffutils
+BuildRequires: e2fsprogs-devel beecrypt-devel
+BuildRequires: doxygen tetex-latex
+Requires(pre):         %pkglibdir
+Requires(postun):      %pkglibdir
+%{!?_without_dietlibc:BuildRequires:   dietlibc >= 0:0.25}
+%{!?_without_xalan:BuildRequires:      xalan-j}
+
+%package lib
+Summary:               Dynamic libraries for util-vserver
+Group:                 System Environment/Libraries
+
+%package core
+Summary:               The core-utilities for util-vserver
+Group:                 Applications/System
+Requires:              util-linux
+
+%package build
+Summary:               Tools which can be used to build vservers
+Group:                 Applications/System
+Requires:              rpm wget binutils tar e2fsprogs
+Requires:              %name = %version-%release
+Requires(pre):         %confdir
+Requires(postun):      %confdir
+
+%package sysv
+Summary:               SysV-initscripts for vserver
+Group:                 System Environment/Base
+Provides:              init(%name) = sysv
+Requires:              make diffutils
+Requires:              initscripts
+Requires:              %name = %version-%release
+Requires(post):                %chkconfig
+Requires(preun):       %chkconfig
+Requires(pre):         %_initrddir %pkglibdir
+requires(postun):      %_initrddir %pkglibdir
+
+%package legacy
+Summary:               Legacy utilities for util-vserver
+Group:                 Applications/System
+Requires:              %name = %version-%release
+Requires(post):                %chkconfig
+Requires(preun):       %chkconfig
+Requires(pre):         %_initrddir %pkglibdir
+requires(postun):      %_initrddir %pkglibdir
+
+%package devel
+Summary:               Header-files and libraries needed to develop vserver based applications
+Group:                 Development/Libraries
+Requires:              pkgconfig
+Requires:              %name-lib = %version-%release
+
+%package python
+Summary:               Python modules for manipulating vservers
+Group:                 Applications/System
+Requires:              python util-python
+Obsoletes:             util-vserver-py23
+
 
 %description
-This package provides the components and a framework to setup virtual
+util-vserver provides the components and a framework to setup virtual
 servers.  A virtual server runs inside a linux server. It is nevertheless
 highly independent. As such, you can run various services with normal
 configuration. The various vservers can't interact with each other and
@@ -43,64 +115,129 @@ can't interact with services in the main server.
 This requires a special kernel supporting the new new_s_context and
 set_ipv4root system call.
 
+%description lib
+util-vserver provides the components and a framework to setup virtual
+servers.  A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This package contains the shared libraries needed by all other
+'util-vserver' subpackages.
+
+%description core
+util-vserver provides the components and a framework to setup virtual
+servers.  A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This package contains utilities which are required to communicate with
+the Linux-Vserver enabled kernel.
+
+
+%description build
+util-vserver provides the components and a framework to setup virtual
+servers.  A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This package contains utilities which assist in building Vservers.
+
+%description sysv
+util-vserver provides the components and a framework to setup virtual
+servers.  A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This package contains the SysV initscripts which start and stop
+VServers and related tools.
 
-%description linuxconf
-This package provides the components to setup virtual servers with
-linuxconf.
+
+%description legacy
+util-vserver provides the components and a framework to setup virtual
+servers.  A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This package contains the tools which are needed to work with VServers
+having an old-style configuration.
+
+
+%description devel
+util-vserver provides the components and a framework to setup virtual
+servers.  A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This package contains header files and libraries which are needed to
+develop VServer related applications.
+
+
+%description python
+Python modules for manipulating vservers.  Provides a superset of the
+functionality of the vserver script (at least will do in the future),
+but more readily accessible from Python code.
 
 
 %prep
 %setup -q
+
 aclocal -I m4
 autoconf
 automake --add-missing
-# bootstrap to avoid BuildRequires of kernel-source
-for linux in $RPM_BUILD_DIR/linux-* /lib/modules/`uname -r`/build ; do
-   [[ -d $linux/include ]] && %configure --with-kerneldir=$linux --enable-linuxconf && break
-done
-
 
 %build
-make
+%configure --with-initrddir=%_initrddir --enable-release \
+           %{?_without_dietlibc:--disable-dietlibc}
+
+%__make %{?_smp_mflags} all
+%__make %{?_smp_mflags} doc
+
+%__make -C python
 
 %install
 rm -rf $RPM_BUILD_ROOT
-%__make DESTDIR=$RPM_BUILD_ROOT install
+%__make DESTDIR="$RPM_BUILD_ROOT" install install-distribution
 
-mkdir -p $RPM_BUILD_ROOT/vservers
-test "%_initrddir" = %_sysconfdir/init.d || {
-       mkdir -p ${RPM_BUILD_ROOT}%_initrddir
-       mv ${RPM_BUILD_ROOT}%_sysconfdir/init.d/* ${RPM_BUILD_ROOT}%_initrddir/
-}
+rm -f $RPM_BUILD_ROOT/%_libdir/*.la
+
+MANIFEST_CONFIG='%config' \
+MANIFEST_CONFIG_NOREPLACE='%config(noreplace)' \
+contrib/make-manifest %name $RPM_BUILD_ROOT contrib/manifest.dat
 
-mkdir -p ${RPM_BUILD_ROOT}/bin
-ln -f ${RPM_BUILD_ROOT}%_sbindir/vsh ${RPM_BUILD_ROOT}/bin/vsh
+# install python bindings
+%__make -C python DESTDIR="$PWD/tmp" install
+install -d $RPM_BUILD_ROOT/%{_datadir}/%{name}
+install tmp/usr/lib/python*/site-packages/*.{py,so} $RPM_BUILD_ROOT/%{_datadir}/%{name}/
 
-install -D -m 644 sysv/vcached.logrotate ${RPM_BUILD_ROOT}/etc/logrotate.d/vcached
 
-mkdir -p $RPM_BUILD_ROOT/etc/cron.d
-. sysv/vcached.conf
-echo "*/$(($period / 60)) * * * * root %_sbindir/vcached -s -f -l $logfile" > $RPM_BUILD_ROOT/etc/cron.d/vcached
+%check || :
+#%__make check
+
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
-%pre
-# 1 = install, 2 = upgrade/reinstall
-if [ $1 -eq 2 ] ; then
-    # vcached no longer runs as a daemon
-    [ "`/sbin/runlevel`" = "unknown" ] || service vcached stop || :
-fi
 
 %post
-# vcached no longer runs as a daemon
-chkconfig vcached off
-chkconfig --del vcached
+test -d /vservers      || mkdir -m0000 /vservers
+test -d /vservers/.pkg || mkdir -m0755 /vservers/.pkg
+
+f="%confdefaultdir/vdirbase"; test -L "$f" -o -e "$f" || ln -s /vservers                        "$f"
+f="%confdefaultdir/run.rev";  test -L "$f" -o -e "$f" || ln -s %_localstatedir/run/vservers.rev "$f"
+
+%_sbindir/setattr --barrier /vservers || :
+
+# add /bin/vsh to list of secure shells
 if [ ! -f /etc/shells ] || ! grep -q '^/bin/vsh$' /etc/shells ; then
     echo /bin/vsh >> /etc/shells
 fi
-# make sure immutable bit is set on /vservers for safety
-%__chattr +t /vservers || :
+
 
 %postun
 # 0 = erase, 1 = upgrade
@@ -108,42 +245,290 @@ if [ "$1" = 0 ] ; then
     perl -i -n -e 'next if /^\/bin\/vsh$/; print' /etc/shells
 fi
 
-%preun
+
+%post   lib -p /sbin/ldconfig
+%postun lib -p /sbin/ldconfig
+
+
+%post sysv
+#%chkconfig --add vservers-default
+#%chkconfig --add vprocunhide
+# PlanetLab Node Manager takes care of starting and stopping VServers
+%chkconfig --del vservers-default
+# PlanetLab does not require /proc security
+%chkconfig --del vprocunhide
+
+%preun sysv
+#test "$1" != 0 || %_initrddir/vprocunhide stop &>/dev/null || :
+
+#test "$1" != 0 || %chkconfig --del vprocunhide
+#test "$1" != 0 || %chkconfig --del vservers-default
+
+
+%postun sysv
+#test "$1" = 0  || %_initrddir/vprocunhide condrestart >/dev/null || :
+
+
+%triggerin build -- fedora-release
+function copy()
+{
+    base=$1
+    shift
+
+    for i; do
+       test -r "$i" || continue
+
+       target=%confdir/.distributions/.common/pubkeys/$base-$(basename "$i")
+       cp -a "$i" "$target"
+    done
+}
+copy fedora /usr/share/doc/fedora-release-*/RPM-GPG-*
+copy fedora /etc/pki/rpm-gpg/RPM-GPG-*
+
+
+%preun build
+test "$1" != 0 || rm -f %confdir/.distributions/.common/pubkeys/fedora-*
+
+
+## Temporary workaround to remove old v_* files; it will conflict
+## somehow with the -legacy package but can be fixed by reinstalling
+## this package.
+## TODO: remove me in the final .spec file
+%define v_services     httpd named portmap sendmail smb sshd xinetd gated
+%triggerun sysv -- util-vserver-sysv < 0.30.198
+for i in %v_services; do
+       %chkconfig --del v_$i || :
+done
+
+
+%post legacy
+# PlanetLab Node Manager takes care of starting and stopping VServers
+#%chkconfig --add rebootmgr
+#%chkconfig --add vservers-legacy
+
+# PlanetLab does not require these legacy services
+#for i in %v_services; do
+#      %chkconfig --add v_$i
+#done
+
+
+%preun legacy
+#test "$1" != 0 || %_initrddir/rebootmgr   stop &>/dev/null || :
+
+#test "$1" != 0 || for i in %v_services; do
+#      %chkconfig --del v_$i
+#done
+
+#test "$1" != 0 || %chkconfig --del rebootmgr
+#test "$1" != 0 || %chkconfig --del vservers-legacy
+
+%postun legacy
+#test "$1" = 0  || %_initrddir/rebootmgr   condrestart >/dev/null || :
+
+
+%files -f %name-base.list
+%defattr(-,root,root,-)
+%doc AUTHORS COPYING ChangeLog NEWS README THANKS
+%doc doc/*.html doc/*.css
+/sbin/vshelper
+%dir %confdir
+%dir %confdefaultdir
+%dir %confdefaultdir/apps
+%dir %confdefaultdir/files
+%dir %pkglibdir/defaults
+%ghost %confdefaultdir/vdirbase
+%ghost %confdefaultdir/run.rev
+
+%dir %_localstatedir/run/vservers
+%dir %_localstatedir/run/vservers.rev
+%dir %_localstatedir/run/vshelper
+
+
+%files lib -f %name-lib.list
+%files sysv -f %name-sysv.list
+
+
+%files core -f %name-core.list
+%defattr(-,root,root,-)
+%dir %pkglibdir
+
+
+%files build -f %name-build.list
+%defattr(-,root,root,-)
+%doc contrib/yum*.patch
+%dir %confdir/.distributions
+%dir %confdir/.distributions/*
+%dir %confdir/.distributions/*/apt
+%dir %confdir/.distributions/.common
+%dir %confdir/.distributions/.common/pubkeys
+%dir %confdefaultdir/apps/vunify
+%dir %confdefaultdir/apps/vunify/hash
+
+
+%files legacy -f %name-legacy.list
+%defattr(-,root,root,-)
+%dir %pkglibdir/legacy
+
+
+%files devel -f %name-devel.list
+%defattr(-,root,root,-)
+%doc lib/apidoc/latex/refman.pdf
+%doc lib/apidoc/html
+
+
+%post python
+pushd %{_datadir}/%{name} >/dev/null
+
+# Byte compile and install modules
+py_modules=
+for file in *.py ; do
+    if [ -n "$py_modules" ] ; then
+       py_modules="$py_modules,"
+    fi
+    py_modules="$py_modules '${file%*.py}'"
+done
+%define setup %{__python} -c "from distutils.core import setup; setup(py_modules=[$py_modules])"
+%{setup} build
+%{setup} install
+
+# Install the prebuilt extensions by hand
+python_sitelib=$(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
+install -D -m 755 *.so "$python_sitelib"/
+
+popd
+
+
+%triggerpostun -- %{name}
+# RPMs get upgraded by installing the new one, then uninstalling the
+# old one. Since we no longer own the byte-compiled modules, they may
+# be removed right after we create them in %post if we are upgraded
+# from a version that did own them at one point. This section should
+# be removed once all packages have been upgraded to at least this
+# version.
+pushd %{_datadir}/%{name} >/dev/null
+
+# Byte compile and install modules
+py_modules=
+for file in *.py ; do
+    if [ -n "$py_modules" ] ; then
+       py_modules="$py_modules,"
+    fi
+    py_modules="$py_modules '${file%*.py}'"
+done
+%define setup %{__python} -c "from distutils.core import setup; setup(py_modules=[$py_modules])"
+%{setup} build
+%{setup} install
+
+# Install the prebuilt extensions by hand
+python_sitelib=$(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
+install -D -m 755 *.so "$python_sitelib"/
+
+popd
+
+
+%preun python
 # 0 = erase, 1 = upgrade
 if [ $1 -eq 0 ] ; then
-    [ "`/sbin/runlevel`" = "unknown" ] || service vservers stop
-    chkconfig vservers off
-    chkconfig --del vservers
+    python_sitelib=$(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
+    pushd %{_datadir}/%{name} >/dev/null
+    for file in *.py *.so ; do
+       rm -f "$python_sitelib"/${file}*
+    done
+    popd
 fi
 
-%files
-%defattr(-,root,root)
-%doc AUTHORS COPYING ChangeLog NEWS README THANKS
-%_sbindir/*
-%_libdir/%name
-%_includedir/vserver.h
-%_libdir/libvserver.a
-%_mandir/man8/*
-%config %_initrddir/*
-%config(noreplace) /etc/vservers.conf
-%config(noreplace) /etc/vcached.conf
-/etc/logrotate.d/vcached
-/etc/cron.d/vcached
-%dir /etc/vservers
-%attr(0,root,root) %dir /vservers
-%attr(4755,root,root) /usr/sbin/vsh
-%attr(4755,root,root) /bin/vsh
-
-%exclude %_sbindir/newvserver
-%exclude %_mandir/man8/newvserver*
-
-%files linuxconf
-%defattr(-,root,root)
-%config(noreplace) /etc/vservers/newvserver.defaults
-%_sbindir/newvserver
-%_mandir/man8/newvserver*
+
+%files python
+%{_datadir}/%{name}
+
 
 %changelog
+* Fri Feb 17 2006 Steve Muir <smuir@cs.princeton.edu>
+- add support for setting guaranteed CPU share flag in rspec
+
+* Fri Jan 13 2006 Steve Muir <smuir@cs.princeton.edu>
+- fix bug in python/vserverimpl.c where attempting to adjust CPU share
+  for a context that didn't exist would cause an error (it should be a
+  safe no-op)
+
+* Fri Dec  2 2005 Steve Muir <smuir@cs.princeton.edu>
+- fix bugs in python/vserverimpl.c where exceptions were not raised when
+  they should be and thus occured later at unexpected times
+- add support for stopping a vserver
+
+* Wed Nov  9 2005 Steve Muir <smuir@cs.princeton.edu>
+- add support for removing resource limits e.g., when a slice is deleted
+
+* Mon Nov  7 2005 Steve Muir <smuir@cs.princeton.edu>
+- fix file descriptor leak in vduimpl
+- clean up handling of network parameters
+- don't rely upon /etc/vservers/foo.conf to initialise vserver object
+
+* Wed Nov  2 2005 Steve Muir <smuir@cs.princeton.edu>
+- fix Python modules to handling scheduling parameters correctly
+
+* Fri Oct 28 2005 Steve Muir <smuir@cs.princeton.edu>
+- raise exception about being over disk limit after setting usage values
+
+* Fri Oct  7 2005 Steve Muir <smuir@cs.princeton.edu>
+- create common function to be used for entering a vserver and applying
+  resource limits
+
+* Thu Aug 21 2005 Mark Huang <mlhuang@cs.princeton.edu>
+- restore build of python modules
+
+* Sat Aug 20 2005 Mark Huang <mlhuang@cs.princeton.edu>
+- upgrade to util-vserver-0.30.208
+- forward-port vbuild and legacy support until we can find a suitable
+  replacement
+- make vsh use new vc_create_context() call
+
+* Thu Jul 28 2005 Steve Muir <smuir@cs.princeton.edu>
+- add support for static vserver IDs to vuseradd and vuserdel
+
+* Thu Jul 21 2005 Steve Muir <smuir@cs.princeton.edu>
+- add bwlimit and cpulimit modules
+
+* Fri Jul 15 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.30.208-1
+- require the -lib subpackage by -devel
+- copy GPG keys from /etc/pki/rpm-gpg/
+
+* Mon Jun 20 2005 Steve Muir <smuir@cs.princeton.edu>
+- import Marc's vdu implementation
+
+* Wed Jun 15 2005 Steve Muir <smuir@cs.princeton.edu>
+- 'vserver-init start' functionality subsumed by Node Manager
+
+* Thu Jun 02 2005 Marc E. Fiuczynski <mef@cs.princeton.edu>
+- Fixed vlimit command
+
+* Wed May 25 2005 Steve Muir <smuir@cs.princeton.edu>
+- add Python modules for manipulating vservers
+
+* Fri Apr 15 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.30.206-1
+- added patches to make yum work in chroot environments
+- version 0.30.206
+
+* Thu Apr  7 2005 Steve Muir <smuir@cs.princeton.edu>
+- vuserdel changes: don't shutdown vserver, just kill all processes;
+  unmount all mountpoints in vserver before deleting
+
+* Thu Mar 24 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.30.205-0
+- added some %%descriptions
+- copy GPG keys from the system into the confdir
+- buildrequire dietlibc-0.25
+- BuildRequire beecrypt-devel
+- cleanups
+- use %%global instead of %%define
+- removed 'run.rev' as a vserver-local variable and made it a system-wide setting
+
+* Wed Jan 26 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.30.198-0.3
+- updated BuildRequires:
+- use 'setattr --barrier' instead of 'chattr +t' in the %%post scriptlet
+- moved the v_* initscripts to legacy
+- do not ship the /vservers directory itself; as it is immutable, the
+  extraction will fail else
+
 * Fri Nov 19 2004 Mark Huang <mlhuang@cs.princeton.edu>
 - vcached no longer runs as a daemon
 - do not restart vservers when package is upgraded
@@ -174,12 +559,23 @@ fi
 * Mon Oct 11 2004 Marc E. Fiuczynski <mef@cs.princeton.edu>
 - added vsh
 
+* Thu Sep  9 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.30.194-0
+- documented switches for 'rpmbuild'
+
 * Wed Aug 11 2004 Mark Huang <mlhuang@cs.princeton.edu> 0.29-1.planetlab
 - initial PlanetLab 3.0 build.
 
-* Thu Mar 18 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.29.3-0
-- removed '%%doc doc/FAQ.txt' since file does not exist anymore
+* Wed May 26 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.29.215-0
+- (re)added the MANIFEST_* variables which were lost some time ago;
+  this will preserve %%config files...
+
+* Mon Mar 15 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.29.202-0
+- use file-list for sysv scripts also
 
-* Fri Sep 26 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.23.4-1
-- initial build.
+* Sat Mar  6 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.29.198-0
+- added vprocunhide-service support
+- added doxygen support
+- updated Requires:
 
+* Wed Oct  1 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.23.5-0
+- Initial build.