Merge remote branch 'leamas/orvar'

This commit is contained in:
Raphael 2010-10-11 10:25:35 -07:00
commit 978643be97
15 changed files with 415 additions and 244 deletions

3
.gitignore vendored
View file

@ -2,6 +2,7 @@
.DS_Store
.idea
.rvmrc
.stgit*
*.swap
*.swo
*.swp
@ -19,4 +20,4 @@ gpg/*/random_seed
public/uploads/*
public/source.tar
tmp/**/*
capybara-*.html
capybara-*.html

View file

@ -2,4 +2,22 @@
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
GIT_INFO = `git show --name-only`
s = `git show --name-only 2>/dev/null || :`
if (s.nil? or s.empty?)
path = File.expand_path("config/gitversion")
begin
if (File.exists?( path))
s = ''
f = File.open( path)
f.each_line do |line|
s += line
end
f.close
end
rescue
s = ""
end
end
GIT_INFO = s
# What's the scope of this s? Leave to GC just in case...
s = nil

View file

@ -1,2 +1,3 @@
TODO
dist
.stgit*

View file

@ -1,24 +1,25 @@
## 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
packages for deployment on Fedora 13.
An alternative to the capistrano system, providing classic, binary RPM
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
http://github.com/diaspora/diaspora/wiki/Rpm-installation-on-fedora
or http://github.com/diaspora/diaspora/wiki/Installing-on-CentOS-Fedora
Create source tarballs like dist/diaspora-0.0-1010041233_fade4231.tar.gz
Create source tarballs like dist/diaspora-0.0-1010041233_fade4231.tar.gz
and dist/diaspora-bundle-0.0-1010041233_fade4231.tar.gz:
% ./make-dist.sh source
% ./make-dist.sh bundle
Setup links to tarballs from RPM source directory:
% ./make-dist.sh links
Setup links to tarballs from RPM source directory and create spec files:
% ./make-dist.sh prepare
Build rpms:
rpmbuild -ba dist/diaspora.spec
@ -28,7 +29,7 @@ Install (as root):
rpm -U ~/rmpbuild/rpms/i686/diaspora-bundle-0.0-1.1010042345_4343fade43.fc13.i686
rpm -U ~/rmpbuild/rpms/noarch/diaspora-0.0-1.1010042345_4343fade43.fc13.noarch
Initiate (as root).
Initiate (as root).
/usr/share/diaspora/diaspora-setup
Start development server:
@ -37,48 +38,75 @@ Start development server:
cd /usr/share/diaspora/master
./script/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:
/sbin/service diaspora-ws start
/sbin/service diaspora-wsd start
/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
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
version contains a time stamp and an abbreviated git commit id. If listed
in filename order, like ls does, latest version will be the last one.
version contains a time stamp and an abbreviated git commit id.
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*
applies all patches named *.patch in this directory after checking out
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
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
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
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.
rpmlint shows many errors, most of which related to that the server
won't start if the .git directories are not included. Needs investigation.
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.
#### Bugs
As of now, diaspora fails if it not owns all file under /usr/share/diaspora.
I guess this means diaspora writes some stuff somewhere. In the long run,
this should be located and symlinked to /var,leaving the rest of the files
owned by root. FTM, all files in /usr/share/diaspore are owned by
diaspora
This has been confirmed to start up and provide basic functionality both using
the thin webserver and apache passenger, on 32/64 bit systems and in the
mock build environment.
#### Implementation
@ -86,22 +114,23 @@ diaspora
dist/diaspora directory. This content is, after some patches, the diaspora package.
'make-dir.sh bundle' makes a 'bundle install --deployment' in the diaspora dir.
The resulting bundle is stored in vendor/bundle. This is, after some more
The resulting bundle is stored in vendor/bundle. This is, after some more
patches, the content of diaspora-bundle.
Here is also support for running the diaspora websocket service as a system
Here is also support for running the diaspora websocket service as a system
service through /sbin/service and some install scripts.
Diaspora files are stored in /usr/share/diaspora, and owned by diaspora. The
Diaspora files are stored in /usr/share/diaspora, and owned by root. The
bundle, containing some C extensions, is architecture-dependent and lives
in /usr/lib[64]/diaspora. Log files are in /var/log/diaspora. Symlinks in
/usr/share diaspora makes log and bundle available as expected by diaspora app.
This is more or less as mandated by LSB and Fedora packaging rules.
find /usr/share/diaspora/ -type l -exec ls -l {} \; | awk '{print $9, $10, $11}'
/usr/share/diaspora/master/public/uploads -> /var/lib/diaspora/uploads
/usr/share/diaspora/master/log -> /var/log/diaspora
/usr/share/diaspora/master/vendor/bundle -> /usr/lib/diaspora-bundle/master/vendor/bundle
/usr/share diaspora makes log, bundle and tmp dir available as expected by
diaspora app. This is more or less as mandated by LSB and Fedora packaging rules.
find . -type l -exec ls -l {} \; | awk '{print $9, $10, $11}'
./public/uploads -> /var/lib/diaspora/uploads
./log -> /var/log/diaspora
./tmp -> /var/lib/diaspora/tmp
./vendor/bundle -> /usr/lib/diaspora-bundle/master/vendor/bundle
#### Discussion
@ -119,11 +148,11 @@ original README.md:
not 777.
- Splitting in two packages makes sense IMHO. The bundle is not changed that often,
but is quite bug: ~18M without test packages (the default) or ~55M with test
packages. The application is just ~7.5M, and is fast to deploy even with these
but is quite big: ~30M without test packages (the default) or ~55M with test
packages. The application is just ~3M, and is fast to deploy even with these
tools (yes, I know, capistrano is much faster...)
- Many, roughly 50% of the packages in the bundle are already packaged for Fedora
i. e., they could be removed from the bundle and added as dependencies instead.
This is likely to make things more stable in the long run.
This is likely to make things more stable in the long run.
diaspora.spec has a list.

View file

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

View file

@ -4,22 +4,22 @@
%define __jar_repack %{nil}
# 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')
Summary: Rubygem bundle for diaspora
Name: diaspora-bundle
Version: 0.0
Release: 1.%{git_release}%{?dist}
License: AGPLv3
License: AGPLv3
Group: Applications/Communications
URL: http://www.joindiaspora.com/
Vendor: joindiaspora.com
Source: %{name}-%{version}-%{git_release}.tar.gz
Prefix: %{_prefix}
BuildRoot: %{_rmpdir}/not-used-in-fedora/
Requires(pre): shadow-utils
BuildRequires: git
Requires: ruby(abi) = 1.8
%description
@ -37,6 +37,8 @@ Source file usede to compile native libraries in diaspora-bundle.
%prep
%setup -q -n %{name}-%{version}-%{git_release}
find . -name .git* -print | xargs rm -rf
pushd bundle/ruby/1.8/
find . -name \*.css -exec chmod 644 {} \;
find . -name \*.js -exec chmod 644 {} \;
@ -64,12 +66,12 @@ pushd bundle/ruby/1.8/
sed -i -e '/^#!/d' $f
chmod 0644 $f
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|'
chmod 755 gems/thin-1.2.7/example/async_chat.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 644 gems/mini_magick-2.1/MIT-LICENSE
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)
test -d 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
pushd $lexer_dir
sed -i 's/ -O0 / -O2 /' extconf.rb
@ -118,7 +120,7 @@ pushd bundle/ruby/1.8/
ln -s ../cbson/cbson.so .
popd
# In repo (0.10.4)
# In repo (0.10.4)
pushd gems/ruby-debug-base-0.10.3/lib
rm ruby_debug.so
ln -s ../ext/ruby_debug.so .
@ -144,6 +146,7 @@ pushd bundle/ruby/1.8/
ln -sf ../../ext/nokogiri/nokogiri.so .
popd
# in repo (rawhide)
pushd gems/json-1.4.6/ext/json/ext/json/ext
rm generator.so
ln -s ../../generator/generator.so
@ -199,18 +202,18 @@ popd
}
mkdir -p $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor
cp -ar bundle $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle/master/vendor
find %{buildroot}/%{_libdir}/diaspora-bundle \
-type d -fprintf dirs '%%%dir "%%p"\n'
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'
find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \
-type f -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \
-fprintf dev-files '"%%p"\n'
find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \
-type f -regex '.*[.]c$|.*[.]h$|.*[.]cpp$|.*Makefile$' \
-fprintf dev-files '"%%p"\n'
sed -i -e 's|%{buildroot}||' -e 's|//|/|' files dev-files dirs
cat files >> dirs && cp dirs files
cat files >> dirs && cp dirs files
%clean
[ "$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
%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

View file

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

View file

@ -1,21 +1,23 @@
#!/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" || {
echo "You need to be root to do this, giving up"
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 || :
cd /usr/share/diaspora/master
test -e config/app_config.yml ||
cp config/app_config.yml.example config/app_config.yml
@ -49,4 +51,3 @@ while : ; do
break
}
done

View file

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

View file

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

View file

@ -1,18 +1,21 @@
%global debug_package %{nil}
%global debug_package %{nil}
%define git_release HEAD
Summary: A social network server
Name: diaspora
Version: 0.0.1
Release: 1.%{git_release}%{?dist}
License: AGPLv3
License: AGPLv3
Group: Applications/Communications
URL: http://www.joindiaspora.com/
Vendor: joindiaspora.com
Source: %{name}-%{version}-%{git_release}.tar.gz
Source1: diaspora-ws
Source1: diaspora-wsd
Source2: diaspora-setup
Source3: diaspora.logconf
Source4: make_rel_symlink.py
BuildArch: noarch
BuildRoot: %{_rmpdir}/not-used-in-fedora/
Requires: mongodb-server
Requires: ruby(abi) = 1.8
@ -26,36 +29,49 @@ open source social network server.
%prep
%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
%build
rm -rf master/vendor/bundle
mkdir master/tmp || :
pushd master
tar cf public/source.tar --exclude='source.tar' -X .gitignore *
popd
%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_datadir}/diaspora
cp master/README.md .
mv master/GNU-AGPL-3.0 .
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
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/log/diaspora
mkdir -p $RPM_BUILD_ROOT/etc/init.d
sed -i '/^cd /s|.*|cd %{_datadir}/diaspora/master|' diaspora-ws
cp diaspora-ws $RPM_BUILD_ROOT/etc/init.d
mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
cp diaspora.logconf $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/diaspora
cp %SOURCE1 $RPM_BUILD_ROOT/etc/init.d
sed -i '/^cd /s|.*|cd %{_datadir}/diaspora/master|' \
$RPM_BUILD_ROOT/etc/init.d/diaspora-wsd
mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d
cp %SOURCE3 $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/diaspora
mkdir -p $RPM_BUILD_ROOT/%{_datadir}/diaspora
cp -ar master $RPM_BUILD_ROOT/%{_datadir}/diaspora
cp -ar master/.gitignore master/.bundle $RPM_BUILD_ROOT/%{_datadir}/diaspora/master
cp diaspora-setup $RPM_BUILD_ROOT/%{_datadir}/diaspora
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads
cp %SOURCE2 $RPM_BUILD_ROOT/%{_datadir}/diaspora
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'
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
%{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'
find -L $RPM_BUILD_ROOT/%{_datadir}/diaspora -type f \
-fprintf files '"%%p"\n'
cat files >> dirs && mv -f dirs files
sed -i -e '\|.*/master/config.ru"$|d' \
-e '\|.*/master/config/environment.rb"$|d' \
@ -64,36 +80,33 @@ sed -i -e '\|.*/master/config.ru"$|d' \
%post
rm -f %{_datadir}/diaspora/master/vendor/bundle
rm -f %{_datadir}/diaspora/master/log
rm -f %{_datadir}/diaspora/master/public/uploads
/sbin/chkconfig --add diaspora-wsd
ln -s %{_localstatedir}/log/diaspora \
%{_datadir}/diaspora/master/log || :
ln -s %{_libdir}/diaspora-bundle/master/vendor/bundle \
%{_datadir}/diaspora/master/vendor || :
ln -s %{_localstatedir}/lib/diaspora/uploads \
%{_datadir}/diaspora/master/public/uploads || :
/sbin/chkconfig --add diaspora-ws || :
%preun
if [ $1 -eq 0 ] ; then
service diaspora-ws stop >/dev/null 2>&1 || :
/sbin/chkconfig --del diaspora-ws
service diaspora-wsd stop &>/dev/null || :
/sbin/chkconfig --del diaspora-wsd
fi
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -fr $RPM_BUILD_ROOT
rm -fr $RPM_BUILD_ROOT
%files -f files
%defattr(-, diaspora, diaspora, 0755)
%doc README.md GNU-AGPL-3.0
%defattr(-, root, root, 0755)
%doc AUTHORS README.md GNU-AGPL-3.0 COPYRIGHT README-Fedora.md
%attr(-, diaspora, diaspora) %{_datadir}/diaspora/master/config.ru
%attr(-, diaspora, diaspora) %{_datadir}/diaspora/master/config/environment.rb
%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-ws
%{_sysconfdir}/init.d/diaspora-wsd
%changelog
* 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'
VERSION='0.0'
RELEASE='1'
function git_id
#
@ -14,63 +16,65 @@ function git_id
# Usage: git_id [-n] [file or directory]
#
{
nl="\n"
file_or_dir="$PWD"
local nl="\n"
local file_or_dir="$PWD"
test "$1" = '-n' && { nl=""; shift; }
test -n "$1" && file_or_dir="$1"
if [ -d $file_or_dir ]; then
file=""
dir=$file_or_dir
local file=""
local dir=$file_or_dir
else
file=$(basename $file_or_dir)
dir=$(dirname $file_or_dir)
fi
local file=$(basename $file_or_dir)
local dir=$(dirname $file_or_dir)
fi
export LANG=C
(
cd $dir
git log -1 --abbrev-commit --date=iso $file |
awk -v nl="$nl" \
' BEGIN { commit = "" }
/^commit/ { if ( commit == "") commit = $2 }
/^Date:/ { 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],
commit, nl)
}'
awk -v nl="$nl" \
' BEGIN { commit = ""; d[1] = "" }
/^commit/ { if ( commit == "") commit = $2 }
/^Date:/ { if (d[1] == "") {
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],
commit, nl)
}'
)
}
function fix_alphatag()
# Patch version on top comment first id line:
# Usage: fix_alphatag <file> <version> <commit_id>
# Usage: fix_alphatag <file> <version> <commit_id> <release>
# Patches:\
# * Fri Sep 24 2010 name surname <email@com> 1.20100925_faf23207
{
dist=$(rpm --eval %dist)
awk -v dist="$dist" -v version="$2" -v release="$3" \
' BEGIN { done = 0 }
/^[*]/ { if (done)
print
else
{
gsub( "1[.].*", "")
printf( "%s%s-1.%s%s\n",
$0, version, release,dist)
done = 1
}
next
}
{ print }' \
< $1 > $1.tmp && mv -f $1.tmp $1
local dist=$(rpm --eval %dist)
awk -v dist="$dist" -v version="$2" -v commit="$3" -v release="$4" \
' BEGIN { done = 0 }
/^[*]/ { if (done)
print
else
{
s = sprintf( "-%s.%s%s\n", release, commit, dist)
gsub( "-[0-9][.][^ ]*$", s)
done = 1
# add new gsub for version...
print
}
next
}
{ print }' < $1 > $1.tmp && mv -f $1.tmp $1
}
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
{
awk -v vers="$2-$3" \
@ -79,101 +83,112 @@ function fix_bundle_deps
else
print
next
}
{ print}' \
< $1 > $1.tmp && mv -f $1.tmp $1
}
{ print}' \
< $1 > $1.tmp && mv -f $1.tmp $1
}
function patch()
# Patch spec-files with current version-release
# Usage: patch VERSION RELEASE
# Usage: patch <version> <commit> <release>
{
sed -e "/^%define/s|HEAD|$2|" \
-e '/^Version:/s|.*|Version: '$1'|' \
<diaspora.spec >dist/diaspora.spec
fix_alphatag dist/diaspora.spec $1 $2
bundle_id=$(git_id dist/diaspora/Gemfile)
dist_tag=$(rpm --eval %dist)
fix_bundle_deps dist/diaspora.spec $1 "1.${bundle_id}$dist_tag"
<diaspora.spec >dist/diaspora.spec
fix_alphatag dist/diaspora.spec $1 $2 $3
local bundle_id=$(git_id dist/diaspora/Gemfile)
local dist_tag=$(rpm --eval %dist)
fix_bundle_deps dist/diaspora.spec $1 "$RELEASE.${bundle_id}$dist_tag"
sed -e "/^%define/s|HEAD|$bundle_id|" \
-e '/^Version:/s|.*|Version: '$1'|' \
< diaspora-bundle.spec > dist/diaspora-bundle.spec
cp dist/diaspora.spec dist/diaspora/diaspora.spec
}
function checkout()
# Checkout last version of diaspora unless it's already there.
# Usage: checkout [commit id, defaults to HEAD]
# Returns: commit for current branch's HEAD.
{
mkdir dist >/dev/null 2>&1 || :
{
mkdir dist &>/dev/null || :
(
cd dist
local last_repo=''
cd dist
test -e '.last-repo' &&
last_repo=$( cat '.last-repo')
test "$last_repo" != $GIT_REPO &&
rm -rf diaspora
test -d diaspora || {
git clone --quiet $GIT_REPO;
(
cd diaspora;
git remote add upstream \
git://github.com/diaspora/diaspora.git
for p in ../../*.patch; do
git apply --whitespace=fix $p > /dev/null
done
)
git clone --quiet $GIT_REPO;
(
cd diaspora;
git remote add upstream \
git://github.com/diaspora/diaspora.git
for p in ../../*.patch; do
git apply --whitespace=fix $p > /dev/null
done &> /dev/null || :
)
}
cd diaspora;
git fetch --quiet upstream
echo -n "$GIT_REPO" > '.last-repo'
cd diaspora;
git fetch --quiet upstream
git merge --quiet upstream/master
git checkout --quiet ${1:-'HEAD'}
git_id -n
git_id -n
)
}
function make_dist
function make_src
# Create a distribution tarball
# Usage: make dist [ commit, defaults to HEAD]
# Usage: make src <commit>
{
echo "Using repo: $GIT_REPO"
commit=$(checkout ${1:-'HEAD'})
echo "Creating source tarball for $commit"
patch $VERSION $commit
echo "Commit id: $commit"
RELEASE_DIR="diaspora-$VERSION-$commit"
rm -rf dist/${RELEASE_DIR}
rm -rf dist/${RELEASE_DIR}
mkdir dist/${RELEASE_DIR}
cp diaspora-ws diaspora-setup diaspora.logconf dist/${RELEASE_DIR}
cd dist
mkdir ${RELEASE_DIR}/master
cp -ar diaspora/* diaspora/.git* ${RELEASE_DIR}/master
mv ${RELEASE_DIR}/master/diaspora.spec ${RELEASE_DIR}
(
cd ${RELEASE_DIR};
find . -name .gitkeep -delete
cd master
cd ${RELEASE_DIR}/master
git show --name-only > config/gitversion
tar cf public/source.tar \
--exclude='source.tar' -X .gitignore *
find $PWD -name .git\* | xargs rm -rf
rm -rf .bundle
git apply ../../../add-bundle.patch
/usr/bin/patch -p1 -s <../../../add-bundle.diff
)
tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && \
rm -rf ${RELEASE_DIR}
cd ..
echo "Source: dist/${RELEASE_DIR}.tar.gz"
echo "Required bundle: $(git_id dist/diaspora/Gemfile)"
echo "Source specfile: dist/diaspora.spec"
echo "Bundle specfile: dist/diaspora-bundle.spec"
echo "Source: dist/${RELEASE_DIR}.tar.gz"
echo "Required bundle: $(git_id dist/diaspora/Gemfile)"
}
function make_bundle()
# Create the bundle tarball
# Usage: make_bundle [ commit, defaults to HEAD]
#
{
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"
test -e "dist/$bundle_name.tar.gz" || {
echo "Creating bundle $bundle_name"
cd dist
rm -rf $bundle_name
rm -rf $bundle_name
mkdir -p $bundle_name/bundle
pushd diaspora > /dev/null
bundle install --deployment \
@ -184,89 +199,126 @@ function make_bundle()
"../$bundle_name"
popd > /dev/null
tar czf $bundle_name.tar.gz $bundle_name
rm -rf $bundle_name
cd ..
}
echo
echo
echo "Bundle: dist/$bundle_name.tar.gz"
}
function make_links()
# Usage: make_links [source commit]
function prepare_rpm()
# Usage: prepare_rpm < commit>
{
dest=$(rpm --eval %_sourcedir)
local dest=$(rpm --eval %_sourcedir)
test -z "$dest" && {
echo "Can't find RPM source directory, giving up."
exit 2
}
echo "Linking sources to $dest"
src_commit="${1:-$( checkout)}"
src="dist/diaspora-$VERSION-$src_commit.tar.gz"
local commit=$( checkout $1)
echo "Release: $RELEASE.$commit"
echo "Rpm source dir: $dest"
patch $VERSION $commit $RELEASE
local src="dist/diaspora-$VERSION-$commit.tar.gz"
test -e $src ||
cat <<- EOF
Warning: $src does not exist
(last version not built?)
EOF
ln -sf $PWD/$src $dest
bundle_commit=$(git_id dist/diaspora/Gemfile)
bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz"
local bundle_commit=$( git_id dist/diaspora/Gemfile)
local bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz"
test -e $bundle ||
cat <<- EOF
Warning: $bundle does not exist
(last version not built?)
EOF
ln -sf $PWD/$bundle $dest
local file
for file in $( grep -v '^#' SOURCES); do
ln -sf $PWD/$file $dest/$file
if [ -e "$file" ]; then
ln -sf $PWD/$file $dest/$file
else
echo "Warning: $file (listed in SOURCES) does not exist"
fi
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()
{
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.
dist Build a diaspora application tarball.
Options:
-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.
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/
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;
exit 0
exit 2;
}
test "$1" = "-c" && {
test -z "$2" && {
usage;
exit 1
}
commit="$2"
shift; shift
}
case $1 in
"bundle") make_bundle $commit
;;
'source') make_dist $commit
'source') make_src $commit
;;
'links') make_links $commit
'prepare') prepare_rpm $commit $release
;;
"fix_gemfile")
fix_gemfile
;;
*) usage
exit 1
;;
esac

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)

0
tmp/.gitkeep Normal file
View file