Cross compiler OpenSSH pour ARM
est-ce que quelqu'un sait comment je peux croiser OpenSSH pour ARM? C'est ce que j'ai fait:
tout d'abord, j'ai téléchargé le code source de Zlib, Je l'ai démonté, Je l'ai construit et installé en utilisant les lignes de commande suivantes:
# ./configure --prefix=/usr/local/cross/arm
# make
# make install
mais ensuite quand J'essaie de compiler OpenSSH pour la cible ARM, cela donne l'erreur "zlib missing" pendant le ./configure
processus:
# sudo LDFLAGS=-L/usr/local/cross/arm/lib CC=arm-none-linux-gnueabi-gcc PATH=$PATH:/home/arishop/arm-tool-chain/arm-fsl-linux-gnueabi/bin/ ./configure --host=arm-linux --with-zlib=/usr/local/cross/arm/ --prefix=/usr/local/cross/arm/openssh
3 réponses
Pour la compilation croisée des openSHH pour les BRAS (dans mon cas un mini2440) je n'ai suivantes:
installer arm cross compiler - (eg. qu'est-arm-linux-gcc et comment l'installer dans ubuntu)
Téléchargement:
- Zlib
- OpenSSL
- OpenSSH
Construire Zlib:
cd zlib-1.2.7
CC=arm-linux-gnueabi-gcc
./configure --prefix=$HOME/zlibArm
make
make install
Build OpenSSL:
export cross=arm-linux-gnueabi-
cd openssl-1.0.1c
./Configure dist --prefix=$HOME/opensslArm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install
Build OpenSSH:
./configure --host=arm-linux --with-libs --with-zlib=$HOME/zlibArm --with-ssl-dir=$HOME/opensslArm --disable-etc-default-login CC=gcc-arm-linux-gnueabi-gcc AR=gcc-arm-linux-gnueabi-ar
make
plus d'info au http://code.google.com/p/openssh4mini2440/wiki/HowTo, Télécharger la source et lire "build.sh"
la planche utilisée est Mini6410. L'exigence D'OpenSSH inclut zlib et OpenSSL. Je prépare
- zlib 1.2.8
- OpenSSL 1.0.1 e
- OpenSSH 6.4p1
ma chaîne d'outils est construite par crosstool-NG 1.15.2. La configuration de la chaîne d'outils ci-dessous est modifiée à partir de arm-unknown-linux-gnueabi.
Arch: armv6
CPU: arm1176jzf-s
FPU: vfp
Linux kernel: 2.6.38.8
binutils: 2.19.1a
gcc: 4.6.3
glibc: 2.11
gmp: 4.3.2
mpfr: 3.0.1
ppl: 0.11.2
cloog: 0.15.11
mpc: 0.9
Ensuite, j'ai de définir trois variables d'environnement HOST
,ROOTFS
et SYSROOT
. HOST
est arm-unknown-linux-gnueabi. ROOTFS
est le système de fichiers racine évidemment. SYSROOT
est le répertoire que le répertoire racine pour les en-têtes et les bibliothèques dans la chaîne d'outils.
Vous pouvez ajouter CFLAGS
et LD_LIBRARY_PATH
pointant vers votre système de fichiers racine pour que le compilateur croisé puisse trouver ce que vous avez installé. Cependant, je préfère ne pas fixer ces variables. L'alternative est d'installer ces bibliothèques dans les deux SYSROOT
et ROOTFS
.
d'abord, compiler zlib
AR=$HOST-ar CC=$HOST-gcc RANLIB=$HOST-ranlib ./configure --prefix=$ROOTFS/usr
make
make install
Deuxièmement, compiler OpenSSL
./Configure linux-armv4 shared zlib-dynamic --prefix=/usr
make CC=$HOST-gcc AR="$HOST-ar r" RANLIB=$HOST-ranlib
make CC=$HOST-gcc AR="$HOST-ar r" RANLIB=$HOST-ranlib INSTALL_PREFIX=$ROOTFS install
Notez que --prefix
est réglé sur /usr
au lieu de $ROOTFS/usr
. La raison en est que si vous définissez --prefix
$ROOTFS/usr
, il va tenter d'accéder aux fichiers de configuration $ROOTFS/usr
en runtime sur Mini6410, qui n'existe pas. Le chemin d'installation spécifié dans Makefile est $INSTALL_PREFIX/$PREFIX
, de sorte que nous utilisons $ROOTFS
$INSTALL_PREFIX
.
enfin, compiler OpenSSH
./confgure --host=$HOST --prefix=/usr
- Supprimer la variable
STRIP_OPT
etcheck-config
dans la règleinstall
dans Makefile. make && make DESTDIR=$ROOTFS install
- Démarrage de votre Mini6410 et l'utilisation de la commande
ssh-keygen
pour générer les clés de l'hôte.
La raison à l'aide de /usr
--prefix
est identique à OpenSSL. Si vous spécifiez --prefix=$ROOTFS/usr
, vous ne pourrez pas exécuter la commande scp
.
STRIP_OPT
être supprimé car il est impossible à utiliser /usr/bin/install
sur x86-64 pour démonter les binaires sur ARM. La règle check-config
exécutera lesshd
sur l'hôte, donc nous devons éviter cela.
dans la dernière étape, vérifiez Makefile et trouvez la règle host-key
. Et La ligne suivante est @if [ -z "$(DESTDIR)" ] ; then
, ce qui signifie qu'il ne fait rien si la longueur de $(DESTDIR)
est différente de zéro. Ainsi, nous devons générer ces clés manuellement sur Mini6410:
ssh-keygen -t rsa1 -f /usr/etc/ssh_host_key -N ""
ssh-keygen -t dsa -f /usr/etc/ssh_host_dsa_key -N ""
ssh-keygen -t rsa -f /usr/etc/ssh_host_rsa_key -N ""
ssh-keygen -t ecdsa -f /usr/etc/ssh_host_ecdsa_key -N ""
je fais comme ceci
CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib ./Configure linux-armv4 --prefix=$OPENSSLARM --openssldir=$OPENSSLARM make CC=arm-none-linux-gnueabi-gcc AR="arm-none-linux-gnueabi-ar r" RANLIB="arm-none-linux-gnueabi-ranlib" make install