zoukankan      html  css  js  c++  java
  • rmp打包

    一、安装打包工具

    yum install rpmdevtools -y

    二、创建工作区

    rpmdev-setuptree

    说明

    BUILD:源码包被解压至此,并在该目录的子目录完成编译,宏为 %_builddir

    BUILDROOT:保存 %install 阶段安装的文件,宏为 %_buildrootdir

    RPMS:生成/保存二进制 RPM 包,宏为 %_rpmdir

    SOURCES:保存源码包(如 .tar 包)和所有 patch 补丁,宏为 %_sourcedir

    SPECS:保存 RPM 包配置(.spec)文件,宏为 %_specdir

    SRPMS:生成/保存源码 RPM 包(SRPM),宏为 %_srcrpmdir

    三、创建规格文件

    cd ~/rpmbuild/SPECS/

    rpmdev-newspec xx.spec

    四、编辑spec文件

    1,内置宏变量

    %{_sysconfdir}        /etc
    %{_prefix}            /usr
    %{_exec_prefix}       %{_prefix}
    %{_bindir}            %{_exec_prefix}/bin
    %{_lib}               lib (lib64 on 64bit systems)
    %{_libdir}            %{_exec_prefix}/%{_lib}
    %{_libexecdir}        %{_exec_prefix}/libexec
    %{_sbindir}           %{_exec_prefix}/sbin
    %{_sharedstatedir}    /var/lib
    %{_datadir}           %{_prefix}/share
    %{_includedir}        %{_prefix}/include
    %{_oldincludedir}     /usr/include
    %{_infodir}           /usr/share/info
    %{_mandir}            /usr/share/man
    %{_localstatedir}     /var
    %{_initddir}          %{_sysconfdir}/rc.d/init.d 
    %{_topdir}            %{getenv:HOME}/rpmbuild
    %{_builddir}          %{_topdir}/BUILD
    %{_rpmdir}            %{_topdir}/RPMS
    %{_sourcedir}         %{_topdir}/SOURCES
    %{_specdir}           %{_topdir}/SPECS
    %{_srcrpmdir}         %{_topdir}/SRPMS
    %{_buildrootdir}      %{_topdir}/BUILDROOT
    %{_var}               /var
    %{_tmppath}           %{_var}/tmp
    %{_usr}               /usr
    %{_usrsrc}            %{_usr}/src
    %{_docdir}            %{_datadir}/doc
    %{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
    $RPM_BUILD_ROOT       %{buildroot}

    2,参数解析

    Name: 软件包的名称,后面可使用%{name}的方式引用

    Summary: 软件包的内容概要

    Version: 软件的实际版本号,例如:1.0.1等,后面可使用%{version}引用

    Release: 发布序列号,例如:1linuxing等,标明第几次打包,后面可使用%{release}引用

    Group: 软件分组,建议使用标准分组

    License: 软件授权方式,通常就是GPL

    Source: 源代码包,可以带多个用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,Ltd

    Disstribution: 发行版标识

    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 软件的详细说明

    %prep 预处理脚本

    %setup -n %{name}-%{version}** 把源码包解压并放好通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。一般用%setup -c就可以了,但有两种情况:一就是同时编译多个源码包,二就是源码的tar包的名称与解压出来的目录不一致,此时,就需要使用-n参数指定一下了。

    %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 打补丁通常补丁都会一起在源码tar.gz包中,或放到SOURCES目录下。一般参数为:

    %patch -p1 使用前面定义的Patch补丁进行,-p1是忽略patch的第一层目
    %Patch2 -p1 -b xxx.patch 打上指定的补丁,-b是指生成备份文件
    %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的工作

    %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 清理临时文件

    %pre rpm安装前执行的脚本

    %post rpm安装后执行的脚本

    %preun rpm卸载前执行的脚本

    %postun rpm卸载后执行的脚本

    %files 定义那些文件或目录会放入rpm中

    %defattr (-,root,root)** 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755

    %changelog 变更日志

    3,经典配置

     1 Name:  zabbix  
     2 Version:  3.0.3    
     3 Release:  1%{?dist}
     4 Summary:  zabbix_agentd
     5 
     6 Group:    zabbix
     7 License:  GPL
     8 URL:    www.yang.com
     9 Source0:  zabbix-3.0.3.tar.gz
    10 Source1:  zabbix_agentd
    11 Source2:  nginx_monitor.sh
    12 Source3:  userparameter_nginx.conf
    13 Source4:  hostmonitor.conf
    14 Source5:  process.discovery
    15 Source6:  userparameter_process.conf
    16 Source7:  redis_check.conf
    17 Source8:  redis_cluster_check.py
    18 Source9:  redis_multiport_check.py
    19 Source10:  tcp_connections.sh
    20 Source11:  iostat-collect.sh
    21 Source12:  iostat-parse.sh
    22 Source13:  iostat-zabbix.conf
    23 
    24 BuildRequires:    gcc, gcc-c++
    25 Requires:  gcc, gcc-c++, chkconfig
    26 
    27 %description
    28 Zabbix agentd 3.0.3
    29 
    30 %pre
    31 grep zabbix /etc/passwd > /dev/null
    32 if [ $? != 0 ] 
    33 then useradd zabbix -M -s /sbin/nologin
    34 fi
    35 [ -d /etc/zabbix  ]||rm -rf /etc/zabbix
    36 [ -d /etc/zabbix  ]||rm -rf /etc/zabbix-3.0.3
    37 
    38 
    39 %post
    40 sed -i "/^ServerActive=/cServerActive=172.30.17." /etc/zabbix/etc/zabbix_agentd.conf
    41 sed -i "/^Server=/cServer=172.30.17." /etc/zabbix/etc/zabbix_agentd.conf
    42 sed -i "/Timeout=3/cTimeout=30" /etc/zabbix/etc/zabbix_agentd.conf
    43 sed -i "/HostMetadata=/cHostMetadata=OPS-TMP" /etc/zabbix/etc/zabbix_agentd.conf
    44 sed -i "/^Hostname=/cHostname=OPS-TMP" /etc/zabbix/etc/zabbix_agentd.conf
    45 echo "UnsafeUserParameters=1" >>/etc/zabbix/etc/zabbix_agentd.conf
    46 echo "EnableRemoteCommands=1" >>/etc/zabbix/etc/zabbix_agentd.conf
    47 echo "Include=/etc/zabbix/etc/zabbix_agentd.conf.d/*.conf" >>/etc/zabbix/etc/zabbix_agentd.conf
    48 chkconfig zabbix_agentd on
    49 
    50 %preun
    51 systemctl stop zabbix_agentd
    52 %postun
    53 userdel zabbix
    54 rm -rf /etc/zabbix*
    55 %prep
    56 %setup -q
    57 
    58 
    59 %build
    60 ./configure --prefix=/etc/%{name}-%{version}  --enable-agent
    61 make -j16 %{?_smp_mflags}
    62 
    63 %install
    64 test -L %{buildroot}/etc/%{name} && rm -f %{buildroot}/etc/%{name}
    65 install -d %{buildroot}/etc/profile.d
    66 make install DESTDIR=%{buildroot}
    67 install -p -D -m 0755 %{SOURCE1}   %{buildroot}/etc/init.d/zabbix_agentd
    68 install -p -D     %{SOURCE2}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/nginx_monitor.sh
    69 install -p -D     %{SOURCE3}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/userparameter_nginx.conf
    70 install -p -D     %{SOURCE4}   %{buildroot}/etc/nginx/conf.d/hostmonitor.conf
    71 install -p -D     %{SOURCE5}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/process.discovery
    72 install -p -D     %{SOURCE6}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/userparameter_process.conf
    73 install -p -D     %{SOURCE7}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/redis_check.conf
    74 install -p -D     %{SOURCE8}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/redis_cluster_check.py
    75 install -p -D     %{SOURCE9}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/redis_multiport_check.py
    76 install -p -D     %{SOURCE10}   %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/tcp_connections.sh
    77 install -p -D     %{SOURCE11}  %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/iostat-collect.sh
    78 install -p -D     %{SOURCE12}  %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/iostat-parse.sh
    79 install -p -D      %{SOURCE13}    %{buildroot}/etc/%{name}-%{version}/etc/zabbix_agentd.conf.d/iostat-zabbix.conf
    80 
    81 echo 'export PATH=/etc/zabbix/bin:/etc/zabbix/sbin:$PATH' > %{buildroot}/etc/profile.d/%{name}.sh
    82 ln -sf /etc/%{name}-%{version}       %{buildroot}/etc/%{name}
    83 
    84 %files
    85 %defattr (-,root,root,0755)
    86 /etc/%{name}
    87 /etc/%{name}-%{version}/*
    88 /etc/profile.d/%{name}.sh
    89 /etc/nginx/conf.d/hostmonitor.conf
    90 %attr(0755,root,root) /etc/rc.d/init.d/zabbix_agentd
    91 %changelog
    92 %clean 
    93 rm -rf %{buildroot}

    4,测试配置

     1 Name:           typesetting
     2 Version:        1.0
     3 Release:        1%{?dist}
     4 Summary:        typesetting
     5 License:        guanghe
     6 Source0:        test.sh
     7 
     8 %description
     9 
    10 %prep
    11 
    12 %build
    13 
    14 %install
    15 install -p -D -m 755 %{SOURCE0} %{buildroot}/opt/typesetting/test.sh
    16 install -d %{buildroot}/etc/profile.d
    17 echo '/opt/typesetting/test.sh' > %{buildroot}/etc/profile.d/%{name}.sh
    18 chmod 755 %{buildroot}/etc/profile.d/%{name}.sh
    19 %files
    20 /opt/typesetting/test.sh
    21 /etc/profile.d/%{name}.sh
    22 %changelog
    23 
    24 %post
    25 /etc/profile.d/%{name}.sh

    五、拷文件、打包、安装、卸载

    1,将需要安装的脚本文件放到SOURCES下

    cd ~/rpmbuild/SPECS/

    2,编辑构建配置文件

    3,打包

    rpmbuild -bb xx.spec

    4,查看打好的包

    cd ~/rpmbuild/RPMS/x86_64/

     5,安装与卸载

    rpm -ivh xx.rpm

    rpm -e xx

    ok

    六、优化配置

     1 #compile cmd: rpmbuild -bb typesetting.spec
     2 Name:           typesetting
     3 Version:        1
     4 Release:        1
     5 Summary:        typesetting
     6 
     7 License:        Beijing Founder Electronic Co.,LTD
     8 Source0:        typesetting.tar.gz
     9 
    10 %description
    11 founder typesetting
    12 
    13 %prep
    14 
    15 %install
    16 rm -rf $RPM_BUILD_ROOT
    17 mkdir -p $RPM_BUILD_ROOT/root/tmp
    18 install -m 755 %{SOURCE0} $RPM_BUILD_ROOT/root/tmp/typesetting.tar.gz
    19 
    20 %files
    21 /root/tmp/typesetting.tar.gz
    22 
    23 %post
    24 cd /root/tmp
    25 tar -zxf typesetting.tar.gz
    26 mkdir /opt/typesetting
    27 cd typesetting
    28 cp * /opt/typesetting
    29 rm -rf *
    30 chmod 755 /opt/typesetting/*.sh
    31 echo '/opt/typesetting/start.sh' >> /etc/profile
    32 source /etc/profile
    33 
    34 %preun
    35 /opt/typesetting/stop.sh
    36 
    37 %postun
    38 rm -rf /opt/typesetting
    39 rm -rf /root/tmp
    40 sed -i '//opt/typesetting/start.sh/d' /etc/profile 

     

  • 相关阅读:
    gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能
    AspectJ获取方法注解的信息
    type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds int,java.lang.Object
    MySQL@淘宝 资料分享
    MySQL的语句执行顺序
    关于HttpClient上传中文乱码的解决办法
    使用IntelliJ IDEA查看类的继承关系图形
    javax.net.ssl.SSLException: Certificate doesn't match any of the subject alternative names
    Failed to process import candidates for configuration class [com.simple.....]
    安装npm及cnpm(Windows)
  • 原文地址:https://www.cnblogs.com/guanghe/p/14919742.html
Copyright © 2011-2022 走看看