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
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:
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"
La carte utilisée est la Mini6410. L'exigence d'OpenSSH inclut zlib et OpenSSL. Je prépare
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
.
AR=$Host-ar CC=$Host-gcc RANLIB=$Host-ranlib ./configure --prefix=$ROOTFS/usr
make
make install
./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
.
./confgure --Host=$Host --prefix=/usr
STRIP_OPT
Et check-config
Dans la règle install
dans Makefile.make && make DESTDIR=$ROOTFS install
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 ""
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