Python Module mit freetz bauen

Robotron8810

Neuer User
Mitglied seit
26 Feb 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Hallo Leute,
ich versuch derzeit eigene python module mit freetz zu bauen, im speziellen handelt es sich dabei um folgende:
https://pypi.python.org/pypi/yenc
https://pypi.python.org/pypi/pyOpenSSL
https://pypi.python.org/pypi/Cheetah/2.4.4
leider habe ich keine ahnung wie das realisiert wird. Ich habe es bereits geschaft PAR2CMDLINE nach diesem tutorial zu integrieren, und gehofft das irgendwie auf auf die Python module übertragen zu können aber fehlanzeige. Gibt es da eine möglichkeit die module da zu integrieren?

Vielen dank und Frohe Ostern :D
 
So also ich habe für yenc folgenden .mk datei geschrieben:
Code:
$(call PKG_INIT_BIN, 0.4.0)
$(PKG)_SOURCE:=yenc-$($(PKG)_VERSION).tar.gz
$(PKG)_SOURCE_MD5:=f8bd9eff020c0352fdd4c25c20900007
$(PKG)_SITE:=http://www.golug.it/pub/yenc/yenc-0.4.0.tar.gz

$(PKG)_DIR:=$($(PKG)_SOURCE_DIR)/yenc-$($(PKG)_VERSION)

$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/_yenc.so

$(PKG)_DEPENDS_ON += python 

$(PKG)_REBUILD_SUBOPTS += FREETZ_PACKAGE_PYTHON_STATIC
$(PKG)_REBUILD_SUBOPTS += $(YENC_REBUILD_SUBOPTS)

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_NOP)

$($(PKG)_TARGET_BINARY): $($(PKG)_DIR)/.configured
	$(call Build/PyMod/PKG, PYTHON_YENC)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
	$(RM) -r $(PYTHON_YENC_DIR)/build

$(pkg)-uninstall:
	$(RM) \
		$(PYTHON_PYOPENSSL_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/yenc.py
		$(PYTHON_PYOPENSSL_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/_yenc.so
		$(PYTHON_PYOPENSSL_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/yenc-*.egg-info

$(PKG_FINISH)

hier die Zugehörige Config.in
Code:
config FREETZ_PACKAGE_PYYENC
        bool "Python yenc 0.4.0"
	depends on FREETZ_PACKAGE_PYTHON
        default n
        help
                No Help.

Wenn ich jedoch nun "make menuconfig" ausführe wird mir kein paket angezeigt. Woran kann das liegen?
 
Python-Module müssen manuell zu menuconfig hinzugefügt werden. pyOpenSSL ist in Freetz bereits enthalten, aber das hast Du bestimmt schon selbst rausgefunden, denn Deine python-yenc.mk enthält Referenzen zu PYTHON_PYOPENSSL (weil Du wahrscheinlich python-pyopenssl.mk als Vorlage verwendet hast). Im Anhang findest Du die korrigierte (compile-getested only) Version von allen Änderungen, die notwendig sind, um python yEnc zu integrieren (als Vorlage habe ich wiederum Deine Version verwendet).

Cheetah stellt auf den ersten Blick keine besonderen Anforderungen in Bezug auf irgendwelche 3rd-party Libraries, sollte sich also ähnlich zu yEnc cross-compilieren lassen. Versuch es mal selbst, wenn Du nicht weiterkommst, frag' hier nochmal nach.

Sofern Du Interesse hast, dass die Module in Freetz aufgenommen werden, hänge (nachdem Du die Module auf der Box getestet hast) die entsprechenden Patches hier an - ich committe sie dann (da manche es überlesen, bitte anhängen und nicht in Code-Tags posten).
 

Anhänge

  • python_yenc.patch.bz2
    764 Bytes · Aufrufe: 7
Ja das stimmt alles so (pyopenssl usw) und vielen dank. Ich werde da weiter rumprobieren. EIne Frage noch bezüglich des patches: das "INDEX:" gibt die Datei die erstellt bzw verändert wird oder? Und was bedeutet das "@@ -0,0 +1,5 @@"?
 
Zuletzt bearbeitet:
Bei der Datei aus dem Anhang handelt es sich um eine ganz normale Patch-Datei im unified-diff-format. Sofern Du die Änderungen bei Dir integrierten möchtest, musst Du dies nicht manuell machen (i.e. musst das Format nicht unbedingt verstehen). Dafür gibt es ein Programm namens patch - einfach
Code:
cd /pfad/zu/freetz-trunk
patch -p0 < /pfad/zu/der/patch.datei
aufrufen. Mein Patch ist gegen unmodifizierten trunk, sofern Du einige der Dateiein in Deiner Working-Copy schon hast, musst Du diese vor dem Anwenden des Patches löschen (oder woanders verschieben, wenn Du meinst, diese noch gebrauchen zu können).
 
Zunächst vielen dank für deine Geduld er13
Ich habe jetzt das yenc modul soweit das es funktioniert, Nach dem Build ist es im modifizierten dateisystem und alles ok.
Anders sieht es aus bei Cheetah. Wenn ich ein Build durchlaufen lasse kommt fogende Medlung:
if test -d make/python-cheetah/files; then tools/tar-gnu -cf - -C make/python-cheetah/files --exclude=.svn --exclude=.gitignore --exclude=.build-prereq-checked --exclude=.unpacked --exclude=.configured --exclude=.compiled --exclude=.installed . | tools/tar-gnu -xf - -C packages/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/python-cheetah-2.4.4; fi
---> package/python-cheetah: preparing... tools/gunzip -c dl/Cheetah-2.4.4.tar.gz | tools/tar-gnu -C source/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1 -x
set -e; shopt -s nullglob; for i in make/python-cheetah/patches/*.patch; do tools/freetz_patch source/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/Cheetah-2.4.4 $i; done;
( export PYTHONPATH="/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/usr/lib/python2.7:/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc//usr/lib/python2.7/site-packages"; export PYTHONOPTIMIZE=""; export PYTHONDONTWRITEBYTECODE=1; cd source/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/Cheetah-2.4.4; PATH="/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/bin:/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4/mipsel-unknown-linux-gnu/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" CC="/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/bin/mipsel-linux-uclibc-gcc" CXX="/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/bin/mipsel-linux-uclibc-g++-wrapper" CFLAGS="-march=4kc -mtune=4kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" CXXFLAGS="-march=4kc -mtune=4kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" LDFLAGS="" PKG_CONFIG_PATH="/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/bin/../lib/pkgconfig" PKG_CONFIG_LIBDIR="/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/bin/../lib/pkgconfig" GLOBAL_LIBDIR=/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/usr/lib LD_RUN_PATH="/usr/lib/freetz" /home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/usr/bin/hostpython ./setup.py install --prefix=/usr --root=/home/maximilian/freetz-trunk/packages/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/python-cheetah-2.4.4/root ; )
Traceback (most recent call last):
File "./setup.py", line 10, in <module>
import SetupTools
File "/home/maximilian/freetz-trunk/source/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/Cheetah-2.4.4/SetupTools.py", line 26, in <module>
from cheetah.FileUtils import findFiles
File "/home/maximilian/freetz-trunk/source/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/Cheetah-2.4.4/cheetah/FileUtils.py", line 7, in <module>
from tempfile import mktemp
File "/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/usr/lib/python2.7/tempfile.py", line 32, in <module>
import io as _io
File "/home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/usr/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: /home/maximilian/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.32.1/mipsel-linux-uclibc/usr/lib/python2.7/lib-dynload/_io.so: wrong ELF class: ELFCLASS32
make: *** [packages/target-mipsel_gcc-4.6.4_uClibc-0.9.32.1/python-cheetah-2.4.4/root/usr/lib/python2.7/site-packages/cheetah/_namemapper.so] Fehler 1

Hier der inhalt der .mk:
Code:
$(call PKG_INIT_BIN, 2.4.4)
$(PKG)_SOURCE:=Cheetah-$($(PKG)_VERSION).tar.gz
$(PKG)_SOURCE_MD5:=853917116e731afbc8c8a43c37e6ddba
$(PKG)_SITE:=https://pypi.python.org/packages/source/C/Cheetah

$(PKG)_DIR:=$($(PKG)_SOURCE_DIR)/Cheetah-$($(PKG)_VERSION)

$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/cheetah/_namemapper.so

$(PKG)_DEPENDS_ON += python 

$(PKG)_REBUILD_SUBOPTS += FREETZ_PACKAGE_PYTHON_STATIC

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_NOP)

$($(PKG)_TARGET_BINARY): $($(PKG)_DIR)/.configured
	$(call Build/PyMod/PKG, PYTHON_CHEETAH)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
	$(RM) -r $(PYTHON_CHEETAH_DIR)/build

$(pkg)-uninstall:
	$(RM) -r \
		$(PYTHON_CHEETAH_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/cheetah \
		$(PYTHON_CHEETAH_DEST_DIR)$(PYTHON_SITE_PKG_DIR)/cheetah-*.egg-info

$(PKG_FINISH)

Was läuft da verkehrt?
 
Es wird versucht, Target-Module auf dem Host zu laden. Du musst den Build-Prozess verstehen und es vermeiden - ein typisches cross-compile Problem.
 

Anhänge

  • python_cheetah.patch.bz2
    1.5 KB · Aufrufe: 5
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.