使用linux centos 将 openssh7.7打包成 rpm 包

centos 通过OpenSSH源码打包 rpm 软件包

检查环境

检查是否拥有打包所需要的工具及环境

  • 所需软件
    • make
    • gcc
    • rpmbuild
    • rpmdevtools
    • pam-devel
  • 验证是否安装命令
    • rpm -qa|grep gcc
  • 安装命令
    • yum install gcc

下载地址

openssh 源码地址

https://mirrors.sonic.net/pub/OpenBSD/OpenSSH/portable/openssh-7.7p1.tar.gz

askpass 源码地址

(打包必须,如果走编译安装可忽略)

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

打包

1. 生成rpmbulid 目录

# 生成目录
rpmdev-setuptree

2. 生成打包配置文件 或 复制文件

一个比较完善的源码,会考虑到你可能会有打包的需求,所以有些会在源码中给你配置好以 .spec后缀的配置文件

  • 生成spec 文件或复制文件

    • 生成spec文件
    # 生成spce 文件
    cd ~/rpmbuild/SPECS
    rpmdev-newspec xx_nginx.spec
    # 其中 spec文件的属性或含义需要自行百度后一一对照改写
    
    • 或复制openssh官方配置的spec 文件

    文件所在路径:openssh-7.7p1\contrib\redhat\openssh.spec

    # 复制到该路径下
    ~/rpmbuild/SPECS
    
  • 将下载的源码包放到以下路径中

 ~/rpmbuild/SOURCE

3. 打包

# 打包,此时编译容易出错,需要具体问题具体调整
rpmbuild -ba openssh.spec
# 打包成功后,包在的路径
/root/rpmbuild/RPMS

安装

安装

  • 更新
# 由于依赖问题需要先卸载 openssh5.3 中的openssh-askpass-5.3p1-94.el6.x86_64
rpm -e --nodeps openssh-askpass
# 使用rpm 更新包
rpm -Uvh openssh*
  • 修改配置

    # 修改sshd 配置文件,找到相应配置,并改成一下配置
    # /etc/ssh/sshd_config
    PermitRootLogin yes
    PasswordAuthentication yes
    UsePAM yes
    
  • 修改系统文件

    #%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
    service sshd restart
    

安装命令扩展

  • 安装

    # 安装
    rpm -ivh xxxx
    
  • 更新

    # rpm 模拟安装rpm包,可以提前检查出缺失的依赖(* 是匹配所有,也可以一个一个测试安装)
    rpm -Uvh --test openssh*
    # 更新(解决完依赖后,安装)
    rpm -Uvh openssh*
    
  • 卸载

    # 卸载包,但不卸载依赖
    rpm -e --nodeps xxx
    

扩展

修改yum 源的下载地址

源地址问题

  • 配置https 下载需要证书

    网上说通过yum 可以直接安装证书,我没安装成功

    直接将地址改成http的地址

  • 国外源下载缓慢

    切换成国内的镜像源

    由于网络链接有时效性,在这复制的链接可能当你看到是已经失效,如失效请百度 :yum 国内源

    # repo文件中 《enabled=1》 该属性代表开启,如果没有配置该属性也是默认开启的
    
    
  • yum 源配置所在位置

    /etc/yum.repos.d

通过 yum 直接下载rpm包

# 通过yum 下载 软件包和依赖但不安装
# 第一种
yum install yum-plugin-downloadonly -y
yum -y install --downloadonly --downloaddir /tmp/rpms/gcc2 glibc-common
#解释:yum install --downloadonly --downloaddir=相关依赖的保存路径 包名
# 目前发现该种方法 ,无法下载gcc 软件

第二种
yum install yum-utils -y
yumdownloader --resolve --destdir /tmp/rpms/maven maven
#解释:yumdownloader --resolve --destdir 相关依赖的保存路径 包名
# 方法3
yum install yum-utils -y
repotrack --download_path=/tmp/t maven
#解释:repotrack --download_path=相关依赖的保存路径 包名

常见问题

warning: line 94: prereq is deprecated: PreReq: initscripts >= 5.00
error: Failed build dependencies:
/usr/include/security/pam_appl.h is needed by openssh-7.7p1-1.el6.x86_64

在执行 rpmbuild -ba openssh.spec 命令时,系统提示缺少 /usr/include/security/pam_appl.h 文件,并且因此无法满足构建 openssh 的依赖关系。

这是因为使用了 PAM 库,但是该库的开发包未安装。您可以尝试安装 pam-devel 开发包,它包含 /usr/include/security/pam_appl.h 文件。

您可以使用以下命令安装 pam-devel 开发包:

yum install -y pam-devel

安装完成后,请再次运行 rpmbuild -ba openssh.spec 命令进行编译。

你可能感兴趣的:(linux,centos,服务器,ssh,rpm,升级)