From 4fd96520fc3092c823d2382008eeb0644bb9a601 Mon Sep 17 00:00:00 2001 From: Marc Fiuczynski Date: Fri, 31 Aug 2007 04:57:13 +0000 Subject: [PATCH] beginnings of myplc rpm build that can be installed directly into a vserver --- build-native.sh | 76 ++++++++++++++++++++++++++ myplc-native.spec | 136 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100755 build-native.sh create mode 100644 myplc-native.spec diff --git a/build-native.sh b/build-native.sh new file mode 100755 index 0000000..df8543c --- /dev/null +++ b/build-native.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# +# Builds MyPLC, either inside the MyPLC development environment in +# devel/root (if PLC_DEVEL_BOOTSTRAP is true), or in the current host +# environment (may be itself a MyPLC development environment or a +# Fedora environment with the appropriate development packages +# installed). +# +# Marc E. Fiuczynski +# Copyright (C) 2007 The Trustees of Princeton University +# +# $Id:$ +# + +. build.functions + +# XXX .spec file needs to have the appropriate set of requires statements + +# Install configuration scripts +echo "* myplc-native: Installing configuration scripts" +tmpdir=$1 +mkdir -p ${tmpdir} +rm -rf ${tmpdir} +mkdir -p ${tmpdir} +install -D -m 755 plc-config ${tmpdir}/usr/bin/plc-config +install -D -m 755 plc-config-tty ${tmpdir}/usr/bin/plc-config-tty +install -D -m 755 db-config ${tmpdir}/usr/bin/db-config +install -D -m 755 dns-config ${tmpdir}/usr/bin/dns-config +echo "* myplc-native: skipping build/install of plc_config.py" + +# XXX needs to be done by %pre script in .spec file +# install -D -m 755 plc_config.py /tmp/plc_config.py +# sh -c 'cd ${tmpdir}; python plc_config.py build; python plc_config.py install' +# XXX needs to be done by %pre script in .spec file +# sh -c 'chkconfig --add plc; chkconfig plc on' + + + +# Install initscripts +echo "* myplc-native: Installing initscripts" +find plc.d | cpio -p -d -u ${tmpdir}/etc/ +install -D -m 755 guest.init ${tmpdir}/etc/init.d/plc + + +# Install web scripts +echo "* myplc: Installing web scripts" +mkdir -p ${tmpdir}/usr/bin +install -m 755 \ + $srcdir/plc/scripts/gen-sites-xml.py \ + $srcdir/plc/scripts/gen-slices-xml-05.py \ + $srcdir/plc/scripts/gen-static-content.py \ + ${tmpdir}/usr/bin/ + +# Install web pages +echo "* myplc-native: Installing web pages" +mkdir -p ${tmpdir}/var/www/html +rsync -a $srcdir/new_plc_www/ ${tmpdir}/var/www/html/ + +# Install Drupal rewrite rules +install -D -m 644 $srcdir/new_plc_www/drupal.conf ${tmpdir}/etc/httpd/conf.d/drupal.conf + +# Install configuration file +echo "* myplc: Installing configuration file" +install -D -m 444 $config data/etc/planetlab/default_config.xml +install -D -m 444 plc_config.dtd data/etc/planetlab/plc_config.dtd + +# Remove generated bootmanager script +rm -f ${tmpdir}/var/www/html/boot/bootmanager.sh + +# Initialize node RPMs directory. The PlanetLab-Bootstrap.tar.bz2 +# tarball already contains all of the node RPMs pre-installed. Only +# updates or optional packages should be placed in this directory. +install -D -m 644 $pl_YUMGROUPSXML \ + ${tmpdir}/var/www/html/install-rpms/planetlab/yumgroups.xml + +exit 0 diff --git a/myplc-native.spec b/myplc-native.spec new file mode 100644 index 0000000..9ea0999 --- /dev/null +++ b/myplc-native.spec @@ -0,0 +1,136 @@ +Vendor: PlanetLab +oPackager: PlanetLab Central +Distribution: PlanetLab 4.0 +URL: http://cvs.planet-lab.org/cvs/myplc + +Summary: PlanetLab Central (PLC) Portable Installation +Name: myplc-native +Version: 0.5 +Release: 4%{?pldistro:.%{pldistro}}%{?date:.%{date}} +License: PlanetLab +Group: Applications/Systems +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +%define debug_package %{nil} + +%description +MyPLC is a complete PlanetLab Central (PLC) portable installation +contained within a chroot jail. The default installation consists of a +web server, an XML-RPC API server, a boot server, and a database +server: the core components of PLC. The installation may be customized +through a graphical interface. All PLC services are started up and +shut down through a single System V init script installed in the host +system. + +%prep +%setup -q + +%build +pushd myplc +rm -rf $RPM_BUILD_ROOT +./build-native.sh $RPM_BUILD_ROOT +popd + +%install + +%clean +rm -rf $RPM_BUILD_ROOT + +# If run under sudo +if [ -n "$SUDO_USER" ] ; then + # Allow user to delete the build directory + chown -h -R $SUDO_USER . + # Some temporary cdroot files like /var/empty/sshd and + # /usr/bin/sudo get created with non-readable permissions. + find . -not -perm +0600 -exec chmod u+rw {} \; + # Allow user to delete the built RPM(s) + chown -h -R $SUDO_USER %{_rpmdir}/%{_arch} +fi + +%pre +if [ -x %{_sysconfdir}/init.d/plc ] ; then + %{_sysconfdir}/init.d/plc stop +fi + +# Old versions of myplc used to ship with a bootstrapped database and +# /etc/planetlab directory. Including generated files in the manifest +# was dangerous; if /plc/data/var/lib/pgsql/data/base/1/16676 changed +# names from one RPM build to another, it would be rpmsaved and thus +# effectively deleted. Now we do not include these files in the +# manifest. However, to avoid deleting these files in the process of +# upgrading from one of these old versions of myplc, we must back up +# the database and /etc/planetlab and restore them after the old +# version has been uninstalled in %triggerpostun (also in %post, in +# case we are force upgrading to the same version). +# +# This code can be removed once all myplc-0.4-1 installations have +# been upgraded to at least myplc-0.4-2. + +# 0 = install, 1 = upgrade +if [ $1 -gt 0 ] ; then + for dir in /var/lib/pgsql/data /etc/planetlab ; do + if [ -d $dir ] ; then + echo "Preserving $dir" + mkdir -p $dir.rpmsave + tar -C $dir -cpf - . | \ + tar -C $dir.rpmsave -xpf - + + # Except for the default configuration file and DTD, which + # really should be considered for upgrade. + rm -f $dir.rpmsave/{default_config.xml,plc_config.dtd} + fi + done +fi + +%post +if [ -x /sbin/chkconfig ] ; then + /sbin/chkconfig --add plc + /sbin/chkconfig plc on +fi + +%triggerpostun -- %{name} +# 0 = erase, 1 = upgrade +if [ $1 -gt 0 ] ; then + for dir in /var/lib/pgsql/data /etc/planetlab ; do + if [ -d $dir.rpmsave -a -d $dir ] ; then + echo "Merging $dir" + if tar -C $dir.rpmsave -cpf - . | \ + tar -C $dir -xpf - ; then + rm -rf $dir.rpmsave + fi + fi + done +fi + +%preun +# 0 = erase, 1 = upgrade +if [ $1 -eq 0 ] ; then + %{_sysconfdir}/init.d/plc stop + if [ -x /sbin/chkconfig ] ; then + /sbin/chkconfig plc off + /sbin/chkconfig --del plc + fi +fi + +%files +%defattr(-,root,root,-) +# Host startup script and configuration file +%{_sysconfdir}/init.d/plc +%{_sysconfdir}/sysconfig/plc +/usr/bin/plc-config +/usr/bin/plc-config-tty +/usr/bin/db-config +/usr/bin/dns-config +/usr/bin/gen-sites-xml.py +/usr/bin/gen-slices-xml-05.py +/usr/bin/gen-static-content.py +/etc/httpd/conf.d/drupal.conf + +%dir %{_sysconfdir}/plc.d +%dir %{_sysconfdir}/planetlab +%dir /var/www/html/* + +%changelog +* Fri Aug 31 2007 Marc E. Fiuczynski +- initial build. -- 2.43.0