技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

定制RPM包

定制RPM包并加入内部Yum Server#######################################################如有转载,请务必保留本文链接及版权信息##欢迎广大运维同仁一起交流linux/unix网站运维技术!##QQ:335623998##E-mail:335623998@qq.com##博客: http://dreamway.blog.51cto.com/... 全文

yum spec HAProxy 定制rpm

定制zabbix的rpm包

 定制zabbix的rpm包#%define zabbix_group zabbix %define zabbix_user zabbix  Name:           zabbix   Version:    2.0.4 Release:    1%{?dist}.zbx Summary:    zabbix monitor Vendor:         itnihao@qq.com  Group:          System Environment/Daemons   License:    GPL URL:        http://www.zabbix.com Source0:    http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.0.4/zabbix-2.0.4.tar.gz Source1:        zabbix_custom.tar.gz Source2:        zabbix-web.conf #BuildRoot: %{_tmppath}/%{name}-%{version} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root  BuildRequires:  gcc BuildRequires:  make  Requires(pre):gcc Requires(post):chkconfig     Provides:Monitor  %description  Zabbix is the ultimate open source availability and performance monitoring solution. Zabbix offers advanced monitoring, alerting, and visualization features today which are missing in other monitoring systems, even some of the best commercial ones  %package server Summary:server version of zabbix Group: System Environment/Daemons Requires(post):      /sbin/chkconfig Requires(preun):     /sbin/chkconfig Requires(preun):     /sbin/service Requires(postun):    /sbin/service  %description server Zabbix server common files  %package agentd Summary:             Zabbix Agent Group:               Applications/Internet Requires(pre):       shadow-utils Requires(post):      /sbin/chkconfig Requires(preun):     /sbin/chkconfig Requires(preun):     /sbin/service Requires(postun):    /sbin/service  %description agentd The Zabbix client agent, to be installed on monitored systems.   %package proxy Summary:             Zabbix Proxy Group:               Applications/Internet Requires(pre):       shadow-utils Requires(post):      /sbin/chkconfig Requires(preun):     /sbin/chkconfig Requires(preun):     /sbin/service Requires(postun):    /sbin/service Requires:            fping  %description proxy The Zabbix proxy   %package web Summary:             Zabbix Web Group:               Applications/Internet BuildArch:           noarch Requires(pre):       shadow-utils Requires(post):      /sbin/chkconfig Requires(preun):     /sbin/chkconfig Requires(preun):     /sbin/service Requires(postun):    /sbin/service Requires:            dejavu-sans-fonts  %description web The Zabbix web   %prep %setup -q  %build common_flags="      --enable-dependency-tracking      --enable-proxy        --enable-agent       --enable-ipv6      --with-net-snmp      --with-libcurl      --disable-java      --sysconfdir=%{_sysconfdir}/zabbix      --datadir=%{_sharedstatedir}      " %configure $common_flags --enable-server --with-mysql  --with-cc-opt="%{optflags} $(pcre-config --cflags)" make %{?_smp_mflags}   #./configure --prefix=/usr/local --sysconfdir=/etc/zabbix --libdir=/usr/lib --mandir=/usr/share/man   --enable-proxy  --enable-agent --with-sqlite3 #make %{?_smp_mflags}   %install %{__rm} -rf $RPM_BUILD_ROOT [ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot} #%{__make} DESTDIR=%{buildroot} install  %{__install} -d %{buildroot}%{_sbindir} %{__install} -d %{buildroot}%{_sysconfdir}/rc.d/init.d %{__install} -d %{buildroot}%{_datadir}/%{name} %{__install} -d %{buildroot}%{_sysconfdir}/%{name}/scripts %{__install} -d %{buildroot}%{_sysconfdir}/%{name}/zabbix_agentd.conf.d %{__install} -d %{buildroot}%{_mandir}/man1/ %{__install} -d %{buildroot}%{_mandir}/man8/ %{__install} -d %{buildroot}%{_localstatedir}/log/%{name} %{__install} -d %{buildroot}%{_localstatedir}/run/%{name} %{__install} -d %{buildroot}%{_sysconfdir}/%{name}/externalscripts %{__install} -d %{buildroot}%{_sysconfdir}/%{name}/alertscripts %{__install} -d %{buildroot}%{_datadir}/%{name}  %{__make} DESTDIR=$RPM_BUILD_ROOT install   #%{__mkdir} -p $RPM_BUILD_ROOT%{_initrddir} %{__install} -m 755 misc/init.d/fedora/core/zabbix_agentd   $RPM_BUILD_ROOT%{_initrddir}/zabbix_agentd %{__install} -m 755 misc/init.d/fedora/core/zabbix_server   $RPM_BUILD_ROOT%{_initrddir}/zabbix_server %{__install} -m 755 misc/init.d/fedora/core/zabbix_server    $RPM_BUILD_ROOT%{_initrddir}/zabbix_proxy %{__mv}  frontends/php $RPM_BUILD_ROOT/%{_datadir}/zabbix %{__sed} -i "s@BINARY_NAME=zabbix_server@BINARY_NAME=zabbix_proxy@g" $RPM_BUILD_ROOT%{_initrddir}/zabbix_proxy %{__sed} -i "s@BASEDIR=/usr/local@BASEDIR=/usr@g" $RPM_BUILD_ROOT%{_initrddir}/zabbix_server %{__sed} -i "s@BASEDIR=/usr/local@BASEDIR=/usr@g" $RPM_BUILD_ROOT%{_initrddir}/zabbix_agentd %{__sed} -i "s@BASEDIR=/usr/local@BASEDIR=/usr@g" $RPM_BUILD_ROOT%{_initrddir}/zabbix_proxy  install -m 0755 -p src/zabbix_server/zabbix_server $RPM_BUILD_ROOT%{_sbindir}/ install -m 0755 -p src/zabbix_proxy/zabbix_proxy $RPM_BUILD_ROOT%{_sbindir}/ install -m 0755 -p src/zabbix_get/zabbix_get $RPM_BUILD_ROOT%{_sbindir}/ install -m 0755 -p src/zabbix_sender/zabbix_sender $RPM_BUILD_ROOT%{_sbindir}/ install -m 0755 -p src/zabbix_agent/zabbix_agent $RPM_BUILD_ROOT%{_sbindir}/ install -m 0755 -p src/zabbix_agent/zabbix_agentd $RPM_BUILD_ROOT%{_sbindir}/ install -m 0644 -p conf/zabbix_server.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/ install -m 0644 -p conf/zabbix_agent.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/ install -m 0644 -p conf/zabbix_agentd.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/ install -m 0644 -p conf/zabbix_proxy.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/ install -m 0644 -p man/zabbix_agentd.man  $RPM_BUILD_ROOT%{_mandir}/man8/zabbix_agentd.8 install -m 0644 -p man/zabbix_server.man $RPM_BUILD_ROOT%{_mandir}//man8/zabbix_server.8 install -m 0644 -p man/zabbix_proxy.man  $RPM_BUILD_ROOT%{_mandir}/man8/zabbix_proxy.8 install -m 0644 -p man/zabbix_get.man    $RPM_BUILD_ROOT%{_mandir}/man1/zabbix_get.1 install -m 0644 -p man/zabbix_sender.man $RPM_BUILD_ROOT%{_mandir}/man1/zabbix_sender.1  %{__tar} xf %{SOURCE1} -C $RPM_BUILD_ROOT%{_sysconfdir}/%{name} install -m 0644 -p %{SOURCE2}  $RPM_BUILD_ROOT/%{_datadir}/%{name} install -d $RPM_BUILD_ROOT/%{_datadir}/%{name}/database/mysql/ install -m 0644 -p database/mysql/*  $RPM_BUILD_ROOT/%{_datadir}/%{name}/database/mysql/ sed -i \     -e 's|# PidFile=.*|PidFile=%{_localstatedir}/run/%{name}/zabbix_agentd.pid|g' \     -e 's|^LogFile=.*|LogFile=%{_localstatedir}/log/%{name}/zabbix_agentd.log|g' \     -e '/# UnsafeUserParameters=0/aUnsafeUserParameters=1\n' \     -e '/# Include.*zabbix_agentd.conf.d\//aInclude=\/etc\/zabbix\/zabbix_agentd.conf.d\/\n' \     -e 's|# LogFileSize=.*|LogFileSize=0|g' \     -e 's|/usr/local|/usr|g' \      $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/zabbix_agentd.conf  sed -i \     -e 's|/usr/local|/usr|g' \     -e '/# UnsafeUserParameters=0/aUnsafeUserParameters=1\n' \     -e 's@# Include=/usr/etc/zabbix_agentd.conf.d@Include=/etc/zabbix/zabbix_agentd.conf.d@g' \      $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/zabbix_agent.conf  sed -i \     -e 's|# PidFile=.*|PidFile=%{_localstatedir}/run/%{name}/zabbix_server.pid|g' \     -e 's|^LogFile=.*|LogFile=%{_localstatedir}/log/%{name}/zabbix_server.log|g' \     -e 's|# LogFileSize=.*|LogFileSize=0|g' \     -e 's|^DBUser=root|DBUser=zabbix|g' \     -e '/# DBPassword=/aDBPassword=zabbix\n' \     -e 's|# DBSocket=/tmp/mysql.sock|DBSocket=%{_sharedstatedir}/mysql/mysql.sock|g' \     -e 's|# ExternalScripts=\${datadir}/zabbix/externalscripts|ExternalScripts=%{_sysconfdir}/%{name}/externalscripts|' \     -e 's|/usr/local|/usr|g' \      $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/zabbix_server.conf  sed -i \     -e 's|# PidFile=.*|PidFile=%{_localstatedir}/run/%{name}/zabbix_proxy.pid|g' \     -e 's|^LogFile=.*|LogFile=%{_localstatedir}/log/%{name}/zabbix_proxy.log|g' \     -e 's|# LogFileSize=.*|LogFileSize=0|g' \     -e 's|^DBUser=root|DBUser=zabbix|g' \     -e '/# DBPassword=/aDBPassword=zabbix\n' \     -e 's|# DBSocket=/tmp/mysql.sock|DBSocket=%{_sharedstatedir}/mysql/mysql.sock|g' \     -e 's|# ExternalScripts=\${datadir}/zabbix/externalscripts|ExternalScripts=%{_sysconfdir}/%{name}/externalscripts|' \     -e 's|/usr/local|/usr|g' \      $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/zabbix_proxy.conf  %clean %{__rm} -rf $RPM_BUILD_ROOT   %files server %defattr(-,root,root,-) %doc %attr(0755,zabbix,zabbix) %dir %{_localstatedir}/log/%{name} %attr(0775,root,zabbix)   %dir %{_localstatedir}/run/%{name} %config(noreplace)  %{_sysconfdir}/%{name}/zabbix_server.conf %config(noreplace)  %{_sysconfdir}/%{name}/scripts %{_sbindir}/zabbix_sender %{_sbindir}/zabbix_server %{_sbindir}/zabbix_get  %{_initrddir}/zabbix_server  %config(noreplace) %{_sysconfdir}/%{name}/externalscripts %config(noreplace) %{_sysconfdir}/%{name}/alertscripts  %{_mandir}/man8/zabbix_server.8* %{_mandir}/man1/zabbix_get.1* %{_mandir}/man1/zabbix_sender.1*  %files agentd %defattr(-,root,root,-) %doc %attr(0755,zabbix,zabbix) %dir %{_localstatedir}/log/%{name} %attr(0775,root,zabbix) %dir %{_localstatedir}/run/%{name} %attr(0775,root,zabbix) %dir %{_sysconfdir}/%{name}/zabbix_agentd.conf.d %config(noreplace)  %{_sysconfdir}/%{name}/zabbix_agent.conf %config(noreplace)  %{_sysconfdir}/%{name}/zabbix_agentd.conf %config(noreplace)  %{_sysconfdir}/%{name}/scripts %{_sbindir}/zabbix_sender %{_sbindir}/zabbix_agent %{_sbindir}/zabbix_agentd %{_sbindir}/zabbix_get %attr(0755,root,zabbix) %{_sysconfdir}/%{name}/scripts/* %attr(0755,root,zabbix) %{_sysconfdir}/%{name}/zabbix_agentd.conf.d/*  %{_initrddir}/zabbix_agentd  #%{_localstatedir}/run/%{name} #%{_localstatedir}/log/%{name} %config(noreplace) %{_sysconfdir}/%{name}/zabbix_agentd.conf.d  %{_mandir}/man8/zabbix_agentd.8* %{_mandir}/man1/zabbix_get.1* %{_mandir}/man1/zabbix_sender.1*   %files proxy %defattr(-,root,root,-) %doc %attr(0755,zabbix,zabbix) %dir %{_localstatedir}/log/%{name} %attr(0775,root,zabbix)   %dir %{_localstatedir}/run/%{name} %config(noreplace)  %{_sysconfdir}/%{name}/zabbix_proxy.conf %config(noreplace)  %{_sysconfdir}/%{name}/scripts %{_sbindir}/zabbix_proxy %{_initrddir}/zabbix_proxy %{_mandir}/man8/zabbix_proxy.8* #%{_localstatedir}/run/%{name} #%{_localstatedir}/log/%{name} %config(noreplace) %{_sysconfdir}/%{name}/externalscripts %config(noreplace) %{_sysconfdir}/%{name}/alertscripts  %files web %defattr(-,root,root,-) %config(noreplace) %{_datadir}/%{name}/*  %post server if [ $1 -eq 1 ]; then /sbin/chkconfig zabbix_server on fi  %post agentd if [ $1 -eq 1 ]; then sed -i "s@Hostname=Zabbix server@Hostname=$HOSTNAME@g" /etc/zabbix/zabbix_agentd.conf getent group zabbix >/dev/null || groupadd -r  zabbix getent passwd zabbix >/dev/null || useradd -r -g zabbix -d %{_sharedstatedir}/zabbix -s   /sbin/nologin  -c "zabbix user" zabbix /sbin/chkconfig zabbix_agentd on /sbin/service zabbix_agentd start chown root:zabbix /bin/netstat chmod 4755 /bin/netstat fi  %post proxy if [ $1 -eq 1 ]; then /sbin/chkconfig zabbix_proxy on fi  %post web mv %{_datadir}/%{name}/php/* %{_datadir}/%{name} rm -rf %{_datadir}/%{name}/php  [ -d "/etc/http/conf.d" ] &&  cp %{_datadir}/%{name}/conf/zabbix-web.conf /etc/http/conf.d &&chown -R apache.apache  %{_datadir}/%{name} && cat <<EOF --------------------------------------------------------    you installed Apache Server,the zabbix-web.conf configuration file in /etc/http/conf.d -------------------------------------------------------- EOF [ -d "/etc/http/conf.d" ] || cat <<EOF -------------------------------------------------------------------------------------------    you should configure Web Server,the web file in %{_datadir}/%{name} ------------------------------------------------------------------------------------------- EOF #then #mv %{_datadir}/%{name} /var/www/html/   cat <<EOF ---------------------------------------------------------------------------------------------    Author:itnihao    Mail:itnihao@qq.com    Blog: http://itnihao.blog.51cto.com    you can configure web server on directory /usr/share/zabbix    if your web server is Apache,you can use the /etc/httpd/conf.d/zabbix-web.conf file to     start your web server,and others you must configure your web server    to running the server and web, you will install packages;    yum  install httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-bcmath mysql-connector-odbc mysql-devel libdbi-dbd-mysql net-snmp-devel curl-devel     #setting /etc/php.ini for zabbix     sed -i "s/;date.timezone =/date.timezone = Asia\/Shanghai/g"        /etc/php.ini     sed -i "s#max_execution_time = 30#max_execution_time = 300#g"       /etc/php.ini     sed -i "s#post_max_size = 8M#post_max_size = 32M#g"                 /etc/php.ini     sed -i "s#max_input_time = 60#max_input_time = 300#g"               /etc/php.ini     sed -i "s#memory_limit = 128M#memory_limit = 128M#g"                /etc/php.ini     sed -i "/;mbstring.func_overload = 0/ambstring.func_overload = 2\n" /etc/php.ini     #config apache     sed -i "s/DirectoryIndex index.html index.html.var/DirectoryIndex index.php index.html index.html.var/g" /etc/httpd/conf/httpd.conf     sed -i "s/ServerTokens OS/ServerTokens Prod/g"  /etc/httpd/conf/httpd.conf     #create mysql database to zabbix     service mysqld start     chkconfig mysqld on     mysqladmin -u root password  'mysqlpass'     mysql -uroot -pmysqlpass -e "create database zabbix character set utf8"     mysql -uroot -pmysqlpass -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'"     mysql -uroot -pmysqlpass -e "flush privileges"      #source zabbix database     cd /usr/share/zabbix     mysql -uzabbix -pzabbix zabbix < ./database/mysql/schema.sql     mysql -uzabbix -pzabbix zabbix < ./database/mysql/images.sql     mysql -uzabbix -pzabbix zabbix < ./database/mysql/data.sql ---------------------------------------------------------------------------------------------- EOF #fi   %pre server #add zabbix to services grep zabbix /etc/services [ "$?" != 0 ] && cat >> /etc/services <<EOF zabbix-agent    10050/tcp               #Zabbix Agent zabbix-agent    10050/udp               #Zabbix Agent  zabbix-trapper  10051/tcp               #Zabbix Trapper  zabbix-trapper  10051/udp               #Zabbix Trapper EOF # Add the "zabbix" user getent group zabbix >/dev/null || groupadd -r  zabbix getent passwd zabbix >/dev/null || useradd -r -g zabbix -d %{_sharedstatedir}/zabbix -s   /sbin/nologin  -c "zabbix user" zabbix  %pre agentd #add zabbix to services grep zabbix /etc/services [ "$?" != 0 ] && cat >> /etc/services <<EOF zabbix-agent    10050/tcp               #Zabbix Agent zabbix-agent    10050/udp               #Zabbix Agent  zabbix-trapper  10051/tcp               #Zabbix Trapper  zabbix-trapper  10051/udp               #Zabbix Trapper EOF # Add the "zabbix" user getent group zabbix >/dev/null || groupadd -r  zabbix getent passwd zabbix >/dev/null || useradd -r -g zabbix -d %{_sharedstatedir}/zabbix -s   /sbin/nologin  -c "zabbix user" zabbix   %preun server if [ "$1" = 0 ] then   /sbin/service zabbix_server stop >/dev/null 2>&1   /sbin/chkconfig --del zabbix_server fi  %preun proxy if [ "$1" = 0 ] then   /sbin/service zabbix_proxy stop >/dev/null 2>&1   /sbin/chkconfig --del zabbix_proxy fi  %preun agentd if [ "$1" = 0 ] then   /sbin/service zabbix_agentd stop >/dev/null 2>&1   /sbin/chkconfig --del zabbix_agentd fi  %changelog * Fri Jan 25 2013  First version is build ok <itnihao@qq.com> - 2.0.4 待续... 全文

rpm zabbix spec文件

RPM包rpmbuild SPEC文件深度说明

RPM包rpmbuild SPEC文件深度说明2010.01.08 加入SPEC文件中的宏定义和变量2010.01.08 关键字说明,如何在升级过程中不覆盖配置文件   上一篇日志写到,为什么要制作rpm包,以及如何使用.src.rpm文件生成rpm包。最后部分还看到.src.rpm的内容,实际上 就是由.tar.gz源码、补丁软件和.spec脚本组成的。由此知道,使用.spec生成rpm包是比较简单的,因为.src.rpm通常都是由软件开 发者或者第三方的专业制作人根据源码调试好的,所以,只要处理好平台兼容性和相关的版本,不会遇到太大的问题。   但我觉得单纯明白用.spec生成rpm是不够的。常见有两个原因值得我们去了解用如何用源码制作rpm:引用1、并不是所有的软件都提供.rpm方式的。这是最常见的原因。负责任的开发者应提供rpm方式的二进制软件包,以便用户选择使用。但也很常见就是软件作者只是发布了源码,最后一部分的编译和安装需要用户自行解决。我不想深究对错问题,反正知道有这样的情况就可以了;2、自行打包一些文件或自己开发了一套软件当 然,使用tar包或cpio等也可以打包文件,甚至比制作rpm要简单很多。但如果您想在安装的过程中就把一套额外的软件部署完毕,那使用rpm方式通常 是是唯一的方法。而且rpm还有数据库协助软件升级、文件校验等,结合yum升级方式,没有理由不选择rpm,特别是对于最终用户,我认为提供rpm包是 最佳的方法。一、编写spec脚本   由前面的日志了解到,生成rpm除了源码外,最重要的就是懂得编写.spec脚本。rpm建包的原理其实并不复杂,可以理解为按照标准的格式整理一些信息,包括:软件基础信息,以及安装、卸载前后执行的脚本,对源码包解压、打补丁、编译,安装路径和文件等。实际过程中,最关键的地方,是要清楚虚拟路径的位置,以及宏的定义。二、关键字spec脚本包括很多关键字,主要有:引用Name: 软件包的名称,后面可使用%{name}的方式引用Summary: 软件包的内容概要Version: 软件的实际版本号,例如:1.0.1等,后面可使用%{version}引用Release: 发布序列号,例如:1linuxing等,标明第几次打包,后面可使用%{release}引用Group: 软件分组,建议使用标准分组License: 软件授权方式,通常就是GPLSource: 源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用BuildRoot: 这个是安装或编译时使用的“虚拟目录”,考虑到多用户的环境,一般定义为:%{_tmppath}/%{name}-%{version}-%{release}-root或%{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u} -n}该参数非常重要,因为在生成rpm的过程中,执行make install时就会把软件安装到上述的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作。后面可使用$RPM_BUILD_ROOT 方式引用。URL: 软件的主页Vendor: 发行商或打包组织的信息,例如RedFlag Co,LtdDisstribution: 发行版标识Patch: 补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用Prefix:%{_prefix} 这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能Prefix:%{_sysconfdir} 这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识Build Arch: 指编译的目标处理器架构,noarch标识不指定,但通常都是以/usr/lib/rpm/marcros中的内容为默认值Requires: 该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本,例如:libpng-devel >= 1.0.20 zlib※“>=”号两边需用空格隔开,而不同软件名称也用空格分开还有例如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同阶段的依赖指定Provides: 指明本软件一些特定的功能,以便其他rpm识别Packager: 打包者的信息%description 软件的详细说明三、spec脚本主体spec脚本的主体中也包括了很多关键字和描述,下面会一一列举。我会把一些特别需要留意的地方标注出来。%prep 预处理脚本%setup -n %{name}-%{version} 把源码包解压并放好通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。一般用%setup -c就可以了,但有两种情况:一就是同时编译多个源码包,二就是源码的tar包的名称与解压出来的目录不一致,此时,就需要使用-n参数指定一下了。%patch 打补丁通常补丁都会一起在源码tar.gz包中,或放到SOURCES目录下。一般参数为:%patch -p1 使用前面定义的Patch补丁进行,-p1是忽略patch的第一层目录%Patch2 -p1 -b xxx.patch 打上指定的补丁,-b是指生成备份文件◎补充一下引用%setup 不加任何选项,仅将软件包打开。 %setup -n newdir 将软件包解压在newdir目录。 %setup -c 解压缩之前先产生目录。 %setup -b num 将第num个source文件解压缩。 %setup -T 不使用default的解压缩操作。 %setup -T -b 0 将第0个源代码文件解压缩。 %setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。 %patch 最简单的补丁方式,自动指定patch level。 %patch 0 使用第0个补丁文件,相当于%patch ?p 0。 %patch -s 不显示打补丁时的信息。 %patch -T 将所有打补丁时产生的输出文件删除。%configure 这个不是关键字,而是rpm定义的标准宏命令。意思是执行源代码的configure配置在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行 ,使用标准写法,会引用/usr/lib/rpm/marcros中定义的参数。另一种不标准的写法是,可参考源码中的参数自定义,例如:引用CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix}%build 开始构建包在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make的工作 ,常见写法:引用make %{?_smp_mflags} OPTIMIZE="%{optflags}"都是一些优化参数,定义在/usr/lib/rpm/marcros中%install 开始把软件安装到虚拟的根目录中在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make install的操作。这个很重要,因为如果这里的路径不对的话,则下面%file中寻找文件的时候就会失败。 常见内容有:%makeinstall 这不是关键字,而是rpm定义的标准宏命令。也可以使用非标准写法:引用make DESTDIR=$RPM_BUILD_ROOT install或引用make prefix=$RPM_BUILD_ROOT install需要说明的是,这里的%install主要就是为了后面的%file服务的。所以,还可以使用常规的系统命令:引用install -d $RPM_BUILD_ROOT/cp -a * $RPM_BUILD_ROOT/%clean 清理临时文件通常内容为:引用[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"rm -rf $RPM_BUILD_DIR/%{name}-%{version}※注意区分$RPM_BUILD_ROOT和$RPM_BUILD_DIR:$RPM_BUILD_ROOT是指开头定义的BuildRoot,而$RPM_BUILD_DIR通常就是指/usr/src/asianux/BUILD,其中,前面的才是%file需要的。%pre rpm安装前执行的脚本%post rpm安装后执行的脚本%preun rpm卸载前执行的脚本%postun rpm卸载后执行的脚本%preun %postun 的区别是什么呢?前者在升级的时候会执行,后者在升级rpm包的时候不会执行%files 定义那些文件或目录会放入rpm中这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对路径。如果描述为目录,表示目录中除%exclude外的所有文件。%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755%exclude 列出不想打包到rpm中的文件※小心,如果%exclude指定的文件不存在,也会出错的。%changelog 变更日志四、范例   下面的.spec脚本是一个比较简单的范例,其作用是把一个目录中的所有文件都打包为一个rpm包。1、前期工作我们假设需要打包的目录就是我们的源码文件。这样,可以暂时忽略比较麻烦的打补丁、编译等问题,而且也是一种常见的方式。在编写.spec脚本前,需要准备好“源码”,也就是目录,内容比较简单:引用[root@mail html]# lltotal 4drwxr-xr-x  3 root root 4096 Jun  4 14:45 demo[root@mail html]# ll demo/total 4drwxr-xr-x  3 root root 4096 Jun  4 14:45 images-rw-r--r--  1 root root    0 Jun  4 14:45 index.html因为rpm只认tar.gz格式,所以,必须打包好并移动到SOURCES目录中:引用[root@mail html]# tar czvf demo.tar.gz demo/demo/demo/images/demo/images/logo.gif/demo/index.html[root@mail html]# mv demo.tar.gz /usr/src/asianux/SOURCES/2、demo.spec的内容准备工作完成,下面就是范例用的脚本内容:[root@mail html]# cd /usr/src/asianux/SPECS/[root@mail SPECS]# cat demo.spec引用Summary:   Test package for LinuxFly webblogName:      suiteVersion:   1.0.0Release:   1License:   GPLGroup:     SystemSource:    demo.tar.gzBuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-rootUrl:       http://www.linuxfly.orgPackager:  LinuxingPrefix:    %{_prefix}Prefix:    %{_sysconfdir}%define    userpath /var/www/html/demo%descriptionJust a test rpm suite.%prep%setup -c%installinstall -d $RPM_BUILD_ROOT%{userpath}cp -a %{name}* $RPM_BUILD_ROOT%{userpath}%cleanrm -rf $RPM_BUILD_ROOTrm -rf $RPM_BUILD_DIR/%{name}-%{version}%files%defattr(-,root,root)%{userpath}下载: 下载文件点击这里下载文件※特别需要注意的是:%install部分使用的是绝对路径,而%file部分使用则是相对路径,虽然其描述的是同一个地方。千万不要写错。五、其他1、扩展虽然上面的范例很简陋,而且缺少%build部分,但实际上只要记住两点:a)就是%build和%install的过程中,都必须把编译和安装的文件定义到“虚拟根目录” 中。引用%build make -f admin/Makefile.common cvs ./configure --prefix=%{_prefix} --enable-final --disable-debug \ --with-extra-includes=%{_includedir}/freetype2 --includedir=%{_includedir} make %install rm -fr $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install cp -r $RPM_BUILD_ROOT%{_datadir}/apps/kolourpaint/icons/hicolor/* $RPM_BUILD_ROOT%{_datadir}/icons/crystalsvg/b)就是%file中必须明白,用的是相对目录... 全文

RPM linux spece

使用spec与fpm 2种方式进行rpm打包

最近分享zabbix与ansible好多,大家看烦了,我也没啥存货了,现在就介绍一下如何进行rpm打包吧。rpm打包有2个,一个是自己写spec,另外要给是使用ruby的fpm,我个人比较倾向于第二种fpm,这个不需要写spec文件,特简单,不过为了让大家看明白,我分别介绍一下这2款软件是如何进行rpm打包的。目录一、使用spec构建rpm二、使用fpm构建rpm 一、使用spec构建rpm在构架rpm包的时候,需要经过3个过程1、解压源码包2、编译环境configure3、make然后再使用check install做rpm包... 全文

ruby rpm包

【APP】简单制作RPM二进包实例

最近有好多朋友问到怎么制作rpm包,可不可把其它服务器上编译好的软件目录复杂到其它服务器上直接应用等等。。。这里做个简单的介绍,高级复杂的不会。。。此方法是通过编写spec文件,使用rpmbuild来完成一个rpm的打包。以nginx为例进行介绍制作平台:centos 5.x X86_64四步走:第一步:建立目录结构mkdir /usr/src/redhat/{SOURCES,SPECS,BUILD,RPMS,SRPMS} -p相关目录介绍:/usr/src/redhat/SOURCES    #存放源代码、补丁等文件... 全文

spec rpm打包

华为服务器SPEC测试获得超50项世界记录

2012年6月,华为发布了新一代机架服务器 RH2265 V2、 RH2268 V2。RH2265 V2/RH2268V2为标准的2U高2路服务器,采用了Intel最新的Sandy Bridge处理器。作为华为2路服务器的旗舰产品,该服务器支持E5-2400/E5-2600全系列规格的CPU。两款服务器具有高性能、低能耗,配置灵活,扩展能力强的特点。... 全文

服务器 华为服务器

定制apache的rpm包

 现在很多大公司都在自己定制公司自己的rpm包,比如apache/nginx/php等常用的包,并且把这些包加到自己的yum里面,这样业务部门要是有这些rpm的时候,只要yum install就可以了。大家都知道制作rpm最核心的地方就是spec文件了,在这里跟大家共享一下我写的一个apche的spec文件。里面有我自己定义的一些东西,保证能在线上服务器上面使用。%define _topdir  /ziji/Centos5.4/%define _specdir %{_topdir}/SPEC%define _rpmdir  %{_topdir}/%define _srcrpmdir %{_topdir}/SRPMS... 全文

rpm apache rpm 定制apache spec 定制rpm

使用rpmbuild制作签名RPM包

                                 使用rpmbuild制作RPM包 每个 RPM 软件包由三个基本组件组成: 1. 元数据 – 关于软件包的数据:软件包名称、版本、发布、构建程序、日期、依赖关系等。 2. 文件 – 软件包提供的文件存档(包括文件属性) 3. 脚本 – 安装、更新和 / 或删除软件包时,执行这些脚本 当构建 RPM 软件包时,需要指定软件包的元数据,需要提供存档中的文件以及当需要嵌入或卸载软件包时 应运行的脚本。文件在软件包文件中存储为cpio存档。使用rpm2cpio命令可用于将其抽取到当前工作目录,以查看包文件,例如:rpm2cpio package-1.2.3-4.el6.x86_64.rpm | cpio -id RPM 软件包规则: 若要构建RPM软件包,您需要内部版本规则文件或spec文件。Spec文件是包含关于如何构建可安装的RPM软件包的信息的文本文件。其大致分为五部分: 1. 列出关于软件包的元数据(名称、版本、许可证等) 2. 构建说明,详细说明如何编写和准备软件 3. 脚本小程序,详细说明安装、卸载或升级时要运行的命令 4. 清单,软件包文件列表及其关于软件包安装的权限 5. changelog ,记录对此RPM软件包所做的更改 rpmbuild 步骤: 1. 准备 2. 构建 3. 安装 4. 打包完成的 RPM 5. 清理 试做一个小的RPM包,环境RHEL6.2,留下作为笔记。 一、相关目录 ~/rpmbuild/SOURCES/ 存放源码压缩包和补丁文件 ~/rpmbuild/BUILD/ 存放源码 ~/rpmbuild/SPECS/ 存放spec文件 ~/rpmbuild/RPMS/ 最终RPM包 相关命令:rpmbuild 二、准备GPG签名密钥 [kevin@desktop25 SPECS]$ sudo yum install pinentry-gui -y [kevin@desktop25 work]$ gpg --gen-key 一直往下就行,内容随意,密码自定。后面会提示输入密码,确认密码。确认然密码等待随机数,这时鼠标随意移动生成随机数。我这里yong密码kevin生成密钥: @查看密钥: [kevin@desktop25 SPECS]$ gpg --list-key /home/kevin/.gnupg/pubring.gpg ------------------------------ pub   2048R/8156471D 2012-03-07 uid                  kevin (kevin) <kevin@kevin.org> sub   2048R/641335E8 2012-03-07 @导出公共密钥: [kevin@desktop25 SPECS]$ gpg -a -o ~/RPM-GPG-KEY-kevin --export 8156471D @将以下内容添加到 ~/.rpmmacros 文件(用系统的密钥 ID 替换该八个字符密钥 ID ),因此, RPM 将用您在上面创建的密钥签署软件包。 [kevin@desktop25 SPECS]$ echo '%_gpg_name 8156471D' > ~/.rpmmacros 二、写个小例子:显示当前目录下的文件及目录树(引用linuxsir上一脚本,谢谢作者) [kevin@desktop25 work]$ vim file_tree ——————————————————————————————#!/bin/bash redir () {         #tab是真正的步长计算器         tab=$tab$singletab         line=${tab%"$singletab"}"|-------"         #local比较关键,它规定了count是当前的参数列表值         local count=$#         for file in "$@"; do                 thisfile=${thisfile:-$PWD}/$file                 #判断当前文件是否为目录,如果是就开始递归                   if [ -d "$thisfile" ]; then                                                 #如果当前目录是分枝列表的最底层,则需进行特殊处理。                         if [ $count -eq 1 ]; then                                 echo -e $line$file/                                 #将前一个|符号去掉,看看目录树就知道为什么了。                                 tab=${tab%"$singletab"}"\t"                                 redir $(ls $thisfile)                         else                                 echo -e $line$file/                                 redir $(ls $thisfile)                         fi                                         else                         echo -e $line$file                 fi                                 thisfile=${thisfile%/*}                 let count=count-1               done                 #这一步比较有意思,因为从递归出来的tab结尾可能是TAB也可能是$singletab,所以分成两步来去掉。         tab=${tab%"\t"}         tab=${tab%"|"}         line=${tab%"$singletab"}"|-------" } singletab="|\t" userinput="$@" if ls $userinput; then         for file in ${userinput:-.}; do                 echo $file                 echo '|'                 if [ -d "$file" ]; then                         cd $file                         redir $(ls)                         cd ..                 fi         done else         echo "$userinput is wrong" fi —————————————————————————————— [kevin@desktop25 work]$ chmod +x file_tree [kevin@desktop25 work]$ mkdir file_tree-1.0 [kevin@desktop25 work]$ mv file_tree file_tree-1.0/ [kevin@desktop25 work]$ tar -zcf file_tree-1.0.tar.gz file_tree-1.0/ [kevin@desktop25 work]$ vim file_tree.spec ——————————————————————————————Name:           file_tree    Version:        1.0    Release:        1%{?dist}    Summary:        list files in current folder.    Group:          file_tree    (所属团体) License:        GPL    (协议) URL:            http://192.168.0.25/testing    Source0:        %{name}-%{version}.tar.gz    (源包的名字) BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRequires:  /bin/rm,/bin/mkdir,/bin/cp    (所需命令) Requires:       /bin/bash,/bin/date    (所需命令) %description    list files in current folder. %prep %setup -q %build (注意这里删除了下面两行 configure 和 make) %install rm -rf $RPM_BUILD_ROOT#make install DESTDIR=$RPM_BUILD_ROOT    (记得注释掉) mkdir -p $RPM_BUILD_ROOT/usr/local/bin    (创建安装目录) cp file_tree $RPM_BUILD_ROOT/usr/local/bin    (拷贝文件到目录) %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) #%doc%attr(0755,root,root)/usr/local/bin/file_tree    (加上脚本的权限) %changelog    (软件说明)*Wed Mar 7 2012 kevin<chu345258361@gmail.com> -Inital RPM -Added /usr/local/bin/file_tree —————————————————————————————— [kevin@desktop25 work]$ sudo yum install rpmbuild -y [kevin@desktop25 work]$ rpmbuild ~    (运行 rpmbuild 命令将创建 RPM 软件包所需的目录结构。) [kevin@desktop25 work]$ cp file_tree.spec ~/rpmbuild/SPECS/ [kevin@desktop25 work]$ cp file_tree-1.0.tar.gz ~/rpmbuild/SOURCES/ [kevin@desktop25 work]$ cd ~/rpmbuild/SPECS/ [kevin@desktop25 SPECS]$ rpmbuild --sign -ba file_tree.spec 输入密码:未报错,OK。 [kevin@desktop25 SPECS]$ pwd /home/kevin/rpmbuild/SPECS [kevin@desktop25 SPECS]$ ls ../RPMS/x86_64/ file_tree-1.0-1.el6.x86_64.rpm 生成rpm包 file_tree-1.0-1.el6.x86_64.rpm 。 通过安装密钥和软件包并运行命令来测试软件包: [kevin@desktop25 x86_64]$ sudo rpm --import ~/RPM-GPG-KEY-kevin [kevin@desktop25 x86_64]$ cd ~/rpmbuild/RPMS/x86_64/ [kevin@desktop25 x86_64]$ rpm -ivh file_tree-1.0-1.el6.x86_64.rpm [kevin@desktop25 x86_64]$ file_tree     (输入命令file_tree显示当前文件) OK 四、发布RPM软件包 [kevin@desktop25 x86_64]$ sudo yum install createrepo -y (创建本地源repodata作为软件的仓库) [kevin@desktop25 x86_64]$ sudo mkdir /var/ftp/pub/testing [kevin@desktop25 x86_64]$ sudo cp file_tree-1.0-1.el6.x86_64.rpm /var/ftp/pub/testing/ [kevin@desktop25 x86_64]$ sudo createrepo -v /var/ftp/pub/testing/1/1 - file_tree-1.0-1.el6.x86_64.rpm Saving Primary metadata Saving file lists metadata Saving other metadata [kevin@desktop25 x86_64]$ sudo cp ~/RPM-GPG-KEY-kevin /var/ftp/pub/testing/ 加入yum源:[yum] name=yum baseurl=http://192.168.0.25/pub/testing enabled=1 gpgkey=http://192.168.0.25/pub/testing/RPM-GPG-KEY-kevin 验证: [kevin@desktop20 ~]$ sudo yum install file_tree -y OK,发布成功~本文出自 “梦想年华 @楚国小生” 博客,请务必保留此出处http://linuxkeep.blog.51cto.com/1010009/799424... 全文

spec RPM包 rpmbuild gpg rpm2cpio

华为N8500集群NAS系统第三次刷新测试记录

华为10月12日宣布,OceanStor N8500集群NAS存储系统在标准性能评估机构SPEC的SPECsfs2008基准测试中再次刷新NFS记录。这是继华为自2009年、2011年两次获得最高测试结果后,第三次刷新SPEC基准测试记录。... 全文

OceanStor N8500 SPEC 华为

SPEC测试数据:AMD四核浮点性能领先英特尔

近日,权威标准性能评估机构SPEC(www.spec.org)公布了最新的AMD四核皓龙处理器巴塞罗那的测试成绩。在SPECfp浮点运算中,AMD巴塞罗那以36%领先的成绩击败了英特尔至强处理器。... 全文

四核 多核 AMD 英特尔

构建自动化运维之基础设施—定制mysql的rpm包

percona-mysql-server的rpm定制文件下载http://www.percona.com/redir/downloads/Percona-Server-5.5/Percona-Server-5.5.28-29.2/source/Percona-Server-55-5.5.28-rel29.2.360.rhel6.src.rpm... 全文

spec rpm 自动化运维

关于SPECjAppServer评测,您应该知道的“故事”

【51CTO记者独家报道】谈到评价服务器的标准,也许您脑子里会马上闪出一些术语:CPU是双核还是四核?四路还是八路?主频多少?内存多大?总线怎么样?……但是,这些性能指标真的能体现出一台服务器的性能吗?如果把服务器看作一辆汽车,那上面的那些性能指标就代表着汽车的发动机、驱动方式等等;但是,真正能体现车子价值的,当然是在实际环境中的表现:启动速度、耗油量、噪音、稳定程度……因此,最合理的采购,当然就是在真实环境“试运行”——用中国的俗语来说,就是“是骡子是马,拉出来遛遛”!然而,限于用户采购的现实情况,让所有的服务器和IT系统都能在真实环境下“跑”一段时间是不现实的。那么,有什么可以替代的办法吗?也许很多人会想到评测。的确,这也许是最好的解决办法。但是,单纯的产品评测往往限于对产品指标的再重复,而用户需要的,是那种真正能模拟产品在实际应用中的表现的评测!这种需求有可能满足吗?当然!SPECjAppServer就是这样一个评测。近日,值基于双核平台的浪潮天梭高性能系统在SPECjAppServer2004服务器应用性能测试中刷新世界纪录(详情请参见http://server.51cto.com/art/200612/36176.htm)的契机,记者采访了浪潮服务器技术总监胡雷钧先生,就SPEC和本次测试的相关情况进行了了解。... 全文

服务器 SPEC SPECjAppSever2004 浪潮 评测

RHEL6.2手动封装rpm源码包安装星际译王

星际译王(StarDict)是利用GTK(GIMP TOOLKIT)开发的国际化的、跨平台的自由的桌面字典软件。自身并不包含字典,须自行下载配合使用。它可以运行于多种不同的平台,如 Linux、Windows、FreeBSD及Solaris等,并使用GPL授权。 在RHEL6.2 64位系统,通过源码包安装,编译时disable各种选项好不容易通过后,始终无法make成功,google后初步判断应该是gcc4.4的bug,打了补丁也无效。最后通过编译rpm源码包成功安装。下载地址:(包含rpm包和rpm源码包,不喜欢编译的可选择rpm binary安装包直接安装)32位系统:http://pkgs.org/centos-6-rhel-6/naulinux-school-i386/stardict-3.0.2-1.el6.i686.rpm/download/64位系统:http://pkgs.org/centos-6-rhel-6/puias-x86_64/stardict-3.0.1-22.puias6.x86_64.rpm/download/ [root@rhel6 ~]# rpm -ivh stardict-3.0.1-22.puias6.src.rpm    warning: stardict-3.0.1-22.puias6.src.rpm: Header V3 RSA/SHA256 Signature, key ID 41a40948: NOKEY      1:stardict               warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   ########################################### [100%]   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   warning: user mockbuild does not exist - using root   warning: group mockbuild does not exist - using root   [root@rhel6 ~]# cd rpmbuild/SPECS   [root@rhel6 SPECS]# cat stardict.spec | grep -v "#" | grep Requires: Requires: enchant, espeak, gucharmap >= 2.22.1, libbonobo >= 2.2.0, libgnome >= 2.2.0, libgnomeui >= 2.2.0, libsigc++20 >= 2.0.17 BuildRequires: autoconf, automake, libtool BuildRequires: desktop-file-utils, enchant-devel, gettext,  intltool, libgnomeui-devel >= 2.2.0, libsigc++20-devel, libtool, perl-XML-Parser, scrollkeeper BuildRequires: gucharmap-devel >= 2.22.1 //从stardict.spec文件可以发现编译过程需要以上的依赖包,所以必须先安装好依赖包再进行编译,其中的一些非系统自带的依赖包在以下地址下载: http://down.51cto.com/data/766011 [root@rhel6 SPECS]# rpm -ba stardict.spec //若编译时出现以上错误,则通过导入PGK_CONFIG的环境变量解决 [root@rhel6 SPECS]# export PGK_CONFIG=/usr/bin/pkg-config  [root@rhel6 SPECS]# rpm -ba stardict.spec  [root@rhel6 SPECS]# cd ../RPMS/x86_64/  [root@rhel6 x86_64]# ls  stardict-3.0.1-22.el6.x86_64.rpm  stardict-debuginfo-3.0.1-22.el6.x86_64.rpm  [root@rhel6 x86_64]# rpm -ivh stardict-3.0.1-22.el6.x86_64.rpm   这时候在附件里面已经可以启动星际译王了。不过现在只能联网才能使用,以下开始添加字典:字典可以在http://abloz.com/huzheng/stardict-dic/zh_CN/这个网站上下载你想要的其他中英词库或者其他你想要的词库。下载解压后将其解压在 /usr/share/stardict/dic/下即可使用[root@rhel6 ~]# ls /usr/share/stardict/dic/stardict-hanyuchengyucidian-2.4.2  stardict-kdic-computer-gb-2.4.2  stardict-ncce-ce-2.4.2stardict-hycihai-2.4.2             stardict-langdao-ec-gb-2.4.2     stardict-ncce-ec-2.4.2... 全文

stardict rpmbuild 星际译王 spec

构建自动化运维之基础设施—定制php for fpm 的rpm包

 php定制rpm包支持fpm---spec的书写安装epel源... 全文

php fpm spec rpm

1