Packaging update

Handle git gems by cloning repo to local one, rewriting Gemfile
urls and sending both repos and gems in source packages.
Separate doc dir w licensec.
Gemfile, Gemfile.lock now lives in bundle, linked to application.
Rewrite http git urls to git: to make it uniform & simpler
This commit is contained in:
Alec Leamas 2010-10-30 09:55:28 +02:00
parent 68cba5da98
commit d572f8fafc
10 changed files with 77 additions and 82 deletions

View file

@ -27,7 +27,7 @@ gem 'roxml', :git => 'git://github.com/Empact/roxml.git'
gem 'addressable', :require => 'addressable/uri'
gem 'json'
gem 'mini_fb'
gem 'http_accept_language', :git => 'http://github.com/iain/http_accept_language.git'
gem 'http_accept_language', :git => 'git://github.com/iain/http_accept_language.git'
#Standards
gem 'pubsubhubbub'

View file

@ -230,7 +230,7 @@ sv:
friend_request_pending: "vänförfrågan är skickad"
you_have_a_friend_request_from_this_person: "du har en väntande vänförfrågan från den här personen"
new:
new_person: "Ny Person"
new_person: "Ny person"
back_to_list: "Tillbaka till listan"
edit:
cancel: "Avbryt"

View file

@ -18,7 +18,7 @@ Prerequisites:
- A personal environment to build RPM:s, also described in
[RPM installation Fedora](http://github.com/diaspora/diaspora/wiki/Rpm-installation-on-fedora)
Install g++ (possibly unnnecessary?):
Install g++ (unnecessary?):
% yum install gcc-c++
Create source tarballs like dist/diaspora-0.0-1010041233_fade4231.tar.gz
@ -73,7 +73,7 @@ to the bundle's bundle directory. Reasonable defaults are to install
diaspora in /usr/share/diaspora and bundle in /usr/lib/diaspora-bundle. With these,
the link is
% rm -rf /usr/share/diaspora/master/vendor/bundle
% ln -sf /usr/lib/diaspora-bundle/bundle \
% ln -sf /usr/lib/diaspora-bundle/vendor/bundle \
> /usr/share/diaspora/master/vendor
%
@ -93,6 +93,9 @@ The source tarball is as retrieved from diaspora with following differences:
- The file .bundle/config is patched. Remove before doing
*bundle install*
The bundle is basically the output from 'bundle package'. The git-based
gems are also added into vendor/git.
./make-dist.sh bundle|source occasionally fails on bad Gemfile.lock. The
root cause is a bad Gemfile in the git repo. Possible fixes includes
using a older version known to work:
@ -128,9 +131,10 @@ at [ftp://mumin.dnsalias.net/pub/leamas/diaspora/builds](ftp://mumin.dnsalias.ne
'make-dist.sh source' script checks out latest version of diaspora into the
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.
'make-dir.sh bundle' makes a *bundle package* in the diaspora dir.
The resulting bundle is stored in vendor/bundle. This is, after some more
patches, the content of diaspora-bundle.
patches, the content of diaspora-bundle tarball. Target systems makes a
*bundle install --local* to use it.
Here is also support for running the diaspora websocket service as a system
service through /sbin/service and some install scripts.

View file

@ -38,16 +38,7 @@ Source file usede to compile native libraries in diaspora-bundle.
%setup -q -n %{name}-%{version}-%{git_release}
%build
bundle install --local --deployment --without ri rdoc test
for gem in vendor/git/*; do
gem install --local \
--force \
--no-rdoc \
--no-ri \
--install-dir vendor/bundle/ruby/1.8/bundler \
$gem
done
bundle install --local --deployment --without ri rdoc
pushd vendor/bundle/ruby/1.8/gems
# In repo (2.2.4)
@ -154,7 +145,7 @@ pushd vendor/bundle/ruby/1.8/gems
chmod 644 cucumber-rails-0.3.2/templates/install/step_definitions/capybara_steps.rb.erb || :
chmod 644 ffi-0.6.3/ext/ffi_c/libffi/ltmain.sh || :
chmod 644 gherkin-2.2.4/tasks/compile.rake || :
chmod 644 i18n-0.4.1/MIT-LICENSE
chmod 644 i18n-0.4.1/MIT-LICENSE || :
chmod 755 linecache-0.43/Rakefile || :
chmod 755 mime-types-1.16/Rakefile || :
chmod 755 mini_magick-2.1/test/not_an_image.php || :
@ -168,7 +159,7 @@ pushd vendor/bundle/ruby/1.8/gems
for file in CHANGES VERSION README Rakefile; do
chmod 644 term-ansicolor-1.0.5/$file || :
done
chmod 755 thin-1.2.7/lib/thin/controllers/service.sh.erb
chmod 755 thin-1.2.7/lib/thin/controllers/service.sh.erb ||:
chmod 755 thin-1.2.7/example/async_chat.ru || :
chmod 755 thin-1.2.7/example/async_tailer.ru || :
chmod 644 treetop-1.4.8/spec/compiler/test_grammar.tt || :
@ -208,13 +199,14 @@ popd
mkdir -p $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle
cp -ar vendor $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle
cp -a Gemfile Gemfile.lock $RPM_BUILD_ROOT/%{_libdir}/diaspora-bundle
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$' \
-fprintf files '"%%p"\n'
find %{buildroot}/%{_libdir}/diaspora-bundle -regextype posix-awk \
find -L %{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
@ -225,7 +217,7 @@ cat files >> dirs && cp dirs files
%files -f files
%defattr(-, diaspora, diaspora, 0755)
%doc COPYRIGHT Gemfile Gemfile.lock AUTHORS GNU-AGPL-3.0 docs
%doc COPYRIGHT AUTHORS GNU-AGPL-3.0 docs
%files -f dev-files devel
%defattr(-, root, root, 0644)

View file

@ -4,6 +4,7 @@
#
# Usage: # ./diaspora-setup [external hostname]
#
export PATH=$PATH:/usr/local/bin
arg_hostname="$1"
@ -22,10 +23,17 @@ test -n "$services" && {
cd /usr/share/diaspora/master
libdir=$(rpm --eval %_libdir)
rm -rf vendor
ln -s $libdir/diaspora-bundle/vendor .
ln -sf $libdir/diaspora-bundle/Gemfile .
ln -sf $libdir/diaspora-bundle/Gemfile.lock .
test -e config/app_config.yml ||
cp config/app_config.yml.example config/app_config.yml
if rake db:seed:dev; then
if bundle exec rake db:seed:dev; then
echo "Database config OK, new user tom/evankorth in place"
else
cat <<- EOF

View file

@ -71,6 +71,7 @@ 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/.bundle $RPM_BUILD_ROOT/%{_datadir}/diaspora/master
rm -rf $RPM_BUILD_ROOT/%{_datadir}/diaspora/master/vendor/*
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/uploads
mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib/diaspora/tmp
cp %SOURCE2 $RPM_BUILD_ROOT/%{_datadir}/diaspora

View file

@ -161,6 +161,7 @@ function make_src
cp -ar diaspora/* diaspora/.git* ${RELEASE_DIR}/master
(
cd ${RELEASE_DIR}/master
rm -rf vendor/bundle/* vendor/git/* vendor/cache/* gem-tmp
git show --name-only > config/gitversion
tar czf public/source.tar.gz \
--exclude='source.tar.gz' -X .gitignore *
@ -175,69 +176,43 @@ function make_src
echo "Required bundle: $(git_id dist/diaspora/Gemfile)"
}
function build_git_gems()
# Usage: build_git_gems <Gemfile> <tmpdir> <gemdir>
# Horrible hack, in wait for bundler handling git gems OK.
{
mkdir gem-tmp || :
[ -d 'gem-tmp' ] || mkdir gem-tmp
cd gem-tmp
rm -rf *
grep 'git:' ../$1 | sed 's/,/ /' | awk '
grep 'git:' ../$1 | sed 's/,/ /g' | awk '
/^.*git:\/\/.*$/ {
gsub( "=>", "")
gsub( ",", "")
gsub( "=>", " ")
if ( $1 != "gem") {
print "Strange git: line (ignored) :" $0
next
}
name = $2
suffix = ""
url=""
for (i = 3; i <= NF; i += 1) {
key = $i
i += 1
if (key == ":git")
url = $i
else if ( key == ":ref") {
suffix = "; cd " name
suffix = suffix "; git reset --hard " $i
suffix = suffix "; cd .."
}
else if ( key == ":branch")
suffix = "; git checkout " $i
}
cmd = sprintf( "git clone --bare --quiet %s\n", url)
print "Running: ", cmd
cmd = sprintf( "git clone --quiet %s %s %s\n",
url, name, suffix)
system( cmd)
}'
sed -i 's/Date.today/"2010-10-24"/' carrierwave/carrierwave.gemspec
mv devise-mongo_mapper.git devise-mongo_mapper
for dir in *; do
cd $dir
gem build *.gemspec
cp *.gem ../../$2
cd ..
if [ ! -e $dir/*.gemspec ]; then
cp -ar $dir ../$2
fi
done
cd ..
# rm -rf gem-tmp
}
function make_docs()
{
local gemfile=$1
for url in $(read_git_urls $gemfile); do
local name=${url##*/}
name=${name%.*}
rm -rf vendor/git/$name
git clone --bare --quiet $url vendor/git/$name &&
sed -i "s#$url#vendor/git/$name#" $gemfile ||
echo "Cannot fix git repo \"$url\""
done
}
function make_docs()
{
local gems=$1
@ -245,19 +220,19 @@ function make_docs()
for gem in $(ls $gems); do
local name=$(basename $gem)
[ -r $gems/$gem/README* ] && {
[ -r "$gems/$gem/README*" ] && {
local readme=$(basename $gems/$gem/README*)
cp -a $gems/$gem/$readme $dest/$readme.$name
}
[ -r $gems/$gem/COPYRIGHT ] && \
[ -r "$gems/$gem/COPYRIGHT" ] && \
cp -a $gems/$gem/COPYRIGHT $dest/COPYRIGHT.$name
[ -r $gems/$gem/LICENSE ] && \
[ -r "$gems/$gem/LICENSE" ] && \
cp -a $gems/$gem/LICENSE $dest/LICENSE.$name
[ -r $gems/$gem/License ] && \
[ -r "$gems/$gem/License" ] && \
cp -a $gems/$gem/License $dest/License.$name
[ -r $gems/$gem/MIT-LICENSE ] && \
[ -r "$gems/$gem/MIT-LICENSE" ] && \
cp -a $gems/$gem/MIT-LICENSE $dest/MIT-LICENSE.$name
[ -r $gems/$gem/COPYING ] && \
[ -r "$gems/$gem/COPYING" ] && \
cp -a $gems/$gem/COPYING $dest/COPYING.$name
done
}
@ -276,23 +251,35 @@ function make_bundle()
cd dist
rm -rf $bundle_name
cd diaspora
rm Gemfile.lock
rm -rf .bundle
if [ "$BUNDLE_FIX" = 'yes' ]; then
rm -f Gemfile.lock
rm -rf .bundle
bundle update
fi
[ -d 'vendor/git' ] || mkdir vendor/git
bundle install
[ -d 'git-repos' ] || mkdir git-repos
rm -rf git-repos/*
git checkout Gemfile
build_git_gems Gemfile git-repos
sed -i 's|git://.*/|git-repos/|g' Gemfile
# see: http://bugs.joindiaspora.com/issues/440
bundle install --path=vendor/bundle || {
bundle install --path=vendor/bundle || {
echo "bundle install failed, giving up" >&2
exit 3
}
}
bundle package
mkdir vendor/git
build_git_gems Gemfile vendor/git
mkdir -p "../$bundle_name/docs"
mkdir -p "../$bundle_name/vendor"
cp -ar AUTHORS Gemfile Gemfile.lock GNU-AGPL-3.0 COPYRIGHT \
../$bundle_name
make_docs "vendor/gems" "../$bundle_name/docs"
make_docs "vendor/bundle/ruby/1.8/gems/" "../$bundle_name/docs"
mv vendor/cache ../$bundle_name/vendor
mv vendor/gems ../$bundle_name/vendor
mv git-repos ../$bundle_name
cd ..
tar czf $bundle_name.tar.gz $bundle_name
mv $bundle_name/vendor/cache diaspora/vendor/cache
@ -360,16 +347,16 @@ function usage()
-h Print this message.
-c commit Use a given commit, defaults to last checked in.
-r release Mark with specified release, defaults to 1.
-r release For prepare, mark with release nr, defaults to 1.
-u uri Git repository URI, defaults to
$GIT_REPO.
-f For bundle, fix dependencies by running 'bundle update'
before 'bundle install'
-f For bundle, fix dependencies by running 'bundle update'
before 'bundle install'
source Build a diaspora application tarball.
bundle Build a bundler(1) bundle for diaspora.
prepare Symlink bundle and source tarballs to rpm source dir,
create patched rpm spec files.
create patched rpm spec files.
All results are stored in dist/

View file

@ -28,13 +28,5 @@ cp -a AUTHORS GNU-AGPL-3.0 COPYRIGHT Gemfile Gemfile.lock \
cp -ar docs /usr/share/doc/diaspora-bundle
bundle install --local --deployment --without ri rdoc
for gem in vendor/git/*; do
gem install --local \
--force \
--no-rdoc \
--no-ri \
--install-dir vendor/bundle/ruby/1.8/bundler \
$gem
done

View file

@ -14,7 +14,8 @@ grep -v '^#' /etc/apt/sources.list | grep -q universe || {
release=$( lsb_release -a | awk '/Release:/ {print $2}')
sudo apt-get update
sudo apt-get install -qy build-essential libxslt1-dev libxml2 \
sudo apt-get install --no-install-recommends -qy\
build-essential libxslt1-dev libxml2 \
ruby-full mongodb rake python-software-properties git-core \
imagemagick libmagick9-dev
if [ "$release" = "10.04" ]; then

View file

@ -4,6 +4,7 @@
#
# Usage: sudo diaspora-setup [external hostname]
#
export PATH=$PATH:/usr/local/bin
test "$( perl -e 'print $<')" = "0" || {
echo "You need to be root to do this, giving up"
@ -24,10 +25,19 @@ service mongodb start || :
cd /usr/share/diaspora/master
libdir="/usr/lib"
[[ $(arch) == "x86_64" ]] && libdir="/usr/lib64"
rm -rf vendor
ln -s $libdir/diaspora-bundle/vendor .
ln -sf $libdir/diaspora-bundle/Gemfile .
ln -sf $libdir/diaspora-bundle/Gemfile.lock .
test -e config/app_config.yml ||
cp config/app_config.yml.example config/app_config.yml
if rake db:seed:dev; then
if bundle exec rake db:seed:dev; then
echo "Database config OK, new user tom/evankorth in place"
else
cat <<- EOF