Продолжим серию статей про кросс-компиляцию различных библиотек под ARM архитектуру из под Linux (Прошла статья была про кросс-компиляцию Midnight Commander, можно посмотреть по ССЫЛКЕ).
Задача, как обычно, незатейлива - кросс-компиляция OpenSSH из под системы Ubuntu 14.04.
Что конкретно будем компилировать:
- openssh-5.8p1
- openssl-1.0.2d
- zlib-1.2.8
Исходники zlib вы можете найти в архиве в статье про компиляцию mc (ссылка в начале этой статьи). Ссылка на исходники openssh и openssl находятся в конце этой статьи.
Подробная инструкция процесса приведена в статье про mc, здесь мы быстренько пройдемся по нашим bash скриптам для запуска конфигурации проектов и старта утилиты make.
И так, приступим. Сначала создаем необходимые каталоги, где будет происходить кросс-магия:
$ mkdir /tmp/openssh
$ mkdir /tmp/openssh/builds
$ mkdir /tmp/openssh/sources
Скачиваем исходники всех нужных библиотек и разархивируем. Для архива исходников из этой статьи выполняем в каталоге /tmp/openssh/sources следующее:
:/tmp/openssh/sources$ tar -xf arm_openssh.tar.gz && for f in *.tar*; do tar xf $f; done
После, разархивируем zlib из архива из прошлой статьи в эту же директорию.
Исходники готовы. Приступим к кросс-компиляции.
Кросс-компиляция zlib-1.2.8:
Для этого в корне исходников создаем файлик my_make со следующим содержимым:
1 2 3 4 5 6 7 |
#!/bin/bash ARCH=arm \ CC=arm-linux-gnueabi-gcc ./configure \ --static \ --archs="-arch arm" make sudo make install DESTDIR=/tmp/openssh/builds/build_zlib-1.2.8 |
Даем права данному скрипту на выполнение:
$ chmod 755 /tmp/openssh/sources/zlib-1.2.8/my_make
Выполняем его:
$ /tmp/openssh/sources/zlib-1.2.8/my_make
После успешного процесса сборки, в каталоге /tmp/openssh/builds появится первая собранная библиотека build_zlib-1.2.8.
Далее необходимо повторять подобное с оставшимися исходниками. Копируем в следующий исходник скрипт, даем права, выполняем, радуемся. Поэтому привожу только скрипты для my_make.
Кросс-компиляция openssl-1.0.2d:
Код скрипта my_make:
1 2 3 4 5 6 |
#!/bin/bash CROSS_COMPILE=arm-linux-gnueabi- CC="gcc" ./Configure \ dist \ --prefix=/tmp/openssh/builds/build_openssl-1.0.2d make sudo make install |
Выполняем. Процесс относительно долгий. Ошибок быть не должно.
Кросс-компиляция openssh-5.8p1:
Код скрипта my_make:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash cross=arm-linux-gnueabi- \ CC="${cross}gcc" AR="${cross}ar" ./configure \ --disable-etc-default-login \ --host=arm-linux-gnueabi \ --with-libs \ --with-zlib=/tmp/openssh/builds/build_zlib-1.2.8/usr/local \ --with-ssl-dir=/tmp/openssh/sources/openssl-1.0.2d \ --prefix=/tmp/openssh/builds/build_openssh-5.8p make sudo make install |
Внимание! Первая попытка сборки может провалиться, предположительно с ошибками о strip. Поэтому попробуйте следующий скрипт с отключением strip:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash cross=arm-linux-gnueabi- \ CC="${cross}gcc" AR="${cross}ar" ./configure \ --disable-etc-default-login \ --disable-strip \ --host=arm-linux-gnueabi \ --with-libs \ --with-zlib=/tmp/openssh/builds/build_zlib-1.2.8/usr/local \ --with-ssl-dir=/tmp/openssh/sources/openssl-1.0.2d \ --prefix=/tmp/openssh/builds/build_openssh-5.8p make sudo make install |
И повторите попытку. Не знаю как у вас, у меня все это завершилось также с ошибками как на картинке:
Но в итоге openssh был успешно собран. Не знаю чем это чревато для работы ssh, но эта сборка была запущена и успешно протестирована.
Если кто знает, как полностью избавится от подобных ошибок или как это может повлиять на стабильность работы - пишите в комментариях к статье, буду очень признателен!
На этом все, можете благополучно пользоваться данной сборкой на системах с архитектурой ARM и радоваться возможностям протокола ssh.
Всем спасибо за внимание!
Архив с исходниками к этой статье: ССЫЛКА