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_OPTetcheck-configdans la règleinstalldans Makefile. make && make DESTDIR=$ROOTFS install- Démarrage de votre Mini6410 et l'utilisation de la commande
ssh-keygenpour 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