Как стать автором
Обновить

Комментарии 29

Как пересобрать SSL под Windows. 15 экранов текста с картинками в посте.

Как пересобрать SSL под Linux (Debian GNU/Linux): sudo apt-get build-dep openssl && apt-get source -b openssl. На выходе deb'ка для установки.

В процессе сборки оно выглядит страшно... Но ради этого дистрибутивы и существуют. Чтобы один раз человек сделал сложное и невозможное, а остальные пользовались.

Сборка под винду тоже короткая, но требуется как минимум perl

call "C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvars64.bat"
perl Configure VC-WIN64A no-asm no-shared --prefix=c:\openssl-build-x64
call ms\do_win64a
nmake.exe -f makefile

Откуда у вас на машине весь этот софт? Кто его поставил? Каких версий? Откуда нужные зависимости нужных версий?

Всюду хвосты неявного происхождения.

(debian/rules для openssl - 152 строки!)

Кстати, тот самый Makefile, который топикастер искал.

Какой "весь"? Nmake это сборщик который вместе с Visual Studio идёт. Тут пёрл и вижла.

А Visual Studio из коробки? Извините за сарказм. Просто amarao, скорее всего, имел ввиду, что в linux ничего предварительно-дополнительно ставить не нужно и вся забота ложиться на пакетный менеджер.

Это только до тех пор пока вас устраивает системная версия openssl. Но если она вас устраивает — на кой вообще её пересобирать?

Если не устраивает, то собрать и установить новую версию тоже не проблема:
./config
make -j8
make test
sudo make install
sudo ldconfig
make clean

Кстати, openssl похоже тот случай, когда кросскомпиляция из Линукса под винду проще, чем нативная компиляция под виндой:
WIN_64_DIR="win64" 
ROOT_DIR=$(pwd) 
./Configure --prefix=${ROOT_DIR}/${WIN_64_DIR} --cross-compile-prefix=x86_64-w64-mingw32- mingw64
make -j8
make install
make clean

Если не устраивает, то собрать и установить новую версию тоже не проблема:

Обновлять системную либу через make install - это ведь шутка такая, да?

Конечно, правильней было бы собрать пакет и установить его штатными средствами дистрибутива.

Если измененя минорные - не вижу смысла чего-то переустанавливать. Если изменения серьёзные (1.0 на 1.1 например) - я бы так не делал.

С новой версией будут танцы потоньше. Надо будет притащить новый тарбол и поправить зависимости, если надо. Мой лучший инструмент для этого gbp.

В целом, вопрос с уточнением зависимостей сохраняется в полный рост (кто-то это должен проверить и выписать), но сам процесс сборки будет целиком контролироваться cowdancer'ом (до-докеровая штука для создания окружения с заданными версиями пакетов).

В целом, это довольно сложный путь, но он а) полностью sound и reproducible, б) приводит к результатам, которые можно распространять за пределы своей машины.

А еще можно взять vcpkg и не заморачиваться.

Вот тоже подумал. Столько геморроя, которые решаются vcpkg буквально за 5-10 минут...

Автор буквально сам себе злой буратино. Можно взять vcpkg или conan и не писать статью, а написать лишь одну строчку.

Данная утилита без косяков ставит версию 1.1

При попытке установить 3 версию openssl у многих пользователей и у меня тоже вылетают ошибки.
Если бы долгий путь не оказался единственным из сработавших, я бы не писал статью а черканул бы себе в записной книжке одну строчку.

Для этого сейчас есть пакетные менеджеры.

Конкретно для студии - NuGet - зависимости нужных версий устанавливаются прямо из IDE

Кроссплатформенные (из тех что пробовал) - conan, vcpkg. Довольно легко интегрируются с CMake.

Позволю себе заметить что nuget не предлагает последних версий библиотеки. Последняя предлагаемая 1.1. У меня собрана актуальная со всеми фиксами безопасности

На что только люди не пойдут, чтобы не ставить Linux :-)

Но, если серьёзно, аналогичный код (кое-что поменял когда перепечатывал) у меня скомпилировался такой командой:

g++ -o mytest ssl.cpp -lboost_system -lcrypto -lssl -lpthread

Debian GNU/Linux 11, нужные заголовочные файлы и библиотеки даже оказались установлены (нужны были для чего-то раньше).

На что только люди не пойдут, чтобы не ставить Linux :-)

Через линух - кривой путь. Ещё больше колготы, если линух ещё не установлен.

На следующем шаге возможно познать дзен, так как компилироваться это будет достаточно долго.
А виндовый nmake не поддерживает многопоточную компиляцию? В нормальном make это делается ключем -j N, где N — желаемое число потоков (обычно берется равным числу ядер процессора). Так сборка идет гораздо веселее.

Для этого существует Jom

А может стоило взять LibreSSL?

Не помню но как то добыл опенссл для винды правда без буста, до сих пор не парюсь - лежит в репозитории

НЛО прилетело и опубликовало эту надпись здесь

Ну может я как то не так написал, но у меня во введении прямым текстом говорится, что это мой домашний проект, а на работе проблема решается тем что сборка производится не на компах разрабов. Для моего личного проекта выбор технологий может быть обоснован личным же интересом. Перестанет быть интересно или я пойму как работает нужная мне штука - сгорит проект в огне, а я продолжу работу работать.

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за подробное описание. Раз в год приходится пересобирать эти библиотеки. Но вечно вылетает из головы насколько это не простой процесс.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории