From d88650af2dc614519bdb138b162d3c6e3b5ae9c5 Mon Sep 17 00:00:00 2001
From: Noriko Hosoi <nhosoi@redhat.com>
Date: Tue, 18 Aug 2015 13:43:55 -0700
Subject: [PATCH 47/47] Ticket #48243 - replica upgrade failed in starting
dirsrv service due to upgrade scripts did not run
Description: In the upgrade process, there is a combination of requirements:
. the server is running.
. the server instance service is disabled.
. upgrade scripts are expected to run against the instance.
. the server is restarted once the upgrade is done.
. the server instance service remains disabled.
To fulfill the requirements,
. spec file is modified to enumerate slapd dir (except .remove) in the
/etc/dirsrv for getting the server instance.
. Start/Update perl scripts are modified not to create a symlink in
/etc/systemd/system/dirsrv.target.wants for the upgrade case, which
means the service remains disabled.
https://fedorahosted.org/389/ticket/48243
Reviewed by mreynolds@redhat.com (Thank you, Mark!!)
(cherry picked from commit 29c09a5bcc7d54be1aa6880b4f2a423edd3dc463)
(cherry picked from commit 2c5e0d5692bcabe16a7e3b8e0d24eb3a88913155)
---
ldap/admin/src/scripts/DSCreate.pm.in | 7 ++++---
ldap/admin/src/scripts/DSMigration.pm.in | 2 +-
ldap/admin/src/scripts/DSUpdate.pm.in | 2 +-
rpm/389-ds-base.spec.in | 20 +++++++++++++-------
4 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in
index e4a4ed0..cdde339 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -1098,6 +1098,7 @@ sub updateTmpfilesDotD {
}
sub updateSystemD {
+ my $noservicelink = shift;
my $inf = shift;
my $unitdir = "@systemdsystemunitdir@";
my $confbasedir = "@systemdsystemconfdir@";
@@ -1129,7 +1130,7 @@ sub updateSystemD {
next;
} else {
my $servicelink = "$confdir/$pkgname\@$inst.service";
- if (! -l $servicelink) {
+ if (! -l $servicelink && ! $noservicelink) {
if (!symlink($servicefile, $servicelink)) {
debug(1, "error updating link $servicelink to $servicefile - $!\n");
push @errs, [ 'error_linking_file', $servicefile, $servicelink, $! ];
@@ -1216,7 +1217,7 @@ sub createDSInstance {
return @errs;
}
- if (@errs = updateSystemD($inf)) {
+ if (@errs = updateSystemD(0, $inf)) {
return @errs;
}
@@ -1452,7 +1453,7 @@ sub removeDSInstance {
}
# update systemd files
- push @errs, updateSystemD();
+ push @errs, updateSystemD(0);
# if we got here, report success
if (@errs) {
diff --git a/ldap/admin/src/scripts/DSMigration.pm.in b/ldap/admin/src/scripts/DSMigration.pm.in
index e59e667..630ab43 100644
--- a/ldap/admin/src/scripts/DSMigration.pm.in
+++ b/ldap/admin/src/scripts/DSMigration.pm.in
@@ -1132,7 +1132,7 @@ sub migrateDS {
}
# do the systemd stuff
- @errs = DSCreate::updateSystemD($inf);
+ @errs = DSCreate::updateSystemD(0, $inf);
if (@errs) {
$mig->msg(@errs);
goto cleanup;
diff --git a/ldap/admin/src/scripts/DSUpdate.pm.in b/ldap/admin/src/scripts/DSUpdate.pm.in
index 1809ad9..be1e67c 100644
--- a/ldap/admin/src/scripts/DSUpdate.pm.in
+++ b/ldap/admin/src/scripts/DSUpdate.pm.in
@@ -408,7 +408,7 @@ sub updateDSInstance {
push @errs, updateTmpfilesDotD($inf);
- push @errs, updateSystemD($inf);
+ push @errs, updateSystemD(1, $inf);
return @errs;
}
diff --git a/rpm/389-ds-base.spec.in b/rpm/389-ds-base.spec.in
index d0bbb7a..b7556e1 100644
--- a/rpm/389-ds-base.spec.in
+++ b/rpm/389-ds-base.spec.in
@@ -248,6 +248,7 @@ rm -rf $RPM_BUILD_ROOT
%post
output=/dev/null
+output2=/dev/null
%systemd_post %{pkgname}-snmp.service
# reload to pick up any changes to systemd files
/bin/systemctl daemon-reload >$output 2>&1 || :
@@ -260,12 +261,17 @@ instances="" # instances that require a restart after upgrade
ninst=0 # number of instances found in total
if [ -n "$DEBUGPOSTTRANS" ] ; then
output=$DEBUGPOSTTRANS
+ output2=${DEBUGPOSTTRANS}.upgrade
fi
-echo looking for services in %{_sysconfdir}/systemd/system/%{groupname}.wants/* >> $output 2>&1 || :
-for service in %{_sysconfdir}/systemd/system/%{groupname}.wants/* ; do
- if [ ! -f "$service" ] ; then continue ; fi # in case nothing matches
- inst=`echo $service | sed -e 's,%{_sysconfdir}/systemd/system/%{groupname}.wants/,,'`
- echo found instance $inst - getting status >> $output 2>&1 || :
+echo looking for instances in %{_sysconfdir}/%{pkgname} > $output 2>&1 || :
+instbase="%{_sysconfdir}/%{pkgname}"
+for dir in $instbase/slapd-* ; do
+ echo dir = $dir >> $output 2>&1 || :
+ if [ ! -d "$dir" ] ; then continue ; fi
+ case "$dir" in *.removed) continue ;; esac
+ basename=`basename $dir`
+ inst="%{pkgname}@`echo $basename | sed -e 's/slapd-//g'`"
+ echo found instance $inst - getting status >> $output 2>&1 || :
if /bin/systemctl -q is-active $inst ; then
echo instance $inst is running >> $output 2>&1 || :
instances="$instances $inst"
@@ -290,9 +296,9 @@ echo remove pid files . . . >> $output 2>&1 || :
echo upgrading instances . . . >> $output 2>&1 || :
DEBUGPOSTSETUPOPT=`/usr/bin/echo $DEBUGPOSTSETUP | /usr/bin/sed -e "s/[^d]//g"`
if [ -n "$DEBUGPOSTSETUPOPT" ] ; then
- %{_sbindir}/setup-ds.pl -l $output -$DEBUGPOSTSETUPOPT -u -s General.UpdateMode=offline >> $output 2>&1 || :
+ %{_sbindir}/setup-ds.pl -l $output2 -$DEBUGPOSTSETUPOPT -u -s General.UpdateMode=offline >> $output 2>&1 || :
else
- %{_sbindir}/setup-ds.pl -l $output -u -s General.UpdateMode=offline >> $output 2>&1 || :
+ %{_sbindir}/setup-ds.pl -l $output2 -u -s General.UpdateMode=offline >> $output 2>&1 || :
fi
# restart instances that require it
--
1.9.3