Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

Subversion 1.8.0 für Ubuntu-12.04

Vor ein paar Tagen wurde Subversion-1.8.0 veröffentlicht. Hier meine Versuche, ein Paket für Ubuntu-12.04 zu bauen.

Aktuell kann ich die DEB-Pakete zwar erzeugen und installieren, leider funktionieren sie aber nicht richtig!

Ausgangpunkt: Subversion-1.7.10

Mein Ausgangspunkt sind die Pakete für Subversion-1.7.10.

$ cd subversion-1.7.10
$ uupdate -u ../subversion-1.8.0
$ cd ../subversion-1.8.0
$ dpkg-buildpackage

Erste Hürde: Serf-1.2.1

Zweite Hürde: Sqlite3-3.7.15

Subversion benötigt eine relativ aktuelle Version von Sqlite3. Die Standard-Version von Ubuntu-12.04 ist zu alt. Ich habe mir so beholfen:

  • Quellpakete von sqlite3-3.7.15.2 aus “raring” runtergeladen
  • Ein paar kleine Anpassungen an debian/rules vorgenommen, damit tcl85 an der richtigen Stelle ausgelesen wird
  • Pakete erzeugen mit dpkg-buildpackage

Dritte Hürde: Python-Test bricht ab

Bei der Ausführung von dpkg-buildpackage in “subversion-1.8.0” werden die Tests mit einer Fehlermeldung abgebrochen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
Running testsuite - may take a while.  To disable,
use DEB_BUILD_OPTIONS=nocheck or edit debian/rules.

/usr/bin/make -f debian/rules check-swig-py check-swig-pl check-swig-rb
make[1]: Entering directory `/home/ubuntu/build/subversion/subversion-1.8.0'
set -e; for v in 2.7; do rm -f BUILD/subversion/bindings/swig/python; ln -fs python$v BUILD/subversion/bindings/swig/python; pylib=$(python$v -c 'from distutils import sysconfig; print sysconfig.get_python_lib()');  /usr/bin/make -C BUILD check-swig-py PYTHON=python$v PYVER=$v CLEANUP=1 LC_ALL=C; done
make[2]: Entering directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
if [ "LD_LIBRARY_PATH" = "DYLD_LIBRARY_PATH" ]; then for d in ./subversion/bindings/swig/python/libsvn_swig_py ./subversion/bindings/swig/python/../../../libsvn_*; do if [ -n "$DYLD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$d/.libs"; else LD_LIBRARY_PATH="$d/.libs"; fi; done; export LD_LIBRARY_PATH; fi; \
  cd ./subversion/bindings/swig/python; \
    python2.7 /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/python/tests/run_all.py
...........................................................................................................................
----------------------------------------------------------------------
Ran 123 tests in 301.417s

OK
make[2]: Leaving directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
set -e; for v in 2.7; do rm -f BUILD/subversion/bindings/swig/python; ln -fs python$v-dbg BUILD/subversion/bindings/swig/python; pylib=$(python$v -c 'from distutils import sysconfig; print sysconfig.get_python_lib()');  /usr/bin/make -C BUILD check-swig-py PYTHON=python$v-dbg PYVER=${v}_d PYTHON_INCLUDES=-I/usr/include/python${v}_d CLEANUP=1 LC_ALL=C; done
make[2]: Entering directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
if [ "LD_LIBRARY_PATH" = "DYLD_LIBRARY_PATH" ]; then for d in ./subversion/bindings/swig/python/libsvn_swig_py ./subversion/bindings/swig/python/../../../libsvn_*; do if [ -n "$DYLD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$d/.libs"; else LD_LIBRARY_PATH="$d/.libs"; fi; done; export LD_LIBRARY_PATH; fi; \
  cd ./subversion/bindings/swig/python; \
    python2.7-dbg /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/python/tests/run_all.py
........................Fatal Python error: subversion/bindings/swig/python/svn_client.c:23145 object at 0x399b498 has negative ref count -2604246222170760230
/bin/bash: line 2: 16967 Aborted                 (core dumped) python2.7-dbg /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/python/tests/run_all.py
make[2]: *** [check-swig-py] Error 134
make[2]: Leaving directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
make[1]: *** [check-swig-py] Error 2
make[1]: Leaving directory `/home/ubuntu/build/subversion/subversion-1.8.0'
make: *** [debian/stamp-build-arch] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2

Quercheck: subversion-1.8.0.tar.bz2 entpacken und dort dann

  • ./configure
  • make … keine Probleme
  • make test … “nothing to be done”
  • make check … “All tests successful.”

    XFAIL: wc_tests.py 6: add file with not-parent symlink
    Summary of test results:
     1909 tests PASSED
     55 tests SKIPPED
     28 tests XFAILED (1 WORK-IN-PROGRESS)
    SUMMARY: All tests successful.
    
  • make check-swig-py … keine Probleme

Ich editiere debian/rules und deaktiviere “call allpydbg” in “check-swig-py”.

Vierte Hürde: Ruby-Tests brechen ab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
/usr/bin/make -C BUILD check-swig-rb CLEANUP=1 LC_ALL=C
make[2]: Entering directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
if [ "LD_LIBRARY_PATH" = "DYLD_LIBRARY_PATH" ]; then for d in ./subversion/bindings/swig/python/libsvn_swig_rb ./subversion/bindings/swig/python/../../../libsvn_*; do if [ -n "$DYLD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$d/.libs"; else LD_LIBRARY_PATH="$d/.libs"; fi; done; export LD_LIBRARY_PATH; fi; \
  cd ./subversion/bindings/swig/ruby; \
          if [ "1" -eq 1 -a "8" -lt 9 ] ; then \
            /usr/bin/ruby1.8 -I /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby \
              /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby/test/run-test.rb \
        --verbose=normal; \
          else \
      /usr/bin/ruby1.8 -I /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby \
        /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby/test/run-test.rb; \
          fi
/home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby/test/util.rb:22:in `require': no such file to load -- ./svn/util (LoadError)
  from /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby/test/util.rb:22
  from /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby/test/run-test.rb:37:in `require'
  from /home/ubuntu/build/subversion/subversion-1.8.0/subversion/bindings/swig/ruby/test/run-test.rb:37
make[2]: *** [check-swig-rb] Error 1
make[2]: Leaving directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
make[1]: *** [check-swig-rb] Error 2
make[1]: Leaving directory `/home/ubuntu/build/subversion/subversion-1.8.0'
make: *** [debian/stamp-build-arch] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2

Das habe ich korrigiert durch Änderungen an ./subversion/bindings/swig/ruby/test/run-test.rb:

run-test.rb
1
2
3
4
5
6
7
8
9
10
11
--- subversion/bindings/swig/ruby/test/util.rb~ 2013-05-29 04:00:11.000000000 +0000
+++ subversion/bindings/swig/ruby/test/util.rb   2013-07-10 09:22:24.845441319 +0000
@@ -19,7 +19,7 @@

 require "fileutils"
 require "pathname"
-require "./svn/util"
+require "svn/util"
 require "tmpdir"

 require "my-assertions"

Fünfte Hürde: Verpacken bricht ab wegen fehlenjder Dateien

1
2
3
4
5
6
7
8
9
10
11
12
13
...
make[1]: Leaving directory `/home/ubuntu/build/subversion/subversion-1.8.0/BUILD'
find debian/tmp/usr/lib/ruby \( -name \*.a -o -name \*.la \) -exec rm -f {} +
cd debian/tmp//usr/lib/x86_64-linux-gnu; for lib in ra fs auth swig; do \
      rm -f libsvn_${lib}_*.so libsvn_${lib}_*.la; \
  done
cd debian/tmp//usr/lib/x86_64-linux-gnu; rm -f libsvn_swig*.a libsvnjavahl.a libsvnjavahl.la
# Intermediate hack, until we can remove the rest of the .la files.
sed -i  "/dependency_libs/s/=.*/=''/" debian/tmp//usr/lib/x86_64-linux-gnu/*.la
dh_install -s
dh_install: libapache2-svn missing files (debian/tmp/usr/lib/apache2/modules/*.so), aborting
make: *** [debian/stamp-install-arch] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

Das habe ich korrigiert durch Änderungen an ./debian/libapache2-svn.install:

libapache2-svn.install
1
2
3
4
5
6
7
8
9
ubuntu@ubuntu1204-64-build:~/build/subversion/subversion-1.8.0$ diff -u debian/libapache2-svn.install~ debian/libapache2-svn.install
--- debian/libapache2-svn.install~   2013-07-06 06:31:05.000000000 +0000
+++ debian/libapache2-svn.install    2013-07-10 11:08:06.525738591 +0000
@@ -1,4 +1,4 @@
-debian/tmp/usr/lib/apache2/modules/*.so     usr/lib/apache2/modules
+debian/tmp/usr/libexec/*.so         usr/lib/apache2/modules
 debian/dav_svn.conf                             etc/apache2/mods-available
 debian/dav_svn.load                             etc/apache2/mods-available
 debian/authz_svn.load                           etc/apache2/mods-available

Danach kann dann mit fakeroot debian/rules binary die Verpackung ohne erneute Kompilierung getestet werden.

Nochmals komplett: Paketerzeugung läuft durch

Nach den vorigen Änderungen kann die Paketerzeugung mit

1
dpkg-buildpackage

komplett erfolgreich durchgezogen werden!

Kurztests: Installation und Funktionsweise

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ sudo dpkg -i subversion_1.8.0-3dp12~precise1_amd64.deb libsvn1_1.8.0-3dp12~precise1_amd64.deb libserf1_1.2.1-0dp01~precise1_amd64.deb
$ sudo dpkg -i sqlite3_3.7.15.2-1dp01~precise1_amd64.deb libsqlite3-0_3.7.15.2-1dp01~precise1_amd64.deb
$ svn --version
svn, Version 1.8.0 (r1490375)
   übersetzt am Jul 10 2013, um 11:15:47 auf x86_64-pc-linux-gnu

Copyright (C) 2013 The Apache Software Foundation.
Diese Software besteht aus Beiträgen vieler Personen;
siehe Datei NOTICE für weitere Informationen.
Subversion ist Open Source Software, siehe http://subversion.apache.org/

Die folgenden ZugriffsModule (ZM) für Projektarchive stehen zur Verfügung:

* ra_svn : Modul zum Zugriff auf ein Projektarchiv über das svn-Netzwerkprotokoll.
  - mit Cyrus-SASL-Authentifizierung
  - behandelt Schema »svn«
* ra_local : Modul zum Zugriff auf ein Projektarchiv auf der lokalen Festplatte
  - behandelt Schema »file«
* ra_serf : Modul zum Zugriff auf ein Projektarchiv über das Protokoll WebDAV mittels serf.
  - behandelt Schema »http«
  - behandelt Schema »https«
$ cd svn/my-project
$ svn status
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: The working copy at '/home/uli/svn/my-project'
is too old (format 29) to work with client version '1.8.0 (r1490375)' (expects format 31). You need to upgrade the working copy first.
$ svn upgrade
$ svn status
$ svn update
svn: E175009: XML parsing failed: (411 Length Required)
$ svn checkout https://.....
svn: E235000: In file '/home/ubuntu/build/subversion/subversion-1.8.0/subversion/libsvn_client/ra.c' line 647: assertion failed (peg_revnum != SVN_INVALID_REVNUM)
Aborted (core dumped)

Also: Leider funktioniert’s nicht.

Zurück zur alten Version

Auf dem Rechner, den ich zum Testen verwendet habe, geht’s so zurück zu den alten Versionen:

1
2
3
$ sudo apt-get install libsqlite3-0=3.7.9* sqlite3=3.7.9*
$ sudo apt-get install subversion=1.7.10* libsvn1=1.7.10*
$ sudo apt-get install libserf1=1.0*

Auf dem Rechner, den ich zum Bauen verwendet habe, geht’s so zurück zu den alten Versionen:

1
2
$ sudo apt-get install libsqlite3-0=3.7.9* sqlite3=3.7.9*
$ sudo apt-get install libserf1=1.0*

Comments