1. 程式人生 > >Linux系統軟體包的管理(4)

Linux系統軟體包的管理(4)

Linux 是一套免費使用和自由傳播的類Unix作業系統,是一個基於POSIX和UNIX的多使用者、多工、支援多執行緒和多CPU的作業系統.它能執行主要的UNIX工具軟體、應用程式和網路協議.它支援32位和64位硬體.Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多使用者網路作業系統.

雖然使用原始碼編譯安裝可以具有提高速度個性化的定製等優點,但對於 Linux發行商來說,則不容易管理軟體包,畢竟不是每個人都會進行原始碼編譯的,如果能夠將軟體預先在相同的硬體與系統上面編譯好在釋出的話,不就能夠讓相同的 Linux 發行版,同時擁有相投的版本了嗎,如果再加上簡易的安裝/移除/管理等機制的話,對於軟體控管就會更加簡單,大多數現代類 Unix 作業系統都提供了一個集中的軟體包管理機制,以幫助使用者搜尋、安裝和管理軟體,而軟體通常以「包」的形式儲存在倉庫「repository」中,對軟體包的使用和管理被稱為包管理,本章我們將介紹 RedHat 系統中為我們提供的解決方案,RPM和YUM包管理機制.

由於自由軟體的蓬勃發展,加上大型 Unix-Like 主機的強大效能,讓很多軟體開發者將他們的軟體釋出出來,後來 Linux 發展起來後,由一些企業或社群打包成為特定的發行版,RedHat就是這方面的龍頭老大,但後來發現這些發行版的軟體管理機制相當的混亂,沒有一種統一的管理方式,這時候各大廠商開始著力研究如何有效的管理這些檔案,RedHat提出了rpm和Yum倉庫的解決方案,時至今日Yum已成為伺服器上使用最多的軟體管理工具.此外還有一種dpkg格式的軟體安裝包,是社群來維護的,下面我們來具體介紹這兩種軟體包吧.

目前在 Linux 界軟體安裝方式最常見的有兩種,分別是:

● DPKG 包
這個機制最早是由 Debian Linux 社群所開發出來的,通過 dpkg 的包管理, Debian 打包軟體就能夠簡單的安裝,同時還能提供安裝後的軟體維護與更新,只要是衍生於 Debian 的其他 Linux 發行版都 dpkg 這個機制來管理軟體的,包括 B2D,Ubuntu,Kali Linux 等.

● RPM 包
這個機制最早是由 Red Hat 這家公司開發出來的,後來實在很好用,因此很多 Linux 發行版,就使用這個機制來作為軟體安裝的管理方式,包括 RedHat,Fedora,CentOS,SuSE等知名廠商都在使用它.

如前所述,不論是DPKG還是RPM,這些軟體包或多或少都會有依賴關係問題,那麼各大 Linux 發行商是如何解決這個問題的呢 ?

目前的 Linux 發行商,在dpkg管理機制上就開發出 APT 包管理工具, RPM 則依開發商的不同,有RedHat系統的YUM,以及SuSE系統的YOU,Mandriva系統的urpmi都在使用RPM下面我們使用的是RedHat系統,所以說使用的管理機制為 RPM 機制,所以我們使用YUM,下面就讓我們來談談 RPM 與 YUM 的關係吧.

軟體管理之RPM

RPM 全名是 "RedHat Package Manager" 簡稱則為 RPM 顧名思義,當初這個軟體管理的機制就是由 Red Hat 這家公司開發出來的 RPM 是以一種資料庫記錄的方式來將你所需要的軟體安裝到你的 Linux 系統的一套管理機制.

RPM命令是RPM軟體包的管理工具,rpm原本是Red Hat Linux發行版專門用來管理Linux各項套件的程式,由於它遵循GPL規則且功能強大方便,因而廣受歡迎,逐漸受到其他發行版的採用,RPM套件管理方式的出現,讓Linux易於安裝,升級,間接提升了Linux的適用度.

那麼 RPM 包的特點有哪些呢 ?

⦁ 有專門的工具進行安裝、解除安裝、升級和管理軟體,管理起來更加方便.
⦁ 安裝簡潔、速度快,由於使用RPM無需編譯所以安裝效率非常高.
⦁ RPM包由於經過了封裝,所以我們無法直接獲取其原始碼.
⦁ 由於經過了封裝,所以其功能選擇性差,功能定製不靈活.

RPM包的命名方式有哪些 ? i386,i586,i686,noarch,x86_64代表的含義是 ?

[[email protected] ~]# ls -lh
total 3.1M
-r--r--r--. 1 root root 1.8M Jan 17  2018 bind-9.9.4-61.el7.x86_64.rpm
-r--r--r--. 1 root root 1.2M Jan  8  2018 httpd-2.4.6-80.el7.x86_64.rpm

bind      .9.9.4    -61    .el7    .x86_64    .rpm
↑           ↑        ↑       ↑        ↑        ↑
①           ②        ③       ④        ⑤        ⑥

1.軟體名稱:本例軟體名為bind
2.軟體版本:本例軟體版本為9.9.4-61
3.釋出次數:本例修改了61次
4.編譯平臺:編譯平臺有(el8=RHEL8,el7=RHEL7,el6=RHEL6)
5.適合平臺:平臺有(i386,i586,i686,noarch,x86_64)
6.打包格式:這裡是rpm包,還有一種gpkg包.

好了,看了這麼多內容,下面我們開始進入正題,分別來介紹這些命令的含義吧.

◆RPM 安裝軟體◆

因為安裝軟體是ROOT的工作,因此你得要是ROOT的身份才能夠使用RPM這個命令的,用RPM來安裝很簡單,下面我們就來先看他的引數說明吧.

[[email protected] ~]# rpm --help

命令語法:[ rpm [選項] 包名稱 ]

        -i              #安裝一個新的rpm軟體包
        -v              #顯示安裝詳細過程
        -h              #以"#"號顯示安裝的進度

        --nodeps        #不檢測依賴安裝
        --force         #強制安裝,不管軟體是否存在,都強制重新安裝(修復軟體)
        --test          #測試安裝,不真正安裝,檢測軟體依賴關係
        --prefix        #指定安裝路徑,不按照預設路徑安裝
        --replacefiles  #以覆蓋寫入方式安裝
        --replacepkgs   #重複安裝軟體
        --justdb        #更新軟體在資料庫內的相關資訊
        --nosignature   #忽略數字證書檢測
        --noscripts     #禁止軟體安裝過程中執行某些命令

一般來說RPM的安裝選項與引數大約就是這些了,通常建議直接使用 -ivh 就好了,如果安裝的過程中發現問題,一個一個去將問題找出來,儘量不要使用 "暴力安裝" ,就是通過 --force 去強制安裝,因為可能會發生很多不可預期的問題,除非你很清楚的知道使用上面的引數後,安裝的結果是你預期的.

◆RPM 查詢資訊◆

RPM在查詢的時候,其實查詢的地方是在 /var/lib/rpm/ 這個目錄下的資料檔案,另外RPM也可以查詢未安裝的RPM軟體資料,下面我們先來看看可用的引數吧.

[[email protected] ~]# rpm --help

命令語法:[ rpm [選項] 包名稱 ]

[查詢已安裝軟體]

        -q 軟體名        #檢視指定軟體是否安裝
        -qa              #檢視系統中所有已安裝的軟體
        -qi 軟體名       #檢視指定軟體的詳細資訊
        -qc 軟體名       #列出軟體所以設定檔案
        -qd 軟體名       #列出軟體所以幫助檔案
        -ql 軟體名       #檢視指定軟體安裝的目錄和檔案列表
        -qR 軟體名       #檢視指定軟體的依賴關係
        –qf 檔案或目錄   #查詢檔案或者目錄,是由哪個軟體包安裝產生的

[查詢未安裝軟體]

        -qpi 包全名      #檢視指定未安裝軟體的詳細資訊
        -qpl 包全名      #檢視指定未安裝軟體的預設安裝位置(預覽)
        -qpR 包全名      #檢視指定未安裝軟體的依賴關係

例項1:使用rpm -qi檢視一個軟體的詳細說明.

[[email protected] ~]# rpm -qi tree

Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: Thu 15 Nov 2018 07:18:16 AM EST
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, Wed 02 Apr 2014 05:33:48 PM EDT, Key ID 199e2f91fd431d51
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : Mon 27 Jan 2014 12:29:58 PM EST
Build Host  : x86-020.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.

例項2:使用rpm -ql檢視軟體安裝釋放的目錄.

[[email protected] ~]# rpm -ql tree

/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

例項3:使用rpm -qR檢視軟體依賴關係.

[[email protected] ~]# rpm -qR tree

libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

例項4:使用rpm -qf檢視指定檔案是由那個包安裝的.

[[email protected] ~]# rpm -qf /bin/bash
bash-4.2.46-30.el7.x86_64

[[email protected] ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64

例項5:使用rpm -qpi檢視一個未安裝軟體詳細資訊.

[[email protected] ~]# rpm -qpi bind-9.9.4-61.el7.x86_64.rpm

warning: bind-9.9.4-61.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Name        : bind
Epoch       : 32
Version     : 9.9.4
Release     : 61.el7
Architecture: x86_64
Install Date: (not installed)
Group       : System Environment/Daemons
Size        : 4556343
License     : ISC
Signature   : RSA/SHA256, Wed 17 Jan 2018 05:28:47 AM EST, Key ID 199e2f91fd431d51
Source RPM  : bind-9.9.4-61.el7.src.rpm
Build Date  : Wed 17 Jan 2018 04:15:44 AM EST
Build Host  : x86-034.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://www.isc.org/products/BIND/
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
Description :
BIND (Berkeley Internet Name Domain) is an implementation of the DNS
(Domain Name System) protocols. BIND includes a DNS server (named),
which resolves host names to IP addresses; a resolver library
(routines for applications to use when interfacing with DNS); and
tools for verifying that the DNS server is operating properly.

◆RPM 升級軟體◆

使用 RPM 來升級真是太簡單了,就以 -Uvh 或 -Fvh 來升級即可,而 -Uvh 與 -Fvh 可以用的選項與引數,跟 install 是一樣的,不過 -U 與 -F 的意義還是不太一樣的,下面我們來開一下它的配置資訊吧.

[[email protected] ~]# rpm --help

命令語法:[ rpm [選項] 包名稱 ]

        -v              #顯示安裝詳細過程
        -h              #以"#"號顯示安裝的進度
        -U              #升級安裝,若沒安裝,則直接安裝,若安裝有舊版本,則升級安裝
        -F              #升級安裝,若沒安裝,則不安裝,必須有舊版本,才進行升級安裝

由上面的說明來看,如果你想要大量的升級系統舊版本的軟體,使用 -Fvh 則是比較好的作法,因為沒有安裝的軟體不會安裝到你的系統,但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的機器上沒有安裝該軟體,那麼該軟體並不會被安裝在你的 Linux 主機上面,所以請重新以 ivh 來安裝吧.

◆RPM 驗證證書◆

驗證(Verify)的功能主要在於提供系統管理員一個有用的管理機制,作用的方式是使用 "/var/lib/rpm" 下面的資料庫資料內容來比對目前 Linux 系統的環境下的所有軟體資訊,也就是說當你有檔案不小心遺失,或者因為你誤刪除掉了某軟體的檔案,我們就用這個簡單的方法來驗證一下原本的軟體系統吧,好讓你瞭解這一陣子到底是修改到哪些檔案,下面我們先來看一下它的常用引數吧.

[[email protected] ~]# rpm --help

命令語法:[ rpm [選項] 包名稱 ]

        -V 軟體名        #驗證指定軟體安裝後的完整性,及檔案的元資料是否發生變化
        -Va             #列出目前系統上所有被改動過的檔案
        -Vf 檔名       #驗證指定檔案是否被修改過
        -Vp 檔名       #列出該軟體內可能被改動過的檔案

下面,我們通過驗證一個檔案,看其是否被修改過吧.

[[email protected] ~]# rpm -Vf /etc/profile

S.5....T.      c           /etc/profile
#↑ 驗證結果     ↑ 檔案型別   ↑ 檔案位置

你會發現在檔名 /etc/profile 之前有個 c 然後就是一堆奇怪的文字了,那個c代表的是配置檔案,至於最前面的八個選項,我們在下面說明一下吧:

驗證結果具體的資訊:

s -------------> 檔案大小是否改變
M -------------> 許可權是否被改變
5 -------------> 檔案的MD5校驗和是否改變(即檔案內容)
D -------------> 主從裝置號是否改變(/dev/)
L -------------> 檔案路徑是否改變
U -------------> 檔案的屬主是否改變
G -------------> 檔案的屬組是否改變
T -------------> 檔案的修改時間是否改變

檔案型別具體分類:

c -------------> 配置檔案
d -------------> 普通檔案
g -------------> 鬼子檔案,該檔案不應在RPM包中
l -------------> 授權檔案
r -------------> 描述檔案

經過驗證的功能,你就可以知道那個檔案被更動過,那麼如果該檔案的變更是預期中的,那麼就沒有什麼大問題,但是如果該檔案是非預期的,那麼是否被入侵了了呢,所以說一般配置檔案被改動比較正常,要是二進位制檔案被改動,可能是被入侵了,我們就要提高警惕了啊,畢竟對於一個運維人員來說,背黑鍋還是很不爽的啊.

談完了程式的驗證後,不知道你有沒有發現一個問題,那就是,驗證只能驗證程式內的資料與 /var/lib/rpm/裡面的資料是否對應而已,如果該程式資料庫所提供的資料本身就有問題,那你使用驗證的手段也無法確定該軟體的正確性啊.下面就出現了數字證書的概念.

就像你自己的簽名一樣,我們的軟體開發商原廠所推出的軟體也會有一個廠商自己的證書系統,只是這個證書被數字化了而已,廠商可以生成一個專屬的數字證書,並將該證書的公鑰(public key) 放入其發行版中,當你要安裝一個RPM時,系統會執行以下流程:

⦁ 首先必須找到原廠的公鑰檔案,然後進行安裝
⦁ 然後安裝RPM包時,會去提取RPM包中的證書資訊,然後和本機安裝的原廠證書進行驗證
⦁ 如果驗證通過,則允許安裝;如果驗證不通過,則不允許安裝並警告

我們 RedHat 使用的數字證書系統為 GNU 計劃的 GnuPG (GNU Privacy Guard, GPG)可以通過加密運算,算出獨一無二的專屬金鑰系統或者是數字證書系統,我們也會知道首先必須要安裝原廠的GPG數位證書的公鑰才行,以下是數字證書的存放位置,其有兩份,作業系統中有一份,原廠光盤裡也有一份.

[[email protected] ~]# ls -lh /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

-rw-r--r--. 1 root root 3.2K Feb 28  2018 /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[[email protected] ~]# ls -lh /mnt/RPM-GPG-KEY-redhat-release

-r--r--r--. 1 root root 3.2K Feb 28  2018 /mnt/RPM-GPG-KEY-redhat-release

從上面的輸出結果,可知證書的位置,下面我們開始安裝它.

[[email protected] ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

那安裝完成之後,那我們先列出金鑰軟體名稱後,再以 -qi 的方式來查詢看一下軟體的資訊吧.

[[email protected] ~]# rpm -qa |grep pubkey
gpg-pubkey-2fa658e0-45700c69
gpg-pubkey-fd431d51-4ae0493b

[[email protected] ~]# rpm -qi gpg-pubkey-2fa658e0-45700c69
Name        : gpg-pubkey
Version     : 2fa658e0
Release     : 45700c69
Architecture: (none)
Install Date: Thu 15 Nov 2018 09:39:17 AM EST
Group       : Public Keys
Size        : 0
License     : pubkey
Signature   : (none)
Source RPM  : (none)
Build Date  : Fri 01 Dec 2006 06:05:13 AM EST
Build Host  : localhost
Relocations : (not relocatable)
Packager    : Red Hat, Inc. (auxiliary key) <[email protected]>
Summary     : gpg(Red Hat, Inc. (auxiliary key) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.11.3 (NSS-3)

mQGiBEVwDGkRBACwPhZIpvkjI8wV9sFTDoqyPLx1ub8Sd/w+YuI5Ovm49mvvEQVT
VLg8FgE5JlST59AbsLDyVtRa9CxIvN5syBVrWWWtHtDnnylFBcqG/A6J3bI4E9/A
UtSL5Zxbav0+utP6f3wOpxQrxc+WIDVgpurdBKAQ3dsobGBqypeX6FXZ5wCgou6C
=d/bm
-----END PGP PUBLIC KEY BLOCK-----

重點就是最後面出現的那一串亂碼啦,那可是作為數字證書非常重要的一環,如果你忘記加上數字證書,很可能很多原版軟體就不能讓你安裝,除非你利用 rpm 時選擇略過證書.

◆RPM 解除安裝軟體◆

移除的選項很簡單,直接通過 -e 即可移除,不過經常發生由於軟體依賴關係而無法解除安裝的情況,下面看一下他的引數吧

[[email protected] ~]# rpm --help

命令語法:[ rpm [選項] 包名稱 ]

        -e        #解除安裝軟體(注意解除安裝順序)
        --nodeps  #不檢測依賴解除安裝

由於 RPM 軟體常常會安裝/移除/升級等,某些動作或許可能會導致 RPM 資料庫 /var/lib/rpm/ 內的資料損壞,果真如此的話,我們可以使用 --rebuilddb 這個選項來重建一下資料庫檔案.

◆RPM 提取檔案◆

例如提取tree目錄下的檔案並恢復到指定檔案

[[email protected] ~]# ls -l
total 48
-rw-rw-r-- 1 root root 47508 Jul  4  2014 tree-1.6.0-10.el7.x86_64.rpm

[[email protected] ~]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -idv     #提取tree包中的檔案
./usr/bin/tree
./usr/share/doc/tree-1.6.0
./usr/share/doc/tree-1.6.0/LICENSE
./usr/share/doc/tree-1.6.0/README
./usr/share/man/man1/tree.1.gz
177 blocks

[[email protected] ~]# ll
total 48
-rw-rw-r-- 1 root root 47508 Jul  4  2014 tree-1.6.0-10.el7.x86_64.rpm
drwxr-xr-x 4 root root    30 Sep 20 05:17 usr


軟體管理之SRPM

談完了 RPM 型別的軟體之後,再來我們談一談包含了 Source code 的 SRPM 該如何使用呢,最需要注意的是,新版的 rpm 已經將 RPM 與 SRPM 的命令分開了,SRPM 使用的是 rpmbuild 這個命令,而不是 rpm 如果你是 Red Hat 7.0 以前的使用者,那麼請使用 rpm 來替代 rpmbuild.

SRPM 既然含有 source code 那麼其中必定有配置,所以首先我們必需要知道,這個 SRPM 在進行編譯的時候會使用到哪些目錄,其實在我們編譯RPM包時,需要自己手動建立以下幾個目錄,缺一不可,在哪裡建立都行.

目 錄 目 錄 作 用
/rpmbuild 主目錄,rpmburld命令會預設尋找這個目錄
/rpmbuild/SPECS 放置軟體設定檔案,也就是編譯指令碼
/rpmbuild/SOURCES 放置軟體原始檔,*.tar.gz
/rpmbuild/BUILD 編譯過程中產生的快取檔案
/rpmbuild/RPMS 編譯完成後產生的RPM包檔案
/rpmbuild/SRPMS 編譯完成後生成的,RPM原始碼檔案

除了使用 SRPM 內預設的引數來進行編譯之外,我們還可以修改這些引數後再重新編譯,下面我們來看一下.spec的檔案欄位的解釋吧.

參 數 參 數 作 用
Summary 軟體的說明資訊
Name 軟體名稱
Version 軟體版本
Release 軟體打包次數
License 授權協議,GPL
Group 軟體開發團體名稱
Url 官方網站
Source 軟體的來源
Patch 補丁檔案
BuildRoot 編譯時使用的臨時目錄
ExclusiveArch 說明軟體適合的安裝平臺
Requires 說明依賴屬性主要來源
Prereq 需要的前置程式
BuildRequires 編譯過程中所需要的軟體
Packager 軟體是經由誰來打包的
Vender 發展的廠商

上面幾個資料通常都必需要寫,但是如果你的軟體沒有相依屬性的關係時,那麼就可以不需要那個Requires,根據上面的配置,最終的檔名就會是『{Name}-{Version}-{Release}.{ExclusiveArch}.rpm』的樣式,除了上面的欄位解釋,還有一些編譯引數,在下面我們列舉出來吧.

參 數 參 數 作 用
%description 軟體的簡短說明(必須寫)
%prep 編譯預處理
%setup 解壓與後期配置
%configure 配置
%build 建立可執行檔案
%install 安裝,這裡是模擬
%clean 清除快取
%files 安裝檔案所需目錄
%changelog 記錄日誌

◆SRPM 編譯小實驗◆

下面的小實驗以打包一個Nginx為例子,來實現對Nginx的封裝,以及後續的使用.

1.第一步首先要安裝rpmbuild這個編譯軟體,並建立好相應的目錄.

[[email protected] ~]# yum install -y rpm-build
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package rpm-build-4.11.3-32.el7.x86_64 already installed and latest version
Nothing to do

[[email protected] ~]# rm -fr /tmp/*

[[email protected] ~]# mkdir -p /tmp/rpmbuild
[[email protected] ~]# mkdir -p /tmp/rpmbuild/SPECS
[[email protected] ~]# mkdir -p /tmp/rpmbuild/SOURCES
[[email protected] ~]# mkdir -p /tmp/rpmbuild/BUILD
[[email protected] ~]# mkdir -p /tmp/rpmbuild/RPMS
[[email protected] ~]# mkdir -p /tmp/rpmbuild/SRPMS

[[email protected] ~]# ls -lh /tmp/*
total 0
drwxr-xr-x. 2 root root 6 Nov 15 15:59 BUILD
drwxr-xr-x. 2 root root 6 Nov 15 15:59 RPMS
drwxr-xr-x. 2 root root 6 Nov 15 15:59 SOURCES
drwxr-xr-x. 2 root root 6 Nov 15 15:59 SPECS
drwxr-xr-x. 2 root root 6 Nov 15 15:59 SRPMS

2.接著進入/tmp/rpmbuild/SOURCES這個目錄,將Nginx的原始碼包放進這個目錄裡.

[[email protected] ~]# cd /tmp/rpmbuild/SOURCES
[[email protected] SOURCES]#
[[email protected] SOURCES]# wget http://nginx.org/download/nginx-1.13.12.tar.gz

[[email protected] SOURCES]# ls -lh
total 996K
-rwxr-xr-x. 1 root root 993K May  2  2018 nginx-1.13.12.tar.gz

3.現在開始在/tmp/rpmbuild/SPECS目錄下建立一個main.spec檔案,並編輯.

[[email protected] SPECS]# cd /tmp/rpmbuild/SPECS/
[[email protected] SPECS]# touch main.spec
[[email protected] SPECS]# vim main.spec

Summary:   nginx
Name:      nginx
Version:   1.13
Release:   12
License:   GPL
Group:     Nginx Server
Source:    nginx-1.13.12.tar.gz
Url:       http://www.mkdirs.com
Packager:  lyshark
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root


Requires: pcre >= 1
Requires: pcre-devel >= 1
Requires: zlib >= 1
Requires: zlib-devel >= 1
Requires: openssl >= 1
Requires: openssl-devel >= 1


%description

this is nginx server test page

%prep

useradd-s /sibn/nologin nginx

%setup -q

%configure --prefix=/usr/local/nginx --user=nginx --group=nginx

%build
make

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/bin
make install RPM_INSTALL_ROOT=%{buildroot}   <==這專案也很重要!

%files
/usr/local/bin/main

%changelog
* Wed Jul 01 2009 VBird Tsai <[email protected]> 0.1
- build the program


軟體管理之YUM

我們在本章一開始開始的地方談到過 YUM 這個東西,這個 YUM 是通過分析 RPM 的標頭資料後,根據各軟體的相關性,製作出軟體依賴解決方案,然後可以自動處理軟體的依賴屬性問題,以解決軟體安裝或移除與升級的問題,事實上RedHat在放出系統時,已經搭建好了提供給全球使用的軟體源,所以理論上,我們不需要處理任何設定值,只要能夠連線上Intelnet,就可以使用Yum來更新資料了.

◆YUM 源配置◆

雖然Yum工具,只需要你的主機連線網際網路,就可以直接使用,但是有些時候我們需要自定義Yum源實現加速,下面我們將配置一個本地Yum源,來使用光碟中的軟體,其他網路配置操作步驟相同,只是會在baseurl引數後面會有所區別.

1.首先預設情況下,我們的系統是沒有給我們配置Yum源的,在這裡我們需要在指定配置檔案中建立一個以.repo結尾的檔案.

[[email protected] ~]# cat /etc/yum.repos.d/redhat.repo

[server]
name="redhat yum"
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=file:///mnt
enabled=1
gpgcheck=0

>>[server]   ----------> 代表容器的名稱,可以隨便寫
>>name       ----------> 給容器起的名字,可自定義
>>mirrorlist ----------> 列出容器可以使用的映象站點,不用可遮蔽
>>baseurl    ----------> 預設映象地址,可寫本地地址,也可寫FTP地址
>>enabled=1  ----------> 就是讓容器啟動
>>gpgcheck=0 ----------> 關閉證書檢測
>>gpgkey     ----------> 證書儲存位置

2.第一步配置完畢以後,接下來我們來檢查一下配置是否生效,和生成快取檔案.

[[email protected] ~]# yum repolist all
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
repo id   repo name                                               status
Server   "rhel7"                                                  enabled: 5,099
repolist: 5,099


[[email protected] ~]# yum makecache
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Server                                                             | 4.3 kB  00:00:00
Metadata Cache Created

到此本地Yum倉庫就配置好啦,下面是一些拓展資訊.

阿里雲Yum源倉庫地址
wget http://mirrors.aliyun.com/repo/Centos-6.repo
wget http://mirrors.aliyun.com/repo/Centos-7.repo

網易Yum源倉庫地址

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

常用RPM包查詢網站

curl https://centos.pkgs.org/
curl http://rpmfind.net/
curl https://dl.fedoraproject.org/pub/

◆YUM 的查詢◆

[[email protected] ~]# yum --help

命令語法:[ yum [選項] 包名稱 ]

        -y              #自動化安裝,無需應答
        installroot     #安裝時指定安裝位置
        search          #搜尋指定包檔案
        list            #顯示全部可用列表
        info            #顯示軟體相關資訊
        grouplist       #查詢所有已安裝和可安裝的軟體組
        groupinfo       #列出軟體組中包含的軟體
        provides        #通過關鍵字查詢安裝包

例項1:使用installroot指定軟體安裝位置.

[[email protected] ~]# yum install -y --installroot=/tmp/ tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Server                                                                  | 4.3 kB  00:00:00
(1/2): Server/group_gz                                                  | 145 kB  00:00:00
(2/2): Server/primary_db                                                | 4.1 MB  00:00:00
Package tree-1.6.0-10.el7.x86_64 already installed and latest version
Nothing to do
[[email protected] ~]#

例項2:使用yum info命令檢視軟體具體資訊.

[[email protected] ~]# yum info tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Installed Packages
Name        : tree
Arch        : x86_64
Version     : 1.6.0
Release     : 10.el7
Size        : 87 k
Repo        : installed
From repo   : Server
Summary     : File system tree viewer
URL         : http://mama.indstate.edu/users/ice/tree/
License     : GPLv2+
Description : The tree utility recursively displays the contents of directories in a
            : tree-like format.  Tree is basically a UNIX port of the DOS tree
            : utility.

例項3:使用 provides通過關鍵字查詢指定包.

[[email protected] ~]# yum provides tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
tree-1.6.0-10.el7.x86_64 : File system tree viewer
Repo        : Server

tree-1.6.0-10.el7.x86_64 : File system tree viewer
Repo        : @Server

◆YUM 清快取◆

yum clean packages       #清除快取目錄下的軟體包
yum clean headers        #清除快取目錄下的 headers
yum clean oldheaders     #清除快取目錄下舊的 headers

yum clean all            #清除下載的臨時軟體包和快取
yum makecache            #建立軟體包快取,提高查詢速度
yum update               #更新所有需要更新的軟體&核心

◆yum安裝和解除安裝◆

yum install [軟體名]              #全部安裝
yum groupinsall [軟體組名]        #安裝程式組

yum  remove [軟體名]              #刪除軟體
yum  groupremove [軟體組名]       #刪除軟體組

◆yum更新和升級◆

yum update [軟體名]              #全部更新
yum check-update                #檢查可更新的程式
yum upgrade [軟體名]             #升級指定程式包
yum groupupdate [組軟體名]       #升級程式組

◆通過YUM命令為純字元系統,安裝圖形化介面◆

[[email protected] ~]# yum -y install xorg*
[[email protected] ~]# yum -y groupinstall "X Window System"
[[email protected] ~]# yum -y groupinstall Desktop
[[email protected] ~]# yum -y groupinstall "Chinese Support"
[[email protected] ~]# startx