citadel提供了很多的子模块,其功能很全,子模块也很多。编译这方面,由于先前的ubuntu下安装了,所以最开始编译是根据ubuntu的配置来编译的。
模块
有一些应该是默认的模块,比如说netconfig模块,必须得在最后才加载的。而citserver control modules euidindex file_ops msgbase room_ops user_ops nttlist database等这些模块应该是citadel的基础模块了。还有一些就是动态的模块,基本上有一大半都是属于动态的模块。这些模块是通过shell脚本查找出来的模块。所以编译的时候,如果你有更新了模块中的文件,那么就需要执行下
./scripts/mk_module_init.sh
这样,你添加或删除的文件,才会被更新,该脚本主要是用于生成Make_modules,Make_sources,modules_init.c,modules_init.h,modules_upgrade.c这几个文件的。
8.24版本的模块列表如下:
| 模块 | 源码 | 备注 |
|---|---|---|
| citserver | citserver.c | |
| control | control.c | |
| modules | serv_extensions.c | |
| euidindex | euidindex.c | |
| file_ops | file_ops.c | |
| msgbase | msgbase.c | |
| room_ops | room_ops.c | |
| user_ops | user_ops.c | |
| nttlist | nttlist.c | |
| database | database.c | |
| autocompletion | serv_autocompletion.c | |
| bio | serv_bio.c | |
| blog | serv_blog.c | |
| c_ares_client | serv_c-ares-dns.c | c-ares |
| calendar | serv_calendar.c | |
| checkpoint | serv_checkpoint.c | |
| virus | serv_virus.c | |
| dspam | serv_dspam.c | |
| event_client | serv_eventclient.c | |
| expire | serv_expire.c | |
| extnotify | extnotify_main.c | |
| fulltext | serv_fulltext.c | |
| imap | serv_imap.c | |
| inetcfg | serv_inetcfg.c | |
| instmsg | serv_instmsg.c | |
| listsub | serv_listsub.c | |
| managesieve | serv_managesieve.c | |
| migrate | serv_migrate.c | |
| mrtg | serv_mrtg.c | |
| netfilter | serv_netfilter.c | |
| network_spool | serv_netspool.c | |
| network | serv_network.c | |
| network_client | serv_networkclient.c | networkclient |
| newuser | serv_newuser.c | |
| notes | serv_notes.c | |
| openid_rp | serv_openid_rp.c | |
| pop3 | serv_pop3.c | |
| pop3client | serv_pop3client.c | |
| roomchat | serv_roomchat.c | |
| rssparser | rss_atom_parser.c | |
| rssclient | serv_rssclient.c | |
| rwho | serv_rwho.c | |
| sieve | serv_sieve.c | |
| smtp | serv_smtp.c | |
| smtp_eventclient | serv_smtpeventclient.c | smtpeventclient |
| smtp_queu | serv_smtpqueue.c | smtpeventclient,应该是代码上有错误 |
| spam | serv_spam.c | |
| test | serv_test.c | |
| urldeshortener | serv_expand_shorter_urls.c | UrlShortener |
| vcard | serv_vcard.c | |
| wiki | serv_wiki.c | |
| xmpp | serv_xmpp.c | |
| netconfig | netconfig.c |
编译
上文说了,最初是根据ubuntu的配置来编译的,ubuntu的配置又是如何?其实ubuntu是自带命令编译的。可以通过apt-get source下载源码,或者直接使用apt-build进行下载源码编译,我是比较喜欢apt-get的方式,因为可以在随意一个目录下进行编译,虽然可能步骤比较多一些。其实apt-build也可以配置编译的目录就是了。
首先安装编译所需的deb包,执行下面的命令:
sudo apt-get build-dep citadel
这样就会把编译citadel所需的所有依赖库,头文件都给安装上去了。接下来,就是需要下载源码及编译了。
apt-get source citadel-server # 下载源码 cd citadel-8.24/ dpkg-buildpackage # 编译安装包
也就是最后是通过dpkg-buildpackage来编译的,编译的话,主要还是注重过程吧,虽然我们要的是结果,但是编译log还是很重要的。这里的话,主要是要看看其是如何配置参数的,虽然大部分可能都是直接运行./configure就可以了。但是很经常额外的参数,是很重要的。这里主要是打算自编译的配置能够与ubuntu二进制包的配置是一样的。所以就是要拷贝下./configure的参数了。
make[1]: 正在进入目录 `/tmp/citadel-8.24'
dh_testdir
CFLAGS="`dpkg-buildflags --get CFLAGS` -Wall -O2" CPPFLAGS="`dpkg-buildflags --get CPPFLAGS`" LDFLAGS="`dpkg-buildflags --get LDFLAGS`" ./configure \
--prefix=/var/lib/citadel \
--with-datadir=/var/lib/citadel \
--with-helpdir=/usr/share/citadel-server \
--with-staticdatadir=/etc/citadel \
--with-spooldir=/var/spool/citadel \
--with-sysconfdir=/etc/citadel \
--with-rundir=/var/run/citadel \
--with-docdir=/usr/share/doc/citadel-doc/ \
--with-ssldir=/etc/ssl/citadel/ \
--with-utility-bindir=/usr/lib/citadel-server/ \
--with-autosysconfdir=/var/lib/citadel/data/ \
--with-pam \
--with-db \
--with-zlib \
--with-ldap \
--with-libical \
--with-libsieve \
--enable-debug
看到这里,就知道了吧,其默认是有开启debug的,并且一些安装的目录,比如简单的说,pid文件保存在/var/run/citadel目录中了,配置文件在/etc/citadel中,ssl文件目录在哪等。所以log对于一些配置文件的查找,还是很重要的。编译完,会生成对应的deb的包,但是不会安装到系统中去,这点也是我喜欢的地方,有时候,我们要自己修改调试的话,用某个目录就行了,并不要去影响系统的配置不是?
之后,可以编译了,又有源码了,那么就可以修改其中的代码,阅读代码有不懂的,也可以加加log打印之类的了。
初步的编译,及模块列表,只是作为方便自己查阅的吧。现在还是并没有做怎么样的深入,毕竟我主要只是为了学习其中的XMPP模块,之后将会以XMPP模块为主的学习笔记了。
转载请注明: 转载自elkPi.com
本文链接地址: citadel学习笔记3——模块列表及编译