Hello, I have problems trying to enable ICU support in Zebra under Koha 3. After enabling ICU support in Zebra and reindex Koha, all Koha search will return nothing. However, if I change Zebra to listen to TCP port and query it directly using SRU, it will give the correct results. I try to change many things without any success.
I'm running Koha 3.0.1 on Ubuntu 8.04, Zebra is at version 2.0.36 from Index Data APT repository. ICU is enabled by adding "index: icu.idx" line to Koha-Zebra's .cfg (zebra-biblios.cfg, etc). Default word and phrase index setting in icu.idx is used. Other missing index types (u, n, 0, y, d) are added to icu.idx by copying from default.idx. Some files are copied to /etc/koha/zebradb/etc in order to make ICU indexing works. With icuchain option (the default one), searhing in Koha won't work. However, if I remove icuchain option searching will partially work (whole phrase exact search only). At first I though there is a problem with icuchain rule, but I test it with yaz-icu and it give the correct results. I also try patching Zebra ( http://lists.indexdata.dk/pipermail/zebralist/2009-March/002134.html), but it doesn't help either. What's strange is that if I put Zebra on TCP port and query it directly, e.g. " http://localhost:9999/biblios?version=1.1&operation=searchRetrieve&query=school&startRecord=1&maximumRecords=1", I get the expected answer (while there are no answer in Koha). So, could anybody please give me some suggestions? Thank you very much in advance! Pongtawat C. (pongtawat....@gmail.com) ==== Log file when searching in Koha ==== ... 14:54:35-27/04 zebrasrv(2) [debug] server select: config=/etc/koha/zebradb/zebra-biblios.cfg 14:54:35-27/04 zebrasrv(2) [debug] bend_init 14:54:35-27/04 zebrasrv(2) [debug] zebra_open zs=0x80756e8 returns 0x807aab0 14:54:35-27/04 zebrasrv(2) [debug] Sort handler installed 14:54:35-27/04 zebrasrv(2) [debug] Search handler installed 14:54:35-27/04 zebrasrv(2) [debug] ESRequest handler installed 14:54:35-27/04 zebrasrv(2) [debug] Delete handler installed 14:54:35-27/04 zebrasrv(2) [debug] Scan handler installed 14:54:35-27/04 zebrasrv(2) [debug] Segment handler installed 14:54:35-27/04 zebrasrv(2) [debug] result immediately available 14:54:35-27/04 zebrasrv(2) [debug] ir_session (output) 14:54:35-27/04 zebrasrv(2) [debug] Wrote PDU, 114 bytes 14:54:35-27/04 zebrasrv(2) [debug] ir_session (input) 14:54:35-27/04 zebrasrv(2) [debug] Got PDU, 447 bytes: lead=B6 80 8D 14:54:35-27/04 zebrasrv(2) [debug] ResultSet '1' 14:54:35-27/04 zebrasrv(2) [debug] zebra_register_open rw=0 useshadow=0 p=0x810fb28 n= rp=(none) 14:54:35-27/04 zebrasrv(2) [debug] mf_init(register) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort100 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort96 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort58 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort40 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort30 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: isambD consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: gmatch consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: reci consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: dict consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: isambA consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort50 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort26 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort92 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: isambB consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: isambC consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: recdB consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort36 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort63 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort44 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: sort85 consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] mf_init: recdA consists of 1 part(s) 14:54:35-27/04 zebrasrv(2) [debug] Using default resource recordCompression:none 14:54:35-27/04 zebrasrv(2) [debug] mf_open(reci bs=128, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] mf_open(recdA bs=128, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] mf_open(recdB bs=512, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] mf_open(dict bs=4096, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] Using default resource isamcDebug:0 14:54:35-27/04 zebrasrv(2) [debug] mf_open(isambA bs=32, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] mf_open(isambB bs=128, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] mf_open(isambC bs=512, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] mf_open(isambD bs=2048, RDONLY) 14:54:35-27/04 zebrasrv(2) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=explain.abs mode=r 14:54:35-27/04 zebrasrv(2) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=explain.att mode=r 14:54:35-27/04 zebrasrv(2) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=explain.tag mode=r 14:54:35-27/04 zebrasrv(2) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=tagsetm.tag mode=r 14:54:35-27/04 zebrasrv(2) [debug] Using default resource notimestamps:0 14:54:35-27/04 zebrasrv(2) [debug] read runnumber=10 14:54:35-27/04 zebrasrv(2) [debug] zebra_register_open ok p=0x810fb28 14:54:35-27/04 zebrasrv(2) [debug] Using default resource sortmax:1000 14:54:35-27/04 zebrasrv(2) [debug] rpn_search_APT 14:54:35-27/04 zebrasrv(2) [debug] index_type=p 14:54:35-27/04 zebrasrv(2) [debug] complete_flag=1 14:54:35-27/04 zebrasrv(2) [debug] search_type=phrase 14:54:35-27/04 zebrasrv(2) [debug] rank_type=rank,w=32,u=36 14:54:35-27/04 zebrasrv(2) [log] input school 14:54:35-27/04 zebrasrv(2) [debug] Using default resource truncmax:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=bib1.att mode=r 14:54:35-27/04 zebrasrv(2) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=gils.att mode=r 14:54:35-27/04 zebrasrv(2) [log] output M-7EE?\x01\x0A\x01\x0A 14:54:35-27/04 zebrasrv(2) [log] dict_lookup_grep: (\x01()M-7EE\?\x01\x01\x01\x0A\x01\x01\x01\x0A 14:54:35-27/04 zebrasrv(2) [debug] dict_lookup_grep range=0 14:54:35-27/04 zebrasrv(2) [debug] 0 40 ( 14:54:35-27/04 zebrasrv(2) [debug] 1 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 2 40 ( 14:54:35-27/04 zebrasrv(2) [debug] 3 41 ) 14:54:35-27/04 zebrasrv(2) [debug] 4 77 M 14:54:35-27/04 zebrasrv(2) [debug] 5 45 - 14:54:35-27/04 zebrasrv(2) [debug] 6 55 7 14:54:35-27/04 zebrasrv(2) [debug] 7 69 E 14:54:35-27/04 zebrasrv(2) [debug] 8 69 E 14:54:35-27/04 zebrasrv(2) [debug] 9 92 \ 14:54:35-27/04 zebrasrv(2) [debug] 10 63 ? 14:54:35-27/04 zebrasrv(2) [debug] 11 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 12 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 13 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 14 10 ? 14:54:35-27/04 zebrasrv(2) [debug] 15 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 16 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 17 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 18 10 ? 14:54:35-27/04 zebrasrv(2) [debug] max_pos = 1 14:54:35-27/04 zebrasrv(2) [debug] 0 positions 14:54:35-27/04 zebrasrv(2) [debug] Using default resource trunclimit:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [debug] rpn_search_APT 14:54:35-27/04 zebrasrv(2) [debug] index_type=p 14:54:35-27/04 zebrasrv(2) [debug] complete_flag=1 14:54:35-27/04 zebrasrv(2) [debug] search_type=phrase 14:54:35-27/04 zebrasrv(2) [debug] rank_type=rank,w=28,u=4 14:54:35-27/04 zebrasrv(2) [log] input school 14:54:35-27/04 zebrasrv(2) [debug] Using default resource truncmax:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [log] output M-7EE?\x01\x0A\x01\x0A 14:54:35-27/04 zebrasrv(2) [log] dict_lookup_grep: (\x01,)M-7EE\?\x01\x01\x01\x0A\x01\x01\x01\x0A 14:54:35-27/04 zebrasrv(2) [debug] dict_lookup_grep range=0 14:54:35-27/04 zebrasrv(2) [debug] 0 40 ( 14:54:35-27/04 zebrasrv(2) [debug] 1 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 2 44 , 14:54:35-27/04 zebrasrv(2) [debug] 3 41 ) 14:54:35-27/04 zebrasrv(2) [debug] 4 77 M 14:54:35-27/04 zebrasrv(2) [debug] 5 45 - 14:54:35-27/04 zebrasrv(2) [debug] 6 55 7 14:54:35-27/04 zebrasrv(2) [debug] 7 69 E 14:54:35-27/04 zebrasrv(2) [debug] 8 69 E 14:54:35-27/04 zebrasrv(2) [debug] 9 92 \ 14:54:35-27/04 zebrasrv(2) [debug] 10 63 ? 14:54:35-27/04 zebrasrv(2) [debug] 11 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 12 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 13 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 14 10 ? 14:54:35-27/04 zebrasrv(2) [debug] 15 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 16 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 17 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 18 10 ? 14:54:35-27/04 zebrasrv(2) [debug] max_pos = 1 14:54:35-27/04 zebrasrv(2) [debug] 0 positions 14:54:35-27/04 zebrasrv(2) [debug] Using default resource trunclimit:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [debug] rpn_search_APT 14:54:35-27/04 zebrasrv(2) [debug] index_type=w 14:54:35-27/04 zebrasrv(2) [debug] complete_flag=0 14:54:35-27/04 zebrasrv(2) [debug] search_type=phrase 14:54:35-27/04 zebrasrv(2) [debug] rank_type=rank,w=26,u=4 14:54:35-27/04 zebrasrv(2) [log] input school 14:54:35-27/04 zebrasrv(2) [debug] Using default resource truncmax:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [log] output M-7EE?\x01\x0A\x01\x0A 14:54:35-27/04 zebrasrv(2) [log] dict_lookup_grep: (\x01*)M-7EE\?\x01\x01\x01\x0A\x01\x01\x01\x0A 14:54:35-27/04 zebrasrv(2) [debug] dict_lookup_grep range=0 14:54:35-27/04 zebrasrv(2) [debug] 0 40 ( 14:54:35-27/04 zebrasrv(2) [debug] 1 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 2 42 * 14:54:35-27/04 zebrasrv(2) [debug] 3 41 ) 14:54:35-27/04 zebrasrv(2) [debug] 4 77 M 14:54:35-27/04 zebrasrv(2) [debug] 5 45 - 14:54:35-27/04 zebrasrv(2) [debug] 6 55 7 14:54:35-27/04 zebrasrv(2) [debug] 7 69 E 14:54:35-27/04 zebrasrv(2) [debug] 8 69 E 14:54:35-27/04 zebrasrv(2) [debug] 9 92 \ 14:54:35-27/04 zebrasrv(2) [debug] 10 63 ? 14:54:35-27/04 zebrasrv(2) [debug] 11 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 12 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 13 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 14 10 ? 14:54:35-27/04 zebrasrv(2) [debug] 15 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 16 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 17 1 ? 14:54:35-27/04 zebrasrv(2) [debug] 18 10 ? 14:54:35-27/04 zebrasrv(2) [debug] max_pos = 1 14:54:35-27/04 zebrasrv(2) [debug] 0 positions 14:54:35-27/04 zebrasrv(2) [debug] Using default resource trunclimit:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [debug] rpn_search_APT 14:54:35-27/04 zebrasrv(2) [debug] index_type=w 14:54:35-27/04 zebrasrv(2) [debug] complete_flag=0 14:54:35-27/04 zebrasrv(2) [debug] search_type=and-list 14:54:35-27/04 zebrasrv(2) [debug] rank_type=rank,w=16,u=-1 14:54:35-27/04 zebrasrv(2) [log] input school 14:54:35-27/04 zebrasrv(2) [debug] Using default resource truncmax:10000 14:54:35-27/04 zebrasrv(2) [debug] term_limits_APT ref_id=none limit=0 14:54:35-27/04 zebrasrv(2) [debug] result immediately available 14:54:35-27/04 zebrasrv(2) [debug] ir_session (output) 14:54:35-27/04 zebrasrv(2) [debug] Wrote PDU, 38 bytes 14:54:35-27/04 zebrasrv(2) [debug] ir_session (input) 14:54:35-27/04 zebrasrv(2) [debug] ir_session (input) 14:54:35-27/04 zebrasrv(2) [debug] zebra_close zh=0x807aab0 14:54:35-27/04 zebrasrv(2) [debug] zebra_register_close p=0x810fb28 14:54:35-27/04 zebrasrv(2) [debug] mf_close(dict) 14:54:35-27/04 zebrasrv(2) [debug] isamb_close returned 0 values, skipped 0 14:54:35-27/04 zebrasrv(2) [debug] mf_close(isambA) 14:54:35-27/04 zebrasrv(2) [debug] mf_close(isambB) 14:54:35-27/04 zebrasrv(2) [debug] mf_close(isambC) 14:54:35-27/04 zebrasrv(2) [debug] mf_close(isambD) 14:54:35-27/04 zebrasrv(2) [debug] mf_close(reci) 14:54:35-27/04 zebrasrv(2) [debug] mf_close(recdA) 14:54:35-27/04 zebrasrv(2) [debug] mf_close(recdB) ==== Log file when searching with Zebra directly ==== 14:59:39-27/04 zebrasrv(1) [debug] server select: config=/etc/koha/zebradb/zebra-biblios.cfg 14:59:39-27/04 zebrasrv(1) [debug] yaz_srw_decode returned 2 14:59:39-27/04 zebrasrv(1) [debug] yaz_sru_decode returned 0 14:59:39-27/04 zebrasrv(1) [debug] ResultSet 'default' 14:59:39-27/04 zebrasrv(1) [debug] rpn_search_APT 14:59:39-27/04 zebrasrv(1) [debug] index_type=w 14:59:39-27/04 zebrasrv(1) [debug] complete_flag=0 14:59:39-27/04 zebrasrv(1) [debug] search_type=phrase 14:59:39-27/04 zebrasrv(1) [debug] rank_type=void 14:59:39-27/04 zebrasrv(1) [log] input school 14:59:39-27/04 zebrasrv(1) [debug] Using default resource truncmax:10000 14:59:39-27/04 zebrasrv(1) [debug] term_limits_APT ref_id=none limit=0 14:59:39-27/04 zebrasrv(1) [log] output M-7EE?\x01\x0A\x01\x0A 14:59:39-27/04 zebrasrv(1) [log] dict_lookup_grep: (\x01\x0D)M-7EE\?\x01\x01\x01\x0A\x01\x01\x01\x0A 14:59:39-27/04 zebrasrv(1) [debug] dict_lookup_grep range=0 14:59:39-27/04 zebrasrv(1) [debug] 0 40 ( 14:59:39-27/04 zebrasrv(1) [debug] 1 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 2 13 ? 14:59:39-27/04 zebrasrv(1) [debug] 3 41 ) 14:59:39-27/04 zebrasrv(1) [debug] 4 77 M 14:59:39-27/04 zebrasrv(1) [debug] 5 45 - 14:59:39-27/04 zebrasrv(1) [debug] 6 55 7 14:59:39-27/04 zebrasrv(1) [debug] 7 69 E 14:59:39-27/04 zebrasrv(1) [debug] 8 69 E 14:59:39-27/04 zebrasrv(1) [debug] 9 92 \ 14:59:39-27/04 zebrasrv(1) [debug] 10 63 ? 14:59:39-27/04 zebrasrv(1) [debug] 11 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 12 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 13 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 14 10 ? 14:59:39-27/04 zebrasrv(1) [debug] 15 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 16 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 17 1 ? 14:59:39-27/04 zebrasrv(1) [debug] 18 10 ? 14:59:39-27/04 zebrasrv(1) [debug] max_pos = 11 14:59:39-27/04 zebrasrv(1) [debug] 1 positions 14:59:39-27/04 zebrasrv(1) [debug] Using default resource trunclimit:10000 14:59:39-27/04 zebrasrv(1) [debug] term_limits_APT ref_id=none limit=0 14:59:39-27/04 zebrasrv(1) [debug] isamb_pp_close lev=0 returned 0 values, skipped 0 14:59:39-27/04 zebrasrv(1) [debug] isamb_pp_close lev=0 returned 0 values, skipped 246 14:59:39-27/04 zebrasrv(1) [debug] srw_bend_fetch 1 14:59:39-27/04 zebrasrv(1) [debug] retrieve localno=256 score=-1 14:59:39-27/04 zebrasrv(1) [debug] grs_retrieve 14:59:39-27/04 zebrasrv(1) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=record.abs mode=r 14:59:39-27/04 zebrasrv(1) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=bib1.att mode=r 14:59:39-27/04 zebrasrv(1) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=gils.att mode=r 14:59:39-27/04 zebrasrv(1) [debug] data1_fath_fopen path=/etc/koha/zebradb/biblios/etc:/etc/koha/zebradb/etc:/etc/koha/zebradb/marc_defs/marc21/biblios:/etc/koha/zebradb/lang_defs/en root=NULL file=usmarc.mar mode=r 14:59:39-27/04 zebrasrv(1) [debug] Got regexp: [...@]*/leader/record/$ 14:59:39-27/04 zebrasrv(1) [debug] Created xpath: '/*/controlfie...@tag="001"]' [.. lots of lines like above 2 ..] 14:59:39-27/04 zebrasrv(1) [debug] Created xpath: '/*/datafie...@tag="952"]/subfie...@code="y"]' 14:59:39-27/04 zebrasrv(1) [debug] Got regexp: [...@]*/subfield/datafield/.*/$ 14:59:39-27/04 zebrasrv(1) [debug] grs_retrieve: size 14:59:39-27/04 zebrasrv(1) [debug] grs_retrieve: syntax mapping 14:59:39-27/04 zebrasrv(1) [debug] grs_retrieve: schemaIdentifier 14:59:39-27/04 zebrasrv(1) [debug] grs_retrieve: element spec 14:59:39-27/04 zebrasrv(1) [debug] Esetname 'F' in simple compspec 14:59:39-27/04 zebrasrv(1) [debug] Element: all match 14:59:39-27/04 zebrasrv(1) [debug] grs_retrieve: transfer syntax mapping 14:59:39-27/04 zebrasrv(1) [debug] ir_session (output) 14:59:39-27/04 zebrasrv(1) [debug] Wrote PDU, 1757 bytes
_______________________________________________ Koha-devel mailing list Koha-devel@lists.koha.org http://lists.koha.org/mailman/listinfo/koha-devel