Use make_relative_symlink scripts to avoid %post ln commands.

Patching .bundle/config to use /usr/lib/diaspora-bundle, to avoid
inter-package linking from diaspora to diaspora-bundle. This also
leaves the content under vendor/bundle untouched. Uses kitchen
script to create relative links within diaspora package.
This commit is contained in:
Alec Leamas 2010-10-10 16:38:02 +02:00
parent 1c00fc232e
commit 30b24a1079
3 changed files with 73 additions and 14 deletions

View file

@ -2,3 +2,4 @@
diaspora-setup
diaspora-wsd
diaspora.logconf
make_rel_symlink.py

View file

@ -13,6 +13,7 @@ Source: %{name}-%{version}-%{git_release}.tar.gz
Source1: diaspora-wsd
Source2: diaspora-setup
Source3: diaspora.logconf
Source4: make_rel_symlink.py
BuildArch: noarch
BuildRoot: %{_rmpdir}/not-used-in-fedora/
@ -37,6 +38,10 @@ rm -rf master/vendor/bundle
%install
rm -fr $RPM_BUILD_ROOT
sed -i \
'/BUNDLE_PATH/s|:.*|: %{_libdir}/diaspora-bundle/master/vendor/bundle|' \
master/.bundle/config
cp master/GNU-AGPL-3.0 master/COPYRIGHT master/README.md master/AUTHORS .
cp master/pkg/fedora/README.md README-Fedora.md
@ -56,10 +61,12 @@ mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/log/diaspora
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp
rm -rf $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/vendor/bundle
rm -rf $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/log
rm -rf $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/public/uploads
rm -rf $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/tmp
%{SOURCE4} $RPM_BUILD_ROOT/%{_localstatedir}/log/diaspora \
$RPM_BUILD_ROOT/%{_datadir}/diaspora/master/log
%{SOURCE4} $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads \
$RPM_BUILD_ROOT/%{_datadir}/diaspora/master/public/uploads
%{SOURCE4} $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp \
$RPM_BUILD_ROOT/%{_datadir}/diaspora/master/tmp
find $RPM_BUILD_ROOT/%{_datadir}/diaspora -type d \
-fprintf dirs '%%%dir "%%p"\n'
@ -71,26 +78,22 @@ sed -i -e '\|.*/master/config.ru"$|d' \
-e 's|%{buildroot}||' -e 's|//|/|' -e '/""/d' \
files
%post
ln -sf %{_localstatedir}/log/diaspora \
%{_datadir}/diaspora/master/log &>/dev/null || :
ln -sf %{_libdir}/diaspora-bundle/master/vendor/bundle \
.%{_datadir}/diaspora/master/vendor &>/dev/null || :
ln -sf %{_localstatedir}/lib/diaspora/uploads \
%{_datadir}/diaspora/master/public/uploads &>/dev/null || :
ln -sf %{_localstatedir}/lib/diaspora/tmp \
%{_datadir}/diaspora/master/tmp &>/dev/null || :
%post
/sbin/chkconfig --add diaspora-wsd
%preun
if [ $1 -eq 0 ] ; then
service diaspora-wsd stop >/dev/null 2>&1 || :
service diaspora-wsd stop &>/dev/null || :
/sbin/chkconfig --del diaspora-wsd
fi
%clean
rm -fr $RPM_BUILD_ROOT
%files -f files
%defattr(-, root, root, 0755)
%doc AUTHORS README.md GNU-AGPL-3.0 COPYRIGHT README-Fedora.md
@ -99,6 +102,9 @@ rm -fr $RPM_BUILD_ROOT
%attr(-, diaspora, diaspora) %{_localstatedir}/log/diaspora
%attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/uploads
%attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/tmp
%{_datadir}/diaspora/master/tmp
%{_datadir}/diaspora/master/public/uploads
%{_datadir}/diaspora/master/log
%config(noreplace) %{_sysconfdir}/logrotate.d/diaspora
%{_sysconfdir}/init.d/diaspora-wsd

52
pkg/fedora/make_rel_symlink.py Executable file
View file

@ -0,0 +1,52 @@
#!/usr/bin/env python
import os
import os.path
import sys
import pdb
import shutil
def relative_ln_s( from_, to_ ):
"""
This is just so dirty & boring: create a relative symlink, making the
to_ path relative to from_. No errorchecks. Both arguments must be
files, a destination directory doesn't work (I think). An existing
file in to_ will be removed.
"""
prefix = os.path.commonprefix( [ to_, from_ ] )
if prefix == '':
prefix = '/'
source = from_.split( prefix )[ 1 ]
dest = to_.split( prefix )[ 1 ]
level = len( dest.split( '/' ) ) - 1
path = ( '../' * level ) + source
return path
USAGE = 'Usage: make_rel_symlink [-p] <sourcefile> <destfile>'
just_print = False;
if sys.argv[1] == "-p":
just_print = True;
sys.argv = sys.argv[ 1:]
if len( sys.argv ) != 3:
print USAGE
sys.exit( 1 )
if os.path.isdir( sys.argv[2] ):
print "Removing link target dir:" + sys.argv[2]
shutil.rmtree( sys.argv[2])
link_path = relative_ln_s( sys.argv[1], sys.argv[2] )
if just_print:
print link_path
else:
os.chdir( os.path.dirname( sys.argv[2]))
target = os.path.basename( sys.argv[2])
if os.path.exists( target ):
os.unlink( target)
os.symlink( link_path, target)