apt-get pode instalar um pacote, porque uma biblioteca não é encontrada quando eu construo a fonte?

0

Eu instalei o freeradius 2.1.12 na minha máquina ubuntu:

apt-get install freeradius

Então eu baixei sua fonte,

apt-get source freeradius

crie a fonte:

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

falha:

        /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

Então eu me pergunto como o "apt-get install" pode funcionar, então eu verifiquei:

#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)

Então libcrypto e libssl existem em / lib / x86_64-linux-gnu.

Então, como eu posso instruir o configure para pegar / lib / x86_64-linux-gnu?

Uma pergunta mais geral - se um pacote pode ser instalado, qual é a maneira mais fácil de compilá-lo a partir do código-fonte? Posso de alguma forma baixar um script de compilação?

    
por my_question 16.02.2018 / 05:33

1 resposta

1

Já que você já está usando uma fonte de pacotes, é realmente fácil: você está perdendo os pacotes de desenvolvimento necessários para construí-lo. Ainda pode haver alguns outros pacotes obrigatórios ausentes para um ambiente de compilação de pacote mínimo padrão. Então, primeiro:

# apt-get install build-essential fakeroot devscripts

depois para o pacote em si:

# apt-get build-dep freeradius

Você notará que para cada pacote libfooX necessário para instalar o resultado, ele buscará também libfoo-dev necessário para criá-lo e, na maioria das vezes, muito mais pacotes. Porque as bibliotecas development , assim como os arquivos de inclusão correspondentes, são empacotados separadamente das bibliotecas runtime correspondentes.

Você pode compilar o pacote executando algo parecido com isso no novo diretório:

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

Se você nem precisou alterar nada, ele pode ser combinado em:

$ apt-get --build source freeradius

O desenvolvimento de pacotes não requer acesso root, desde que o pacote fakeroot esteja instalado. Pode e deve ser feito como um usuário normal. Outro pacote útil: debian-keyring para Debian ou ubuntu-keyring para Ubuntu que será usado por apt-get para validar o download da fonte da mesma forma apt-get valida um download de pacote usando o conteúdo de debian-archive-keyring ou ubuntu-archive-keyring .

Apenas substitua "freeradius" por qualquer outro pacote para o caso geral. Você deve realmente consultar o tutorial de construção do debian explicando tudo isso.

    
por 16.02.2018 / 18:52