Allow make-dist.sh to use an alternative repo.

Adds the -u switch, allowing use of another repository than
http://github.com/diaspora/diaspora.git. This is a dogfood patch.
Renames diaspora-ws->diaspora-wsd; this is indeed a daemon.
Moves all Fedora-related stuff in make-dist.sh to subcommand
'prepare'. The source tarballs are now usable on any OS
This commit is contained in:
Alec Leamas 2010-10-10 16:38:01 +02:00
parent 075a39cfce
commit 1c00fc232e
9 changed files with 242 additions and 157 deletions

View file

@ -1,12 +1,13 @@
## Diaspora RPM tools ## Diaspora RPM tools
Creates RPM packages from diaspora git repository. Creates diaspora source tarballs and RPM packages
An alternative to the capistrano system, providing classic, binary RPM An alternative to the capistrano system, providing classic, binary RPM
packages for deployment on Fedora 13. packages for deployment on Fedora 13 and OS-independent source tarballs
aimed for packaging purposes.
#### Synopsis: #### Fedora RPM synopsis
*Prerequisites*: ruby-1.8, rubygem and other packages as described in *Prerequisites*: ruby-1.8, rubygem and other packages as described in
http://github.com/diaspora/diaspora/wiki/Rpm-installation-on-fedora http://github.com/diaspora/diaspora/wiki/Rpm-installation-on-fedora
@ -17,8 +18,8 @@ and dist/diaspora-bundle-0.0-1010041233_fade4231.tar.gz:
% ./make-dist.sh source % ./make-dist.sh source
% ./make-dist.sh bundle % ./make-dist.sh bundle
Setup links to tarballs from RPM source directory: Setup links to tarballs from RPM source directory and create spec files:
% ./make-dist.sh links % ./make-dist.sh prepare
Build rpms: Build rpms:
rpmbuild -ba dist/diaspora.spec rpmbuild -ba dist/diaspora.spec
@ -39,34 +40,73 @@ Start development server:
See http://github.com/diaspora/diaspora/wiki/Using-apache for See http://github.com/diaspora/diaspora/wiki/Using-apache for
apache/passenger setup. After configuration, start with: apache/passenger setup. After configuration, start with:
/sbin/service diaspora-ws start /sbin/service diaspora-wsd start
/sbin/service httpd restart /sbin/service httpd restart
#### Generic source synopsis
Generate source tarball:
% ./make-dist.sh source
Using repo: http://github.com/diaspora/diaspora.git
Commit id: 1010092232_b313272
Source: dist/diaspora-0.0-1010092232_b313272.tar.gz
Required bundle: 1010081636_d1a4ee0
%
The source tarball could be used as-is, by unpacking add making a
*bundle install*. An alternative is to generate a canned bundle like:
% ./make-dist.sh bundle
[ lot's of output...]
Bundle: dist/diaspora-bundle-0.0-1010081636_d1a4ee0.tar.gz
%
This file can be installed anywhere. To use it, add a symlink from vendor/bundle
to the bundle's master directory. Reasonable defaults are to install
diaspora in /var/diaspora and bundle in /usr/lib/diaspora-bundle. With these,
the link is
% rm -rf /var/diaspora/master/vendor/bundle
% ln -sf /usr/lib/diaspora-bundle/master/bundle \
> /var/diaspora/master/vendor
%
The directories tmp, log, and public/uploads needs to be writable. If using
apache passenger, read the docs on uid used and file ownership.
Note that the bundle version required is printed each time a new source
is generated.
#### Notes #### Notes
The source tarball is as retrieved from diaspora with following differences:
- The .git directories are removed (freeing more than 50% of the size).
- A new file /master/config/gitversion is created.
- The file public/source.tar is generated.
- The file .bundle/config is patched. Remove before doing
*bundle install*
Routines uses last available version from master branch at github. The Routines uses last available version from master branch at github. The
version contains a time stamp and an abbreviated git commit id. If listed version contains a time stamp and an abbreviated git commit id.
in filename order, like ls does, latest version will be the last one.
Using -c, a specific commit can be used for source build. Using -c, a specific commit can be used for source build.
*make-dist links* creates links also for all files listed in SOURCES. *make-dist prepare* creates links also for all files listed in SOURCES.
Typically, this is secondary sources. *make-dist.sh sources* Typically, this is secondary sources. *make-dist.sh sources*
applies all patches named *.patch in this directory after checking out applies all patches named *.patch in this directory after checking out
source from git. source from git.
The spec-files in dist/ are patched by ./make-dist.sh source to reference The spec-files in dist/ are patched by *./make-dist.sh prepare* to reference
correct versions of diaspora and diaspora-bundle. The diaspora-bundle correct versions of diaspora and diaspora-bundle. The diaspora-bundle
is only updated if Gemfile is updated, upgrading diaspora doesn't is only updated if Gemfile is updated, upgrading diaspora doesn't
always require a new diaspora-bundle. Editing spec files should be done always require a new diaspora-bundle. Editing spec files should be done
in this directory, changes in dist/ are lost when doing ./make-dist source. in this directory, changes in dist/ are lost when doing *./make-dist prepare*.
The topmost comment's version is patched to reflect the complete version The topmost comment's version is patched to reflect the complete version
of current specfile by 'make-dist source'. WRite the comment in this of current specfile by *make-dist source*. Write the comment in this
directory, copy-paste previous version nr. It will be updated. directory, copy-paste previous version nr. It will be updated.
This has been confirmed to start up and provide basic functionality both using This has been confirmed to start up and provide basic functionality both using
the thin webserver and apache passenger, and on 32/64 bit systems. the thin webserver and apache passenger, on 32/64 bit systems and in the
mock build environment.
#### Implementation #### Implementation

View file

@ -1,4 +1,4 @@
# These files will be linked to %_sourcedir by 'make-dist links' # These files will be linked to %_sourcedir by 'make-dist links'
diaspora-setup diaspora-setup
diaspora-ws diaspora-wsd
diaspora.logconf diaspora.logconf

View file

@ -4,22 +4,22 @@
%define __jar_repack %{nil} %define __jar_repack %{nil}
# Turn off the brp-python-bytecompile script, *pyc/pyo causes problems # Turn off the brp-python-bytecompile script, *pyc/pyo causes problems
%global __os_install_post %(echo '%{__os_install_post}' | %global __os_install_post %(echo '%{__os_install_post}' |
sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
Summary: Rubygem bundle for diaspora Summary: Rubygem bundle for diaspora
Name: diaspora-bundle Name: diaspora-bundle
Version: 0.0 Version: 0.0
Release: 1.%{git_release}%{?dist} Release: 1.%{git_release}%{?dist}
License: AGPLv3 License: AGPLv3
Group: Applications/Communications Group: Applications/Communications
URL: http://www.joindiaspora.com/ URL: http://www.joindiaspora.com/
Vendor: joindiaspora.com Vendor: joindiaspora.com
Source: %{name}-%{version}-%{git_release}.tar.gz Source: %{name}-%{version}-%{git_release}.tar.gz
Prefix: %{_prefix} Prefix: %{_prefix}
BuildRoot: %{_rmpdir}/not-used-in-fedora/
Requires(pre): shadow-utils Requires(pre): shadow-utils
BuildRequires: git
Requires: ruby(abi) = 1.8 Requires: ruby(abi) = 1.8
%description %description
@ -37,6 +37,8 @@ Source file usede to compile native libraries in diaspora-bundle.
%prep %prep
%setup -q -n %{name}-%{version}-%{git_release} %setup -q -n %{name}-%{version}-%{git_release}
find . -name .git* -print | xargs rm -rf
pushd bundle/ruby/1.8/ pushd bundle/ruby/1.8/
find . -name \*.css -exec chmod 644 {} \; find . -name \*.css -exec chmod 644 {} \;
find . -name \*.js -exec chmod 644 {} \; find . -name \*.js -exec chmod 644 {} \;
@ -64,12 +66,12 @@ pushd bundle/ruby/1.8/
sed -i -e '/^#!/d' $f sed -i -e '/^#!/d' $f
chmod 0644 $f chmod 0644 $f
done > /dev/null 2>&1 done > /dev/null 2>&1
find . -perm /u+x -type f -print0 | find . -perm /u+x -type f -print0 |
xargs --null sed -i 's|^#!/usr/local/bin/ruby|#!/usr/bin/ruby|' xargs --null sed -i 's|^#!/usr/local/bin/ruby|#!/usr/bin/ruby|'
chmod 755 gems/thin-1.2.7/example/async_chat.ru chmod 755 gems/thin-1.2.7/example/async_chat.ru
chmod 755 gems/thin-1.2.7/example/async_tailer.ru chmod 755 gems/thin-1.2.7/example/async_tailer.ru
chmod 644 gems/i18n-0.4.1/MIT-LICENSE chmod 644 gems/i18n-0.4.1/MIT-LICENSE
chmod 755 gems/abstract-1.0.0/abstract.gemspec chmod 755 gems/abstract-1.0.0/abstract.gemspec
chmod 644 gems/mini_magick-2.1/MIT-LICENSE chmod 644 gems/mini_magick-2.1/MIT-LICENSE
chmod 755 gems/thin-1.2.7/lib/thin/controllers/service.sh.erb chmod 755 gems/thin-1.2.7/lib/thin/controllers/service.sh.erb
@ -82,7 +84,7 @@ pushd bundle/ruby/1.8/
# In repo (2.2.4) # In repo (2.2.4)
test -d gems/gherkin-*/ext && { test -d gems/gherkin-*/ext && {
pushd gems/gherkin-*/ext pushd gems/gherkin-*/ext
# Recompile all shared libraries using -O2 optimalization flagcd # Recompile all shared libraries using -O2 flag
for lexer_dir in */ ; do for lexer_dir in */ ; do
pushd $lexer_dir pushd $lexer_dir
sed -i 's/ -O0 / -O2 /' extconf.rb sed -i 's/ -O0 / -O2 /' extconf.rb
@ -118,7 +120,7 @@ pushd bundle/ruby/1.8/
ln -s ../cbson/cbson.so . ln -s ../cbson/cbson.so .
popd popd
# In repo (0.10.4) # In repo (0.10.4)
pushd gems/ruby-debug-base-0.10.3/lib pushd gems/ruby-debug-base-0.10.3/lib
rm ruby_debug.so rm ruby_debug.so
ln -s ../ext/ruby_debug.so . ln -s ../ext/ruby_debug.so .
@ -144,6 +146,7 @@ pushd bundle/ruby/1.8/
ln -sf ../../ext/nokogiri/nokogiri.so . ln -sf ../../ext/nokogiri/nokogiri.so .
popd popd
# in repo (rawhide)
pushd gems/json-1.4.6/ext/json/ext/json/ext pushd gems/json-1.4.6/ext/json/ext/json/ext
rm generator.so rm generator.so
ln -s ../../generator/generator.so ln -s ../../generator/generator.so
@ -199,18 +202,18 @@ popd
} }
mkdir -p $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor mkdir -p $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor
cp -ar bundle $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor cp -ar bundle $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor
find %{buildroot}/%{_libdir}/diaspora-bundle \ find %{buildroot}/%{_libdir}/diaspora-bundle \
-type d -fprintf dirs '%%%dir "%%p"\n' -type d -fprintf dirs '%%%dir "%%p"\n'
find -L %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \ find -L %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \
-type f -not -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \ -type f -not -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \
-fprintf files '"%%p"\n' -fprintf files '"%%p"\n'
find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \ find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \
-type f -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \ -type f -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \
-fprintf dev-files '"%%p"\n' -fprintf dev-files '"%%p"\n'
sed -i -e 's|%{buildroot}||' -e 's|//|/|' files dev-files dirs sed -i -e 's|%{buildroot}||' -e 's|//|/|' files dev-files dirs
cat files >> dirs && cp dirs files cat files >> dirs && cp dirs files
%clean %clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT [ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT
@ -224,5 +227,5 @@ cat files >> dirs && cp dirs files
%doc COPYRIGHT AUTHORS GNU-AGPL-3.0 %doc COPYRIGHT AUTHORS GNU-AGPL-3.0
%changelog %changelog
* Sat Oct 02 2010 Alec Leamas <leamas.alec@gmail.com> 1.1009271539_08b9aa8 * Sat Oct 02 2010 Alec Leamas <leamas.alec@gmail.com> 0.0-1.1009271539_08b9aa8
- Initial attempt to create a spec file - Initial attempt to create a spec file

View file

@ -1,14 +1,13 @@
#!/bin/sh #!/bin/sh
# #
# Try to revert to pristine state, deleting all users and # Try to revert to pristine state, deleting all users and
# configuration # configuration
#
set -x set -x
service mongod stop service mongod stop
service diaspora-ws stop service diaspora-wsd stop
rm -rf /var/lib/mongodb/* rm -rf /var/lib/mongodb/*
cp /usr/share/diaspora/master/config/app_config.yml.example \ cp /usr/share/diaspora/master/config/app_config.yml.example \
/usr/share/diaspora/master/config/app_config.yml /usr/share/diaspora/master/config/app_config.yml
service mongod start service mongod start

View file

@ -1,21 +1,23 @@
#!/bin/bash #!/bin/bash
# #
# Do what's needed to initiate diaspora. # Do what's needed to initiate diaspora.
# #
# See http://github.com/diaspora/diaspora/issues/issue/395
#
# Note: This is really sort of prototyping. This should be done in ruby,
# on a web page.
test $UID = "0" || { test $UID = "0" || {
echo "You need to be root to do this, giving up" echo "You need to be root to do this, giving up"
exit 2 exit 2
} }
cd /usr/share/diaspora/master services=$( netstat -nl | grep '[^:]:3000[ \t]')
test -n "$services" && {
echo "Warning: something is already using port 3000"
echo " $services"
}
/sbin/service mongod start || : /sbin/service mongod start || :
cd /usr/share/diaspora/master
test -e config/app_config.yml || test -e config/app_config.yml ||
cp config/app_config.yml.example config/app_config.yml cp config/app_config.yml.example config/app_config.yml
@ -49,4 +51,3 @@ while : ; do
break break
} }
done done

View file

@ -1,30 +1,30 @@
#!/bin/bash #!/bin/bash
# #
# /etc/rc.d/init.d/diaspora-ws # /etc/rc.d/init.d/diaspora-wsd
# #
# Starts the diaspora websocket server # Starts the diaspora websocket daemon
# #
# chkconfig: - 80 80 # chkconfig: - 80 80
# description: Diaspora websocket server # description: Diaspora websocket daemon
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: diaspora-ws # Provides: diaspora-wsd
# Required-Start: $local_fs $network # Required-Start: $local_fs $network
# Required-Stop: $local_fs $network # Required-Stop: $local_fs $network
# Should-Start: $remote_fs # Should-Start: $remote_fs
# Should-Stop: $remote_fs # Should-Stop: $remote_fs
# Default-Start: # Default-Start:
# Default-Stop: 0 1 2 3 4 5 6 # Default-Stop: 0 1 2 3 4 5 6
# Short-Description: start and stop Diaspora websocket server # Short-Description: start and stop Diaspora websocket server
# Description: The websocket server provides websocket services for # Description: The websocket server provides websocket services for
# diaspora. # diaspora.
### END INIT INFO ### END INIT INFO
# Source function library. # Source function library.
. /etc/init.d/functions . /etc/init.d/functions
if [ -f /etc/sysconfig/diaspora-ws -a $UID -eq 0 ]; then if [ -f /etc/sysconfig/diaspora-wsd -a $UID -eq 0 ]; then
. /etc/sysconfig/diaspora-ws . /etc/sysconfig/diaspora-wsd
fi fi
# Note: this line is patched by installation scripts. # Note: this line is patched by installation scripts.
@ -33,9 +33,9 @@ cd /usr/share/diaspora
RETVAL=0 RETVAL=0
prog="Diaspora websocket server" prog="Diaspora websocket server"
exec="script/websocket_server.rb" exec="script/websocket_server.rb"
pidfile="/var/run/diaspora-ws" pidfile="/var/run/diaspora-wsd"
lockfile="/var/lock/subsys/diaspora-ws" lockfile="/var/lock/subsys/diaspora-wsd"
logfile=/var/log/diaspora-ws.log logfile=/var/log/diaspora-wsd.log
[ -n "$OPTIONS" ] && OPTIONS=" $OPTIONS" [ -n "$OPTIONS" ] && OPTIONS=" $OPTIONS"
ruby_cmd="ruby -C $PWD $exec$OPTIONS" ruby_cmd="ruby -C $PWD $exec$OPTIONS"

View file

@ -8,6 +8,6 @@
notifempty notifempty
missingok missingok
postrotate postrotate
( /sbin/service diaspora-ws condrestart ) >/dev/null 2>&1 ( /sbin/service diaspora-wsd condrestart ) >/dev/null 2>&1
endscript endscript
} }

View file

@ -10,10 +10,11 @@ Group: Applications/Communications
URL: http://www.joindiaspora.com/ URL: http://www.joindiaspora.com/
Vendor: joindiaspora.com Vendor: joindiaspora.com
Source: %{name}-%{version}-%{git_release}.tar.gz Source: %{name}-%{version}-%{git_release}.tar.gz
Source1: diaspora-ws Source1: diaspora-wsd
Source2: diaspora-setup Source2: diaspora-setup
Source3: diaspora.logconf Source3: diaspora.logconf
BuildArch: noarch BuildArch: noarch
BuildRoot: %{_rmpdir}/not-used-in-fedora/
Requires: mongodb-server Requires: mongodb-server
Requires: ruby(abi) = 1.8 Requires: ruby(abi) = 1.8
@ -27,12 +28,11 @@ open source social network server.
%prep %prep
%setup -q -n %{name}-%{version}-%{git_release} %setup -q -n %{name}-%{version}-%{git_release}
find . -perm /u+x -type f -exec \ find . -perm /u+x -type f -exec \
sed -i 's|^#!/usr/local/bin/ruby|#!/usr/bin/ruby|' {} \; > /dev/null sed -i 's|^#!/usr/local/bin/ruby|#!/usr/bin/ruby|' {} \; > /dev/null
%build %build
rm -rf master/vendor/bundle rm -rf master/vendor/bundle
mkdir master/tmp || :
%install %install
rm -fr $RPM_BUILD_ROOT rm -fr $RPM_BUILD_ROOT
@ -43,7 +43,7 @@ cp master/pkg/fedora/README.md README-Fedora.md
mkdir -p $RPM_BUILD_ROOT/etc/init.d mkdir -p $RPM_BUILD_ROOT/etc/init.d
cp %SOURCE1 $RPM_BUILD_ROOT/etc/init.d cp %SOURCE1 $RPM_BUILD_ROOT/etc/init.d
sed -i '/^cd /s|.*|cd %{_datadir}/diaspora/master|' \ sed -i '/^cd /s|.*|cd %{_datadir}/diaspora/master|' \
$RPM_BUILD_ROOT/etc/init.d/diaspora-ws $RPM_BUILD_ROOT/etc/init.d/diaspora-wsd
mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d
cp %SOURCE3 $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/diaspora cp %SOURCE3 $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/diaspora
@ -56,39 +56,40 @@ 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/uploads
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp
find $RPM_BUILD_ROOT/%{_datadir}/diaspora -type d -fprintf dirs '%%%dir "%%p"\n' rm -rf $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/vendor/bundle
find -L $RPM_BUILD_ROOT/%{_datadir}/diaspora -type f -fprintf files '"%%p"\n' 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
find $RPM_BUILD_ROOT/%{_datadir}/diaspora -type d \
-fprintf dirs '%%%dir "%%p"\n'
find -L $RPM_BUILD_ROOT/%{_datadir}/diaspora -type f \
-fprintf files '"%%p"\n'
cat files >> dirs && mv -f dirs files cat files >> dirs && mv -f dirs files
sed -i -e '\|.*/master/config.ru"$|d' \ sed -i -e '\|.*/master/config.ru"$|d' \
-e '\|.*/master/config/environment.rb"$|d' \ -e '\|.*/master/config/environment.rb"$|d' \
-e 's|%{buildroot}||' -e 's|//|/|' -e '/""/d' \ -e 's|%{buildroot}||' -e 's|//|/|' -e '/""/d' \
files files
%post %post
rm -f %{_datadir}/diaspora/master/vendor/bundle ln -sf %{_localstatedir}/log/diaspora \
rm -f %{_datadir}/diaspora/master/log %{_datadir}/diaspora/master/log &>/dev/null || :
rm -f %{_datadir}/diaspora/master/public/uploads ln -sf %{_libdir}/diaspora-bundle/master/vendor/bundle \
rm -rf %{_datadir}/diaspora/master/tmp .%{_datadir}/diaspora/master/vendor &>/dev/null || :
ln -sf %{_localstatedir}/lib/diaspora/uploads \
ln -s %{_localstatedir}/log/diaspora \ %{_datadir}/diaspora/master/public/uploads &>/dev/null || :
%{_datadir}/diaspora/master/log || : ln -sf %{_localstatedir}/lib/diaspora/tmp \
ln -s %{_libdir}/diaspora-bundle/master/vendor/bundle \ %{_datadir}/diaspora/master/tmp &>/dev/null || :
%{_datadir}/diaspora/master/vendor || :
ln -s %{_localstatedir}/lib/diaspora/uploads \
%{_datadir}/diaspora/master/public/uploads || :
ln -s %{_localstatedir}/lib/diaspora/tmp \
%{_datadir}/diaspora/master/tmp || :
/sbin/chkconfig --add diaspora-ws || :
/sbin/chkconfig --add diaspora-wsd
%preun %preun
if [ $1 -eq 0 ] ; then if [ $1 -eq 0 ] ; then
service diaspora-ws stop >/dev/null 2>&1 || : service diaspora-wsd stop >/dev/null 2>&1 || :
/sbin/chkconfig --del diaspora-ws /sbin/chkconfig --del diaspora-wsd
fi fi
%clean %clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT rm -fr $RPM_BUILD_ROOT
%files -f files %files -f files
%defattr(-, root, root, 0755) %defattr(-, root, root, 0755)
@ -99,7 +100,7 @@ fi
%attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/uploads %attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/uploads
%attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/tmp %attr(-, diaspora, diaspora) %{_localstatedir}/lib/diaspora/tmp
%config(noreplace) %{_sysconfdir}/logrotate.d/diaspora %config(noreplace) %{_sysconfdir}/logrotate.d/diaspora
%{_sysconfdir}/init.d/diaspora-ws %{_sysconfdir}/init.d/diaspora-wsd
%changelog %changelog
* Fri Sep 24 2010 Alec Leamas <leamas.alec@gmail.com> 0.0-1.1009280542_859ec2d * Fri Sep 24 2010 Alec Leamas <leamas.alec@gmail.com> 0.0-1.1009280542_859ec2d

View file

@ -6,6 +6,8 @@
# #
GIT_REPO='http://github.com/diaspora/diaspora.git' GIT_REPO='http://github.com/diaspora/diaspora.git'
VERSION='0.0' VERSION='0.0'
RELEASE='1'
function git_id function git_id
# #
@ -26,51 +28,53 @@ function git_id
local dir=$(dirname $file_or_dir) local dir=$(dirname $file_or_dir)
fi fi
export LANG=C
( (
cd $dir cd $dir
git log -1 --abbrev-commit --date=iso $file | git log -1 --abbrev-commit --date=iso $file |
awk -v nl="$nl" \ awk -v nl="$nl" \
' BEGIN { commit = "" } ' BEGIN { commit = ""; d[1] = "" }
/^commit/ { if ( commit == "") commit = $2 } /^commit/ { if ( commit == "") commit = $2 }
/^Date:/ { split( $2, d, "-") /^Date:/ { if (d[1] == "") {
split( $3, t, ":") split( $2, d, "-")
} split( $3, t, ":")
END { printf( "%s%s%s%s%s_%s%s", }
substr( d[1],3), d[2], d[3], }
t[1], t[2], END { printf( "%s%s%s%s%s_%s%s",
commit, nl) substr( d[1],3), d[2], d[3],
}' t[1], t[2],
commit, nl)
}'
) )
} }
function fix_alphatag() function fix_alphatag()
# Patch version on top comment first id line: # Patch version on top comment first id line:
# Usage: fix_alphatag <file> <version> <commit_id> # Usage: fix_alphatag <file> <version> <commit_id> <release>
# Patches:\ # Patches:\
# * Fri Sep 24 2010 name surname <email@com> 1.20100925_faf23207 # * Fri Sep 24 2010 name surname <email@com> 1.20100925_faf23207
{ {
local dist=$(rpm --eval %dist) local dist=$(rpm --eval %dist)
awk -v dist="$dist" -v version="$2" -v release="$3" \ awk -v dist="$dist" -v version="$2" -v commit="$3" -v release="$4" \
' BEGIN { done = 0 } ' BEGIN { done = 0 }
/^[*]/ { if (done) /^[*]/ { if (done)
print print
else else
{ {
gsub( "1[.].*", "") s = sprintf( "-%s.%s%s\n", release, commit, dist)
printf( "%s%s-1.%s%s\n", gsub( "-[0-9][.][^ ]*$", s)
$0, version, release,dist) done = 1
done = 1 # add new gsub for version...
} print
next }
} next
{ print }' \ }
< $1 > $1.tmp && mv -f $1.tmp $1 { print }' < $1 > $1.tmp && mv -f $1.tmp $1
} }
function fix_bundle_deps function fix_bundle_deps
# usage: fix_bundle_deps <specfile> <version> <release> # usage: fix_bundle_deps <specfile> <version> <commit>
# Patches: Requires: diaspora-bundle = 0.0-20101021-aefsf323148 # Patches: Requires: diaspora-bundle = 0.0-20101021-aefsf323148
{ {
awk -v vers="$2-$3" \ awk -v vers="$2-$3" \
@ -79,22 +83,23 @@ function fix_bundle_deps
else else
print print
next next
} }
{ print}' \ { print}' \
< $1 > $1.tmp && mv -f $1.tmp $1 < $1 > $1.tmp && mv -f $1.tmp $1
} }
function patch() function patch()
# Patch spec-files with current version-release # Patch spec-files with current version-release
# Usage: patch VERSION RELEASE # Usage: patch <version> <commit> <release>
{ {
sed -e "/^%define/s|HEAD|$2|" \ sed -e "/^%define/s|HEAD|$2|" \
-e '/^Version:/s|.*|Version: '$1'|' \ -e '/^Version:/s|.*|Version: '$1'|' \
<diaspora.spec >dist/diaspora.spec <diaspora.spec >dist/diaspora.spec
fix_alphatag dist/diaspora.spec $1 $2 fix_alphatag dist/diaspora.spec $1 $2 $3
local bundle_id=$(git_id dist/diaspora/Gemfile) local bundle_id=$(git_id dist/diaspora/Gemfile)
local dist_tag=$(rpm --eval %dist) local dist_tag=$(rpm --eval %dist)
fix_bundle_deps dist/diaspora.spec $1 "1.${bundle_id}$dist_tag" fix_bundle_deps dist/diaspora.spec $1 "$RELEASE.${bundle_id}$dist_tag"
sed -e "/^%define/s|HEAD|$bundle_id|" \ sed -e "/^%define/s|HEAD|$bundle_id|" \
-e '/^Version:/s|.*|Version: '$1'|' \ -e '/^Version:/s|.*|Version: '$1'|' \
< diaspora-bundle.spec > dist/diaspora-bundle.spec < diaspora-bundle.spec > dist/diaspora-bundle.spec
@ -102,6 +107,7 @@ function patch()
cp dist/diaspora.spec dist/diaspora/diaspora.spec cp dist/diaspora.spec dist/diaspora/diaspora.spec
} }
function checkout() function checkout()
# Checkout last version of diaspora unless it's already there. # Checkout last version of diaspora unless it's already there.
# Usage: checkout [commit id, defaults to HEAD] # Usage: checkout [commit id, defaults to HEAD]
@ -109,18 +115,26 @@ function checkout()
{ {
mkdir dist &>/dev/null || : mkdir dist &>/dev/null || :
( (
local last_repo=''
cd dist cd dist
test -e '.last-repo' &&
last_repo=$( cat '.last-repo')
test "$last_repo" != $GIT_REPO &&
rm -rf diaspora
test -d diaspora || { test -d diaspora || {
git clone --quiet $GIT_REPO; git clone --quiet $GIT_REPO;
( (
cd diaspora; cd diaspora;
git remote add upstream \ git remote add upstream \
git://github.com/diaspora/diaspora.git git://github.com/diaspora/diaspora.git
for p in ../../*.patch; do for p in ../../*.patch; do
git apply --whitespace=fix $p > /dev/null git apply --whitespace=fix $p > /dev/null
done &>/dev/null || : done &> /dev/null || :
) )
} }
echo -n "$GIT_REPO" > '.last-repo'
cd diaspora; cd diaspora;
git fetch --quiet upstream git fetch --quiet upstream
git merge --quiet upstream/master git merge --quiet upstream/master
@ -130,13 +144,14 @@ function checkout()
} }
function make_dist function make_src
# Create a distribution tarball # Create a distribution tarball
# Usage: make dist [ commit, defaults to HEAD] # Usage: make src <commit>
{ {
echo "Using repo: $GIT_REPO"
commit=$(checkout ${1:-'HEAD'}) commit=$(checkout ${1:-'HEAD'})
echo "Creating source tarball for $commit" echo "Commit id: $commit"
patch $VERSION $commit
RELEASE_DIR="diaspora-$VERSION-$commit" RELEASE_DIR="diaspora-$VERSION-$commit"
rm -rf dist/${RELEASE_DIR} rm -rf dist/${RELEASE_DIR}
@ -152,24 +167,23 @@ function make_dist
--exclude='source.tar' -X .gitignore * --exclude='source.tar' -X .gitignore *
find $PWD -name .git\* | xargs rm -rf find $PWD -name .git\* | xargs rm -rf
rm -rf .bundle rm -rf .bundle
/usr/bin/patch -p1 <../../../add-bundle.diff /usr/bin/patch -p1 -s <../../../add-bundle.diff
) )
tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && \ tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && \
rm -rf ${RELEASE_DIR} rm -rf ${RELEASE_DIR}
cd .. cd ..
echo "Source: dist/${RELEASE_DIR}.tar.gz" echo "Source: dist/${RELEASE_DIR}.tar.gz"
echo "Required bundle: $(git_id dist/diaspora/Gemfile)" echo "Required bundle: $(git_id dist/diaspora/Gemfile)"
echo "Source specfile: dist/diaspora.spec"
echo "Bundle specfile: dist/diaspora-bundle.spec"
} }
function make_bundle() function make_bundle()
# Create the bundle tarball # Create the bundle tarball
# Usage: make_bundle [ commit, defaults to HEAD] # Usage: make_bundle [ commit, defaults to HEAD]
# #
{ {
checkout ${1:-'HEAD'} >/dev/null checkout ${1:-'HEAD'} >/dev/null
bundle_id=$(git_id dist/diaspora/Gemfile) bundle_id=$( git_id dist/diaspora/Gemfile)
bundle_name="diaspora-bundle-$VERSION-$bundle_id" bundle_name="diaspora-bundle-$VERSION-$bundle_id"
test -e "dist/$bundle_name.tar.gz" || { test -e "dist/$bundle_name.tar.gz" || {
echo "Creating bundle $bundle_name" echo "Creating bundle $bundle_name"
@ -185,14 +199,16 @@ function make_bundle()
"../$bundle_name" "../$bundle_name"
popd > /dev/null popd > /dev/null
tar czf $bundle_name.tar.gz $bundle_name tar czf $bundle_name.tar.gz $bundle_name
rm -rf $bundle_name
cd .. cd ..
} }
echo echo
echo "Bundle: dist/$bundle_name.tar.gz" echo "Bundle: dist/$bundle_name.tar.gz"
} }
function make_links()
# Usage: make_links [source commit] function prepare_rpm()
# Usage: prepare_rpm < commit>
{ {
local dest=$(rpm --eval %_sourcedir) local dest=$(rpm --eval %_sourcedir)
test -z "$dest" && { test -z "$dest" && {
@ -200,10 +216,13 @@ function make_links()
exit 2 exit 2
} }
local src_commit="${1:-$( checkout)}" local commit=$( checkout $1)
echo "Linking sources for $src_commit to $dest" echo "Release: $RELEASE.$commit"
echo "Rpm source dir: $dest"
src="dist/diaspora-$VERSION-$src_commit.tar.gz" patch $VERSION $commit $RELEASE
local src="dist/diaspora-$VERSION-$commit.tar.gz"
test -e $src || test -e $src ||
cat <<- EOF cat <<- EOF
Warning: $src does not exist Warning: $src does not exist
@ -211,7 +230,7 @@ function make_links()
EOF EOF
ln -sf $PWD/$src $dest ln -sf $PWD/$src $dest
local bundle_commit=$(git_id dist/diaspora/Gemfile) local bundle_commit=$( git_id dist/diaspora/Gemfile)
local bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz" local bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz"
test -e $bundle || test -e $bundle ||
cat <<- EOF cat <<- EOF
@ -230,50 +249,72 @@ function make_links()
done done
( cd $dest; find . -type l -not -readable -exec rm {} \;) ( cd $dest; find . -type l -not -readable -exec rm {} \;)
echo "Source specfile: dist/diaspora.spec"
echo "Bundle specfile: dist/diaspora-bundle.spec"
} }
function usage() function usage()
{ {
cat <<- EOF cat <<- EOF
Usage: make-dist [-c commit] <dist|bundle|links> Usage: make-dist [options] <dist|bundle|prepare>
-c Use a given commit, defaults to last checked in. Options:
dist Build a diaspora application tarball.
-h Print this message.
-c commit Use a given commit, defaults to last checked in.
-r release Mark with specified release, defaults to 1.
-u uri Git repository URI, defaults to
$GIT_REPO.
source Build a diaspora application tarball.
bundle Build a bundler(1) bundle for diaspora. bundle Build a bundler(1) bundle for diaspora.
links Symlink bundle and source tarballs to rpm source dir. prepare Symlink bundle and source tarballs to rpm source dir,
create patched rpm spec files.
All results are stored in dist/ All results are stored in dist/
EOF EOF
} }
test "$1" = "-h" -o $# = 0 && { commit='HEAD'
while getopts ":r:c:h" opt
do
case $opt in
u) GIT_REPO="$OPTARG"
;;
c) commit="${OPTARG:0:7}"
;;
r) RELEASE="$OPTARG:"
;;
h) usage
exit 0
;;
*) usage
exit 2
;;
esac
done
shift $(($OPTIND - 1))
typeset -r GIT_REPO RELEASE
export LANG=C
test $# -gt 1 -o $# -eq 0 && {
usage; usage;
exit 0 exit 2;
} }
test "$1" = "-c" && {
test -z "$2" && {
usage;
exit 1
}
commit="$2"
shift; shift
}
case $1 in case $1 in
"bundle") make_bundle $commit "bundle") make_bundle $commit
;; ;;
'source') make_src $commit
'source') make_dist $commit
;; ;;
'prepare') prepare_rpm $commit $release
'links') make_links $commit
;; ;;
*) usage *) usage
exit 1 exit 1
;; ;;