web-dev-qa-db-fra.com

Cross Compile OpenSSH pour ARM

Est-ce que quelqu'un sait comment je peux compiler OpenSSH pour ARM? Voici ce que j'ai fait:

J'ai d'abord téléchargé le code source de Zlib, je l'ai décompressé, je l'ai construit et je l'ai installé à l'aide des lignes de commande suivantes:

   # ./configure --prefix=/usr/local/cross/arm

   # make 

   # make install

Mais quand j'essaye de compiler OpenSSH pour la carte 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
14
arian

Pour compiler openSHH pour ARM (dans mon cas un mini2440), j'ai fait ce qui suit:

Installer le compilateur arm cross par exemple. --- (qu'est-ce que arm-linux-gcc et comment l'installer dans ubunt )

Télécharger:

  • Zlib
  • OpenSSL
  • OpenSSH

Construisez Zlib:

cd zlib-1.2.7
CC=arm-linux-gnueabi-gcc
./configure --prefix=$HOME/zlibArm
make 
make install

Construisez 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

Construisez 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'informations sur http://code.google.com/p/openssh4mini2440/wiki/HowTo , téléchargez la source et lisez "build.sh"

41
jaguzu

La carte utilisée est la Mini6410. L'exigence d'OpenSSH inclut zlib et OpenSSL. Je prépare

  • zlib 1.2.8
  • OpenSSL 1.0.1e
  • 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, je définis trois variables d'environnement, Host, ROOTFS et SYSROOT. Host est arm-unknown-linux-gnueabi. ROOTFS est évidemment le système de fichiers racine. SYSROOT est le répertoire en tant que répertoire racine des en-têtes et bibliothèques de la chaîne d'outils.

Vous pouvez ajouter CFLAGS et LD_LIBRARY_PATH Pointant vers votre système de fichiers racine afin que le compilateur croisé puisse trouver ce que vous avez installé. Cependant, je préfère ne pas définir ces variables. L'alternative consiste à installer ces bibliothèques dans SYSROOT et ROOTFS.

Tout d'abord, compilez zlib

AR=$Host-ar CC=$Host-gcc RANLIB=$Host-ranlib ./configure --prefix=$ROOTFS/usr
make
make install

Deuxièmement, compilez 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 défini sur /usr Au lieu de $ROOTFS/usr. La raison en est que si vous définissez --prefix Sur $ROOTFS/usr, Il essaiera d'accéder aux fichiers de configuration dans $ROOTFS/usr Lors de l'exécution sur Mini6410, qui n'existe pas. Le chemin d'installation spécifié dans Makefile est $INSTALL_PREFIX/$PREFIX, Nous utilisons donc $ROOTFS Pour $INSTALL_PREFIX.

Enfin, compilez OpenSSH

  1. ./confgure --Host=$Host --prefix=/usr
  2. Supprimez la variable STRIP_OPT Et check-config Dans la règle install dans Makefile.
  3. make && make DESTDIR=$ROOTFS install
  4. Démarrez votre Mini6410 et utilisez la commande ssh-keygen Pour générer des clés d'hôte.

La raison d'utiliser /usr Pour --prefix Est la même que pour OpenSSL. Si vous spécifiez --prefix=$ROOTFS/usr, Vous ne pourrez pas exécuter la commande scp.

STRIP_OPT Doivent être supprimés car il est impossible d'utiliser /usr/bin/install Sur x86-64 pour supprimer les binaires sur ARM. La règle check-config Exécutera le sshd généré sur l'hôte, nous devons donc éviter cela.

Dans la dernière étape, vérifiez Makefile et recherchez la règle Host-key. Et la ligne suivante est @if [ -z "$(DESTDIR)" ] ; then, ce qui signifie qu'elle ne fait rien si la longueur de $(DESTDIR) n'est pas nulle. 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 ""
10
Che-Hsun Liu

J'aime ça

 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 
1
caentist