Linux 伺服器系統管理第八章 系統更新與擴充  上一頁    

8-5 軟體擴充

內容:

  • 8-5-1 原始檔案擴充 - makefile

  • 8-5-2 RPM 套件擴充 - rpm

  • 8-5-3 線上擴充工具 - yum

  • 8-5-4 新版線上擴充工具 - dnf

軟體可攜性高是 Unix/Linux 最為可貴的地方。無論哪一套 Unix-like Linux distribution 所發展的軟體,大多可以容易的移植到其他系統上,如此也造就了軟體工業的快速發展。Unix/Linux 軟體可攜性高的原因是,核心程式大多是公開的,呼叫核心程式的介面也有其標準化,因此,利用該核心所發展出來的系統工具可攜性都相當高。另一方面,大部分程式語言的編譯器都可以安裝於 Unix/Linux 系統上,所以任何程式語言所發展的軟體,大多可以重新編譯安裝於另一系統上。譬如,利用一般程式語言(如Cgccjava等等)並採用標準系統介面,所編寫成而成的套裝軟體,大多可以在各種 Unix Linux 系統之間流通,只是這些套裝軟體多半需要重新編譯,這也是 Unix 系統上 Makefile 功能最強的地方。

一只套裝軟體必然包含了許多程式,這些程式的相依性也非常高,如何重新編譯程式可是一件棘手的事。還好我們可將軟體套件的編譯連結步驟編寫於 Makefile 內,而將此 Makefile 隨著所有軟體程式發佈,使用者只要執行該 Makefile 便可以重新編譯該軟體,甚至包含軟體安裝都可將它編寫在裡面,如此一來,其他使用者便可容易擴充其軟體。

雖然 Makefile 可以解決軟體擴充的問題,但任何一套軟體大多包含著許多小程式,即使遺漏其中一個小程式,也會造成軟體安裝失敗。RedHat 為了方便軟體擴充操作,於是發展出 RPMRed Hat Package Manager)工具,它將每一軟體包裝成一只套件,壓縮整合於同一檔案內,並發佈於網站上讓使用者下載;使用者下載後,只要利用 rpm 工具便可輕易安裝該軟體套件。雖然利用 rpm 工具可以快速的安裝軟體套件,但管理者還是需要到官方網站搜尋最新版本,Fedora 期望系統能像 Windows 一樣自動下載並安裝最新版本,因此又發展了 yum 工具;只是透過 yum 便能自動搜尋更新的版本,並自動下載安裝。本節將分別介紹 rpmyum、Makefile 與 DNF 種軟體擴充方法

8-5-1 原始檔案擴充 - makefile

在眾多 Unix/Linux 系統之間流傳的軟體套件,還是以原始檔案最為普遍,可攜性也最高。一般做法是將應用軟體(如 apache)的所有原始檔案以打包(如 tar 工具)並壓縮(如 zip 工具)方式,成為一個軟體套件。此軟體套件可經由網路或光碟片傳輸到另一系統上,該系統再經過解打包與解壓縮工具,恢復原來檔案系統架構,並經指定掛載於某一目錄之下。包裝檔案內必定會包含說明檔(如 README)與安裝檔案(Makefile),使用者閱讀說明檔後,即可依照 Makefile 檔案組態(發行者所製作的)來安裝該軟體套件。本書以 Apachehttpd)軟體套件作為範例,說明如何利用原始軟體擴充系統。首先到 Apache 官方網站(www.apache.org/dist/httpd)下載網頁伺服器的軟體套件,其檔案名稱為 apache_1.3.34.tar.gz,安裝步驟如下:

(A) 步驟 1解壓縮並展開軟體套件。利用 tar 工具展開套件後,它會將所展開的檔案系統掛載於套件名稱的目錄下,操作如下:

[root@Linux-1 ~]# tar xzvf apache_1.3.34.tar.gz

apache_1.3.34/

apache_1.3.34/ABOUT_APACHE

….

[root@Linux-1 ~]# ls -l

總計 17479

drwxr-xr-x  8 xbook games     1024 10 14 07:40 apache_1.3.34

-rw-r--r--  1 root  root   2468056  1  8 11:16 apache_1.3.34.tar.gz

…..

(B) 步驟 2查閱說明檔。由 README 檔案可以看出安裝該套件必須經過 4 個程序,如下說明:

$ ./configure --prefix=PREFIX

$ make

$ make install

$ PREFIX/bin/apachectl start

其中 PREFIX 是指定安裝位置,一般都安裝於 /usr/local/apache 目錄下

(C) 步驟 3設定安裝組態,操作如下:

[root@Linux-1 apache_1.3.34]# ./configure --prefix=/usr/local/apache

Configuring for Apache, Version 1.3.34

+ using installation path layout: Apache (config.layout)

Creating Makefile

Creating Configuration.apaci in src

Creating Makefile in src

+ configured for Linux platform

…….

(D) 步驟 4執行 Makefile 安裝軟體(make make install),操作如下:

[root@Linux-1 apache_1.3.34]# make

===> src

make[1]: Entering directory `/root/apache_1.3.34'

make[2]: Entering directory `/root/apache_1.3.34/src'

…..

[root@Linux-1 apache_1.3.34]# make install

make[1]: Entering directory `/root/apache_1.3.34'

===> [mktree: Creating Apache installation tree]

./src/helpers/mkdir.sh /usr/local/apache/bin

mkdir /usr/local/apache

mkdir /usr/local/apache/bin

./src/helpers/mkdir.sh /usr/local/apache/bin

…..

 

(E) 步驟 5啟動軟體套件,操作如下:

[root@Linux-1 apache_1.3.34]# /usr/local/apache/bin/apachectl start

/usr/local/apache/bin/apachectl start: httpd started

[root@Linux-1 apache_1.3.34]# ps -ef |grep httpd

root      9682     1  0 15:01 ?        00:00:00 /usr/local/apache/bin/httpd

nobody    9683  9682  0 15:01 ?        00:00:00 /usr/local/apache/bin/httpd

…..

上述範例是利用 apachectl 啟動後,接著觀察其程序是否執行中;但系統重新啟動後,將不會繼續執行,因此必須將該命令填寫於 rc.local 檔案內,也可利用 apachectl help 觀察此命令是否還有其他選項。

8-5-2 RPM 套件擴充 - rpm

RPMRed Hat Package Manager是由 Red Hat 公司所開發出來的,它是個開放性的程式套件管理系統,也相對有一個 rpm 工具來操作 RPM 套件,目前已有許多公司採用 rpm 來管理軟體套件。基本上,rpm 工具將某一軟體套件的所有相關程式,打包成一個 RPM 套件檔案;其他系統(或主機)取得該 RPM 套件後,只要利用 rpm 工具便可安裝該軟體套件。打包而成 RPM 套件的命名格式如下:(但也並非完全如此定名)

套件名稱 + 版本 + 次版本 + 平台

若套件檔案名稱為 telnet-server-0.17-25.i386.rpm,表示該套件名稱為 telnet-server、版本是 0.17、次版本為 25、平台為 i386

(A) rpm 命令格式

rpm 命令格式如下:

$ rpm {-q|--query} [select-options] [query-options]

$ rpm {-V|--verify} [select-options] [verify-options]

$ rpm --import PUBKEY ...

$ rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ...

rpm 命令具有打包套件的功能,也可用來安裝軟體套件,但前者功能已超過本書範圍,有興趣的讀者,可到 RedHat 官方網站參考相關技術文件。這裡僅介紹如何利用 rpm 工具來安裝或管理套件,但 rpm 命令選項非常多,僅就幾個範例簡單介紹,方便容易了解。

(B) 查詢已安裝套件

顯示系統已安裝哪些套件,命令格式如下:

$ rpm –qa

操作範例如下:

$ rpm -qa

setup-2.5.25-1

………

(C) 查詢套件的資訊

查詢某一套已安裝套件的資訊,基本格式如下(選項 -q):

$ rpm –q 套件名稱

  • 查詢套件版本為

$ rpm -q setup

setup-2.5.25-1

  • 查詢套件內有哪些檔案的操作如下:

$ rpm -ql setup

/etc/bashrc

……

  • 查詢某一檔案是屬於哪一個套件的操作如下

$ rpm -qf /etc/profile.d

setup-2.5.25-1

(D) 安裝套件

CentOS/Gru 桌面開啟 firefox,搜尋如下:

下載 apache 套件,如帳號 student01 登入,則下載後,儲存於 /home/student01/下載/目錄下,如下:

將其複製到 /root 目錄下:

[root@tsnien ~]# ls /home/student01/下載

apache-tomcat-apis-0.1-1.el6.noarch.rpm

[root@tsnien ~]# cp /home/student01/下載/apach* .

[root@tsnien ~]# ls | grep apach*

apache-tomcat-apis-0.1-1.el6.noarch.rpm

另外,必須具有 root 的權限才可以執行安裝 rpm 的命令。命令格式如下:

$ rpm –ivh  套件名稱

  • 安裝套件的操作範例如下:

[root@tsnien ~]# rpm -ivh apache-tomcat-apis-0.1-1.el6.noarch.rpm

正在準備…                       ################################# [100%]

Updating / installing...

   1:apache-tomcat-apis-0.1-1.el6     ################################# [100%]

[root@tsnien ~]# rpm –qa  | grep apache

apache-tomcat-apis-0.1-1.el6.noarch

  • 套件已安裝,而要重新再安裝一次的操作方式:

# rpm –ivh –replacepkgs apache-tomcat-apis-0.1-1.el6.noarch.rpm

(E) 套件升級

已安裝過的套件,升級版本的操作方式如下:

# rpm –Uvh apache-tomcat-apis-0.1-1.el6.noarch.rpm

(F) 移除套件

移除已安裝套件的操作方式如下:

# rpm  –e  apache-tomcat-apis-0.1-1.el6.noarch

8-5-3 線上擴充工具 - yum

當軟體套件更新速度很快的時候,隨時尋找最新版本的更新工作,也會造成很大的負擔,yumYellow-dog Updater Modified)則為解決此困擾的最佳工具。Yum 具有線上安裝、移除、與更新套件的功能,它能自動連結 RedHat 官方網站,搜尋及比對是否需要更新版本,且會自動判斷套件與系統相容性的問題。Yum 命令格式及選項說明如下:

yum [options] [command] [package ...]

常用選項(option)有:

  • -y:內定詢問項,以『yes』回應。

  • -d [number]:設定偵錯(debug)的等級(0 ~ 10),等級越低則偵測範圍就越小。

  • -e [number]:設定錯誤等級(0 ~ 10)。

常用命令(command)有:

  • install package1 [package2]:安裝套件。

  • update [package1] [package2] [...]:更新套件。

  • check-update:檢查需要更新的套件。

  • remove | erase package1 [package2] [...]:移除或刪除套件。

  • list [...]:列出套件。

  • info [...]:顯示套件訊息。

(A) 設定連結網站

Fedora Core 將所有 RPM 套件儲存於一個稱為『儲藏庫』(Repository)的官方網站,並在全世界各地區裝置許多映射(mirror)網站;基本上,映射網站會隨時由官方網站下載最新版本,以供區域性客戶需求並下載使用。使用 yum 工具之前,必須將所欲連結的網站位置設定與自己電腦最近的位置(但也不一定),才能加快下載速度。有關映射網站由 /etc/yum.repos.d/ 目錄下描述檔所規劃,如下:(備註:一般 Linux Distribution 會將最新與最近區域的 mirror station 登錄於此目錄下,但各地區的 mirror  會隨時改變,因此所安裝的 Linux 版本不要太舊,否則會連結不上)

[root@tsnien ~]# ls  /etc/yum.repos.d

CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo

CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo

上述 5 個設定檔皆有效,管理者也可以自行建立 .repo 檔案,我們來觀察其中一個檔案的編寫方式,如下: (有興趣自行慢慢閱讀)

[root@tsnien ~]# cat  /etc/yum.repos.d/CentOS-Base.repo

# CentOS-Base.repo

#

# The mirror system uses the connecting IP address of the client and the

# update status of each mirror to pick mirrors that are updated to and

# geographically close to the client.  You should use this for CentOS updates

# unless you are manually picking other mirrors.

#

# If the mirrorlist= does not work for you, as a fall back you can try the

# remarked out baseurl= line instead.

#

#

 

[base]

name=CentOS-$releasever - Base

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

….

 (B) 線上查詢套件

線上查詢可使用(list avaliable)的套件較為常用,但顯示出來的訊息可能非常的大,建議儲存於檔案內再查詢,或是透過 grep 工具篩檢較為快速,操作範例如下:

[root@Linux-1 yum.repos.d]# yum  list  available

Setting up repositories                       【連結並下載除藏庫資料】

updates-released          100% |=========================|  951 B    00:00

extras                    100% |=========================| 1.1 kB    00:00

base                      100% |=========================| 1.1 kB    00:00

Reading repository metadata in from local files        【除藏庫上可使用的套件】

Available Packages

BibTool.i386                             2.48-3.fc4             extras

….

(C) 詢問可更新套件

可連結到儲藏庫網站查詢有哪些套件可以更新(原安裝版本較舊),yum 會下載並比較目前所安裝版本,操作範例如下:(# yum check-update

# yum check-update

[root@Linux-1 ~]# yum check-update

Setting up repositories

updates-released          100% |=========================|  951 B    00:00

……

(D) 線上安裝套件

無論套件是否已安裝,我們都可以利用 yum 要求重新安裝;yum 會事先上網查詢最新版本,並比較目前版本再來決定應該下載哪些檔案,並詢問是否需要重新安裝。以下範例是利用 yum 工具安裝 php 套件,操作範例如下(# yum install php):

[root@Linux-1 ~]# yum  -y install  php

Setting up Install Process

Setting up repositories

updates-released          100% |=========================|  951 B    00:00

(E) 移除套件

移除套件的操作方式如下:(移除 httpdremove httpd

[root@Linux-1 ~]# yum  remove  httpd

Setting up Remove Process

Resolving Dependencies

--> Populating transaction set with selected packages. Please wait.

---> Package httpd.i386 0:2.0.54-10 set to be erased

….

 

(F) 線上更新套件

線上更新套件應該是最常使用的,如果沒有指定要更新哪一個套件的話,就表示更新系統已安裝的所有套件。更新 setup 套件的操作如下:(# yum update setup

[root@Linux-1 ~]# yum update setup

Setting up Update Process

Setting up repositories

updates-released          100% |=========================|  951 B    00:00

setup-2.5.44-1.1

(G) 查詢已安裝套件

查詢系統已安裝的套件,命令如下:(# yum list installed

[root@tsnien ~]# yum list installed | grep setup

cryptsetup.x86_64                      2.0.3-5.el7      @anaconda

....

[root@tsnien student01]# yum list installed | more

Loaded plugins: fastestmirror, langpacks

Installed Packages

GConf2.x86_64                     3.2.6-8.el7      @anaconda

GeoIP.x86_64                      1.5.0-14.el7      @anaconda

....

8-5-4 新版線上擴充工具 - DNF

自從 CentOS 8 版本之後,RedHat 公佈YUM的下一代更新版本 DNF。但還是可以使用 YUMCentOS 7 也可以使用 DNF,但 CentOS 6 之前的版本則沒有提供此功能。基本上兩者都是線上套件管理工具,RedHat 公司表示 DNF 增加了許多功能也較完備, DNF 命令格式及選項說明如下:

(A) 安裝 DNF 套件

安裝 CentOS 8 系統時會自動安裝 YUM DNF 套件,如沒有自行安裝命令如下:

[root@tsnien ~]# yum install dnf

安裝後,查詢版本如下:

[root@secureLab ~]# dnf --version

4.2.7

  已安裝:dnf-0:4.2.7-6.el8.noarch 西元20200303 (週二) 172204

(B) 查詢目前安裝套件

查詢目前系統安裝有哪些套件:

[[root@secureLab ~]# dnf  list  installed

(C) 查詢目前有哪些套件可安裝

查詢目前有哪些套件可供安裝:

[root@secureLab ~]# dnf  list  available

(C) 查詢軟體庫是否某套件

查詢某軟體套件是否可供安裝:

[root@secureLab ~]# dnf search httpd

上次中介資料過期檢查:1:13:31 以前,時間點為西元20210515 (週六) 090733秒。

======================== Name 精確符合:httpd =========================

httpd.x86_64 : Apache HTTP Server

===================== Name & Summary 符合: httpd =====================

centos-logos-httpd.noarch : CentOS-related icons and pictures used by

                          : httpd

keycloak-httpd-client-install.noarch : Tools to configure Apache HTTPD

                                     : as Keycloak client

python3-keycloak-httpd-client-install.noarch : Tools to configure

以上表示該套件存在可供下載安裝。

(D) 套件安裝/重新安裝/移除

l  安裝軟體套件如下:

[root@secureLab ~]# dnf install httpd

上次中介資料過期檢查:1:20:46 以前,時間點為西元20210515 (週六) 09

依賴關係解析完畢。

…..

已安裝:

  httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64

  apr-util-bdb-1.6.1-6.el8.x86_64

  apr-util-openssl-1.6.1-6.el8.x86_64

  apr-1.6.3-11.el8.x86_64

  apr-util-1.6.1-6.el8.x86_64

  httpd-filesystem-2.4.37-30.module_el8.3.0+561+97fdbbcc.noarch

  httpd-tools-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64

  mod_http2-1.15.7-2.module_el8.3.0+477+498bb568.x86_64

  centos-logos-httpd-80.5-2.el8.noarch

 

完成![確實表示安裝成功]

l  重新安裝套件:

[root@secureLab ~]# dnf -y reinstall httpd

上次中介資料過期檢查:1:28:13 以前,時間點為 ….

…..

已重裝:

  httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64

完成![確實重新安裝成功]

l  移除已安裝套件:

 

[root@secureLab ~]# dnf -y remove httpd

模組化的依賴關係問題:

…..

已移除:

  httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64

  apr-1.6.3-11.el8.x86_64

  apr-util-1.6.1-6.el8.x86_64

  apr-util-bdb-1.6.1-6.el8.x86_64

  apr-util-openssl-1.6.1-6.el8.x86_64

  centos-logos-httpd-80.5-2.el8.noarch

  httpd-filesystem-2.4.37-30.module_el8.3.0+561+97fdbbcc.noarch

  httpd-tools-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64

  mod_http2-1.15.7-2.module_el8.3.0+477+498bb568.x86_64

 

完成![確實移除成功]

 

[root@secureLab ~]# dnf  list  installed

(E) 常用命令匯集

常用命令彙集如下:

   

         

安裝套件

# dnf -y install httpd

重新安裝套件

# dnf -y reinstall httpd

移除套件

# dnf -y remove httpd

更新套件

# dnf -y update httpd

更新系統

# dnf update

檢查套件可更新

# dnf check-update

查詢套件可升級

# dnf upgrade

套件升級

# dnf upgrade httpd

自動移除多餘軟體

# dnf autoremove

清除快取空間

# dnf clean all

查詢軟體庫

# dnf repolist all     [提供線上安裝之軟體庫]

 

翻轉工作室:粘添壽

 

Linux 伺服器系統管理 - CentOS:

 

 

 

翻轉電子書系列: