(Polski) freeradius-server-2.1.3

Sorry, this entry is only available in Polish. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Ogólnie rzecz biorąc można napisać, że freeradius-server-2.1.3, który ponoć jest najpopularniejszym serwerem RADIUS na świecie, nie jest zbyt dobrze przystosowany do kompilacji na systemie Solaris 10. Wprawdzie skrypt ‘configure’ niby sprawdza co trzeba i przechodzi bez większych boleści, to jednak na etapie kompilacji/linkowania pojawiają się problemy. Pierwszy który napotkałem, to taki, że Solarisowy ‘dmake’ (o standardowym /usr/ccs/bin/make nawet nie wspominam) tutaj nie zadziała, należy więc użyć GNU make (gmake). Następny problem się pojawia przy kompilacji modułu rlm_ldap służącego do uwierzytelniania/autoryzacji w katalogu LDAP. Nie wiedzieć czemu, nie bierze on pod uwagę flag wyższego poziomu i nie potrafi odnaleźć ścieżek do plików nagłówkowych i bibliotek LDAPa, co skutkuje błędami w stylu:

undefined symbol: LDAP_OPT_X_TLS_HARD
undefined symbol: LDAP_OPT_X_TLS

itd. Widać więc, że brakuje mu bibliotek z LDAPa. Jako, że u mnie są one w /usr/local/openldap/lib to oczywiście dopisałem je do LDFLAGS, oraz do opcji kompilacji:

        --with-rlm-ldap-includes="/usr/local/openldap/include" \
        --with-rlm-ldap-libraries="/usr/local/openldap/lib" \

ale jak zajrzymy do src/modules/rlm_ldap/Makefile to nie widać aby je tam dołożył.
Poszukiwanie w google zwróciło pewien wątek, gdzie problem jest ‘jakoś’ rozwiązany:
http://osdir.com/ml/freeradius.user/2003-02/msg00670.html
ale takie rozwiązanie mnie nie usatysfakcjonowało, postanowiłem więc zajrzeć do źródeł, a konkretnie do pliku src/modules/rlm_ldap/Makefile.in i spowodować aby moje flagi zostały dopisane do src/modules/rlm_ldap/Makefile na etapie konfiguracji. Jako że żadne studia informatyczne nie nauczyły mnie konstrukcji tych plików – nad czym ubolewam w takich momentach – to musiałem oprzeć się na intuicji i doświadczeniu i zmodyfikować plik po swojemu. Dopisałem więc zmienne $(CPPFLAGS) i $(LDFLAGS) do odpowiednich linii.
Zatem te linie w pliku src/modules/rlm_ldap/Makefile.in przed modyfikacją wyglądały tak:

TARGET     = @targetname@
SRCS       = rlm_ldap.c @edir@
HEADERS    =
RLM_CFLAGS = @ldap_cflags@
RLM_LIBS   = @ldap_ldflags@

po modyfikacji:

TARGET     = @targetname@
SRCS       = rlm_ldap.c @edir@
HEADERS    =
RLM_CFLAGS = $(CPPFLAGS) @ldap_cflags@
RLM_LIBS   = $(LDFLAGS) @ldap_ldflags@

Pewnie można to zrobić lepiej i sprytniej, ale generalnie takie rozwiązanie działa i jest satysfakcjonujące, bo można łatwo wytworzyć patcha na przyszłość (patrz załącznik).

Ale to jeszcze nie koniec przygód z kompilacją serwera FreeRADIUS. Następny problem pojawił się przy libtoolu, gdyż ten ze źródeł freeradiusa wcale nie chce działać, a mój systemowy nie potrafił sobie znaleźć wszystkich potrzebnych plików nagłówkowych. Sprawę rozwiązało dodanie opcji “-I/usr/local/include” do CFLAGS (zwykle dodaję tylko do CPPFLAGS).

No i już ostatnia przeszkoda, którą napotkałem to niezdefiniowany symbol SUN_LEN, błąd wyglądał mniej więcej tak:

Undefined                       first referenced
 symbol                             in file
SUN_LEN                             .libs/listen.o

ale i na to znalazłem remedium wykorzystując m.in. google:
http://lists.cistron.nl/pipermail/freeradius-users/2008-December/msg00350.html
zgodnie z zaleceniem zdefiniowałem więc w pliku src/include/radiusd.h

#define SUN_LEN(su)  (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))

i przekompilowałem jeszcze raz, tym razem już bez błędów. Zachowałem więc moją poprawioną wersję źródeł, rozpakowałem ponownie oryginalne źródła i wytworzyłem diffa, który jest w załączniku. Aby go nałożyć trzeba być w katalogu nadrzędnym dla źródeł freeradiusa i użyć polecenia:
$ patch -u -p0 < freeradius-server-2.1.3-s10-patch-by-drfugazi.diff
Na przykład:

user@server:/src/freeradius $ ls -1
freeradius-server-2.1.3
freeradius-server-2.1.3-s10-patch-by-drfugazi.diff
user@server:/src/freeradius $ patch -u -p0 < freeradius-server-2.1.3-s10-patch-by-drfugazi.diff

Oczywiście polecam użycie GNU patch (gpatch) i najpierw sprawdzenie co zrobi na sucho, czyli dołożyć opcje: --dry-run --verbose.
Dołączam również skrypt, którego użyłem do kompilacji serwera freeradius (drf_freeradius-2.1.3_conf).
Powodzenia !

You may also like...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.