LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1405|回复: 7

使用自己的ebuild,并解决PHP启用PDO[mysql,sqlite]

[复制链接]
发表于 2010-9-17 18:05:27 | 显示全部楼层 |阅读模式
最近使用Gentoo,发现有很多值得玩味的地方。将我的使用心得写出来供大家分享,这篇文章就是介绍如何根据自己的需要来修改ebuild,从而让系统使用自己的ebuild。
参考文档:
http://www.gentoo.org/proj/en/overlays/userguide.xml
http://www.gentoo.org/doc/zh_cn/ ... l?part=3&chap=5
http://hi.baidu.com/%D0%A1%CF%EF ... bfcf1f6d22ebbe.html

由于我安装PHP的时候disable了PDO,而我需要启用php的pdo功能,从为我探索ebuild冰山一角的开始。
<!--more-->
第一步: 建立相关目录并设置make.conf文件
设置自己的文件ebuild文件放置的目录:
[php]
mkdir -p /usr/local/portage
#修改 /etc/make.conf,添加如下行:
PORTDIR_OVERLAY="/usr/local/portage"
[/php]
第二步 : 复制/usr/portage/dev-lang/php到 /usr/local/portage 目录
[php]
mkdir /usr/local/portage/dev-lang
cp -pR /usr/portage/dev-lang/php /usr/local/portage/dev-lang
[/php]
第三步 : 修改相关文件
/usr/local/portage/dev-lang/php/files/eblits/src_configure-v52.eblit
注释下面的两行
[php]
phpconfutils_extension_with "pdo-sqlite" "sqlite"   1 "/usr"
phpconfutils_extension_with   "sqlite"      "sqlite"  0 "/usr"

[/php]
/usr/local/portage/dev-lang/php/php-5.2.14.ebuild
将行
[php]
sqlite? ( =dev-db/sqlite-2* pdo? ( =dev-db/sqlite-3* ) )
[/php]
修改为:
[php]
sqlite? ( =dev-db/sqlite-3* pdo? ( =dev-db/sqlite-3* ) )
[/php]
第四步 : 更新 /usr/local/portage/dev-lang/php/Manifest 文件。[因为修改了文件和文件的各种校验和都不在正确]
[php]
ebuild /usr/local/portage/dev-lang/php/php-5.2.14.ebuild digest
[/php]
第五步 : 修改USE并安装emerge安装php
在文件 /etc/portage/package.use 添加下面行
[php]
=dev-lang/php-5* -* cli cgi apache2 ctype fastbuild force-cgi-redirect ftp gd hash iconv ipv6 memlimit mysql nls pcre pic posix pdo reflection session simplexml soap sockets spl ssl tokenizer truetype xml xmlreader xmlwriter xsl zlib unicode ldap bzip2 berkdb bcmath gettext mbstring mcrypt mhash freetype mysqli zip exif cjk sqlite
[/php]
执行安装
[php]
PORTDIR_OVERLAY="/usr/local/portage" emerge -av php
[/php]
第六步 : 验证PHP是否包含了pdo(mysql,sqlite)
添加文件: /var/www/localhost/htdocs/info.php
包含下面内容:
[php]
<?php
phpinfo();
[/php]
然后查看页面是否存在下面的文字:
[php]
pdo_mysql
[/php]
[php]
pdo_sqlite
[/php]
注意:
如果出现下面的错误表示没有执行第4步:
[php]
PORTDIR_OVERLAY="/usr/local/portage" emerge -av php

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-lang/php-5.2.14  USE="apache2 berkdb bzip2 cli crypt ctype filter gd gdbm hash iconv ipv6 json ldap mysql ncurses nls pcre posix readline reflection session simplexml snmp spl ssl tokenizer truetype unicode xml xmlreader xmlwriter zlib -adabas -bcmath -birdstep -calendar -cdb -cgi -cjk -concurrentmodphp -curl -curlwrappers -db2 -dbase -dbmaker -debug -discard-path -doc -embed -empress -empress-bcs -esoob -exif -fdftk -firebird -flatfile -force-cgi-redirect -frontbase -ftp -gd-external -gmp -imap -inifile -interbase -iodbc -kerberos -kolab -ldap-sasl -libedit -mcve -mhash -msql -mssql -mysqli -oci8 -oci8-instant-client -odbc -pcntl -pdo -pic -postgres -qdbm -recode -sapdb -sharedext -sharedmem -soap -sockets -solid -spell -sqlite -suhosin -sybase-ct -sysvipc -threads -tidy -wddx -xmlrpc -xpm -xsl -yaz -zip" 0 kB [1]                                                                                                

Total: 1 package (1 new), Size of downloads: 0 kB
Portage tree and overlays:
[0] /usr/portage
[1] /usr/local/portage

Would you like to merge these packages? [Yes/No] Yes

>>> Verifying ebuild manifests

!!! Digest verification failed:
!!! /usr/local/portage/dev-lang/php/files/eblits/src_configure-v52.eblit
!!! Reason: Filesize does not match recorded size
!!! Got: 10887
!!! Expected: 10888
[/php]
发表于 2010-9-17 20:20:06 | 显示全部楼层
一直以来都没自己改过ebuild,学习了。
回复 支持 反对

使用道具 举报

发表于 2010-9-17 23:01:42 | 显示全部楼层
支持楼主。
只不过没看出有啥作用,portage中的php不是有pdo的USE吗,直接启用再emerge就完了不是。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-19 08:53:37 | 显示全部楼层
我直接使用PDO的USE不起作用,而且你编译就知道了PDO不包含sqlite 3 的部分,这样的话会包含PDO的sqlite 3的部分。
同时也只是以PHP来举例说明如何使用自己的ebuild而已。
回复 支持 反对

使用道具 举报

发表于 2010-9-19 09:06:14 | 显示全部楼层
USE里就有个sqlite3啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-20 15:12:59 | 显示全部楼层
谢谢提醒。试试看使用sqlite3会不会将sqlite3便以为PDO支持.
回复 支持 反对

使用道具 举报

发表于 2010-9-22 18:19:11 | 显示全部楼层
还是USE方便,我用Firebird数据库,直接USE里加上就行,都没不用选PDO
回复 支持 反对

使用道具 举报

发表于 2010-9-23 14:25:39 | 显示全部楼层
Post by hongfeng;2112883
我直接使用PDO的USE不起作用,而且你编译就知道了PDO不包含sqlite 3 的部分,这样的话会包含PDO的sqlite 3的部分。
同时也只是以PHP来举例说明如何使用自己的ebuild而已。


不好意思,个人以为只有在十分无奈的情况下才需要自己调整USE修改ebuild,同时也必须深入理解所基于的ebuild。我不大相信portage的官方维护人员会犯这样明显的错误,即便有,也觉得应该去bugs.gentoo.org报告一下比较好一些,当然最好附上自己的修改。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表