CrossCompiling Python für ARM

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
DLX
Beiträge: 5
Registriert: 04.04.2014 20:33:34

CrossCompiling Python für ARM

Beitrag von DLX » 06.04.2014 11:17:05

Hi,

ich habe auf einer ARM-Plattform Debian-armhf laufen. Für die Plattform möchte ich mit ROS entwickeln. Die Entwicklungsumgebung soll unter Ubuntu 12.04 aufgebaut werden.

Daher habe ich bereits den gcc-arm-linux-gnueabihf CC installiert. Um aber Pakete für ROS bauen zu können, brauche ich Python. Eine Anleitugn, wie ich Python Cross Compiliere habe ich hier (http://randomsplat.com/id5-cross-compil ... linux.html) gefunden. Leider fehlen eineige Bibliotheken, wodurch einige Module nicht mit erstellt werden. Diese brauche ich aber, sonst kann ich nicht mein ROS Paket compilieren.

Das ist die Ausgabe, wenn ich Python cross compiliere.

Code: Alles auswählen

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _curses            _curses_panel   
_sqlite3           _ssl               _tkinter        
bsddb185           bz2                dbm             
dl                 gdbm               nis             
readline           sunaudiodev        zlib            
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_bisect            _codecs_cn         _codecs_hk      
_codecs_iso2022    _codecs_jp         _codecs_kr      
_codecs_tw         _collections       _csv            
_ctypes_test       _elementtree       _functools      
_heapq             _hotshot           _io             
_json              _locale            _lsprof         
_md5               _multibytecodec    _multiprocessing
_random            _sha               _sha256         
_sha512            _socket            _struct         
_testcapi          array              audioop         
binascii           cmath              cPickle         
crypt              cStringIO          datetime        
fcntl              future_builtins    grp             
imageop            itertools          linuxaudiodev   
math               mmap               operator        
ossaudiodev        parser             pyexpat         
resource           select             spwd            
strop              syslog             termios         
time               unicodedata 
Meine Idee war jetzt, mit Multistrap die Pakete runter zu laden und mit in die Ordnerstruktur von gcc-arm-linux-Mgnueabihf zu packen. Würde das funktionieren? Gibt es einfache Möglichkeiten? Darauf alle Bibliotheke mit gcc selber cross zu compilieren habe ich ehrlich gesagt keine Lust.

Ich hoffe auf viel Input :)

DeletedUserReAsG

Re: CrossCompiling Python für ARM

Beitrag von DeletedUserReAsG » 06.04.2014 11:27:17

Die Pythonversionen aus den Repos sind nicht ausreichend?

DLX
Beiträge: 5
Registriert: 04.04.2014 20:33:34

Re: CrossCompiling Python für ARM

Beitrag von DLX » 06.04.2014 13:08:41

Tja, so richtig schlau bin ich da auch noch nicht.

Ich hatte probiert das Python von der ARM-Plattform auf die Entwicklungsplattform zu kopieren, allerdings führte das zu einem Fehler, den ich jetzt nicht notiert habe. Der Compiler lief aber garnicht erst los, da im Makefile vorher ein Test war, wodurch der Vorgang dann abgebrochen wurde.

Python direkt mit Multistrap zu laden, wäre aber durchaus eine Variante, die ich noch probieren könnte.

DLX
Beiträge: 5
Registriert: 04.04.2014 20:33:34

Re: CrossCompiling Python für ARM

Beitrag von DLX » 07.04.2014 08:15:09

Also so richtig komme ich nicht mit multistrap klar.

Egal welche Pakete ich versuche zu laden und welche Adressen ich eingebe, es kommt immer wieder zu fehlern:

Hier mal die config für multistrap:

Code: Alles auswählen

[General]
# arch and directory can be specified on the command line.
arch=armhf
directory=~/multistrap/download/
# same as --tidy-up option if set to true
cleanup=true
# retain the sources outside the rootfs for distribution
# specify a directory to which all the .debs can be moved.
# or override with the --source-dir option.
retainsources=
# same as --no-auth option if set to true
# keyring packages listed in each debootstrap will
# still be installed.
noauth=true
# retries not needed.
#retries=5
# extract all downloaded archives
unpack=true
# the order of sections is no longer important.
# debootstrap determines which repository is used to
# calculate the list of Priority: required packages
bootstrap=Grip Updates
# the order of sections is no longer important.
# aptsources is a list of sections to be listed
# in the /etc/apt/sources.list.d/multistrap.sources.list
# of the target.
aptsources=Grip Updates Debian

[Grip]
packages=python
source=http://www.emdebian.org/grip
keyring=emdebian-archive-keyring
suite=wheezy

[Updates]
packages=apt
source=http://www.emdebian.org/grip
keyring=emdebian-archive-keyring
suite=wheezy-proposed-updates

# fallback
[Debian]
packages=
source=http://ftp.uk.debian.org/debian
keyring=debian-archive-keyring
suite=wheezy
Das kommt dabei raus:

Code: Alles auswählen

user@ubuntu:~/multistrap$ sudo multistrap -f ms_config
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
Use of uninitialized value in lc at /usr/sbin/multistrap line 851.
Use of uninitialized value in lc at /usr/sbin/multistrap line 857.
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
multistrap 2.1.6ubuntu3 using ms_config
Using foreign architecture: armhf
multistrap building armhf multistrap on 'i386'
Getting package lists: apt-get  -o Apt::Architecture=armhf -o Dir::Etc::TrustedParts=/etc/apt/trusted.gpg.d -o Dir::Etc::Trusted=/etc/apt/trusted.gpg -o Apt::Get::AllowUnauthenticated=true -o Apt::Get::Download-Only=true -o Apt::Install-Recommends=false -o Dir=/home/user/multistrap/download/ -o Dir::Etc=/home/user/multistrap/download/etc/apt/ -o Dir::State=/home/user/multistrap/download/var/lib/apt/ -o Dir::State::Status=/home/user/multistrap/download/var/lib/dpkg/status -o Dir::Cache=/home/user/multistrap/download/var/cache/apt/ update
Ign http://www.emdebian.org wheezy-proposed-updates Release.gpg
Ign http://www.emdebian.org wheezy-proposed-updates Release
Ign http://www.emdebian.org wheezy-proposed-updates/main TranslationIndex
Hole:1 http://ftp.uk.debian.org wheezy Release.gpg [1.672 B]
Hole:2 http://ftp.uk.debian.org wheezy Release [168 kB]  
Fehl http://www.emdebian.org wheezy-proposed-updates/main Sources
  404  Not Found
Fehl http://www.emdebian.org wheezy-proposed-updates/main armhf Packages
  404  Not Found
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-de_DE
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-de
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-en_US
Ign http://ftp.uk.debian.org wheezy Release         
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-en
Hole:3 http://ftp.uk.debian.org wheezy/main Sources [5.956 kB]
Hole:4 http://ftp.uk.debian.org wheezy/main armhf Packages [5.691 kB]
Hole:5 http://ftp.uk.debian.org wheezy/main TranslationIndex [2.433 B]
Hole:6 http://ftp.uk.debian.org wheezy/main Translation-de_DE [830 B]
Hole:7 http://ftp.uk.debian.org wheezy/main Translation-de [1.775 kB]
Hole:8 http://ftp.uk.debian.org wheezy/main Translation-en [3.849 kB]
Es wurden 17,4 MB in 10 s geholt (1.601 kB/s)                                                                                           
W: GPG-Fehler: http://ftp.uk.debian.org wheezy Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 6FB2A1C265FFB764
W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy-proposed-updates/main/source/Sources  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy-proposed-updates/main/binary-armhf/Packages  404  Not Found

E: Einige Indexdateien konnten nicht heruntergeladen werden. Sie wurden ignoriert oder alte an ihrer Stelle benutzt.
apt update failed. Exit value: 100
user@ubuntu:~/multistrap$ sudo multistrap -f ms_config
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
Use of uninitialized value in lc at /usr/sbin/multistrap line 851.
Use of uninitialized value in lc at /usr/sbin/multistrap line 857.
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
multistrap 2.1.6ubuntu3 using ms_config
Using foreign architecture: armhf
multistrap building armhf multistrap on 'i386'
Getting package lists: apt-get  -o Apt::Architecture=armhf -o Dir::Etc::TrustedParts=/etc/apt/trusted.gpg.d -o Dir::Etc::Trusted=/etc/apt/trusted.gpg -o Apt::Get::AllowUnauthenticated=true -o Apt::Get::Download-Only=true -o Apt::Install-Recommends=false -o Dir=/home/user/multistrap/download/ -o Dir::Etc=/home/user/multistrap/download/etc/apt/ -o Dir::State=/home/user/multistrap/download/var/lib/apt/ -o Dir::State::Status=/home/user/multistrap/download/var/lib/dpkg/status -o Dir::Cache=/home/user/multistrap/download/var/cache/apt/ update
Ign http://www.emdebian.org wheezy Release.gpg
Ign http://www.emdebian.org wheezy-proposed-updates Release.gpg
Ign http://www.emdebian.org wheezy Release
Ign http://www.emdebian.org wheezy-proposed-updates Release
Ign http://www.emdebian.org wheezy/main TranslationIndex
Ign http://www.emdebian.org wheezy-proposed-updates/main TranslationIndex
Fehl http://www.emdebian.org wheezy/main Sources
  404  Not Found
Fehl http://www.emdebian.org wheezy/main armhf Packages
  404  Not Found
Fehl http://www.emdebian.org wheezy-proposed-updates/main Sources
  404  Not Found
Fehl http://www.emdebian.org wheezy-proposed-updates/main armhf Packages
  404  Not Found
Ign http://www.emdebian.org wheezy/main Translation-de_DE
Ign http://www.emdebian.org wheezy/main Translation-de
Ign http://www.emdebian.org wheezy/main Translation-en_US
Ign http://www.emdebian.org wheezy/main Translation-en
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-de_DE
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-de
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-en_US
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-en
W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy/main/source/Sources  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy/main/binary-armhf/Packages  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy-proposed-updates/main/source/Sources  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy-proposed-updates/main/binary-armhf/Packages  404  Not Found

E: Einige Indexdateien konnten nicht heruntergeladen werden. Sie wurden ignoriert oder alte an ihrer Stelle benutzt.
apt update failed. Exit value: 100
user@ubuntu:~/multistrap$ ^C
user@ubuntu:~/multistrap$ clear

user@ubuntu:~/multistrap$ sudo multistrap -f ms_config
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
Use of uninitialized value in lc at /usr/sbin/multistrap line 851.
Use of uninitialized value in lc at /usr/sbin/multistrap line 857.
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
Use of uninitialized value in lc at /usr/sbin/multistrap line 871.
Use of uninitialized value in lc at /usr/sbin/multistrap line 874.
multistrap 2.1.6ubuntu3 using ms_config
Using foreign architecture: armhf
multistrap building armhf multistrap on 'i386'
Getting package lists: apt-get  -o Apt::Architecture=armhf -o Dir::Etc::TrustedParts=/etc/apt/trusted.gpg.d -o Dir::Etc::Trusted=/etc/apt/trusted.gpg -o Apt::Get::AllowUnauthenticated=true -o Apt::Get::Download-Only=true -o Apt::Install-Recommends=false -o Dir=/home/user/multistrap/download/ -o Dir::Etc=/home/user/multistrap/download/etc/apt/ -o Dir::State=/home/user/multistrap/download/var/lib/apt/ -o Dir::State::Status=/home/user/multistrap/download/var/lib/dpkg/status -o Dir::Cache=/home/user/multistrap/download/var/cache/apt/ update
Ign http://www.emdebian.org wheezy Release.gpg
Ign http://www.emdebian.org wheezy-proposed-updates Release.gpg
Ign http://www.emdebian.org wheezy Release
Ign http://www.emdebian.org wheezy-proposed-updates Release
Ign http://www.emdebian.org wheezy/main TranslationIndex
Ign http://www.emdebian.org wheezy-proposed-updates/main TranslationIndex
Fehl http://www.emdebian.org wheezy/main Sources
  404  Not Found
Fehl http://www.emdebian.org wheezy/main armhf Packages
  404  Not Found
Fehl http://www.emdebian.org wheezy-proposed-updates/main Sources
  404  Not Found
Fehl http://www.emdebian.org wheezy-proposed-updates/main armhf Packages
  404  Not Found
Ign http://www.emdebian.org wheezy/main Translation-de_DE
Ign http://www.emdebian.org wheezy/main Translation-de
Ign http://www.emdebian.org wheezy/main Translation-en_US
Ign http://www.emdebian.org wheezy/main Translation-en
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-de_DE
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-de
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-en_US
Ign http://www.emdebian.org wheezy-proposed-updates/main Translation-en
W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy/main/source/Sources  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy/main/binary-armhf/Packages  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy-proposed-updates/main/source/Sources  404  Not Found

W: Fehlschlag beim Holen von http://www.emdebian.org/grip/dists/wheezy-proposed-updates/main/binary-armhf/Packages  404  Not Found

E: Einige Indexdateien konnten nicht heruntergeladen werden. Sie wurden ignoriert oder alte an ihrer Stelle benutzt.
apt update failed. Exit value: 100
user@ubuntu:~/multistrap$ 

Allerdings sind das ja eigentlich auch garnicht die Paketquellen, die ich nutzen möchte. Ich habe ein Debian und kein Emdebian auf der ARM-Platine. Ich habe auch schon probiert, eine Paketquelle aus dem apt-get der ARM-Platine ein zu tragen, schließlich konnte ich da einfach Python installieren. allerdings führte das auch zu error 404.

Vielleicht habe ich da einfach die falsche Quelle eingetragen!? Kann mir jmd sagen, woher ich eine funktionisfähige Paketquelle bekomme?

DLX
Beiträge: 5
Registriert: 04.04.2014 20:33:34

Re: CrossCompiling Python für ARM

Beitrag von DLX » 07.04.2014 09:49:22

OK, das erste Problem ließ sich lösen, indem ich die Paketquellen von der ARM-Plattform aus /etc/apt/sources.list genommen habe und den keyring deaktiviert habe.

Code: Alles auswählen

[General]
# arch and directory can be specified on the command line.
arch=armhf
directory=~/multistrap/download/
# same as --tidy-up option if set to true
cleanup=false
# retain the sources outside the rootfs for distribution
# specify a directory to which all the .debs can be moved.
# or override with the --source-dir option.
retainsources=
# same as --no-auth option if set to true
# keyring packages listed in each debootstrap will
# still be installed.
noauth=true
# retries not needed.
#retries=5
# extract all downloaded archives
#unpack=true
unpack=false
# the order of sections is no longer important.
# debootstrap determines which repository is used to
# calculate the list of Priority: required packages
bootstrap=Grip Updates
# the order of sections is no longer important.
# aptsources is a list of sections to be listed
# in the /etc/apt/sources.list.d/multistrap.sources.list
# of the target.
aptsources=Grip Updates Debian

[Grip]
packages=python
source=http://ftp.us.debian.org/debian/
##keyring=emdebian-archive-keyring
suite=wheezy

[Updates]
packages=
source=http://ftp.us.debian.org/debian/
#keyring=emdebian-archive-keyring
suite=wheezy-proposed-updates

# fallback
[Debian]
packages=
source=http://security.debian.org/
#keyring=debian-archive-keyring
suite=wheezy
Folgende vier Pakete habe ich dann per Hand entpackt und die Dateistruktur in den Ordner gepackt in den der Python-arm-compiler soll

Code: Alles auswählen

-rw-r--r-- 1 root root 2636254 Mär 17 20:04 python2.7_2.7.3-6+deb7u2_armhf.deb
-rw-r--r-- 1 root root  180608 Sep 29  2013 python_2.7.3-4+deb7u1_all.deb
-rw-r--r-- 1 root root 1619512 Mär 17 20:04 python2.7-minimal_2.7.3-6+deb7u2_armhf.deb
-rw-r--r-- 1 root root   42812 Sep 29  2013 python-minimal_2.7.3-4+deb7u1_all.deb
Leider ohne Erfolg:

Code: Alles auswählen

catkin_make --cmake-args -DCMAKE_TOOLCHAIN_FILE=~/rostoolchain.cmake
Base path: /home/user/catkin_ws
Source space: /home/user/catkin_ws/src
Build space: /home/user/catkin_ws/build
Devel space: /home/user/catkin_ws/devel
Install space: /home/user/catkin_ws/install
####
#### Running command: "cmake /home/user/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/user/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/user/catkin_ws/install -DCMAKE_TOOLCHAIN_FILE=~/rostoolchain.cmake" in "/home/user/catkin_ws/build"
####
-- rostoolchain.cmake fuer arm eingebunden
-- Using CATKIN_DEVEL_PREFIX: /home/user/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/hydro
-- This workspace overlays: /opt/ros/hydro
-- Using PYTHON_EXECUTABLE: /home/user/Python-2.7.3/_install/bin/python
-- Alternative approach to get Python version since find_package(PythonInterp) does not return it
CMake Error at /opt/ros/hydro/share/catkin/cmake/python.cmake:22 (message):
  Determine Python version failed
Call Stack (most recent call first):
  /opt/ros/hydro/share/catkin/cmake/all.cmake:139 (include)
  /opt/ros/hydro/share/catkin/cmake/catkinConfig.cmake:20 (include)
  CMakeLists.txt:52 (find_package)


-- Configuring incomplete, errors occurred!
Invoking "cmake" failed
Den gleichen Fehler habe ich erhalten, als ich Python von der ARM-Plattform in den besagten Ordner kopiert habe...

DLX
Beiträge: 5
Registriert: 04.04.2014 20:33:34

Re: CrossCompiling Python für ARM

Beitrag von DLX » 09.04.2014 09:00:52

So, der letzte Fehler war selbstverursacht, da ich einen falschen Pfad eingetragen habe...

Ich habe inzwischen mit multistrap die komplette Paketstruktur runter geladen inkl. ros und allem anderem gedöhns. Halt so ziemlich alle Pakete, die auch auf der ARM-Plattform installiert sind.

Wenn ich die python binary in cmake setze, findet er sie auch, es kommt aber zu folgendem Fehler:

Code: Alles auswählen

-- Python version: /home/user/multistrap/download/usr/bin/python: 1: /home/user/multistrap/download/usr/bin/python: Syntax error: word unexpected (expecting ")")./home/user/multistrap/download/usr/bin/python: 1: /home/user/multistrap/download/usr/bin/python: Syntax error: word unexpected (expecting ")")
Da ich mal davon aus gehe, dass python im Paket rodentlich kompiliert ist, gehe davon aus, dass es was mit den Bibliotheken zu tun hat, wie hier auch gesagt: http://randomsplat.com/id5-cross-compil ... ment-29222

Da ich nun nicht grade in Linux/Debian Crack bin, wäre eine Hilfe, wie ich dem Poblem denn weiter auf die Schliche komme kann, ganz hilfreich.

Zu dem Fehler kommt es auch, wenn ich versuche Python 2.7.5 nach dieser Anleitung Cross zu Compilieren: http://www.trevorbowen.com/2013/10/07/c ... ded-linux/

Antworten