apt-get kann ein Paket installieren. Warum wird beim Erstellen der Quelle keine Bibliothek gefunden?

490
my_question

Ich habe Freeradius 2.1.12 auf meinem Ubuntu-Rechner installiert:

apt-get install freeradius 

Dann habe ich die Quelle heruntergeladen,

apt-get source freeradius 

baue die Quelle:

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

make fail:

 /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 

Dann wundere ich mich, wie "apt-get install" funktionieren kann, also habe ich überprüft:

#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 und libssl existieren also unter / lib / x86_64-linux-gnu.

Wie kann ich dann configure anweisen, / lib / x86_64-linux-gnu zu nehmen?

Eine allgemeinere Frage: Wenn ein Paket installiert werden kann, wie kann es am einfachsten aus dem Quellcode erstellt werden? Kann ich irgendwie ein Build-Skript herunterladen?

0

1 Antwort auf die Frage

1
A.B

Da Sie bereits eine Paketquelle verwenden, ist es sehr einfach: Sie fehlen die für die Erstellung erforderlichen Entwicklungspakete. Für eine standardmäßige Umgebung zum Erstellen von Paketen fehlen möglicherweise noch einige andere obligatorische Pakete. So zuerst:

# apt-get install build-essential fakeroot devscripts 

dann für das Paket selbst:

# apt-get build-dep freeradius 

Sie werden feststellen, dass für jedes libfooXPaket, das zur Installation des Ergebnisses erforderlich ist, es so gut wie libfoo-devnötig abgerufen wird, und meistens viele weitere Pakete. Denn die Entwicklungsbibliotheken sowie die entsprechenden Include-Dateien werden getrennt von den entsprechenden Laufzeitbibliotheken gepackt.

Sie können das Paket zurückbauen, indem Sie im neuen Verzeichnis so etwas ausführen:

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

Wenn Sie nicht einmal etwas ändern mussten, können Sie Folgendes kombinieren:

$ apt-get --build source freeradius 

Der Paketaufbau erfordert keinen Root-Zugriff, solange das Paket fakerootinstalliert ist. Dies kann und sollte als normaler Benutzer erfolgen. Andere nützliche Pakete: debian-keyringFür Debian oder ubuntu-keyringUbuntu, die von verwendet werden apt-get, um den Quelldownload auf die gleiche Weise zu apt-getvalidieren, validieren Sie einen Paketdownload mithilfe des Inhalts von debian-archive-keyringoder ubuntu-archive-keyring.

Ersetzen Sie einfach "Freeradius" durch ein beliebiges anderes Paket für den allgemeinen Fall. Sie sollten wirklich das Debian-Building-Tutorial lesen, in dem Sie alles erklären.