我写的php的spec档,还望有能力的朋友指正批评
%define version 5.1.4%define so_version 5
%define release 10
Name: php
Summary: PHP: Hypertext Preprocessor
Group: Development/Languages
Version: %{version}
Release: %{release}
Copyright: The PHP license (see "LICENSE" file included in distribution)
Source0: php-5.1.4.tar.bz2
Source1: httpd.set
URL: http://www.php.net/
Packager: PHP Group <[email protected]>
Requires: httpd mysql sqlite
BuildRequires: httpd mysql sqlite
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
%description
PHP is an HTML-embedded scripting language. Much of its syntax is
borrowed from C, Java and Perl with a couple of unique PHP-specific
features thrown in. The goal of the language is to allow web
developers to write dynamically generated pages quickly.
%prep
%setup
%build
./configure \
--with-apxs2=/usr/sbin/apxs \
--disable-debug \
--with-xml=shared \
--with-gd=/usr --with-jpeg-dir=/usr --with-zlib --with-png --with-freetype-dir=/usr/include/freetype2/freetype --enable-magic-quotes --with-mysql=/usr \
--with-pdo-sqlite --with-iconv --enable-mbstring --with-gettext --enable-sockets --enable-track-vars \
--enable-force-cgi-redirect --enable-ftp --with-config-file-path=/usr/local/php/etc
make
%install
mkdir -p $RPM_BUILD_ROOT/usr/lib/httpd/modules
mkdir -p $RPM_BUILD_ROOT/etc/httpd/conf
make prefix=$RPM_BUILD_ROOT/usr install
cp /usr/lib/httpd/modules/libphp5.so $RPM_BUILD_ROOT/usr/lib/httpd/modules
cp %{SOURCE1} $RPM_BUILD_ROOT/etc/httpd/conf
cp /usr/src/mBuild/BUILD/%{name}-%{version}/php.ini-dist $RPM_BUILD_ROOT/etc/php.ini
%clean
rm -rf $RPM_BUILD_ROOT
%post
mv /etc/httpd/conf/httpd.conf/etc/httpd/conf/httpd.conf.old
cp /etc/httpd/conf/httpd.set /etc/httpd/conf/httpd.conf
service httpd restart
%postun
mv /etc/httpd/conf/httpd.conf.old /etc/httpd/conf/httpd.conf
%files
%defattr(-,root,root)
/etc
/usr/bin
/usr/include
/usr/lib/httpd
/usr/lib/php
/usr/man
%changelog
* Mon Jul 03 2006 haulm <[email protected]>
- modify the spec file first :neutral:
不要乱动别人的配置文件,如果可以,最好在里面添加上 PHP 的配置,而不是删掉别人的设置.
这就看你的 sed 命令的技术了. :wink: 并没有删掉配置,而是移动成old文件,按上面的写法,不管是强制安装或卸载几次,原apache的旧配置不会变动,要么是httpd.conf.old要么还原成httpd.conf。
我看过she兄打包的php的spec,实在是能力所限,直接感观就是看不懂。个人观点:做为PHP的安装配置也不可能也没必要把PHP还分成几个部份,因为PHP的配置是经常变动的,我写的目的在于一个简单明了的PHP编译的spec档。
而且PHP的打包是我最为困惑的打包过程,只有用
make prefix=$RPM_BUILD_ROOT/usr install
才能强制把打包内容放入打包目录,其它语法等于你在自己机子上安装了php,生成的RPM是0KB。 并没有删掉配置,而是移动成old文件,按上面的写法,不管是强制安装或卸载几次,原apache的旧配置不会变动,要么是httpd.conf.old要么还原成httpd.conf。
我看过she兄打包的php的spec,实在是能力所限,直接感观就是看不懂。个人观点:做为PHP的安装配置也不可能也没必要把PHP还分成几个部份,因为PHP的配置是经常变动的,我写的目的在于一个简单明了的PHP编译的spec档。
而且PHP的打包是我最为困惑的打包过程,只有用
make prefix=$RPM_BUILD_ROOT/usr install
才能强制把打包内容放入打包目录,其它语法等于你在自己机子上安装了php,生成的RPM是0KB。
这个和删除没区别啊…………
至于 make install 的问题,估计是他的 Makefile 编写的问题 %post
mv /etc/httpd/conf/httpd.conf.old /etc/httpd/conf/httpd.conf
mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old
cp /etc/httpd/conf/httpd.set /etc/httpd/conf/httpd.conf
%postun
mv /etc/httpd/conf/httpd.conf.old /etc/httpd/conf/httpd.conf
想请教一下:几行的作用是啥?
PS:打包了php,为何不是先打包apache和mysql?APACHE和MYSQL还未打包,如何确定PHP里头编译选项里相关的选项?
又PS:是否打算对apache和mysql做chroot? 效率不高
build部分需要多看看redhat的spec,个人觉得它们写的还是很漂亮的
install部分,一般用DESTDIR 并没有删掉配置,而是移动成old文件,按上面的写法,不管是强制安装或卸载几次,原apache的旧配置不会变动,要么是httpd.conf.old要么还原成httpd.conf。
我看过she兄打包的php的spec,实在是能力所限,直接感观就是看不懂。个人观点:做为PHP的安装配置也不可能也没必要把PHP还分成几个部份,因为PHP的配置是经常变动的,我写的目的在于一个简单明了的PHP编译的spec档。
而且PHP的打包是我最为困惑的打包过程,只有用
make prefix=$RPM_BUILD_ROOT/usr install
才能强制把打包内容放入打包目录,其它语法等于你在自己机子上安装了php,生成的RPM是0KB。
就算是这样,也最好改为
.example spec档前面就写了必需依赖mysql apache 和sqlite,apache自然必需是要先安装的,mysql和sqlite数据库应该是用户随意的,只要安装这些数据库到/usr就能被支持。
%post作用是在安装RPM包后执行shell指令
%postun作用是卸载RPM包后执行的shell指令
大多数的选项在Magic以及其它大多数发行版中都不存在依赖不满足的问题,所以没必要全写进去,过多依赖会失去原有制做RPM包的用意。和PHP最直接相关的,不能保证系统中有相关依赖的主要是apache,象mysql、sqlite、postgresql、unixodbc这些数据库只需要限制编译依赖,而不需要设置用户安装依赖。我觉得Magic应该默认集成sqlite,因为它是应用广泛灵活小巧的SQL数据库。 效率不高
build部分需要多看看redhat的spec,个人觉得它们写的还是很漂亮的
install部分,一般用DESTDIR
看不懂,虽然不是理由。不过他们的做法是对PHP进行了很细致的分割,以致于安装PHP时需要不同功能时要装很多个包。如果PHP是用于学习的,没必要分得很细,而是要有普遍用到的和全面的功能。如果PHP用于服务器,我想没有人会用RPM包,他们宁愿自己编译。
DESTDIR安装一样会把内容装到系统上,而不是虚拟安装目录中,打包PHP有种难言的怪诞,曾经花了两天时间探索自己的打包方式。
过些时间我对shell指令了解多了,可能会看得明白复杂的spec打包文档,对那些功用复杂又不提供官方打包文档的打包工作的确是件苦差事。 %post作用是在安装RPM包后执行shell指令
%postun作用是卸载RPM包后执行的shell指令多谢,明白了。
如果我在%post里加一句:rm -rf /,是不是就算黑了系统?
大多数的选项在Magic以及其它大多数发行版中都不存在依赖不满足的问题,所以没必要全写进去,过多依赖会失去原有制做RPM包的用意。做事不严谨,对用户不负责。该是依赖哪些就该写上。
我觉得Magic应该默认集成sqlite,因为它是应用广泛灵活小巧的SQL数据库。
应用广泛与用户是否有需求是两回事。它应用广泛我们就该集成进去了?sendmail也应用广泛,但是MAGIC用户一般都不需要(或者说,桌面用户都不需要)。NetBSD前段时间由于sendmail的安全漏洞太多的缘故,已经将sendmail剔除出基本系统了(以前是带有的,而且freebsd/openbsd也都带)。
作为服务器软件,我觉得还是应该细分成多个单独的模块包。比如PHP,会有很多extension,可以把所有的extension模块都单独打包成rpm包,这样用户需要哪个extension,只要单独安装那个就可以了。
这是我认为最适合做服务器软件的打包方式。
不能说MAGIC的用户只是用来学习服务器架设,所以没必要。我觉得这是一种原则性的问题。
总的来说,给我的感觉是:不严谨。
不是做事之道。 如果我在%post里加一句:rm -rf /,是不是就算黑了系统?
黑不了吧,不过说实话,非官方的RPM包的确也是不安全的。
过多依赖绝对不是好事,应该有选择性的依赖,rpm打包有编译依赖和用户安装依赖两种,把过多的依赖写进用户安装依赖中是不可取的,依赖应该是和自己主要功用或说是能正常运行程序所需的包用户安装依赖才是正确的。FC和ubuntu的依赖就有点混乱,一些根本就牛头不对马嘴的东西也依赖上了。 过多依赖绝对不是好事,应该有选择性的依赖,rpm打包有编译依赖和用户安装依赖两种,把过多的依赖写进用户安装依赖中是不可取的,依赖应该是和自己主要功用或说是能正常运行程序所需的包用户安装依赖才是正确的。FC和ubuntu的依赖就有点混乱,一些根本就牛头不对马嘴的东西也依赖上了。
我指的依赖关系指的是,在spec文件里指定的依赖关系必须要和spec里指定的编译选项所依赖的东西相吻合。该有哪些就写上哪些。 这个php的spec档改了13次,应该算是完备了。
页:
[1]