8-5 軟體擴充
內容:
軟體可攜性高是 Unix/Linux 最為可貴的地方。無論哪一套 Unix-like 或 Linux distribution 所發展的軟體,大多可以容易的移植到其他系統上,如此也造就了軟體工業的快速發展。Unix/Linux 軟體可攜性高的原因是,核心程式大多是公開的,呼叫核心程式的介面也有其標準化,因此,利用該核心所發展出來的系統工具可攜性都相當高。另一方面,大部分程式語言的編譯器都可以安裝於 Unix/Linux 系統上,所以任何程式語言所發展的軟體,大多可以重新編譯安裝於另一系統上。譬如,利用一般程式語言(如C、gcc、java等等)並採用標準系統介面,所編寫成而成的套裝軟體,大多可以在各種 Unix 或 Linux 系統之間流通,只是這些套裝軟體多半需要重新編譯,這也是 Unix 系統上 Makefile 功能最強的地方。
一只套裝軟體必然包含了許多程式,這些程式的相依性也非常高,如何重新編譯程式可是一件棘手的事。還好我們可將軟體套件的編譯連結步驟編寫於 Makefile 內,而將此 Makefile 隨著所有軟體程式發佈,使用者只要執行該 Makefile 便可以重新編譯該軟體,甚至包含軟體安裝都可將它編寫在裡面,如此一來,其他使用者便可容易擴充其軟體。
雖然 Makefile 可以解決軟體擴充的問題,但任何一套軟體大多包含著許多小程式,即使遺漏其中一個小程式,也會造成軟體安裝失敗。RedHat 為了方便軟體擴充操作,於是發展出 RPM(Red Hat Package Manager)工具,它將每一軟體包裝成一只套件,壓縮整合於同一檔案內,並發佈於網站上讓使用者下載;使用者下載後,只要利用 rpm 工具便可輕易安裝該軟體套件。雖然利用 rpm 工具可以快速的安裝軟體套件,但管理者還是需要到官方網站搜尋最新版本,Fedora 期望系統能像 Windows 一樣自動下載並安裝最新版本,因此又發展了 yum 工具;只是透過 yum 便能自動搜尋更新的版本,並自動下載安裝。本節將分別介紹
rpm、yum、Makefile
與 DNF 等四種軟體擴充方法。
8-5-1 原始檔案擴充 - makefile
在眾多 Unix/Linux 系統之間流傳的軟體套件,還是以原始檔案最為普遍,可攜性也最高。一般做法是將應用軟體(如 apache)的所有原始檔案以打包(如 tar 工具)並壓縮(如 zip 工具)方式,成為一個軟體套件。此軟體套件可經由網路或光碟片傳輸到另一系統上,該系統再經過解打包與解壓縮工具,恢復原來檔案系統架構,並經指定掛載於某一目錄之下。包裝檔案內必定會包含說明檔(如 README)與安裝檔案(Makefile),使用者閱讀說明檔後,即可依照 Makefile 檔案組態(發行者所製作的)來安裝該軟體套件。本書以 Apache(httpd)軟體套件作為範例,說明如何利用原始軟體擴充系統。首先到 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
RPM(Red 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
setup-2.5.25-1
……… |
(C) 查詢套件的資訊
查詢某一套已安裝套件的資訊,基本格式如下(選項 -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 的命令。命令格式如下:
[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
當軟體套件更新速度很快的時候,隨時尋找最新版本的更新工作,也會造成很大的負擔,yum(Yellow-dog Updater Modified)則為解決此困擾的最佳工具。Yum 具有線上安裝、移除、與更新套件的功能,它能自動連結 RedHat 官方網站,搜尋及比對是否需要更新版本,且會自動判斷套件與系統相容性的問題。Yum 命令格式及選項說明如下:
yum [options] [command] [package ...] |
常用選項(option)有:
常用命令(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) 移除套件
移除套件的操作方式如下:(移除 httpd,remove 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。但還是可以使用
YUM,CentOS
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
於
西元2020年03月03日
(週二)
17時22分04秒 |
(B)
查詢目前安裝套件
查詢目前系統安裝有哪些套件:
[[root@secureLab
~]#
dnf list installed |
(C)
查詢目前有哪些套件可安裝
查詢目前有哪些套件可供安裝:
[root@secureLab ~]# dnf list available
|
(C)
查詢軟體庫是否某套件
查詢某軟體套件是否可供安裝:
[root@secureLab ~]# dnf search httpd
上次中介資料過期檢查:1:13:31
以前,時間點為西元2021年05月15日
(週六)
09時07分33秒。
======================== 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
以前,時間點為西元2021年05月15日
(週六)
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 [提供線上安裝之軟體庫] |
|