From 6504900f1f52927adab3489b8d04b6644ceaee7d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 08:06:51 +0000 Subject: r23806: update Samba4 with the latest ctdb code. This doesn't get the ctdb code fully working in Samba4, it just gets it building and not breaking non-clustered use of Samba. It will take a bit longer to update some of the calling ctdb_cluster.c code to make it work correctly in Samba4. Note also that Samba4 now only links to the client portion of ctdb. For the moment I am leaving the ctdbd as a separate daemon, which you install separately from http://ctdb.samba.org/. (This used to be commit b196077cbb55cbecad87065133c2d67198e31066) --- source4/cluster/ctdb/packaging/RHEL/ctdb.spec | 117 +++++++++++++++++++++ source4/cluster/ctdb/packaging/RHEL/makerpms.sh | 90 ++++++++++++++++ .../cluster/ctdb/packaging/RHEL/setup/ctdb.init | 104 ++++++++++++++++++ .../ctdb/packaging/RHEL/setup/ctdb.sysconfig | 52 +++++++++ source4/cluster/ctdb/packaging/RPM/ctdb.spec | 112 ++++++++++++++++++++ source4/cluster/ctdb/packaging/RPM/makerpms.sh | 89 ++++++++++++++++ 6 files changed, 564 insertions(+) create mode 100644 source4/cluster/ctdb/packaging/RHEL/ctdb.spec create mode 100755 source4/cluster/ctdb/packaging/RHEL/makerpms.sh create mode 100755 source4/cluster/ctdb/packaging/RHEL/setup/ctdb.init create mode 100644 source4/cluster/ctdb/packaging/RHEL/setup/ctdb.sysconfig create mode 100644 source4/cluster/ctdb/packaging/RPM/ctdb.spec create mode 100755 source4/cluster/ctdb/packaging/RPM/makerpms.sh (limited to 'source4/cluster/ctdb/packaging') diff --git a/source4/cluster/ctdb/packaging/RHEL/ctdb.spec b/source4/cluster/ctdb/packaging/RHEL/ctdb.spec new file mode 100644 index 0000000000..9bba5683b1 --- /dev/null +++ b/source4/cluster/ctdb/packaging/RHEL/ctdb.spec @@ -0,0 +1,117 @@ +%define initdir %{_sysconfdir}/rc.d/init.d + +Summary: Clustered TDB +Vendor: Samba Team +Packager: Samba Team +Name: ctdb +Version: 1.0 +Release: 1 +Epoch: 0 +License: GNU GPL version 2 +Group: System Environment/Daemons +URL: bzr://www.samba.org/~tridge/ctdb/ + +Source: ctdb-%{version}.tar.bz2 +Source999: ctdb-setup.tar.bz2 + +Prereq: /sbin/chkconfig /bin/mktemp /usr/bin/killall +Prereq: fileutils sed /etc/init.d + +Requires: initscripts >= 5.54-1 +Provides: ctdb = %{version} + +Prefix: /usr +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +%description +ctdb is the clustered database used by samba + + +####################################################################### + +%prep +%setup -q +# setup the init script and sysconfig file +%setup -T -D -a 999 -n ctdb-%{version} -q + +%build + +CC="gcc" + +## always run autogen.sh +./autogen.sh + +CFLAGS="$RPM_OPT_FLAGS $EXTRA -D_GNU_SOURCE" ./configure \ + --prefix=%{_prefix} \ + --sysconfdir=%{_sysconfdir} \ + --localstatedir="/var" + +make showflags +make + +%install +# Clean up in case there is trash left from a previous build +rm -rf $RPM_BUILD_ROOT + +# Create the target build directory hierarchy +mkdir -p $RPM_BUILD_ROOT%{_includedir} +mkdir -p $RPM_BUILD_ROOT{%{_libdir},%{_includedir}} +mkdir -p $RPM_BUILD_ROOT%{_prefix}/{bin,sbin} +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ctdb +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d + +make DESTDIR=$RPM_BUILD_ROOT install + +install -m644 setup/ctdb.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ctdb +install -m755 setup/ctdb.init $RPM_BUILD_ROOT%{initdir}/ctdb +install -m755 tools/events $RPM_BUILD_ROOT%{_sysconfdir}/ctdb/events +install -m755 tools/onnode.ssh $RPM_BUILD_ROOT%{_bindir} +install -m755 tools/onnode.rsh $RPM_BUILD_ROOT%{_bindir} +ln -sf %{_bindir}/onnode.ssh $RPM_BUILD_ROOT%{_bindir}/onnode + +# unfortunately samba3 needs ctdb_private.h too +install -m644 include/ctdb_private.h $RPM_BUILD_ROOT%{_includedir}/ctdb_private.h + + +# Remove "*.old" files +find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \; + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +/sbin/chkconfig --add ctdb + +%preun +if [ $1 = 0 ] ; then + /sbin/chkconfig --del ctdb + /sbin/service ctdb stop >/dev/null 2>&1 +fi +exit 0 + +%postun +if [ "$1" -ge "1" ]; then + %{initdir}/ctdb restart >/dev/null 2>&1 +fi + + +####################################################################### +## Files section ## +####################################################################### + +%files +%defattr(-,root,root) + +%config(noreplace) %{_sysconfdir}/sysconfig/ctdb +%attr(755,root,root) %config %{initdir}/ctdb + +%{_sysconfdir}/ctdb/events +%{_sbindir}/ctdbd +%{_bindir}/ctdb +%{_bindir}/onnode.ssh +%{_bindir}/onnode.rsh +%{_bindir}/onnode +%{_includedir}/ctdb.h +%{_includedir}/ctdb_private.h + diff --git a/source4/cluster/ctdb/packaging/RHEL/makerpms.sh b/source4/cluster/ctdb/packaging/RHEL/makerpms.sh new file mode 100755 index 0000000000..e43d53683c --- /dev/null +++ b/source4/cluster/ctdb/packaging/RHEL/makerpms.sh @@ -0,0 +1,90 @@ +#!/bin/sh +# Copyright (C) John H Terpstra 1998-2002 +# Gerald (Jerry) Carter 2003 +# Jim McDonough 2007 +# Andrew Tridgell 2007 + +# The following allows environment variables to override the target directories +# the alternative is to have a file in your home directory calles .rpmmacros +# containing the following: +# %_topdir /home/mylogin/redhat +# +# Note: Under this directory rpm expects to find the same directories that are under the +# /usr/src/redhat directory +# + +EXTRA_OPTIONS="$1" + +RHEL="packaging/RHEL" + +[ -d ${RHEL} ] || { + echo "Must run this from the ctdb directory" + exit 1 +} + + +SPECDIR=`rpm --eval %_specdir` +SRCDIR=`rpm --eval %_sourcedir` + +# At this point the SPECDIR and SRCDIR vaiables must have a value! + +USERID=`id -u` +GRPID=`id -g` +VERSION='1.0' +REVISION='' +SPECFILE="ctdb.spec" +RPMVER=`rpm --version | awk '{print $3}'` +RPMBUILD="rpmbuild" + +## +## Check the RPM version (paranoid) +## +case $RPMVER in + 4*) + echo "Supported RPM version [$RPMVER]" + ;; + *) + echo "Unknown RPM version: `rpm --version`" + exit 1 + ;; +esac + +if [ -f Makefile ]; then + make distclean +fi + +pushd . +BASEDIR=`basename $PWD` +cd .. +chown -R ${USERID}.${GRPID} $BASEDIR +if [ ! -d ctdb-${VERSION} ]; then + ln -s $BASEDIR ctdb-${VERSION} || exit 1 + REMOVE_LN=$PWD/ctdb-$VERSION +fi +echo -n "Creating ctdb-${VERSION}.tar.bz2 ... " +tar --exclude=.bzr --exclude .bzrignore --exclude packaging --exclude="*~" -cf - ctdb-${VERSION}/. | bzip2 > ${SRCDIR}/ctdb-${VERSION}.tar.bz2 +echo "Done." +if [ $? -ne 0 ]; then + echo "Build failed!" + [ ${REMOVE_LN} ] && rm $REMOVE_LN + exit 1 +fi + +popd + + +## +## copy additional source files +## +(cd packaging/RHEL && tar --exclude=.bzr --exclude="*~" -jcvf - setup) > ${SRCDIR}/ctdb-setup.tar.bz2 +cp -p ${RHEL}/${SPECFILE} ${SPECDIR} + +## +## Build +## +echo "$(basename $0): Getting Ready to build release package" +cd ${SPECDIR} +${RPMBUILD} -ba --clean --rmsource $EXTRA_OPTIONS $SPECFILE + +echo "$(basename $0): Done." +[ ${REMOVE_LN} ] && rm $REMOVE_LN diff --git a/source4/cluster/ctdb/packaging/RHEL/setup/ctdb.init b/source4/cluster/ctdb/packaging/RHEL/setup/ctdb.init new file mode 100755 index 0000000000..e34107e6b3 --- /dev/null +++ b/source4/cluster/ctdb/packaging/RHEL/setup/ctdb.init @@ -0,0 +1,104 @@ +#!/bin/sh +# +# chkconfig: - 90 36 +# description: Starts and stops the clustered tdb daemon +# +# pidfile: /var/run/ctdbd/ctdbd.pid + +# Source function library. +if [ -f /etc/init.d/functions ] ; then + . /etc/init.d/functions +elif [ -f /etc/rc.d/init.d/functions ] ; then + . /etc/rc.d/init.d/functions +else + exit 0 +fi + +# Avoid using root's TMPDIR +unset TMPDIR + +# Source networking configuration. +. /etc/sysconfig/network + +CTDB_OPTIONS="" + +# pull in admin specified config +if [ -f /etc/sysconfig/ctdb ]; then + . /etc/sysconfig/ctdb +fi + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# build up CTDB_OPTIONS variable +[ -z "$LOGFILE" ] || CTDB_OPTIONS="$CTDB_OPTIONS --logfile=$LOGFILE" +[ -z "$NODES" ] || CTDB_OPTIONS="$CTDB_OPTIONS --nlist=$NODES" +[ -z "$CTDB_SOCKET" ] || CTDB_OPTIONS="$CTDB_OPTIONS --socket=$CTDB_SOCKET" +[ -z "$PUBLIC_ADDRESSES" ] || CTDB_OPTIONS="$CTDB_OPTIONS --public-addresses=$PUBLIC_ADDRESSES" +[ -z "$PUBLIC_INTERFACE" ] || CTDB_OPTIONS="$CTDB_OPTIONS --public-interface=$PUBLIC_INTERFACE" +[ -z "$DBDIR" ] || CTDB_OPTIONS="$CTDB_OPTIONS --dbdir=$DBDIR" +[ -z "$EVENT_SCRIPT" ] || CTDB_OPTIONS="$CTDB_OPTIONS --event-script $EVENT_SCRIPT" +[ -z "$TRANSPORT" ] || CTDB_OPTIONS="$CTDB_OPTIONS --transport $TRANSPORT" +[ -z "$DEBUGLEVEL" ] || CTDB_OPTIONS="$CTDB_OPTIONS -d $DEBUGLEVEL" + +start() { + echo -n $"Starting ctdbd services: " + daemon ctdbd $CTDB_OPTIONS + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || \ + RETVAL=1 + return $RETVAL +} + +stop() { + echo -n $"Shutting down ctdbd services: " + ctdb shutdown + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ctdb + echo "" + return $RETVAL +} + +restart() { + stop + start +} + +rhstatus() { + ctdb status + if [ $? -ne 0 ] ; then + return 1 + fi +} + + +# Allow status as non-root. +if [ "$1" = status ]; then + rhstatus + exit $? +fi + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + status) + rhstatus + ;; + condrestart) + [ -f /var/lock/subsys/ctdb ] && restart || : + ;; + *) + echo $"Usage: $0 {start|stop|restart|status|condrestart}" + exit 1 +esac + +exit $? diff --git a/source4/cluster/ctdb/packaging/RHEL/setup/ctdb.sysconfig b/source4/cluster/ctdb/packaging/RHEL/setup/ctdb.sysconfig new file mode 100644 index 0000000000..13d83ce1ab --- /dev/null +++ b/source4/cluster/ctdb/packaging/RHEL/setup/ctdb.sysconfig @@ -0,0 +1,52 @@ +# Options to ctdbd. This is read by /etc/init.d/ctdb + +# the NODES file must be specified or ctdb won't start +# it should contain a list of IPs that ctdb will use +# it must be exactly the same on all cluster nodes +# defaults to /etc/ctdb/nodes +# NODES=/etc/ctdb/nodes + +# the directory to put the local ctdb database files in +# defaults to /var/ctdb +# DBDIR=/var/ctdb + +# the script to run when ctdb needs to ask the OS for help, +# such as when a IP address needs to be taken or released +# defaults to /etc/ctdb/events +# EVENT_SCRIPT=/etc/ctdb/events + +# the location of the local ctdb socket +# defaults to /tmp/ctdb.socket +# CTDB_SOCKET=/tmp/ctdb.socket + +# what transport to use. Only tcp is currently supported +# defaults to tcp +# TRANSPORT="tcp" + +# should ctdb do IP takeover? If it should, then specify a file +# containing the list of public IP addresses that ctdb will manage +# Note that these IPs must be different from those in $NODES above +# there is no default +# PUBLIC_ADDRESSES=/etc/ctdb/public_addresses + +# when doing IP takeover you also must specify what network interface +# to use for the public addresses +# there is no default +# PUBLIC_INTERFACE=eth0 + +# where to log messages +# the default is /var/log/log.ctdb +# LOGFILE=/var/log/log.ctdb + +# what debug level to run at. Higher means more verbose +# the default is 0 +# DEBUGLEVEL=0 + +# use this to specify any local tcp ports to wait on before starting +# ctdb. Use 445 and 139 for Samba +# the default is not to wait for any local services +# CTDB_WAIT_TCP_PORTS="445 139" + +# any other options you might want. Run ctdbd --help for a list +# CTDB_OPTIONS= + diff --git a/source4/cluster/ctdb/packaging/RPM/ctdb.spec b/source4/cluster/ctdb/packaging/RPM/ctdb.spec new file mode 100644 index 0000000000..6920e643ae --- /dev/null +++ b/source4/cluster/ctdb/packaging/RPM/ctdb.spec @@ -0,0 +1,112 @@ +%define initdir %{_sysconfdir}/init.d + +Summary: Clustered TDB +Vendor: Samba Team +Packager: Samba Team +Name: ctdb +Version: 1.0 +Release: 7 +Epoch: 0 +License: GNU GPL version 3 +Group: System Environment/Daemons +URL: http://ctdb.samba.org/ + +Source: ctdb-%{version}.tar.gz + +Prereq: /sbin/chkconfig /bin/mktemp /usr/bin/killall +Prereq: fileutils sed /etc/init.d + +Provides: ctdb = %{version} + +Prefix: /usr +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +%description +ctdb is the clustered database used by samba + + +####################################################################### + +%prep +%setup -q +# setup the init script and sysconfig file +%setup -T -D -n ctdb-%{version} -q + +%build + +CC="gcc" + +## always run autogen.sh +./autogen.sh + +CFLAGS="$RPM_OPT_FLAGS $EXTRA -D_GNU_SOURCE" ./configure \ + --prefix=%{_prefix} \ + --sysconfdir=%{_sysconfdir} \ + --mandir=%{_mandir} \ + --localstatedir="/var" + +make showflags +make + +%install +# Clean up in case there is trash left from a previous build +rm -rf $RPM_BUILD_ROOT + +# Create the target build directory hierarchy +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/init.d + +make DESTDIR=$RPM_BUILD_ROOT install + +install -m644 config/ctdb.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ctdb +install -m755 config/ctdb.init $RPM_BUILD_ROOT%{initdir}/ctdb + +# Remove "*.old" files +find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \; + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +[ -x /sbin/chkconfig ] && /sbin/chkconfig --add ctdb + +%preun +if [ $1 = 0 ] ; then + [ -x /sbin/chkconfig ] && /sbin/chkconfig --del ctdb +fi +exit 0 + +%postun +if [ "$1" -ge "1" ]; then + %{initdir}/ctdb restart >/dev/null 2>&1 +fi + + +####################################################################### +## Files section ## +####################################################################### + +%files +%defattr(-,root,root) + +%config(noreplace) %{_sysconfdir}/sysconfig/ctdb +%attr(755,root,root) %config %{initdir}/ctdb + +%{_sysconfdir}/ctdb/events +%{_sysconfdir}/ctdb/functions +%{_sysconfdir}/ctdb/events.d/10.interface +%{_sysconfdir}/ctdb/events.d/40.vsftpd +%{_sysconfdir}/ctdb/events.d/50.samba +%{_sysconfdir}/ctdb/events.d/60.nfs +%{_sysconfdir}/ctdb/events.d/61.nfstickle +%{_sysconfdir}/ctdb/statd-callout +%{_sbindir}/ctdbd +%{_bindir}/ctdb +%{_bindir}/onnode.ssh +%{_bindir}/onnode.rsh +%{_bindir}/onnode +%{_mandir}/man1/ctdb.1.gz +%{_mandir}/man1/ctdbd.1.gz +%{_mandir}/man1/onnode.1.gz +%{_includedir}/ctdb.h +%{_includedir}/ctdb_private.h diff --git a/source4/cluster/ctdb/packaging/RPM/makerpms.sh b/source4/cluster/ctdb/packaging/RPM/makerpms.sh new file mode 100755 index 0000000000..c267ed17e6 --- /dev/null +++ b/source4/cluster/ctdb/packaging/RPM/makerpms.sh @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright (C) John H Terpstra 1998-2002 +# Gerald (Jerry) Carter 2003 +# Jim McDonough 2007 +# Andrew Tridgell 2007 + +# The following allows environment variables to override the target directories +# the alternative is to have a file in your home directory calles .rpmmacros +# containing the following: +# %_topdir /home/mylogin/redhat +# +# Note: Under this directory rpm expects to find the same directories that are under the +# /usr/src/redhat directory +# + +EXTRA_OPTIONS="$1" + +[ -d packaging ] || { + echo "Must run this from the ctdb directory" + exit 1 +} + + +SPECDIR=`rpm --eval %_specdir` +SRCDIR=`rpm --eval %_sourcedir` + +# At this point the SPECDIR and SRCDIR vaiables must have a value! + +USERID=`id -u` +GRPID=`id -g` +VERSION='1.0' +REVISION='' +SPECFILE="ctdb.spec" +RPMVER=`rpm --version | awk '{print $3}'` +RPMBUILD="rpmbuild" + +## +## Check the RPM version (paranoid) +## +case $RPMVER in + 4*) + echo "Supported RPM version [$RPMVER]" + ;; + *) + echo "Unknown RPM version: `rpm --version`" + exit 1 + ;; +esac + +if [ -f Makefile ]; then + make distclean +fi + +pushd . +BASEDIR=`basename $PWD` +cd .. +chown -R ${USERID}.${GRPID} $BASEDIR +if [ ! -d ctdb-${VERSION} ]; then + ln -s $BASEDIR ctdb-${VERSION} || exit 1 + REMOVE_LN=$PWD/ctdb-$VERSION +fi +echo -n "Creating ctdb-${VERSION}.tar.gz ... " +tar --exclude=.bzr --exclude .bzrignore --exclude="*~" -cf - ctdb-${VERSION}/. | gzip -9 --rsyncable > ${SRCDIR}/ctdb-${VERSION}.tar.gz +echo "Done." +if [ $? -ne 0 ]; then + echo "Build failed!" + [ ${REMOVE_LN} ] && rm $REMOVE_LN + exit 1 +fi + +popd + + +## +## copy additional source files +## +cp -p packaging/RPM/ctdb.spec ${SPECDIR} + +## +## Build +## +echo "$(basename $0): Getting Ready to build release package" +cd ${SPECDIR} +${RPMBUILD} -ba --clean --rmsource $EXTRA_OPTIONS $SPECFILE || exit 1 + +echo "$(basename $0): Done." +[ ${REMOVE_LN} ] && /bin/rm -f $REMOVE_LN + +exit 0 -- cgit