制作rpm包
rpmbuild命令用于創(chuàng)建軟件的二進(jìn)制包和源代碼包。
官方文檔:rpm.org - RPM Reference Manual rpmbuild 中文手冊:rpmbuild 中文手冊 [金步國]
使用rpmbuild將tar包打成rpm包
RPM打包使用的是rpmbuild命令,這個命令來自rpm-build包,這個是必裝的。 #yum install rpm-build 當(dāng)然也可以直接安裝rpmdevtools,這個工具還包含一些其他的工具,同時它依賴rpm-build,所以直接安裝的話會同時把rpm-build裝上。 #yum install rpmdevtools 當(dāng)然,根據(jù)不同的軟件構(gòu)建過程,還需要其他的編譯打包工具,比如C語言的make、gcc,python的setuptools等,根據(jù)需要安裝即可
執(zhí)行如下命令來生成rpmbuild的工作目錄
#rpmdev-setuptree 提示:rpmdev-setuptree命令默認(rèn)將再當(dāng)前用戶主目錄下創(chuàng)建一個RPM構(gòu)建根目錄結(jié)構(gòu),如果需要改變次默認(rèn)位置,可以修改配置文件:~/.rpmmacros中變量_topdir對應(yīng)的值即可。 rpmbuild/ ├── BUILD #打包過程中的工作目錄 ├── BUILDROOT ├── RPMS #存放生成的二進(jìn)制包 ├── SOURCES #放置打包資源,包括源碼打包文件和補(bǔ)丁文件等 ├── SPECS #放置SPEC文檔 └── SRPMS #存放生成的源碼包
編輯SPEC文件
SPEC撰寫是打包RPM的核心,也算是最難的一步,好在我們可以從參照一個簡單的模板文件開始,在可以實現(xiàn)基本功能的基礎(chǔ)上再一步一步的擴(kuò)充文檔內(nèi)容,直至完全達(dá)到要求。下面是一個簡單的SPEC文檔,其中包括了一些說明信息(注:#后面的內(nèi)容為說明信息),該SPEC文檔是對一個測試的軟件項目hellorpm寫的,hellorpm軟件包編譯后僅有一個執(zhí)行文件、一個手冊文件和一個項目說文件。 Emacs 和 vi 的最新版本有 .spec 文件編輯模式,它會在創(chuàng)建新文件時打開一個類似的模板。所以可使用以下命令來自動使用模板文件:
#cd ~/rpmbuild/SPECS #vim hello.spec
相關(guān)資料:Redirect Notice How to create a GNU Hello RPM package/zh-cn - Fedora Project Wiki https://www.iteye.com/blog/hlee-3434994、構(gòu)建RPM包
構(gòu)建操作
開始構(gòu)建操作,首先進(jìn)入到當(dāng)前用戶的rpmbuild根目錄
#cd ~/rpmbuild/ #rpmbuild -ba SPECS/*.spec 提示:-ba表示build all,即生成包括二進(jìn)制包和源代碼包的所有RPM包,如果正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應(yīng)的RPM包
openssh打包安裝
安裝服務(wù)和相關(guān)依賴
yum install zlib-devel openssl-devel gcc perl-devel pam-devel libXt-devel imake gtk2-devel -y yum install rpm-build yum install rpmdevtools
到官網(wǎng)上下載對應(yīng)版本的源碼包
創(chuàng)建所需目錄
rpmdev-setuptree
把所需的包拷貝到該目錄下面
cd /root/rpmbuild/ cp /root/openssh-8.8p1.tar.gz . cp /root/openssh-8.8p1.tar.gz SOURCES wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz cp x11-ssh-askpass-1.2.4.1.tar.gz SOURCES tar xf openssh-8.8p1.tar.gz #openssh會自帶.spec文件可根據(jù)linunx版本選擇配置文件 ./openssh-8.8p1/contrib/redhat/openssh.spec ./openssh-8.8p1/contrib/suse/openssh.spec
修改配置文件
sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh.spec sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh.spec
構(gòu)建
rpmbuild -ba openssh.spec ? /root/rpmbuild/RPMS/x86_64下查看構(gòu)建完成的rpm包
注:構(gòu)建完成后在備用的機(jī)器上側(cè)防止升級不成功導(dǎo)致無法登錄
報錯:
第一個報錯
/usr/include/X11/Xlib.h error: Failed build dependencies: ? /usr/include/X11/Xlib.h is needed by openssh-8.8.p1-1.el7.x86_64 ? libXt-devel is needed by openssh-8.8.p1-1.el7.x86_64 ? imake is needed by openssh-8.8.p1-1.el7.x86_64 ? ? ? gtk2-devel is needed by openssh-8.8.p1-1.el7.x86_64
解決辦法
yum install libXt-devel imake gtk2-devel openssl-libs -y
第二個報錯
openssl-devel < 1.1 被 openssh-8.8p1-1.el7.x86_64 需要 構(gòu)建依賴失敗:openssl-devel < 1.1 被 openssh-8.8p1-1.el7.x86_64 需要 解決方法: ? [root@localhost SPECS]# vim openssh.spec 注釋掉 BuildRequires: openssl-devel < 1.1 這一行
第三個報錯:
RPM build errors: ? Installed (but unpackaged) file(s) found: ? /usr/libexec/openssh/ssh-sk-helper ? /usr/share/man/man8/ssh-sk-helper.8.gz
解決方法:
vi /usr/lib/rpm/macros #%__check_files %{_rpmconfigdir}/check-files %{buildroot} 注釋改行
第四個報錯:
RPM build errors: Bad exit status from /var/tmp/rpm-tmp.85UQUm (%build)
解決方法:
可能是時間不對更新時間,再重新試。
打包成功
Wrote: /root/rpmbuild/SRPMS/openssh-8.8p1-1.el7.src.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-clients-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-server-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-gnome-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-8.8p1-1.el7.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.DTNijH + umask 022 + cd /root/rpmbuild/BUILD + cd openssh-8.8p1 + rm -rf /root/rpmbuild/BUILDROOT/openssh-8.8p1-1.el7.x86_64 + exit 0
升級前的準(zhǔn)備(一定要進(jìn)行)
注:升級請做好備份,在備機(jī)上進(jìn)行測試,查看構(gòu)建的rpm包是否有問題
備份pam 文件文章來源:http://www.zghlxwxcb.cn/news/detail-611107.html
cp /etc/pam.d/{sshd,sshd.bak}
開始升級
yum install pango atk gtk2 libXt rpm -Uvh openssh-*
出現(xiàn)的問題
如出現(xiàn)安裝完成后無法登錄情況 檢查/etc/ssh/下的文件或備份還原。 ? 如出現(xiàn)安裝完成自己跳出登錄后無法登錄的情況 請檢查/root/rpmbuild/BUILD/openssh-8.8p1/sshd_config文件是否有問題(端口沒開或禁止登錄) 修改后重新構(gòu)建rpm包,再進(jìn)行升級。 ? sshd重啟報錯 修改sshd文件的權(quán)限 cd /etc/ssh/ chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key systemctl restart sshd
sshd 驗證
ssh -V OpenSSH_8.8p1, OpenSSL 1.0.2k-fips ?26 Jan 2017
相關(guān)文檔:centos7 安裝openssh8.3 - 簡書文章來源地址http://www.zghlxwxcb.cn/news/detail-611107.html
到了這里,關(guān)于【linux升級ssh】 利用rpmbuild工具對ssh打包為rpm包進(jìn)場安裝升級的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!