[Pkg-freeipa-devel] Bug#905184: Bug#905184: upgrade of 389-ds-base fails if /var/lib/dirsrv is on different partition as /etc

Timo Aaltonen tjaalton at debian.org
Wed Aug 22 22:46:34 BST 2018


On 01.08.2018 13:30, Jan Kowalsky wrote:
> Package: 389-ds-base
> Version: 1.3.5.17-2
> Severity: serious
> 
> Upgrade to newer version of 389-ds-base fails with dpkg configuration
> error on postinstall script /var/lib/dpkg/info/389-ds-base.postinst
> 
> After getting full log of postinstall I saw:
> 
> [18/08/01:10:33:37] - [Setup] Info Could not rename config file
> '/etc/dirsrv/slapd-INSTANCE/slapd-collations.conf' to
> '/var/lib/dirsrv/slapd-INSTANCE/bak.bak/slapd-collations.conf'.  Error:
> Invalid cross-device link
> 
> This is caused by line 24:
> 
> setup-ds -l $OUT -u -s General.UpdateMode=offline > $OUT 2>&1
> 
> calling this directly we got the same failure.
> 
> The reason is that the script tries to make a backup of configuration
> files in /var/lib/dirsrv/INSTANCE/bak.bak:
> 
> 
>     # these files are obsolete, or we want to replace
>     # them with newer versions
>     my @toremove = qw(slapd-collations.conf);
> 
>     # make a backup directory to store the deleted config file, then
>     # don't really delete it, just move it to that directory
>     my $mode = (stat($inf->{slapd}->{config_dir}))[2];
>     my $bakdir = $inf->{slapd}->{bak_dir} . ".bak";
>     if (! -d $bakdir) {
>         $! = 0; # clear
>         mkdir $bakdir, $mode;
>         if ($!) {
>             return ('error_creating_directory', $bakdir, $!);
>         }
>     }
> 
>     my @errs;
>     for my $file (@toremove) {
>         my $oldname = $inf->{slapd}->{config_dir} . "/" . $file;
>         next if (! -f $oldname); # does not exist - skip - already (re)moved
>         my $newname = "$bakdir/$file";
>         $! = 0; # clear
>         rename $oldname, $newname;
>         if ($!) {
>             push @errs, ["error_renaming_config", $oldname, $newname, $!];
>         }
>     }
> 
> 
> According to
> https://www.unix.com/shell-programming-and-scripting/27747-perl-rename-failed.html
> the perl rename call can cause this error.
> 
> My workaround was to create the directories in /etc and make symlinks in
> /var/lib/dirsrv/...
> 
>   mkdir /etc/dirsrv/slapd-INSTANCE/bak
>   ln -s /etc/dirsrv/slapd-INSTANCE/bak /var/lib/dirsrv/slapd-INSTANCE/bak
>   mkdir /etc/dirsrv/slapd-INSTANCE/bak.bak
>   ln -s /etc/dirsrv/slapd-INSTANCE/bak.bak
> /var/lib/dirsrv/slapd-INSTANCE/bak.bak
> 
> 
> Upgrade succeeded now.
> 
> I originally encountered this problem while upgrading 389-ds-base on
> jessie from 1.3.3.5-4 to 1.3.3.5-4+deb8u1. Since upgrade scripts didn't
> change this should be still valid for the actual version.

What if you change 'rename' with 'move' in /usr/share/dirsrv/updates/*.pl?



-- 
t



More information about the Pkg-freeipa-devel mailing list