精华内容
下载资源
问答
  • rpm包的形式升级openssh版本到8.0

    千次阅读 2019-12-20 21:49:53
    升级openssh之前,我们要做的事情,首要是备份,备份的文件有以下三份: cp /etc/pam.d/sshd{,.bak} cp /etc/ssh/ssh_config{,.bak} cp /etc/ssh/sshd_config{,.bak} 第二步 如果可以的话,给服务器装上telnet...

    写在前面:

    为什么要把这段写在前面呢?血的教训,千万要给自己留一条后路!

    第一步

    升级openssh之前,我们要做的事情,首要是备份,备份的文件有以下三份:

    cp /etc/pam.d/sshd{,.bak} cp /etc/ssh/ssh_config{,.bak} cp /etc/ssh/sshd_config{,.bak}

    第二步

    如果可以的话,给服务器装上telnet服务,多一条后路就多一条生路!(也怪生产环境不允许装telnet服务啊!)小太爷就给自己挖了一个坑,集群的三台服务器现在还挂着呢!

     

    进入正题

    集群内服务器比较多,一台一台源码编译的话就相当的麻烦。因此我们采用打rpm包的方式对集群的openssh做版本升级。

    适用版本:centos6、7系列,redhat6.5及以后,redhat7。红帽6或centos6系列的版本要在6环境编译,红帽7或centos7系列的要在7环境里面编译。步骤通用!

    1、首先要装一些源码编译需要的服务

    yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip -y

    2、按部就班的,一步一步来就可以了,虽然写的有点乱。下载版本根据需求到网站上找就好了,网站就在链接里面。

    mkdir -p /root/rpmbuild/{SOURCES,SPECS}

    cd /root/rpmbuild/SOURCES

    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz

    wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz

    tar zxvf openssh-8.0p1.tar.gz openssh-8.0p1/contrib/redhat/openssh.spec

    mv openssh-8.0p1/contrib/redhat/openssh.spec ../SPECS/

    chown sshd:sshd /root/rpmbuild/SPECS/openssh.spec

    cp /root/rpmbuild/SPECS/openssh.spec /root/rpmbuild/SPECS/openssh.spec_def

    sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec

    sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec

    cd /root/rpmbuild/SPECS/

    rpmbuild -ba openssh.spec

    编译完成后,会产生4个rpm包,放在/root/rpmbuild/RPMS/x86_64目录下。在服务器上,创建一个openssh文件夹,把这四个包拷贝过来,执行yun -y install ./* 即可。

    查看ssh的版本:ssh -V

     

     

    编译过程遇到的错误:

    错误:构建依赖失败: openssl-devel < 1.1 被 openssh-8.0p1-1.el7.x86_64 需要

    解决:[root@localhost SPECS]# vim openssh.spec 注释掉 BuildRequires: openssl-devel < 1.1 这一行

    安装后要修改选项:

    cd /etc/ssh/ chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key

    echo "PermitRootLogin no" >> /etc/ssh/sshd_config systemctl restart sshd

     

    centos 7 记得修改这个文件。不然会出现密码是对的,却无法登陆。

     

    [root@iZ16pk5aqeZ ~]# cat /etc/pam.d/sshd

    #%PAM-1.0

    auth required pam_sepermit.so

    auth include password-auth

    account required pam_nologin.so

    account include password-auth

    password include password-auth

    ## pam_selinux.so close should be the first session rule

    session required pam_selinux.so close

    session required pam_loginuid.so

    ## pam_selinux.so open should only be followed by sessions to be executed in the user context

    session required pam_selinux.so open env_params

    session optional pam_keyinit.so force revoke

    session include password-auth

     

     

    写在最后:

    重启sshd之后,先不要断开当前终端!一定要打开新的终端,登录一下看是否能登得上去。如果登不上去,就用之前的备份文件覆盖(简单省事,出错率还不高),然后再重启sshd服务!

    展开全文
  • RPM包的安装与升级

    2020-06-07 11:28:17
    之所以选择安装apache程序,是因为我们后续安装源码包时也计划安装apache程序,这样就能初步认识到源码包和RPM包的区别。不过需要注意的是,同一个程序的RPM包和源码包可以安装到一台服务器上,但是只能启动一个,...

    说了这么多,终于可以开始安装了,我们先安装apache程序。之所以选择安装apache程序,是因为我们后续安装源码包时也计划安装apache程序,这样就能初步认识到源码包和RPM包的区别。不过需要注意的是,同一个程序的RPM包和源码包可以安装到一台服务器上,但是只能启动一个,因为它们需要占用同样的80端口。不过,如果真在生产服务器上,那么一定不会同时安装两个apache程序,容易把管理员搞糊涂,而且会占用更多的服务器磁盘空间。

    1. RPM 包默认安装路径

    源码包和RPM包安装的程序为什么可以在同一台服务器上呢?主要是因为安装路径不同,所以不会覆盖安装。RPM包一般采用系统默认路径安装,而源码包一般通过手工指定安装路劲(一般安装到/usr/local/中)安装。
    RPM包默认安装路径是可以通过合令查询的,一般安装在如表10-1所示的目录中。

    目录说明
    /etc/配置文件安装目录
    /usr/bin/可执行的命令安装目录
    /usr/lib/程序所使用的函数库保存位置
    /usr/share/doc/基本的软件使用手册保存位置
    /usr/share/man/帮助文件保存位置

    RPM包难道就不能手工指定安装路径吗?当然是可以的,但是一旦手工指定安装路径,所有的安装文件就会安装到手工指定位置,而不会安装到系统默认位置。而系统的默认搜索位置并不会改变,依然会去默认位置之下搜索,当然系统就不能直接找到所需的文件,也就失去了作为系统默认安装路径的一些好处。所以我们一般不会指定RPM包的安装路径,而使用默认安装路径。

    1. RPM包的安装
    [root@localhost ~]# rpm –ivh 包全名 
    #注意一定是包全名。如果跟包全名的命令要注意路径,因为软件包在光盘当中
    
    选项说明
    -iinstall安装(install);
    -v显示更详细的信息(verbose);
    -h打印#,显示安装进度(hash);
    –nodeps不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装。如果没有安装则会报错。如果我不管依赖性,想强行安装,可以使用这个选项。注意: 这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做;
    –replacefiles替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可以忽视这个报错,而覆盖安装;
    –replacepkgs替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍;
    –force强制安装。不管是否已经安装,都重新安装。就是replacefiles 和 replacepkgs 的综合;
    –test测试安装。不会实际安装,只是检测一下依赖性;
    –prefix指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意:如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以 rpm 包我们一般都采用默认路径安装,例如:rpm -ivh --prefix=/usr/local/httpd;

    例如,安装apache软件包,注意出现两个100%才是正确安装,第一个100%仅是在准备,第二个100%才是正确安装。

    [root@localhost ~]# rpm -ivh /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm
    

    如果打算同时安装多个软件包呢?可以用一条命令同时安装,将多个软件包用空格分开就可以了。

    [root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm
    #一次安装多个软件包
    

    RPM包默认保存在系统光盘的Packages(注意P大写)目录中,所以在安装软件前需要挂载光盘,例如:

    [root@localhost ~]# mkdir /mnt/cdrom
    [root@localhost ~]# mount /dev/sr0 /mnt/cdrom/
    
    1. RPM 包升级
    [root@localhost ~]# rpm –U|Fvh 包全名
    
    选项说明
    -U升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade);
    -F升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen);
    展开全文
  • rpm补丁文件和升级包制作教程

    千次阅读 2017-07-20 16:39:33
    在开始介绍之前,首先表达一个观点,一般不推荐使用root构建构建RPM包,尤其对RPM包构建不是很熟悉的用户,因为一些配置或者误操作可能会影响甚至破坏系统,造成一些不必要的损失。另外一点是使用普通用户基本可以...

    1.介绍
    在开始介绍之前,首先表达一个观点,一般不推荐使用root构建构建RPM包,尤其对RPM包构建不是很熟悉的用户,因为一些配置或者误操作可能会影响甚至破坏系统,造成一些不必要的损失。另外一点是使用普通用户基本可以满足构建大多数RPM包的要求。
    RPM包是一种优秀的软件包安装管理系统,而RPM源码包则是RPM包系统中重要的组成部分,是其他各种RPM包母体,其他种类的RPM包都是由RPM源 码包生成的。这样当软件有升级更新时,首先需要更新的是RPM源码包,下来通过RPM源码包生成新的RPM安装包等其他包。
    准备知识
    制作RPM升级包需要一个完整的RPM包构建环境,如何构建RPM构建环境可以参考另一份文档(RPM包如何制作)。我个人认为RPM升级包制作分为两种情况:
    1 只是对RPM包小部分的内容进行更新,比如是代码中的一个bug或者小变动。这种情况通过生成一个补丁文件附加到已存在的RPM源码包的方式就可以实现升 级操作。该升级方式操作简单,生成一个源码补丁另外在SPEC文档中添加两行针对新补丁文件的操作即完成源码更新包的操作。
    2 软件有重大功能变化,即有大量的源码文件发生变化或者大的内容变化,这种情况一般处理的方式是使软件包进行一个大的版本号的升级,并把上一版源码包中所有 补丁文件和最新更新的所有内容结合到一起,重新制作出新版本的源码包。这种升级方式相对来说操作复杂一些,需要重新打包源码压缩包,需要修改SPEC文档 较多内容。

    作为普通软件包的使用者最多遇到的是第一种情形,一般只会针对某个功能添加一点自己的补丁以改善软件包的特性。而第二种情况更多的软件包的开发者、维护者可能会做的大手术。

    RPM源码包的组成可以分为:软件源码所有文件的归档文件(即压缩文件)、一些补丁文件(可能不存在)和SPEC文档。如果是需要对SPEC文档更新,则需要直接修改该文档(补丁文件对此是没有效果的)。

    2.下面主要以上面提到的第一种情况介绍升级包的制作过程。

    制作升级包
    假设如下:
    当前用户的RPM构建根目录是 ~/rpmbuild.
    软件包名和版本号为 hellorpm-0.1

    1.安装hellorpm源码包,安装程序将会把hellorpm源码包中的SPEC文档解压到~/rpmbuild/SPECS,把源码归档包和补丁文件安装到~/rpmbuild/SOURCES。
    2. 获得一个干净的hellorpm源码树,该步操作将在SPEC文档的内容的控制下,从SOURCES目录下解压源码归档文件到BUILD目录,并打上所有SPEC文档中列出的补丁文件和其他一些操作。该步操作命令如下:

    $rpmbuild  -bp  SPECS/hellorpm.spec

    3 现在一个完整的源码工作目录以及生成,现在可以进入源码目录,修改需要的内容,并可以在此目录下使用configure和make命令进行测试,如果确认 完成源码的修改,则可以开始生成补丁文件。在开始生成补丁文件之前,为了确保补丁文件的正确,这里我推荐按如下操作生成补丁文件:
    首先进入BUILD目录:

     cd  ~/rpmbuild/BUILD/

    重命名当前hellorpm源码工作目录:

     mv hellorpm-0.1 hellorpm-0.1.work

    按上面第2步从新生成一个干净的源码目录:

     rpmbuild -bp  ../SPECS/hellorpm.spec

    重命名上步生成的源码目录:

     mv hellorpm-0.1 hellorpm-0.1.new

    把在前面源码树中所做的源码的确定修改再次更新的hellorpm-0.1.new中,完成修改操作后,再次重复第二步操作生成一个干净的源码目录,并使用diff命令生成补丁文件,生成的补丁文件将存放于SOURCES目录,操作如下:

     rpmbuild -bp  ../SPECS/hellorpm.spec
     diff -uNr  hellorpm-0.1  hellorpm-0.1.new >../SOURCES/hellorpm-0.1-test.patch

    注意,使用 diff 时运用了选项 -uNr 。 -u 以 统一格式创建补丁文件,这种格式比缺省格式更紧凑些。 -N 确保补丁文件将正确地处理已经创建或删除文件的情况。 -r 比较命令行上所给出的两个目录的所有子目录中的所有文件。

    另外还要注意:只要您完全按上述来做,这些目录名是无关紧要的。 补丁文件中将有这些目录名,但我们将通知补丁程序忽略它们。

    检查一下补丁文件 hellorpm-0.1.patch可以确认补丁文件内容是否正常。

    到此补丁文件制作成功,接着需要修改SPEC文档加入新生成的补丁文件的内容。下面是一个已该好的hellorpm SPEC文档的模板,大家可以参考。

    hellorpmp.spec文件内容

    Summary: hellorpm is a test program。
    Name: hellorpm
    Version: 0.1
    Release: 1                    #注意更新该代码
    Source0: %{name}-%{version}.tar.bz2
    License: GPL
    Group: Development/Tools
    BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
    
    Patch0:hellorpm-0.1-test.spec  #新加入行
    
    %description
    The hellorpm program is a test.
    %prep
    %setup -q
    %patch0  -p1                  #新加入行
    %build
    #./configure                
    make
    %install
    make DESTDIR=$RPM_BUILD_ROOT install
    %files
    %defattr(-,root,root)
    /usr/local/bin/hellorpm
    %doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1
    %doc README

    对于这个简单例子中,SPEC文档对于新补丁文件的改变主要是两行,也就是上面加注的两行,补丁文件序号顺序递增,且上下两处之间的数字是对应的。另一个修改是软件版本号的修改,一般修改Release后面的数值以便和老的版本区别。

    现可以使用下面命令生成新的RPM源码包和二进制安装包等其他包, 新生成的源码包在~/rpmbuild/SRPMS/目录,二进制安装包和调试信息包在~/rpmbuild/RPMS。

     rpmbuild -ba  SPECS/hellorpm.spec

    到此一个事例的RPM源码包的升级包制作过程全部完成。

    一些特殊情况
    1 如果在源码目录中一些文件增删会影响到最终生成的二进制安装包中文件的增删,那么可能需要修改SPEC文档中file字段的内容,file字段中列出的文 件声明这些文件都将作为软件包中文件存在,构建程序再构建过程会核对该出列出的文件和实际存在的文件列表,任何不符都将报错。如果你给hellorpmp 包新加了一个配置文件hellorpm.conf,而最终此文件的安装目录是/etc,那么你可以在hellorpm.spec文件中的file段添加如 下一行来声明新文件:

     %files
     /etc/hellorpm.conf

    2 有些情况你在源码目录中添加的新文件,需要最后安装到实际系统中,对于此安装操作,你可能需要修改源码目录中的Makefile文件告诉它该如何安装此文 件,添加安装命令到SPEC文档中的install段可以达到同样的效果,但你不要忘记上面提到的更新file字段的操作。
    3 对于一些需要在软件包安装到真实系统之后进行某些操作的需求,可以通过在SPEC文档post字段添加命令语句方式实现。比如你想在安装软件包后新建或者 删除一些文件,或者改变某文件的属性等等,但原则是一般可以通过Makefile实现的操作步推荐使用post脚本的方式。

    注:上面介绍的补丁文件的制作不适合一种情况,即对于有二进制文件变化情况,上面介绍的方法生成的补丁文件无法完全表示其中内容的变化,关于此问题的解决,目前我推荐的办法是直接更新源码目录归档文件。

    注2:此内容是对上面[注:]内容的补充,如果源码中有非文本文件的增加,可以通过在SPEC文档中添加Source的方式声明,并在下面的预处理段(pre)中正确的此声明即可。

    参考文档
    http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part2/index.html 用 RPM 打包软件,第 2 部分

    展开全文
  • RPM打包

    千次阅读 2019-04-21 11:53:16
    RPM打包rpmbuild宏构建过程1、默认工作路径2、准备3、准备Spec文件4、编译5、进行安装测试6、使用rpmlint工具检查rpm包的合规性patch生成方法Python打包附: Group附: gtkglarea的spec文件 rpmbuild 安装rpmdevtools ...

    rpmbuild

    安装rpmdevtools 的同时一同安装上rpmlint(检查包的质量)
    yum install rpmdevtools rpmlint

    rpmbuild --showrc:显示rpm所有的宏

    rpmbuild
    -ba 既生成src.rpm又生成二进制rpm
    -bs 只生成src的rpm
    -bb 只生二进制的rpm
    -bp 执行到pre
    -bc 执行到 build段
    -bi 执行install段
    -bl 检测有文件没包含

    macros都在这里:/usr/lib/rpm/macros or /usr/share/doc/rpm-[version]/macros
    使用的时候:%{}

    内置的macro
    %{_libdir} /usr/lib
    %{_bindir} /usr/bin/
    %{_tmppath} /var/tmp
    %_usr /usr

    查看macro最简单的方法:rpm –eval [macro]

    构建过程

    1、默认工作路径

    rpm从4.5.x版本开始,将rpmbuid的默认工作路径移动到用户家目录下的rpmbuild目录里,即$HOME/rpmbuild,并且推荐用户在制作rpm软件包时尽量不要以root身份进行操作。
    关于rpmbuild默认工作路径的确定,通常由在/usr/lib/rpm/macros这个文件里的一个叫做%_topdir的宏变量来定义。
    如果用户想更改这个目录名,可以在~/.rpmmacros的隐藏文件,然后在里面重新定义%_topdir,指向一个新的目录名:
    %_topdir $HOME/rpmbuild

    2、准备

    1、准备构建目录(rpm build tree)
    $ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
    官方网站提示:执行rpmdev-setuptree会在当前用户家目录下的rpmbuild目录(如果该目录不存在也会被自动创建)里自动建立上述目录。

    目录名 宏别名 说明
    BUILD %_builddir 编译rpm包的临时目录
    BUILDROOT %_buildrootdir 编译后生成的软件临时安装目录。最新官网上已经不创建这个目录了!
    RPMS %_rpmdir 最终生成的可安装rpm包的所在目录
    SOURCES %_sourcedir 所有源代码和补丁文件的存放目录
    SPECS %_specdir 存放SPEC文件的目录(重要)
    SRPMS %_srcrpmdir 最终的rpm源码格式存放路径(暂时忽略掉,别挂在心上)

    2、将所有用于生成rpm包的源代码、shell脚本、配置文件都拷贝到SOURCES目录里,注意通常情况下源码的压缩格式都为*.tar.gz格式
    cp main-0.1.tar.gz ~/rpmbuild/SOURCES

    3、准备Spec文件

    %define nginx_user nginx       #这是我们自定义了一个宏,名字为nginx_user值为nginx,%{nginx_user}引用
        
    Name:           main
    Version:        0.1
    Release:        1%{?dist}        #?表示后面的dist有值就启用,没有值就舍弃
                                     #dist根据系统版本来定义,redhat5是el5,redhat6是el6,Fedora 9就是 .fc9
    Summary:        Calculate sin and cos value  #一行写完,不要太长;不要在末尾加句点!!RPM 不喜欢最后有个句点
    Group:          System Environment/Daemons   #通过cat  /usr/share/doc/rpm-4.8.0/GROUPS这条命令查看系统上支持的组
    License:        GPL
    URL:            http://linux.vbird.org
    Source0:        main-0.1.tar.gz
    Source0:        %{name}-%{version}.tar.gz 
    Source1:        index.html 
    Source2:        init.nginx 
    Source3:        fastcgi_params 
    Source4:        nginx.conf 
    #patch0:        a.patch                 #如果需要补丁,依次写
    BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)  #最好置空。package build的地方,也是从这里install的
    #BuildRoot:     %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
     
    %description      #一句话不要太长,否则rpmlint 会提示your description is too long;不要在末尾加句点!!RPM 不喜欢最后有个句点
    This package will let you input your name and calculate sin and cos value
    
    
    BuildRequires:gcc gcc-c++ autoconf automake openssl-devel pcre-devel    #编译时依赖的包
    Requires:pcre-devel                                                     #安装时依赖的包
    
    
    %prep        预处理脚本。默认的,这个段落里唯一执行的就是setup宏。
    %setup             不加任何选项,仅将软件包打开。把源码包解压并放好。默认从SOURCES里的包解压到BUILD目录下
    %setup -q
    %setup -n newdir    将软件包解压在newdir目录。从SOURCES里的包解压到BUILD/newdir目录下
    %setup -n %{name}-%{version} 把源码包解压并放好 
                         有两种情况:一就是同时编译多个源码包, 二就是源码的tar包的名称与解压出来的目录不一致,需要使用-n参数指定。
    %setup -c 解压缩之前先产生目录。 
    %setup -b num 将第num个source文件解压缩。 
    %setup -T 不使用default的解压缩操作。 
    %setup -T -b 0 将第0个源代码文件解压缩。 
    %setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。 
    
    
    #package built in this section。在BUILD/%{name}-%{version}目录中进行make的工作
    %build
    ./configure --prefix=/usr/local 
    %configure    #执行源代码的configure配置,在BUILD/%{name}-%{version}目录中进行 ,使用标准写法,会引用/usr/lib/rpm/marcros中定义的参数。
    另一种不标准的写法是,可参考源码中的参数自定义,例如:
    CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix}
    
    make                             #执行编译命令,编译后会在BUILD目录下存在暂时文件
    make %{?_smp_mflags}             #_smp_mflags:表示系统如果支持多颗cpu,将启用这个功能,提高编译速度
    make %{?_smp_mflags} OPTIMIZE="%{optflags}"     都是一些优化参数,定义在/usr/lib/rpm/marcros中             
    
    
    
    %install                     
    rm -rf %{buildroot}                         #安装之前先要删除里面已有的多余的编译内容
    mkdir -p %{buildroot}/usr/local/bin         #将编译完成源代码试安装在~/rpmbuild/BUILDROOT目录下,其中的宏%{buildroot}=~/rpmbuild
    make install RPM_INSTALL_ROOT=%{buildroot}  #安装package
    make install DESTDIR=%{buildroot}           #最后进行安装
    %{__install} -p -D %{SOURCE1} %{buildroot}/usr/html/index.html  #%{__install}这个宏代表install命令
    %{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx 
    %{__install} -p -D %{SOURCE3} %{buildroot}/etc/nginx/fastcgi_params 
    %{__install} -p -D %{SOURCE4} %{buildroot}/etc/nginx/nginx.conf
    # 提高rpmlint的结果,或者无权修改上一版本时,以及给他人解决问题时,都可以打补丁
    %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 将所有打补丁时产生的输出文件删除。
    
    
    %pre:  #rpm安装之前执行的脚本。在install段落之前执行
        if [ $1 == 1 ];then                #$1:表示第一次安装,当等于1为安装,等于0为卸载,等于2为升级
           /usr/sbin/useradd -s /bin/false -r nginx 2>/dev/null ||:    #失败了就打印冒号
        fi
    
    #rpm安装完成之后执行的脚本
    %post:
        if [ $1== 1 ];then
           /sbin/chkconfig --add %{name}
        fi
    
    #卸载之前执行的脚本
    %preun:
        if [ $1== 0 ];then
            /sbin/service %{name} stop >/dev/null 2>&1
            /sbin/chkconfig --del %{name}
        fi
    
    #卸载完成之后执行的脚本
    %postun:
    
    %preun   %postun 的区别:前者在升级的时候会执行,后者在升级rpm包的时候不会执行
    
    
    #最终在安装生成的rpm软件包时的安装目录。定义那些文件会在make-install执行时安装到电脑中
    #可以先留空,先执行package的build,会报错,并且提示你需要在这个段落中声明的文件的列表。。。
    %files  
    %defattr (-,root,root)      指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755
    %defattr (-,root,root,0755) 
    %doc /usr/html/index.html     #%doc表明这个是文档   
    %doc docs/LICENSE
    %doc docs/README                                 
    
    /etc/ 
    /usr/ 
    /var/ 
    %config(noreplace) /etc/nginx/nginx.conf  #%config表明这是个配置文件noreplace表明不能替换
    %config(noreplace) /etc/nginx/fastcgi_params 
    %attr(0755,root,root) /etc/rc.d/init.d/nginx     #%attr后面的是权限,属主,属组。设置的是
    这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对路径。
    如果描述为目录,表示目录中除%exclude外的所有文件。
    
    %exclude 列出不想打包到rpm中的文件
    ※小心,如果%exclude指定的文件不存在,也会出错的。 
    
    
    %clean                          #build之后,清理buildroot下的安装产物
    rm -rf %{buildroot}
    
    %changelog       #每次更新rpm的时候都要修改的
     * Wed Jul 4 2018 VBird Tsai <vbird@mail.vbird.idv.tw> 0.1
     - Build the program
    
    %changelog
    *Sun Jul 13 2008 <bjlongo@ncsu.edu> 1
    --Initial Build.
    --Added setup.py file.
    --Fixed bin/vpd, src/vpd.py.
    

    可以使用rpmdev-newspec命令创建一个spec文件的样例

    $ rpmdev-newspec
    Skeleton specfile (minimal) has been created to "newpackage.spec".
    

    rpm最终的文件名称是[name]-[version]-[release].[arch].rpm,其中的[arch]可以自定义修改,noarch代表不挑架构

    __rm /bin/rm:两个下划线后接命令,代表的就是当前系统本身的命令

    4、编译

    输入如下命令,在最后出现exit 0表示生成成功。
    rpmbuild -ba main.spec

    5、进行安装测试

    rpm -ivh ~/rpmbuild/RPMS/x86_64/main-0.1-1.el7.x86_64.rpm #安装main
    rpm -ql main #查找main的安装路径
    rpm -qi main #查询main相关信息

    6、使用rpmlint工具检查rpm包的合规性

    最好是没有返回任何信息,就是ok的
    $ rpmlint visual-4.beta16-1.fc9.i386.rpm
    visual.i386: W: invalid-license Boost Software License - Version 1.0
    1 packages and 0 specfiles checked; 0 errors, 1 warnings.

    patch生成方法

    1、 两个目录分别准备上一版本和修订版本,执行以下命令生产.patch文件

    diff -urN [upstream-directory] [revised-diretory] > information.patch
    

    2、将patch文件放入SOURCES目录下。
    3、打包时根据spec文件里的patch信息将会生成对应的补丁包

    patch文件用法:https://www.cnblogs.com/pengdonglin137/p/3341159.html

    Python打包

    默认地specfile构建的是C,针对Python打包需要做以下改动
    1、spec文件最开始需要添加以下一句

    %{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
    

    2、其他基本类似。Spec文件示例:

    %prep
    %setup -q
    
    %build
    %{__python} setup.py build
    
    %install
    rm -rf $RPM_BUILD_ROOT
    %{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT    #这里需要告诉distutils不要安装skip-build
    
    %clean
    rm -rf $RPM_BUILD_ROOT
    

    附: Group

    软件包所属类别,具体类别有:

    Amusements/Games (娱乐/游戏)
    Amusements/Graphics(娱乐/图形)
    Applications/Archiving (应用/文档)
    Applications/Communications(应用/通讯)
    Applications/Databases (应用/数据库)
    Applications/Editors (应用/编辑器)
    Applications/Emulators (应用/仿真器)
    Applications/Engineering (应用/工程)
    Applications/File (应用/文件)
    Applications/Internet (应用/因特网)
    Applications/Multimedia(应用/多媒体)
    Applications/Productivity (应用/产品)
    Applications/Publishing(应用/印刷)
    Applications/System(应用/系统)
    Applications/Text (应用/文本)
    Development/Debuggers (开发/调试器)
    Development/Languages (开发/语言)
    Development/Libraries (开发/函数库)
    Development/System (开发/系统)
    Development/Tools (开发/工具)
    Documentation (文档)
    System Environment/Base(系统环境/基础)
    System Environment/Daemons (系统环境/守护)
    System Environment/Kernel (系统环境/内核)
    System Environment/Libraries (系统环境/函数库)
    System Environment/Shells (系统环境/接口)
    User Interface/Desktops(用户界面/桌面)
    User Interface/X (用户界面/X窗口
    User Interface/X Hardware Support (用户界面/X硬件支持)
    

    附: gtkglarea的spec文件

    Name: gtkglarea
    Version: 1.2.3
    Release: 1%{?dist}
    Summary: Gtkglarea is an opengl wigdet for the gtk+ gui toolkit
    
    Group: Development/Libraries
    License: GPLv2+
    URL: http://www.bradlongo.wordpress.com
    Source0: gtkglarea-1.2.3.tar.gz
    Patch0:gtkglarea.patch
    BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
    
    BuildRequires: gtk+-devel >= 1.2
    Requires: gtk+ >= 1.2
    
    %description
    Gtkglarea is an opengl widget similar to the GtkDrawingArea.
    
    %package devel
    Group: Development/Libraries
    Summary: Development files for gtkglarea
    Requires: gtkglarea == 1.2.3
    
    %description devel
    Development files for gtkglarea.
    
    %post -p /sbin/ldconfig
    
    %prep
    %setup -q
    %patch0 -p1
    
    %build
    %configure
    make %{?_smp_mflags}
    
    %install
    rm -rf $RPM_BUILD_ROOT
    make install DESTDIR=$RPM_BUILD_ROOT
    rm -f %{_libdir}/libgtkgl.la
    rm -f $RPM_BUILD_ROOT/%{_libdir}/libgtkgl.la
    %postun -p /sbin/ldconfig
    
    %clean
    rm -rf $RPM_BUILD_ROOT
    
    %files
    %defattr(-,root,root,-)
    %doc COPYING
    %doc README
    %doc INSTALL
    %doc AUTHORS
    %{_libdir}/libgtkgl.so.5
    %{_libdir}/libgtkgl.so.5.0.0
    %{_datadir}/aclocal/gtkgl.m4
    %files devel
    %defattr(-,root,root,-)
    %doc COPYING
    %doc README
    %doc INSTALL
    %doc AUTHORS
    %{_includedir}/gtkgl/gdkgl.h
    %{_includedir}/gtkgl/gtkglarea.h
    %{_libdir}/libgtkgl.so
    %{_libdir}/libgtkgl.a
    
    %changelog
    *Sun Jul 13 2008 Brad Longo <bjlongo@ncsu.edu> 1.2.3-1
    –Fixed files section
    –Deleted zero length file.
    –Created patch to get rid of rpmlint errors.
    
    *Thu Jun 26 2008 Brad Longo <bjlongo@ncsu.edu> 1.2.3-1
    –Initial Build.
    
    展开全文
  • RPM常用选项

    2019-02-25 13:42:57
    -i:表示安装。 -v, -vv, -vvv:表示详细信息...-V:对RPM包进行验证。 –nodeps:忽略依赖关系。 –query:查询指定包名。同-q选项。 –hash:同-h。 –install:表示安装,同-i选项。 –test:仅作测试,不真正执...
  • 安装本地路径下软件包升级rpm包3.卸载rpm包4.安装软件包后,查询安装到本地哪个路径 三种安装方式; rpm包安装 源码包安装 二进制包安装 一,使用rpm工具安装rpm软件包 安装软件包 -i 显示安装过程 -v 显示安装...
  • rpm 打包及其命令

    千次阅读 2018-09-19 08:22:47
    RPM打包使用的是rpmbuild命令,这个命令来自rpm-build,这个是必装的。 $ yum install rpm-build 当然也可以直接安装rpmdevtools,这个工具还包含一些其他的工具,同时它依赖rpm-build,所以直接安装的话会同时...
  • rpm –ivh 全名 选项: -i(install) 安装 -v(verbose) 显示详细信息 -h(hash) 显示进度 --nodeps 不检测依赖性 3、RPM升级 rpm -Uvh 全名 选项: -U(upgrade) 升级 4、RPM卸载 rpm -e 选项:...
  • 如果需要对RPM包进行操作则需要使用rpm命令。 一、RPM包的来源 所有RPM包都在系统光盘的Packages目录中,那么我们如何获取包源呢?需提前做好设备的挂载工作。首先我们需要把我们的安装系统的ISO镜像文件加载到虚拟...
  • Linux命令笔记

    2019-03-14 09:16:58
    2:二进制包(RPM包,系统默认包) 2:RPM包管理-rpm命令管理 1:RPM包命名规则 2:RPM包依赖性 3:RPM包管理-yum在线管理 1:IP地址配置和网络yum源 2:光盘yum源搭建 4:源码包管理 1:源码包和RPM包区别 2:源码包...
  • Linux之——rpm命令常用选项

    千次阅读 2019-04-22 14:27:15
    转载请注明出处:... 安装rpm包 # rpm -ivh ***.rpm #其中i表示安装,v表示显示安装过程,h表示显示进度 升级rpm包 # rpm -Uvh ***.rpm 删除软件包 # rpm -e PACKAGE_NAME # rpm -e –nodeps...
  • RPM包的制作

    千次阅读 2017-05-14 12:40:35
    前言 按照其软件包的格式来划分...类RedHat系统中软件包的后缀是rpm,提供了同名的rpm命令来安装、卸载、升级rpm软件包; 类Debian系统中软件包的后缀是deb,同样提供了dpkg命令来对后缀是deb rpm的全称是Redhat
  • 软件安装与升级——rpm

    千次阅读 2018-11-05 10:22:13
    软件安装与升级——rpm Linux的自由软件非常多,为了方便软件的管理,目前有两大主流软件管理工具:dpkg和RPM。本文主要介绍RPM的相关信息。 RPM与SRPM RPM是RedHat Package Manager的简称,是一种软件管理机制,...
  • centos7 RPM包之rpm命令

    万次阅读 多人点赞 2017-11-14 17:33:49
    RPM包与源码包的区别1、软件包分类 源码包:C源代码包 rpm包:编译之后的二进制包 2、源码包 优点:开源;可以自由选择所需功能;可看源代码;卸载方便(直接删除安装位置); 缺点:安装步骤过多;编译时间过长; 3...
  • RPM打包原理、示例、详解及备查

    千次阅读 2018-07-08 18:04:02
    RPM(Redhat Package Manager)是用于Redhat、CentOS、...看到这篇文章的朋友想必已经知道RPM是个啥,rpm/yum命令怎么用,废话不多说,直接进入正题,来看看RPM包咋打。1 准备首先请准备一个Linux环境,比如Cent...
  • Linux rpm查询命令以及RPM包验证

    千次阅读 2020-08-19 15:41:47
    在上一章我们介绍了使用 rpm 命令安装、卸载和升级RPM软件包,在实际的操作过程中,我们还需要使用rpm 命令来对 RPM 软件包做一些查询操作,比如: 查询软件包是否已安装 查询系统中所有已安装的软件包 查看软件包...
  • rpm命令选项中文说明

    2019-10-05 17:55:19
    一、大纲查询与校验: 引用 rpm {-q|--query} [select-options] [query-options] rpm {-V|--verify} [select-options] [verify-options] rpm --import PUBKEY ... rpm {-K|--checksig} [--nosi...
  • RPM 包升级、卸载、查询 RPM 包升级 RPM 卸载 RPM 查询 rpm –q 名查询软件包是否安装 rpm -qa查询系统中的所有安装软件包 rpm –qi 名查询软件包的详细信息 rpm –qip 全名查询还没有安装的软件包...
  • Linux下安装RPM包或源码包 1.简介: 在windows下安装软件很简单,只要双击后缀为.exe的文件,然后在根据安装界面引导进行安装即可。但在Linux下由于我们并不是直接在图形化界面进行操作的,所以就没那么容易了 yum...
  • RPM 相关命令详解

    千次阅读 2018-02-22 17:17:21
    二进制包(RPM包、系统默认包) 源码包 优点: 1. 开源,如果有足够的能力,可以修改源代码 2. 可以自由选择所需的功能 3. 软件是编译安装,所以更加适合自己的系统,更加稳定,效率更高 4. 卸载方便 ...
  • rpm命令常用选项

    2018-12-20 10:40:58
    rpm命令常用选项 安装rpm包辑器 ...升级rpm包 # rpm -Uvh ***.rpm 删除软件包 # rpm -e PACKAGE_NAME # rpm -e –nodeps PACKAGE_NAME #不考虑依赖包 # rpm -e –allmatches PACKAGE_NAME ...
  • rpm包的使用

    2020-01-06 15:39:29
    rpm包 一、rpm包的基本使用 1. rpm 使用 -i 安装 (1) rpm -ivh 全包名: i (install)安装; v (verbose)显示详细信息; h (hash) 显示进度; 2. rpm使用 -U 升级 (1) rpm -Uvh 全包名: U (Upgrade)升级;...
  • RPM包安装/升级/查询/卸载一个RPM包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以.rpm扩展名结尾的文件,例如package.rpm。对其操作,需要使用rpm命令。下面介绍rpm工具的参数和...
  • RPM包管理工具

    2021-02-05 01:22:23
    RPM包管理工具 RPM软件包管理器Red-Hat Package Manager是由Red Hat公司提出,被众多Linux发行版所采用 目录 RPM包管理工具 rpm命令的格式 rpm命令功能 查询已安装的rpm软件信息 查询RPM 软件包文件中信息 ...
  • 安装RPM包或源码包

    千次阅读 2018-05-29 21:37:24
    在Windows系统下安装软件很简单,双击后缀为.exe的文件不停下一步即可,但在Linux系统下面并不是那么简单。...Linux系统中存在着一个关于RPM的数据库,记录着安装的包以及包与包之间的依赖关系,RPM包是预...
  • Linux之rpm本地打包

    千次阅读 2018-08-14 11:41:39
    Linux之rpm本地打包
  • openssh RPM包制作

    千次阅读 2019-03-12 08:57:08
    openssh经常出现漏洞要补丁,然而一台的编译安装又太麻烦,如果能有rpm包进行升级安装就很轻松了。下面是参加一些前辈的经验制作rpm包的过程,请大家指正! 1.#依赖安装yum install rpm-build gcc make wget openssl...
  • 安装rpm包 # rpm -ivh ***.rpm #其中i...升级rpm包 # rpm -Uvh ***.rpm 删除软件包 # rpm -e PACKAGE_NAME # rpm -e –nodeps PACKAGE_NAME #不考虑依赖包 # rpm -e –allmatches PACKAGE_NAME #删除所有跟PAC...
  • rpm包管理详解

    千次阅读 2018-07-22 17:27:55
    在CentOS系统上RPM命令管理程序常用的功能有:安装、升级、卸载、查询和校验、数据库维护。 安装:-i, --install 升级:-U, --update, -F, --freshen 卸载:-e, --erase 查询:-q, --query 校验:-V, -...
  • centos系统之rpm包管理

    千次阅读 2019-01-10 17:12:15
    RPM数据库用于记录Linux系统中安装、卸载、升级应用程序的相关信息,由RPM包管理系统自动完成维护,一般不需要用户干预。   当RPM数据库发生损坏(误删文件、非法关机、病毒破坏等导致),且Linux系统无法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,996
精华内容 8,398
关键字:

升级rpm包的选项