We hebben een Synology NAS met DSM 4.0, dit is een op linux 2.6.32 gebaseerde x86 64 bit distro met een webinterface om alles te beheren. Ook krijg 'k toegang via SSH. Via deze webinterface kan je een directory service draaien (OpenLDAP) maar deze heeft een module die wij nodig hebben (syncprov) niet meegecompileerd. De bedoeling is om zelf OpenLDAP te compileren. Er staat geen gcc of dergelijke op deze distro maar er is wel een toolchain beschikbaar (met gcc 4.2) met de nodige basis libraries om vanalles te compileren.
1e probeersel:
OpenLDAP compileren met deze toolchain op ons host systeem (Kubuntu 64 bit). Probleem: compileren lukt niet omdat libnss, libdb niet beschikbaar zijn in de meegeleverde libraries.
2e probeersel:
OpenLDAP compileren zonder de toolchain (dus gewoon op het host systeem) maar met static linking. Maw aan de configure gewoon een parameter meegeven: ./configure --disable-shared (optie wordt herkend). Resultaat:
Omdat deze optie niet expliciet in ./configure --help werd meegegeven, heb 'k --enable-static=libdb-5.1 eens geprobeerd maar dit zorgde niet voor een ander resultaat:
3e probeersel:
expliciet compiler options meegeven:
env CPPFLAGS="-I/usr/include/nss" \ CFLAGS="-static -static-libgcc" ./configure
Verandert niets aan de zaak, opties worden niet meegenomen in de verschillende makefiles.
Uiteindelijk heb 'k dan de makefiles manueel veranderd; aan de CFLAGS -static en -static-libgcc toegevoegd maar uiteindelijk zei LDD mij nog steeds dat de slapd binary verschillende libraries dynamisch gelinked had.
Vraag 1
Ik weet dat static linked binaries niet de beste oplossing zijn maar het leek mij wel de eenvoudigste oplossing om niet met een DLL-hell (SO-hell) te zitten. Is er alsnog een makkelijke optie om een static linked binary te creeëren die zonder mokken draait op mijn NAS?
Vraag 2
De juiste oplossing zal wrs zijn om alle benodigde libraries zoals libssl, libdb-5.1 te compileren met de toolchain en aan de toolchain libraries toe te voegen. Vraag is hoe ik dat doe en hoe 'k dan uiteindelijk alles naar mijn NAS geïnstalleerd kan krijgen (op een werkbare manier). Er staat namelijk geen scp op (wel samba).
1e probeersel:
OpenLDAP compileren met deze toolchain op ons host systeem (Kubuntu 64 bit). Probleem: compileren lukt niet omdat libnss, libdb niet beschikbaar zijn in de meegeleverde libraries.
2e probeersel:
OpenLDAP compileren zonder de toolchain (dus gewoon op het host systeem) maar met static linking. Maw aan de configure gewoon een parameter meegeven: ./configure --disable-shared (optie wordt herkend). Resultaat:
Bash:
1
2
3
4
5
6
7
8
9
10
| ldd servers/slapd/slapd linux-vdso.so.1 => (0x00007fff63dff000) libdb-5.1.so => /usr/lib/x86_64-linux-gnu/libdb-5.1.so (0x00007faf7fc27000) libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007faf7f9cb000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007faf7f602000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faf7f3e5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faf7f028000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faf7ee23000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faf7ec0c000) /lib64/ld-linux-x86-64.so.2 (0x00007faf7ffbb000) |
Omdat deze optie niet expliciet in ./configure --help werd meegegeven, heb 'k --enable-static=libdb-5.1 eens geprobeerd maar dit zorgde niet voor een ander resultaat:
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
| ldd servers/slapd/slapd linux-vdso.so.1 => (0x00007fff1cdff000) libldap_r-2.4.so.2 => /home/bart/Downloads/openldap-2.4.32/libraries/libldap_r/.libs/libldap_r-2.4.so.2 (0x00007f4291129000) liblber-2.4.so.2 => /home/bart/Downloads/openldap-2.4.32/libraries/liblber/.libs/liblber-2.4.so.2 (0x00007f4290f19000) libdb-5.1.so => /usr/lib/x86_64-linux-gnu/libdb-5.1.so (0x00007f4290b87000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f429096a000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f42905ac000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f4290390000) libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f4290134000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f428fd6b000) /lib64/ld-linux-x86-64.so.2 (0x00007f4291379000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f428fb67000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f428f94f000) |
3e probeersel:
expliciet compiler options meegeven:
env CPPFLAGS="-I/usr/include/nss" \ CFLAGS="-static -static-libgcc" ./configure
Verandert niets aan de zaak, opties worden niet meegenomen in de verschillende makefiles.
Uiteindelijk heb 'k dan de makefiles manueel veranderd; aan de CFLAGS -static en -static-libgcc toegevoegd maar uiteindelijk zei LDD mij nog steeds dat de slapd binary verschillende libraries dynamisch gelinked had.
Vraag 1
Ik weet dat static linked binaries niet de beste oplossing zijn maar het leek mij wel de eenvoudigste oplossing om niet met een DLL-hell (SO-hell) te zitten. Is er alsnog een makkelijke optie om een static linked binary te creeëren die zonder mokken draait op mijn NAS?
Vraag 2
De juiste oplossing zal wrs zijn om alle benodigde libraries zoals libssl, libdb-5.1 te compileren met de toolchain en aan de toolchain libraries toe te voegen. Vraag is hoe ik dat doe en hoe 'k dan uiteindelijk alles naar mijn NAS geïnstalleerd kan krijgen (op een werkbare manier). Er staat namelijk geen scp op (wel samba).