Python

ghostadmin

Grand Admiral Special
Mitglied seit
11.11.2001
Beiträge
25.209
Renomée
190
Standort
Dahoam Studios
Ich weiß nicht ob sich damit jemand auskennt, ich versuche die App rdiff-backup unter Solaris zum laufen zu bekommen und beim start erhalte ich eine Fehlermeldung das ein Modul nicht geladen werden kann, welches aber da ist. Irgendwie scheint python kein einziges .so Modul laden zu können.
rdiff-backup erfordert noch librsync welches ok zu sein scheint.
Hier alle Daten, vielleicht hat jemand eine Idee was man da noch machen kann. truss (sowas wie strace) habe ich auch schon laufen lassen, da steht auch nur drin das das Modul nicht geladen werden kann.

Code:
To get a basic build environment set up, do the following with root privileges:
pkg install \
  developer/gcc46 \
  developer/object-file \
  developer/linker \
  developer/library/lint \
  developer/build/gnu-make \
  system/header \
  system/library/math/header-math

add symlink:
cp -s /opt/gcc-4.6.3/bin/gcc /bin/gcc

librsync:
http://garr.dl.sourceforge.net/project/librsync/librsync/0.9.7/librsync-0.9.7.tar.gz

./configure --enable-shared (enable for .so dynamic module, rdiff-backup fails with static)
make clean install (installs to /usr/local/lib/librsync.so)

add to ldconfig environment:
crle -l /lib:/usr/lib:/usr/local/lib

#####################
compile rdiff-backup
####################

http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz

python setup.py install
output with error:
gcc -m64 -shared -Wl,-Bsymbolic build/temp.solaris-2.11-i86pc-2.6/_librsyncmodule.o -L/usr/lib/amd64 -lrsync -lpython2.6 -o build/lib.solaris-2.11-i86pc-2.6/rdiff_backup/64/_librsync.so
ld: fatal: library -lrsync: not found
ld: fatal: file processing errors. No output written to .......

compile 32bit with custom library path:
ARCHFLAGS='-arch=i386' CFLAGS=-m32 LDFLAGS='-m32 -L /usr/local/lib -R /usr/local/lib' ISALIST=i386 python setup.py install

compile ok:
running install
running build
running build_py
running build_ext
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/bin/rdiff-backup to 755
changing mode of /usr/bin/rdiff-backup-statistics to 755
running install_data
running install_egg_info
Removing /usr/lib/python2.6/site-packages/rdiff_backup-1.2.8-py2.6.egg-info
Writing /usr/lib/python2.6/site-packages/rdiff_backup-1.2.8-py2.6.egg-info

###############
run rdiff-backup
################


run after 1st install:

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 20, in <module>
    import rdiff_backup.Main
  File "/usr/lib/python2.6/site-packages/rdiff_backup/Main.py", line 25, in <module>
    import Globals, Time, SetConnections, selection, robust, rpath, \
  File "/usr/lib/python2.6/site-packages/rdiff_backup/SetConnections.py", line 30, in <module>
    import Globals, connection, rpath
  File "/usr/lib/python2.6/site-packages/rdiff_backup/connection.py", line 539, in <module>
    import Globals, Time, Rdiff, Hardlink, FilenameMapping, C, Security, \
  File "/usr/lib/python2.6/site-packages/rdiff_backup/Rdiff.py", line 22, in <module>
    import os, librsyncpy
ImportError: No module named _librsync


run after OS reinstall:

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 20, in <module>
    import rdiff_backup.Main
  File "/usr/lib/python2.6/site-packages/rdiff_backup/Main.py", line 24, in <module>
    from log import Log, LoggerError, ErrorLog
  File "/usr/lib/python2.6/site-packages/rdiff_backup/log.py", line 22, in <module>
    import time, sys, traceback, types, rpath
  File "/usr/lib/python2.6/site-packages/rdiff_backup/rpath.py", line 39, in <module>
    import Globals, Time, static, log, user_group, C
ImportError: No module named C


##################
check environment
##################
ldd _librsync.so
        librsync.so.1 =>         /usr/local/lib/librsync.so.1
        libpython2.6.so.1.0 =>   /usr/lib/libpython2.6.so.1.0
        libgcc_s.so.1 =>         /usr/lib/libgcc_s.so.1
        libc.so.1 =>     /lib/libc.so.1
        libbz2.so.1.0 =>         /usr/lib/libbz2.so.1.0
        libz.so =>       /usr/lib/libz.so
        libsocket.so.1 =>        /lib/libsocket.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libm.so.2 =>     /lib/libm.so.2
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1


file /usr/local/lib/librsync.so.1
/usr/local/lib/librsync.so.1:   ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /usr/lib/libpython2.6.so.1.0
/usr/lib/libpython2.6.so.1.0:   ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /usr/lib/libgcc_s.so.1
/usr/lib/libgcc_s.so.1: ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /usr/lib/libc.so.1
/usr/lib/libc.so.1:     ELF 32-bit LSB dynamic lib 80386 Version 1 [SSE MMX CMOV SEP FPU], dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /usr/lib/libbz2.so.1.0
/usr/lib/libbz2.so.1.0: ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, stripped
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /usr/lib/libz.so
/usr/lib/libz.so:       ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /usr/lib/libsocket.so.1
/usr/lib/libsocket.so.1:        ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /lib/libnsl.so.1
/lib/libnsl.so.1:       ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /lib/libm.so.2
/lib/libm.so.2: ELF 32-bit LSB dynamic lib 80386 Version 1 [SSE2 SSE FPU], dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /lib/libmp.so.2
/lib/libmp.so.2:        ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available
root@omnios:/usr/lib/python2.6/site-packages/rdiff_backup# file /lib/libmd.so.1
/lib/libmd.so.1:        ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped, no debugging information available


file /usr/local/lib/librsync.so
librsync.so:    ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped

file /usr/lib/python2.6/site-packages/rdiff_backup/C.so
/usr/lib/python2.6/site-packages/rdiff_backup/C.so:     ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped

file /usr/lib/python2.6/site-packages/rdiff_backup/_librsync.so
/usr/lib/python2.6/site-packages/rdiff_backup/_librsync.so:     ELF 32-bit LSB dynamic lib 80386 Version 1, dynamically linked, not stripped


#######
python
#######
>>> import sys
>>> sys.path
['', '/usr/lib/python2.6/vendor-packages/setuptools-0.6c11-py2.6.egg', '/usr/lib/python26.zip', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-sunos5', '/usr/lib/python2.6/lib-tk', 

'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/vendor-packages']


find -name python
./usr/bin/python
./opt/gcc-4.6.3/share/gcc-4.6.3/python
 
Rsync liegt unter /usr/local/lib, deshalb wird es beim Kompilieren nicht per Default gefunden. Da musst du jetzt irgendwie an den Settings rumspielen, da gibts auch Umgebungsvariablen und so.
Leider kenne ich mich da nicht so gut aus, kann deshalb nichts konkreteres sagen.

Aber: Rsync müsste es doch als passendes Paket geben? Installiere doch das, dann wird es auch gefunden.

edit: Ah gerade gesehen - ich weiß nicht, wie ich das von dir gepostete interpretieren soll, aber da steht:
Code:
crle -l /lib:/usr/lib:/usr/local/lib
Vll fehlt das noch?
 
Zuletzt bearbeitet:
Du musst alles lesen, deswegen habe ich den Pfad in den Compile options mit angegeben. Compiliert wird es ja erfolgreich.
rdiff-backup basiert nicht auf rsync sondern auf librsync.

Ich habe nun per Zufall entdeckt das wenn man die Python Applikation rdiff-backup startet, es versucht wird das _librsync.so file aus dem Unterfolder "64" (/usr/lib/python2.6/site-packages/rdiff_backup/64) zu laden, deswegen steht da das das Modul nicht geladen werden kann. Die files sind nämlich alle normal in dem folder rdiff_backup

Jetzt habe ich mal das probiert:
http://e-mats.org/2010/07/install-rdiff-backup-and-librsync-on-redhat-enterprise-linux-4/
Die libs habe ich danach in /usr/lib/amd64 kopiert und wenn ich dann rdiff-backup normal (also mit 64bit) kompiliere dann steht: librsync.so wrong ELF class, also eben 32bit statt 64bit.
In dem configure file von librsync gibt es auch gar keinen Text mit --enable-lib64
Hier das gleiche nochmal, mit den ganz normalen librsync sources:
http://rysiek.devcloud.pl/rdif-backup-centos
 
Hmm ok, für mich ist da nicht ersichtlich, welche Ausgabe da zu welchem Kommando gehört.
Ich hab mich speziell hieraus bezogen:
Code:
gcc -m64 -shared -Wl,-Bsymbolic build/temp.solaris-2.11-i86pc-2.6/_librsyncmodule.o -L/usr/lib/amd64 -lrsync -lpython2.6 -o build/lib.solaris-2.11-i86pc-2.6/rdiff_backup/64/_librsync.so
ld: fatal: library -lrsync: not found
ld: fatal: file processing errors. No output written to .......
Aber freue mich, dass du dem Problem auf der Spur bist :)
 
Hallo kann sein, dass du auf Solaris dem gleichen Bug unterliegst wie die MAC Anwender.
https://trac.macports.org/ticket/31742

Wenn das so ist, dann liegt dein Problem bei librsync.
https://trac.macports.org/changeset/88255
insbesondere das keyword inline bekommt die falsche bedeutung.
https://trac.macports.org/browser/trunk/dports/net/librsync/files/c99-inline.diff?rev=88255

Leider gibt es rund um die librsync scheinbar keine aktive Community die sich um derartige Konfigurationsprobleme kümmert. http://sourceforge.net/p/librsync/bugs/19/

Was ist aber der Grund warum du nicht das Paket von Solaris selbst verwendest? http://www.opencsw.org/package/librsync/

Führe doch noch mal aus
Code:
nm -D -C -g /usr/local/lib/librsync.so.1
Unter anderem prüfe ob die Funktionen die in rdiff-backup-1.2.8\rdiff_backup\librsync.py aufgerufen werden überhaupt sichtbar sind. Vielleicht poste diese Ausgabe noch.

Falls es möglich ist vergleich auch mal die Ausgabe mit der librsync Bibliothek aus den Paketen von Solaris.
 
Zuletzt bearbeitet:
Ähnlichen Fehler wie bei Mac oft erwähnt hatte ich anfangs auch, dass kommt wenn man 32 und 64Bit vermischt. Da hatte ich auch eine Fehlermeldung mit symbol error und rs irgendwas. Ich weiß allerdings nicht mehr was ich gemacht habe um dahin zu kommen ...

Und das ist Omnios, da habe ich leider kein librsync im Repository gefunden. Aber auf der anderen Maschine habe ich Open Indiana, da ist das in 64Bit verfügbar:
http://pkg.openindiana.org/dev/manifest/0/library/librsync@0.9.7,5.11-0.151.1.8:20130721T123511Z
Nur wie bekomme ich das auf Omnios rüber?
Ich muss librsync irgendwie 64Bit fähig bekommen.

Dann habe ich die 64bit librsync libs von OI einfach nach Omnios rüberkopiert und beim ausführen fehlte popt
http://pkg.omniti.com/omnios/release/info/0/library/popt@1.16,5.11-0.151004:20121012T214914Z
welches ich nachinstalliert habe und schon konnte man rdiff-backup starten.

Und dann gibt es hier noch eine Möglichkeit für 64bit librsync:
http://www.pkgsrc.org/

pkg install archiver/gnu-tar
curl http://pkgsrc.joyent.com/packages/SmartOS/bootstrap/bootstrap-2013Q3-x86_64.tar.gz | gtar -zxpf - -C /
PATH=/opt/local/sbin:/opt/local/bin:$PATH
pkgin -y update
pkgin -y install librsync

compile rdiff-backup:
LDFLAGS='-L /opt/local/lib -R /opt/local/lib' python setup.py install
 
Zuletzt bearbeitet:
Habe aus deiner Antwort leider nicht wirklich verstanden ob du es jetzt zum laufen bekommen hast.
Würde mich mal interessieren ob das für VMWare ESXi Systeme auch verwendbar wäre.
 
Ja es hat mit beiden Methoden funktioniert bzw. mit den binaries aus Openindiana oder SmartOS.

Aber warum für Vmware?

Ich brauche librsync ja eigentlich auch nur zum sichern einer Linux Kiste. Bei Solaris kann man mit ZFS ja wunderbar Snapshots machen. Aber ZFS unter Linux gibts halt nicht stable.
 
Ich meinte evtl. als Backuplösung für die VMWare ESXi free Version.
Müsste damit eigentlich eine Backuplösung für virtuelle Maschinen auf dem ESXi Hypervisor geben, wenn man das mit der internen snapshotfunktion kombiniert anwendet.
 
Zurück
Oben Unten