Lighttpd (3. део) – Напредније конфигурисање Lighttpd сервера (програмирање плугина)

Аутор: Владимир Цицовић

У овом дијелу ћемо направити наш први plugin за lighttpd сервер. Програмирање plugin-а тражи доста више посвећености него што ћемо понудити у овом чланку, али читаоцима дајемо могућност да крену од овог чланка као основе. Од читаоца се очекује да познаје језик C, компајлирање на Linux-у и основе конфигурисања Lighttpd-a. Претпоставићемо да читаоци имају Debian или Ubuntu (систем под virtual box-ом је идеално решење). Команде прије него кренемо са програмирањем plugin-а су сљедеће:

apt-get install libtool automake pkg-config libbz2-dev libpcre3-dev zlib1g-dev make -y

Послије инсталације библиотека преузећемо sources lighttpd-а:

wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.32.tar.gz

Па распакујемо sources:

tar -xf  lighttpd-1.4.32.tar.gz

Рутинска провјера да ли је sources могуће искомпајлирати:

cd lighttpd-1.4.32 ; ./configure ; make

Ако послије овог конфигурисања и компајлирања не буде проблема, значи да имамо sources који можемо да поставимо на наш оперативни систем.

Сљедећи корак биће копирање skeleton-а који ће послужити као база за наш plugin. Претпоставка је да се налазимо у фасцикли lighttpd-1.4.32.

cd src ; cp mod_skeleton.c mod_hello.c

Замјенићемо „mod_skeleton” унутар датотеке „mod_hello.c” са:

sed -i 's/mod_skeleton/mod_hello/g' mod_hello.c

Сада ћемо отворити нашим омиљеним едитором (pico, vi…):

pico mod_hello.c

Идемо до функције:

URIHANDLER_FUNC(mod_hello_uri_handler) {
...
}

Унутар ове функције постоје линије кôда које бришемо тако да остане само:

URIHANDLER_FUNC(mod_hello_uri_handler) {

}

Сада између заграда додамо:

 
  plugin_data *p = p_d; 
  char *hello ="hello";
  buffer *l;
  UNUSED(srv);
  if (con->mode != DIRECT) return HANDLER_GO_ON;
  if (con->uri.path->used == 0) return HANDLER_GO_ON;
  mod_hello_patch_connection(srv, con, p);
  
  if ( strstr(con->uri.path->ptr,hello) == 0) return HANDLER_GO_ON; //Ако hello није у путањи предај извршавање другом модулу
  
  //Сређујемо Header за наш одговор
  response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type")CONST_STR_LEN("text/plain"));
  //узимамо buffer као показивач како бисмо извршили додавање нашег string-а
  l = chunkqueue_get_append_buffer(con->write_queue);
  //овде додајемо са API-јем наш показивач на string hello
  buffer_append_string_len(l, CONST_STR_LEN(hello));   
  //Обавијештавамо сервер да је пренос свих датотека завршен
  con->file_finished = 1;
  
  //Наш модул шаље да је завршена обрада и да може послати клијенту
  return HANDLER_FINISHED; 

У датотеци lighttpd-1.4.32/src/Makefile.am додамо сљедеће линије (негдје гдје је прикладно):

 lib_LTLIBRARIES += mod_hello.la
 mod_hello_la_SOURCES = mod_hello.c
 mod_hello_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
 mod_hello_la_LIBADD = $(common_libadd)

Сада покренемо низ команди како бисмо искомпајлирали lighttpd sources (у фасцикли /lighttpd-1.4.32):

 make clean
 ./autogen.sh
 ./configure
 make
 make install

У конфигурацијској датотеци за lighttpd:

server.modules = (
      "mod_access",
      "mod_alias",
      "mod_compress",
      "mod_redirect",
      #Naš modul hello
      "mod_hello",
)
server.document-root        = "/var/www"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80
index-file.names            = ( "index.php", "index.html", "index.lighttpd.html" )
compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" )
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Да бисмо тестирали наш модул, искомпајлирану датотеку /lighttpd-1.4.32/src/lighttpd покрећемо са:

lighttpd -f lighttpd.conf

Тестирамо са:

curl http://127.0.0.1/hello

Гдје је враћени резултат:

hello

Са овим чланком смо завршили серију о Lighttpd-у. Препоручујемо читаоцима да прегледају модуле који већ постоје, како би можда направили један који би могао да се дода у lighttpd.

Претходни део

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *

Time limit is exhausted. Please reload CAPTCHA.