文章标签 ‘sqlite’

所谓简单,是因为ProFTPD的一些复杂功能都没有写进来,比如用户磁盘空间配额、上传下载速率限制等。
所谓轻量级,是因为配这个平台,是为了公司内部使用,用户有限。更复杂的配置,日后再说吧:)
网上的很多关于ProFTPD搭载数据库进行管理的文章,大多用的都是MySQL(搜baidu的结果)和PostgreSQL(搜google的结果),可是单单为了一个公司内部使用的这么一个小平台,使用这么两个重量级的数据库,是在有点杀鸡用牛刀的感觉。对于我的需求,Sqlite这个轻量级的嵌入式数据库,显然是最最合适的选择。在网上跑来跑去找了1个多小时,也没有一篇像样的配置文档,甚至连ProFTPD的官方doc里,提起sqlite也是只言片语。没办法,只有自己对着英文的Howto,自己摸索了。
1,Install Sqlite3 and ProFTPD
下载安装Sqlite3最新版:http://www.sqlite.org/
#tar -zxf sqlite-amalgamation-3.6.13.tar.gz
#cd sqlite-3.6.13/
#./configure
#make
#make install
下载安装ProFTPD最新版:http://www.proftpd.org/
ProFTPD对于数据库的支持,并不是通过linux的PAM方式来实现的
而是内置了模块,这点曾经让我走了很多弯路,TMD居然没有文章提及这点。使用sqlite模块:
#tar -zxf proftpd-1.3.2.tar.gz
#cd proftpd-1.3.2
#./configure –prefix=/usr/local/proftpd –with-modules=mod_sql:mod_sql_sqlite
#make
#make install
2,配置ProFTPD
编辑/usr/local/proftpd/etc/proftpd.conf文件,加入下面列出来的这一大坨参数。
这里只说说跟Sqlite3有关的参数,其他比较有用的参数配置说明,满世界都是。完整配置文件放在最后。
其实除了SQLBackend和SQLConnectInfo两个参数之外,剩下的一些参数在配置其他数据库时也会用到
我在配置这些数据库相关参数的时候,走了很多弯路,查了很多文档,记下来也给自己脑子备个份。
#首先来说这俩,定义proftpd以什么身份来运行,跟apache里的是一个意思
#我是习惯了apache定义为www用户和www组,配置proftpd也就这样了
#以什么身份运行,我个人感觉没啥特别意义,关键是虚拟用户对实体用户的映射!
User www
Group www
#sqlite2跟3差别较大,各软件平台对其支持也是分开来的,比如PHP
#这里就是指明,使用sqlite3
SQLBackend sqlite3
#数据库文件的绝对路径,一定要绝对
SQLConnectInfo /home/www/ftpd.db
#数据库内虚拟用户的密码认证方式
#我认为Backend的意思就是数据库自己的认证方式,比如mysql的password方案
#该方案可以指定多种,使用空格隔开,按照先后,依次try
#下面这句的意思就是“先用sqlite自己的认证方式(我用的明文,其他解决方案没研究)
#如果不行,再使用crypt(3)的方案”,实际配置文件里我只要了一个Backend
SQLAuthTypes [...]

2009年4月21日00:15 | 4 条评论
分类: 技术备案
标签: , , ,

今天在用pecl为PHP5编译安装sqlite模块的时候,遇到了下面这个错误而编译不过去
sqlite.c:56: error: ‘BYREF_NONE’ undeclared here (not in a function)
GOOGLE一番,原来这是个从2006年7月就存在的BUG。虽然官方在pecl.php.net的关于此bug的详情页里说已经修复了,但不止一个人在1年甚至2年后依然表示错误依旧~!看来老外干活也会偷懒啊,出了sqlite3的模块,老的sqlite模块就不维护了,哎~~
在那个页面里,也有人提供了自己修复此BUG的方法:
1,来到PHP安装目录内的bin目录下
cd /usr/local/php-5.2.3/bin
2,下载这个模块的源码
pecl download sqlite
3,解压并开始编译
$ tar zxvf SQLite-1.0.3.tgz
$ cd SQLite-1.0.3
$ ../phpize
$ ./configure –with-php-config=/usr/local/php-5.2.3/bin/php-config
$ make
4,在make的过程如报告以上错误则编辑sqlite.c文件,将下面这行注释掉
/* static unsigned char arg3_force_ref[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE }; */
然后将下面这三行
function_entry sqlite_functions[] = {
PHP_FE(sqlite_open, arg3_force_ref)
PHP_FE(sqlite_popen, arg3_force_ref)
改为:
function_entry sqlite_functions[] = {
PHP_FE(sqlite_open, third_arg_force_ref)
PHP_FE(sqlite_popen, third_arg_force_ref)
5,重新编译
$ make
$ make install
将编译生成的sqlite.so文件,复制到extension_dir指定的目录中,编辑php.ini文件,加入如下一行
extension=sqlite.so
重启web服务后即可

2008年10月13日05:43 | 没有评论
分类: 技术备案
标签: , ,