apt-get может установить пакет, почему библиотека не найдена при сборке исходного кода?

369
my_question

Я установил Freeradius 2.1.12 на мою машину с Ubuntu:

apt-get install freeradius 

Затем я скачал его источник,

apt-get source freeradius 

построить источник:

cd freeradius-2.1.12+dfsg ./configure --prefix=/root/freeradius/freeradius-2.1.12 make 

сделать не удается:

 /root/freeradius-2.1.12+dfsg/src/lib/libfreeradius-radius.la -lnsl -lresolv -lpthread -lssl -lcrypto gcc -shared .libs/eapcommon.o .libs/eapcrypto.o .libs/eapsimlib.o .libs/fips186prf.o -Wl,--rpath -Wl,/root/freeradius-2.1.12+dfsg/src/lib/.libs -Wl,--rpath -Wl,/root/freeradius/freeradius-2.1.12/lib /root/freeradius-2.1.12+dfsg/src/lib/.libs/libfreeradius-radius.so -lnsl -lresolv -lpthread -lssl -lcrypto -Wl,-soname -Wl,libfreeradius-eap-2.1.12.so -o .libs/libfreeradius-eap-2.1.12.so /usr/bin/ld: cannot find -lssl /usr/bin/ld: cannot find -lcrypto collect2: error: ld returned 1 exit status 

Тогда мне интересно, как получается, что «apt-get install» может работать, поэтому я проверил:

#type freeradius freeradius is hashed (/usr/sbin/freeradius)  # ldd /usr/sbin/freeradius libfreeradius-radius-2.1.12.so => /usr/lib/freeradius/libfreeradius-radius-2.1.12.so (0x00007f3d6d1df000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f3d6c735000) 

Таким образом, libcrypto и libssl существуют в / lib / x86_64-linux-gnu.

Тогда как я могу дать команду configure взять / lib / x86_64-linux-gnu?

Более общий вопрос - если пакет можно установить, какой самый простой способ собрать его из исходного кода? Можно ли как-нибудь скачать скрипт сборки?

0

1 ответ на вопрос

1
A.B

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

# apt-get install build-essential fakeroot devscripts 

тогда для самой упаковки:

# apt-get build-dep freeradius 

Вы заметите, что для каждого libfooXпакета, необходимого для установки результата, он также будет извлекать данные, libfoo-devнеобходимые для его сборки, и чаще всего, гораздо больше пакетов. Поскольку библиотеки разработки, а также соответствующие включаемые файлы упаковываются отдельно от соответствующих библиотек времени выполнения .

Вы можете собрать пакет обратно, запустив что-то вроде этого в новом каталоге:

$ dpkg-buildpackage -us -uc -rfakeroot -b 

Если вам даже не нужно ничего менять, это можно объединить в:

$ apt-get --build source freeradius 

Для сборки пакета не требуется root-доступ, пока пакет fakerootустановлен. Это может и должно быть сделано как обычный пользователь. Другой полезный пакет: debian-keyringдля Debian или ubuntu-keyringдля Ubuntu, который будет использоваться apt-getдля проверки загрузки исходного кода, так же, как apt-getпроверка загрузки пакета с использованием содержимого debian-archive-keyringили ubuntu-archive-keyring.

Просто замените «freeradius» на любой другой пакет для общего случая. Вы действительно должны обратиться к руководству по сборке Debian, объясняющему все это.