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
修改系统文件
vim /etc/pam.d/ssh # 直接覆盖原ssh的文件内容 #%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
命令进行编译。