Linux下的軟體包可分爲兩種,分別是原始碼包和二進制包
實際上,原始碼包就是一大堆原始碼程式,是由程式設計師按照特定的格式和語法編寫出來的。
原始碼包是Linux中軟體包的另一種形式,需要在計算機上進行編譯以後纔可以產生可以直接執行的二進制程式。原始碼包裏面包括了程式的程式程式碼,一般就是我們能認識的C語言檔案,因此在安裝原始碼包的時候通常會檢索系統中是否正確安裝gcc編譯器,並且原始碼安裝的時間會比較長。
計算機只能識別機器語言,也就是二進制語言,所以原始碼包的安裝需要一名「翻譯官」將「abcd」翻譯成二進制語言,這名「翻譯官」通常被稱爲編譯器。
「編譯」指的是從原始碼到直接被計算機(或虛擬機器)執行的目的碼的翻譯過程,編譯器的功能就是把原始碼翻譯爲二進制程式碼,讓計算機識別並執行
另外,由於原始碼包的安裝需要把原始碼編譯爲二進制程式碼,因此安裝時間較長。
比如,在 Windows下安裝 QQ,QQ 功能較多,程式相對較大(有 70 MB左右),但由於其並非是以原始碼包的形式發佈,而是編譯後才發佈的,因此只需幾分鐘(經過簡單的設定)即可安裝成功。但如果我們以原始碼包安裝的方式在 Linux 中安裝一個 MySQL 數據庫,即便此軟體的壓縮包僅有 23 MB左右,也需要 30 分鐘左右的時間(根據硬體設定不同,略有差異)。
原始碼包一般包含多個檔案,爲了方便發佈,通常會將原始碼包做打包壓縮處理,Linux 中最常用的打包壓縮格式爲「tar.gz」,因此原始碼包又被稱爲 Tarball
Tarball 是 Linux 系統的一款打包工具,可以對原始碼包進行打包壓縮處理,人們習慣上將最終得到的打包壓縮檔案稱爲 Tarball 檔案。
原始碼包需要我們自己去軟體官方網站進行下載,包中通常包含以下內容:
通過對比你會發現,原始碼包的編譯是很費時間的,況且絕多大數使用者並不熟悉程式語言,在安裝過程中我們只能祈禱程式不要報錯,否則新手很難解決。
*.tar.gz、*.tgz、*.bz2
原始碼包的格式一般是一個版本號的tar包,例如:httpd-2.4.25.tar.gz,檔名包含資訊比較少
優點:
tar包形式的原始碼包包含的內容是明文可見的原始碼,如果有足夠的能力,可以自行修改原始碼,並且在安裝的時候可以自由選擇要安裝的所需功能(./configure中的各種參數)及路徑等,並且解除安裝移除的時候也比較方便。 建議在安裝線上的生產伺服器軟體包時都用原始碼安裝,這是因爲原始碼安裝可以自行調整編譯參數,能夠最大化地定製安裝結果。
缺點:
1)安裝過程步驟過多,尤其安裝較大及較多軟體時,新增各種參數時容易出現問題
2)編譯時間較長,執行make編譯的時間通常較長,一會都會比安裝二進制包時間長
3)因爲編譯手動安裝,涉及系統環境比較複雜,可能會出現各種問題,一旦出現問題,新手很難解決(一般都會出現問題)
原始碼包一般的安裝過程:
1)解壓
2)./configure
3)make
4)make install
5)vim /etc/profile,檔案末尾新增PATH=/usr/local/xxx/bin:$PATH(或者寫在/etc/profile.d/目錄下建立檔案並寫入環境變數相關設定),然後 source 環境變數檔案
說明:
說明:tar包形式包含的內容是明文可見的原始碼,如果有足夠的能力,可以自行修改原始碼,並且在安裝的時候可以自由選擇要安裝的所需功能(./configure中的各種參數),並且解除安裝移除的時候也比較方便
注意1:每個原始碼包都會有configure命令,就算極個別沒有這個命令也會用其他的命令取代(例如openssl的./config)
注意2:執行過./configure之後,會生成Makefile檔案,make和make install都是依賴這個檔案進行編譯安裝的
make
1)將原始碼包翻譯成機器能識別的語言(也就是將原始碼–>可執行的二進制檔案,類似生成Windows中的.exe可執行檔案)
2)一旦編譯出錯,需要修改之後再次編譯,請使用make clean,清除之前的編譯產生的快取檔案。
注意:這一步執行時間一般是最長的。
make install
1)真正的安裝(例如在windows中執行qq.exe或者wechat.exe安裝qq和微信到電腦)
2)一旦這步出錯,需要執行make clean,並刪除對應的目錄(例如./configure使用–prefix參數指定安裝到/usr/local/openssl,則需要刪除該目錄)
【例 1】apache http原始碼包的安裝
1、安裝準備
[root@admin ~]# yum install gcc gcc-c++ gcc-g77
2、下載原始碼包(.tar.gz格式)
下載地址: http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.43.tar.gz
原始碼包建議儲存位置:/usr/local/src
[root@admin ~]# cd /usr/local/src
[root@admin src]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.43.tar.gz
#等待下載完成
3.解壓
[root@admin src]# ls
httpd-2.4.43.tar.gz
[root@admin src]# tar xf httpd-2.4.43.tar.gz
[root@admin src]# ls
httpd-2.4.43 httpd-2.4.43.tar.gz
[root@admin src]# cd httpd-2.4.43
[root@admin httpd-2.4.43]#
4.下載安裝編譯工具
[root@admin httpd-2.4.43]# yum install gcc-c++ gcc make -y
[root@admin httpd-2.4.43]# cat INSTALL
5.編譯安裝
編譯安裝軟體程式包原始碼編譯安裝三步走:./configure(設定)、make(編譯)、make install(安裝)
原始碼的安裝一般由3個步驟組成:設定(configure)、編譯(make)、安裝(make install)。
Configure是一個可執行指令碼,它有很多選項,在待安裝的原始碼路徑下使用命令./configure –help輸出詳細的選項列表。
其中--prefix選項是設定安裝的路徑,如果不設定該選項,安裝後可執行檔案預設放在/usr /local/bin,庫檔案預設放在/usr/local/lib,組態檔預設放在/usr/local/etc,其它的資原始檔放在/usr /local/share,比較凌亂。
這裏我們可以檢視INSTALL 檔案,檢視安裝說明:
APACHE INSTALLATION OVERVIEW
Quick Start - Unix
------------------
For complete installation documentation, see [ht]docs/manual/install.html or
http://httpd.apache.org/docs/2.4/install.html
$ ./configure --prefix=PREFIX
$ make
$ make install
$ PREFIX/bin/apachectl start
……省略以下內容……
使用 ls 命令可以看到當前目錄下有一個名爲 configure 的可執行檔案:
[root@admin httpd-2.4.43]# ll configure
-rwxr-xr-x. 1 root 40 1209103 3月 26 22:46 configure
說明: ./configure
a. 指定安裝路徑,例如 --prefix=/usr/local/apache
b. 啓用或禁用某項功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module
c. 和其它軟體關聯,例如--with-pcre
d. 檢查安裝環境,例如是否有編譯器gcc,是否滿足軟體的依賴需求
最終生成:Makefile
軟體設定與檢查./conigure
#1、定義需要的功能選項。
#2、檢測系統是否符合安裝要求。
#3、把定義好的功能選項和檢測系統環境的資訊都寫入Makefile 檔案,用於後續的編輯
執行:
#檢查安裝環境,並指定安裝目錄爲usr/local/apache
[root@admin httpd-2.4.43]# ./configure --prefix=/usr/local/apache #一定要進入解壓後的目錄執行./configure進行預編譯
……省略以上輸出資訊……
configure:
checking for APR... no
configure: error: APR not found. Please read the documentation.
#校驗沒通過 APR失敗 我們需要下載APR ,這是因爲安裝此軟體需要依賴於 arp 等軟體,由於電腦上未安裝,所以必須先安裝httpd的依賴軟體,才能 纔能通過校驗
#還是一樣,通過 wget 下載工具進行下載或者在宿主機上下載好,使用lrzsz軟體提供的 rz 命令上傳到當下
#這裏依賴的軟體有兩個:apr-1.6.5.tar.gz 下載地址:http://mirror.bit.edu.cn/apache/apr/apr-1.6.5.tar.gz
#apr-util-1.6.1.tar.gz 下載地址:http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
[root@admin httpd-2.4.43]# cd ..
[root@admin src]# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.5.tar.gz
[root@admin src]# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.gz #下載這兩個依賴軟體
#解壓第一個(這個apr-1.6.5軟體必須是第一個安裝,因爲被httpd依賴的第二個軟體apr-util-1.6.1是依賴於apr-1.6.5 的)
[root@admin src]# tar xf apr-1.6.5.tar.gz
#進入解壓後的目錄進行預編譯並指定安裝目錄爲/usr/local/apr
[root@admin apr-1.6.5]# ./configure --prefix=/usr/local/apr
#耐心等待,沒有顯示錯誤資訊,繼續進行下一步
#編譯並安裝該軟體
[root@admin apr-1.6.5]# make && make install
#耐心等待,沒有顯示錯誤資訊,安裝成功。繼續進行下一步
#解壓第二個檔案
[root@admin apr-1.6.5]# cd ..
[root@admin src]# ls
apr-1.6.5 apr-1.6.5.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.43
[root@admin src]# tar xf apr-util-1.6.1.tar.gz
[root@admin src]# cd apr-util-1.6.1
#編譯第二個軟體,並指定安裝目錄爲/usr/local/apr-util 同時必須宣告第一個安裝目錄
[root@admin apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
#耐心等待,沒有顯示錯誤資訊,繼續進行下一步
#編譯並安裝
[root@admin apr-util-1.6.1]# make && make install
xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo
xml/apr_xml.c:35:19: 致命錯誤:expat.h:沒有那個檔案或目錄
……省略部分輸出資訊……
# 缺少xml 的解析器 需要安裝一個
#缺少pcre https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz/download
[root@admin apr-util-1.6.1]# cd ..
[root@admin src]# wget https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz/download
#等待下載完成
[root@admin src]# ls #這個名爲down的檔案就是下載好的
apr-1.6.5 apr-util-1.6.1.tar.gz httpd-2.4.43.tar.gz
apr-1.6.5.tar.gz download pcre-8.42
apr-util-1.6.1 httpd-2.4.43
#解壓該檔案
[root@admin src]# tar xf download
[root@admin src]# ls #解壓後的目錄爲pcre-8.42
apr-1.6.5 apr-util-1.6.1.tar.gz httpd-2.4.43.tar.gz
apr-1.6.5.tar.gz download pcre-8.42
apr-util-1.6.1 httpd-2.4.43
#預編譯
[root@admin pcre-8.42]# ./configure --prefix=/usr/local/pcre
#等待,完成後進行編譯和安裝
[root@admin pcre-8.42]# make && make install
#繼續對apr-utl進行編譯安裝,這時就不會報錯
[root@admin src]# cd ..
[root@admin src]# cd apr-util-1.6.1
[root@admin apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@admin apr-util-1.6.1]# make && make install
#前置包安裝完後就可以預編譯httpd
[root@admin src]# cd ..
[root@admin src]# cd httpd-2.4.43
#預編譯
[root@admin httpd-2.4.43]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@admin httpd-2.4.43]# make && make install
#等待安裝完成,沒有提示錯誤資訊
#檢視安裝情況
[root@admin apache]# cd /usr/local/bin
[root@admin bin]# ls #這裏都是可執行檔案
ab dbmmanage htcacheclean httpd
apachectl envvars htdbm httxt2dbm
apxs envvars-std htdigest logresolve
checkgid fcgistarter htpasswd rotatelogs
#安裝完成後啓動該服務
[root@admin bin]# /usr/local/apache/bin/apachectl start
[root@admin bin]# ps -ef | grep httpd #檢視
root 45499 1 0 09:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 45500 45499 0 09:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 45501 45499 0 09:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 45502 45499 0 09:49 ? 00:00:00 /usr/local/apach
#關閉該服務
[root@admin bin]# /usr/local/apache/bin/apachectl stop
#檢視
[root@admin bin]# ps -ef | grep httpd
root 45597 1611 0 09:52 pts/0 00:00:00 grep --color=auto httpd
【例 2】memcached 原始碼包的安裝
1.下載原始碼包(.tar.gz格式)
兩種方式:①在windows電腦上進入官網下載所需包,然後使用 ftp上傳進來
②獲取原始碼包的下載地址,使用wget下載工具直接下載
其實我們可以先用 yum install memcached 檢視該軟體包的依賴,再根據此依賴下載對應的原始碼包(雖然使用yum方式查詢到的是對應軟體RPM包的依賴,對於原始碼包來說是一樣的)
2.解壓
解壓到 /usr/local/src 下
[root@admin src]# tar xf libevent-2.1.8-stable.tar.gz
[root@admin src]# tar xf memcached-1.5.6.tar.gz
[root@admin src]# ls
libevent-2.1.8-stable memcached-1.5.6
libevent-2.1.8-stable.tar.gz memcached-1.5.6.tar.gz
3.編譯和安裝
安裝預編譯工具:
[root@admin src]# yum install gcc-c++ gcc make
若已安裝則跳過
因爲 memcached 軟體的安裝依賴於 libevent 軟體,所以先編譯和安裝 libevent
進入解壓後的目錄進行對 libevent 進行預編譯:
[root@admin src]# cd libevent-2.1.8-stable
[root@admin libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
#等待……預編譯完成後檢視是否有顯示錯誤資訊
#並檢視執行後的情況
[root@admin libevent-2.1.8-stable]# echo $?
0 #0表示正常執行完上次命令
對 libevent 進行編譯和安裝
[root@admin libevent-2.1.8-stable]# make && make install
#等待安裝,完成後檢視是否有顯示錯誤資訊
#並檢視命令執行後的情況
[root@admin libevent-2.1.8-stable]# echo $?
0 #成功執行
進入解壓後的目錄進行對 memcached 進行預編譯:
[root@admin src]# cd memcached-1.5.6
#在指明安裝目錄的同時要指出被 memcached 軟體所依賴的軟體的安裝位置
[root@admin memcached-1.5.6]# /.configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
#等待安裝,完成後檢視是否有顯示錯誤並檢視命令執行後的情況
[root@admin memcached-1.5.6]# echo $?
0
對 memcached 進行編譯和安裝
[root@admin memcached-1.5.6]# make && make install
[root@admin memcached-1.5.6]# echo $?
0
這樣就安裝完成了,啓動該服務檢視是否可以正常執行:
[root@admin memcached-1.5.6]# cd /usr/local/memcached
[root@admin memcached]# ls
bin include share
[root@admin memcached]# bin/memcached -d -l 0.0.0.0 -p 11211 -u root
[root@admin memcached]# ps -ef | grep memcached #可以看到,該服務可以正常啓動
root 10781 1 0 11:16 ? 00:00:00 bin/memcached -d -l 0.0.0.0 -p 11211 -u root
root 10792 1528 0 11:16 pts/0 00:00:00 grep --color=auto memcached
#下面 下麪驗證該服務是否可以正常工作
#關閉防火牆
[root@admin memcached]# systemctl stop firewalld
#而後使用另一臺主機使用telnet 連線該主機
[dxk@admin ~]$ telnet 192.168.126.3 11211
Trying 192.168.126.3...
Connected to 192.168.126.3.
Escape character is '^]'. #可以看到正常鏈接,memcached 服務工作正常
原始碼包解除安裝:直接刪除安裝目錄即可,不會殘留任何垃圾,如果建立了軟鏈接及編輯了額外檔案也要進行移除
爲了解決使用原始碼包安裝方式的問題,Linux 軟體包的安裝出現了使用二進制包的安裝方式。
二進制包是軟體包的一種形式,二進制包是已經經過編譯,可以馬上執行的程式軟體包。你只需要下載和解包(安裝)它們以後,就馬上可以使用。軟體包的內容是01二進制程式碼(一般以16進位制顯示),也就是說,這些檔案是計算機能直接識別的(計算機只能識別處理01二進制)
二進制包,也就是原始碼包經過成功編譯之後產生的包。由於二進制包在發佈之前就已經完成了編譯的工作,因此使用者安裝軟體的速度較快(同 Windows下安裝軟體速度相當),且安裝過程報錯機率大大減小。
二進制包是 Linux 下預設的軟體安裝包,因此二進制包又被稱爲預設安裝軟體包。
相比原始碼包,二進制包是在軟體發佈時已經進行過編譯的軟體包,所以安裝速度比原始碼包快得多(和 Windows 下軟體安裝速度相當)。也正是因爲已經進行通譯,大家無法看到軟體的原始碼。
格式1: xxxx-devel-6b-33.x86_64.rpm格式(RPM包),
格式2: mysql-5.5.32-linux2.6-x86_64.tar.gz格式(tar -zxvf解壓之後就能直接使用)
這裏注意和原始碼包的區別:二進制格式的包名字很長,一般都會帶有版本號、適應平臺、適應的硬體型別等,而原始碼格式僅僅就是一個版本號的tar包,例如httpd-2.4.25.tar.gz。
我們一般說的二進制包其實預設指的就是RPM包,也就是說二進制包包含RPM包,RPM包是二進制包的一個子集
這些檔案的內容都是01二進制程式碼(一般以16進位制顯示),也就是說,這些檔案是計算機能直接識別的(計算機只能識別處理01二進制)
【例 】apache tomcat 二進制包的安裝
安裝 tomcat 之前需要先安裝 jdk (依賴性)
1.下載原始碼包
官網下載 jdk 和 tomcat 原始碼包(.tar.gz格式)
[root@admin src]# ls
apache-tomcat-8.0.36.tar.gz jdk-7u79-linux-x64.tar.gz
2.解壓
[root@admin src]# tar xf apache-tomcat-8.0.36.tar.gz
[root@admin src]# tar xf jdk-7u79-linux-x64.tar.gz
[root@admin src]# ls
apache-tomcat-8.0.36 jdk1.7.0_79
apache-tomcat-8.0.36.tar.gz jdk-7u79-linux-x64.tar.gz
3.使用
[root@admin src]# cd jdk1.7.0_79/bin
[root@admin bin]# ls
appletviewer javap jps rmic
apt java-rmi.cgi jrunscript rmid
ControlPanel javaws jsadebugd rmiregistry
extcheck jcmd jstack schemagen
idlj jconsole jstat serialver
jar jcontrol jstatd servertool
jarsigner jdb jvisualvm tnameserv
java jhat keytool unpack200
javac jinfo native2ascii wsgen
javadoc jmap orbd wsimport
javafxpackager jmc pack200 xjc
javah jmc.ini policytool
[root@admin bin]# ./java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
#因爲未設定環境變數(classpath等),所以執行命令的時候必須帶相應命令的所在路徑
4.設定環境變數
[root@admin bin]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/src/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
[root@admin bin]# source /etc/profile.d/java.sh #載入生效
#這樣就可以在任何地方執行該命令不用帶路徑
[root@admin ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
5.檢驗tomcat
[root@admin src]# cd apache-tomcat-8.0.36
[root@admin apache-tomcat-8.0.36]# ls
bin lib logs RELEASE-NOTES temp work
conf LICENSE NOTICE RUNNING.txt webapps
[root@admin apache-tomcat-8.0.36]# cd bin
[root@admin bin]# ls
bootstrap.jar setclasspath.sh
catalina.bat shutdown.bat
catalina.sh shutdown.sh
catalina-tasks.xml startup.bat
commons-daemon.jar startup.sh
commons-daemon-native.tar.gz tomcat-juli.jar
configtest.bat tomcat-native.tar.gz
configtest.sh tool-wrapper.bat
daemon.sh tool-wrapper.sh
digest.bat version.bat
digest.sh version.sh
setclasspath.bat
[root@admin bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/src/apache-tomcat-8.0.36
Using CATALINA_HOME: /usr/local/src/apache-tomcat-8.0.36
Using CATALINA_TMPDIR: /usr/local/src/apache-tomcat-8.0.36/temp
Using JRE_HOME: /usr/local/src/jdk1.7.0_79/jre
Using CLASSPATH: /usr/local/src/apache-tomcat-8.0.36/bin/bootstrap.jar:/usr/local/src/apache-tomcat-8.0.36/bin/tomcat-juli.jar
Tomcat started.
[root@admin bin]# netstat -tunalp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1093/sshd
tcp 0 0 192.168.126.3:22 192.168.126.1:50170 ESTABLISHED 1539/sshd: root@pts
tcp 0 0 192.168.126.3:22 192.168.126.1:51371 ESTABLISHED 1624/sshd: root@pts
tcp6 0 0 :::8080 :::* LISTEN 1700/java #tomcat埠8080
tcp6 0 0 :::22 :::* LISTEN 1093/sshd
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1700/java
tcp6 0 0 :::8009 :::* LISTEN 1700/java
[root@admin bin]# systemctl stop firewalld #關閉防火牆
在宿主機的瀏覽器中存取該主機的tomcat WEB伺服器
由於未設定那麼頁面爲tomcat的預設頁面
以上是非RPM包的二進制包的安裝。關於二進制包下的RPM包的安裝在下面 下麪進行詳細講解
在一個操作系統下,需要安裝實現各種功能的軟體包。這些軟體包一般都有各自的程式,但是同時也有錯綜複雜的依賴關係。同時還需要解決軟體包的版本,以及安裝,設定,解除安裝的自動化問題。
爲了解決這些問題,RedHat針對自己的系統提出了一個較好的辦法來管理成千上百的軟體。這就是RPM管理系統。在系統中安裝了rpm管理系統以後,只要是符合rpm檔案標準的打包的程式都可以方便的安裝,升級,解除安裝
也就是說 rpm 原本是Red Hat公司專門用來管理Red Hat的Linux發行版本的各項程式套件的管理程式,由於它遵循GPL規則且功能強大方便,因而廣受歡迎。逐漸受到其他Linux發行版本的採用。RPM套件管理方式的出現,讓Linux易於安裝,升級,間接提升了Linux的適用度。
而yum(Yellowdog Update Manager)是RPM的前端工具,是基於RPM的一個管理工具,它能自動的解決安裝rpm包產生的依賴關係
RPM包也就是二進制包的一種,rpm包很好區分,以rpm結尾的一般都是rpm包
注意:RPM分爲兩種,分別是:package和srcpackage,也就是binary rpm和source rpm;前者是已經編譯好的二進制包,可以直接安裝使用,而後者是包含了原始碼的rpm包,需要重組rebuild之後纔可以安裝使用,其實從嚴謹的角度上來說,.src.rpm算是特殊的原始碼包,特殊在它能直接生成rpm包*
格式1: name-version-release.arch.rpm
格式2: name-version-release.arch.src.rpm
RPM 二進制包的命名需遵守統一的命名規則,使用者通過名稱就可以直接獲取這類包的版本、適用平臺等資訊
RPM 二進制包命名的一般格式如下:
包名-版本號-發佈次數-發行商-Linux平臺-適合的硬體平臺-包擴充套件名
例如,RPM 包的名稱是httpd-2.4.6-93.el7.centos.x86_64.rpm ,其中:
主版本號.次版本號.修正號
平臺名稱 | 使適用平臺資訊 |
---|---|
i386 | 386 以上的計算機都可以安裝 |
i586 | 586 以上的計算機都可以安裝 |
i686 | 奔騰 II 以上的計算機都可以安裝 |
x86_64 | 64 位 CPU 可以安裝 |
noarch | 沒有硬體限制 |
rpm:RPM 包的擴充套件名,表明這是編譯好的二進制包,可以使用 rpm 命令直接安裝。此外,還有以 src.rpm 作爲擴充套件名的 RPM 包,這表明是原始碼包,需要安裝生成原始碼,然後對其編譯並生成 rpm 格式的包,最後才能 纔能使用 rpm 命令進行安裝。
特殊名稱:
devel:表示這個RPM包是軟體的開發包。
manual 手冊文件。
說明:Linux 系統不靠擴充套件名分割區檔案型別,那爲什麼包全名中要包含 .rpm 擴充套件名呢?其實,這裏的擴充套件名是爲系統管理員準備的,如果我們不對 RPM 包標註擴充套件名,管理員很難知道這是一個 RPM 包,當然也就無法正確使用。
包全名:一般安裝和升級的包,都沒有安裝,操作的是未安裝包,所以用包全名,且安裝的時候要寫包所在的全路徑。
包名:這個時候包已經安裝過了,告訴系統該包名,系統就可以搜尋到這個包,這時不用寫包全名。它搜尋的地方是/var/lib/rpm/下的數據庫,所以就不用寫絕對路徑,這些目錄下的檔案都是二進制檔案,不能直接使用 vi 命令開啓,因爲我們是已經安裝了的包,它搜尋/var/lib/rpm下的數據庫,不用寫絕對路徑,在任何位置下執行搜尋命令都可以找到。查詢和解除安裝這些命令操作的都是已經安裝過的包,所以只需寫包名即可。
Tips:
RPM包優點:
RPM包缺點:
對於已經編譯成二進制的rpm包,由於操作系統環境不同,一般不能混用。
但是以src.rpm形式發行的軟體包,由於需要安裝時進行本地編譯,所以通常可以在不同系統下安裝
RPM包預設安裝路徑
通常情況下,RPM 包採用系統預設的安裝路徑,所有安裝檔案會按照類別分散安裝到指定目錄中。
安裝路徑 | 含 義 |
---|---|
/etc/ | 組態檔安裝目錄 |
/usr/bin/ | 可執行的命令安裝目錄 |
/usr/lib/ | 程式所使用的函數庫儲存位置 |
/usr/share/doc/ | 基本的軟體使用手冊儲存位置 |
/usr/share/man/ | 幫助檔案儲存位置 |
RPM 包的預設安裝路徑是可以通過命令查詢的。
除此之外,RPM 包也支援手動指定安裝路徑,但此方式並不推薦。因爲一旦手動指定安裝路徑,所有的安裝檔案會集中安裝到指定位置,且系統中用來查詢安裝路徑的命令也無法使用
1.RPM 包的安裝
rpm命令安裝 RPM 包的命令格式: rpm -ivh 包全名
注意一定是包全名。涉及到包全名的命令,一定要注意路徑
例如,使用此命令安裝 wget 軟體包,如下:
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/wget-1.14-18.el7_6.1.x86_64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:wget-1.14-18.el7_6.1 ################################# [100%]
注意:安裝的時候,如果該RPM包不在當前目錄下則必須加上該包的路徑
此命令還可以一次性安裝多個軟體包,僅需將包全名用空格分開即可
[root@admin ~]# rpm -ivh a.rpm b.rpm c.rpm
如果還有其他安裝要求(比如強制安裝某軟體而不管它是否有依賴性),可以通過以下選項進行調整:
當然:使用rmp命令安裝RPM 軟體包時考慮包之間的依賴性
比如,我們要安裝 apache 軟體包,如下所示:
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm
錯誤:依賴檢測失敗:
httpd-tools = 2.4.6-93.el7.centos 被 httpd-2.4.6-93.el7.centos.x86_64 需要
報錯資訊提示我們,如果要安裝 httpd,需要先安裝 httpd-tools軟體,這體現的就是 RPM 包的依賴性。
那麼我們就需要先安裝httpd-tools,再安裝httpd軟體
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:httpd-tools-2.4.6-93.el7.centos ################################# [100%]
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:httpd-2.4.6-93.el7.centos ################################# [100%]
這樣apache服務安裝完成,可以檢測下能否使用:
[root@admin ~]# systemctl start httpd
[root@admin ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running)
……省略……
沒有問題,該服務可以正常啓動
Linux 系統中,RPM 包之間的依賴關係大致可分爲以下 3 種:
以上 3 種 RPM 包的依賴關係,給出的解決方案都是手動安裝,比較麻煩。那麼可以使用 後面講到的yum 命令安裝RPM包,可以自行解決依賴關係。
2.RPM包的升級
使用如下命令即可實現 RPM 包的升級:
rpm -Uvh 包全名
-U(大寫)選項的含義是:如果該軟體沒安裝過則直接安裝;若安裝了則升級至最新版本。
rpm -Fvh 包全名
-F(大寫)選項的含義是:如果該軟體沒有安裝,則不會安裝,必須安裝有較低版本才能 纔能升級。
3.RPM包的解除安裝
使用rmp命令解除安裝RPM 軟體包時也要考慮包之間的依賴性
使用方法:
rpm -e 包名
例如,我們在使用rpm命令安裝 memcached 軟體的時候,會被告知要先安裝 libevent 軟體,
[root@admin ~]# rpm -ivh memcached-1.4.15-10.el7_3.1.x86_64.rpm
錯誤:依賴檢測失敗:
libevent-2.0.so.5()(64bit) 被 memcached-0:1.4.15-10.el7_3.1.x86_64 需要
所以要先安裝 libevent ,再安裝 memcached 。
[root@admin ~]# rpm -ivh libevent-2.0.21-4.el7.x86_64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:libevent-2.0.21-4.el7 ################################# [100%]
[root@admin ~]# rpm -ivh memcached-1.4.15-10.el7_3.1.x86_64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:memcached-0:1.4.15-10.el7_3.1 ################################# [100%]
這樣就安裝好了。當我們想解除安裝 libevent 的時候
[root@admin ~]# rpm -e libevent
錯誤:依賴檢測失敗:
libevent-2.0.so.5()(64bit) 被 (已安裝) memcached-0:1.4.15-10.el7_3.1.x86_64 需要
因爲 libevent 被 memcached 需要,所以要想解除安裝 libevent ,必須先解除安裝 memcached
所以說:如果你要解除安裝的軟體包被其它軟體包所依賴,系統則會提示"依賴性錯誤"
通過 --nodeps 選項可以忽略軟體包的依賴,讓 rpm 命令強制解除安裝某個軟體包。但強制解除安裝軟體包之後可能導致其它依賴於它的軟體包都無法正常工作,並可能導致系統安全以及穩定性等多方面的問題,因此不建議強制解除安裝軟體包
注意:解除安裝軟體包時,只需要提供軟體包的名稱即可,使用 RPM 軟體包的全名則會提示「錯誤的軟體包」
可以在解除安裝前先進行測試:
4.查詢rpm包是否安裝
用法:
rpm -q 包名 #查詢指定包是否安裝
rpm -a #查詢所有已經安裝的RPM包
以上的查詢命令是不一定在特定 Packages 的目錄當中才能 纔能執行的。操作的是未安裝包爲了讓系統找到這個包,必須進到 Packages 這個目錄當中,或者需要這個絕對路徑。而查詢是在我們這個後臺的數據庫當中尋找的,所以在任何目錄中執行這個查詢命令都可以執行的,而不需要進入到這個光碟Packages目錄當中
[root@admin ~]# rpm -q httpd #查詢httpd是否安裝
httpd-2.4.6-93.el7.centos.x86_64 #說明已安裝
[root@admin ~]# rpm -q nginx #查詢nginx是否安裝
未安裝軟體包 nginx #說明未安裝
[root@admin ~]# rpm -qa #所查詢所有已經安裝的RPM包
##通過管道符和grep命令,可以列出所有的相關關鍵字的包
[root@admin ~]# rpm -qa | grep httpd
httpd-tools-2.4.6-93.el7.centos.x86_64
httpd-2.4.6-93.el7.centos.x86_64
5.查詢詳細資訊
用法:
rpm -qi 包名 #查詢軟體資訊
rpm -qip 全包名 #查詢未安裝包資訊(若該包不在當前目錄下,則執行時必須寫絕對路徑,而且是全包名)
[root@admin ~]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 93.el7.centos
……省略……
這個包資訊是組建這個包或者寫這個包的時候就已經寫好了,儲存在這個軟體包當中,就直接可以通過 rpm -qi 包名 命令來檢視這個資訊。
6.查詢軟體包安裝位置
用法:
rpm -ql 包名
rpm -qlp 全包名 #查詢 未安裝包資訊(若該包不在當前目錄下,則執行時必須寫絕對路徑,而且是全包名)
[root@admin ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
……省略……
7.查詢系統檔案屬於那個RPM包
用法:
rpm -qf 系統檔名
- 通過這個命令可以查詢:通過檔名可以追尋屬於哪個包。後面不能跟包名,也不能跟保全名,只能跟系統檔名。
- 切記:這個系統檔名必須是包裝出來的,才能 纔能反向追查它是屬於哪個包。但是,如果這個檔案不是包裝出來的,比如人爲建立的、或者系統自動生成一些臨時檔案(如,日誌檔案),這些檔案都不是通過包裝出來,因此通過這個檔案是不能追查到包的。
[root@admin ~]# rpm -qf /usr/bin/ls
coreutils-8.22-24.el7.x86_64
[root@admin ~]# rpm -qf /etc/yum.conf
yum-3.4.3-167.el7.centos.noarch
後面加檔案的絕對路徑
8.查詢軟體包的依賴性
用法:
rpm -qR 包名
rpm -qRp 全包名 #查詢未安裝包的依賴性(因爲查詢的是未安裝的包,後面需要加包全名或者用絕對路徑)
[root@admin Packages]# rpm -qR httpd
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-93.el7.centos
/usr/sbin/useradd
……省略……
#可以發現要安裝apach的包,需要依賴以上這麼多包,這些包只有正常安裝後,才能 纔能安裝apach的包
[root@admin ~]# rpm -qRp /var/ftp/centos7u2/Packages/zziplib-0.13.62-12.el7.x86_64.rpm #查詢未安裝包的依賴資訊
9.RPM包校驗
Linux 系統中裝有大量的 RPM 包,且每個包都含有大量的安裝檔案。因此,爲了能夠及時發現檔案誤刪、誤修改檔案數據、惡意篡改檔案內容等問題,Linux 提供了以下兩種監控(檢測)方式:
用法:
rpm -Va #校驗系統中已安裝的所有軟體包
rpm -V 已安裝的包名 #校驗指定 RPM 包中的檔案
rpm -Vf 系統檔名 #校驗某個系統檔案是否被修改
例如校驗 apache 軟體包中所有的安裝檔案是否被修改:
[root@admin ~]# rpm -V httpd
可以看到,執行後無任何提示資訊,表明所有用 apache 軟體包安裝的檔案均未改動過,還和從原軟體包安裝的檔案一樣
下面 下麪對 apache 的組態檔 /etc/httpd/conf/httpd.conf 做適當修改
[root@admin ~]# vim /etc/httpd/conf/httpd.conf
#對檔案進行修改後儲存退出,再次使用 rpm -V 命令對 apache 軟體包進行驗證
[root@admin ~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
可以看到,結果顯示了檔案被修改的資訊。該資訊可分爲以下 3 部分:
1.最前面的 8 個字元(S.5…T)都屬於驗證資訊,各字元的具體含義如下:
由此,S.5…T. c S.5…T. c /etc/httpd/conf/httpd.conf 表達的完整含義是:組態檔 httpd.conf 的大小、內容、修改時間被人爲修改過。
注意,並非所有對檔案做修改的行爲都是惡意的。通常情況下,對組態檔做修改是正常的,比如說設定 apache 就要修改其組態檔,而如果驗證資訊提示對二進制檔案做了修改,這就需要小心,除非是自己故意修改的
rpm命令安裝RPM包需要手動解決包之間具有依賴性的問題,尤其是庫檔案依賴,需要自行去 http://www.rpmfind.net 網站上查詢相關的 RPM 包。其實,我們可以選擇可自動安裝軟體包(自動解決包之間依賴關係)的安裝方式。
yum,全稱「Yellow dog Updater, Modified」,是一個專門爲了解決包的依賴關係而存在的軟體包管理器。就好像 Windows 系統上可以通過 360 軟體管家實現軟體的一鍵安裝、升級和解除安裝,Linux 系統也提供有這樣的工具,就是 yum
可以這麼說,yum 是改進型的 RPM 軟體管理器,它很好的解決了 RPM 所面臨的軟體包依賴問題
yum 在伺服器端存有所有的 RPM 包,並將各個包之間的依賴關係記錄在檔案中,當管理員使用 yum 安裝 RPM 包時,yum 會先從伺服器端下載包的依賴性檔案,通過分析此檔案從伺服器端一次性下載所有相關的 RPM 包並進行安裝
yum 軟體可以用 rpm 命令安裝,安裝之前可以通過如下命令檢視 yum 是否已安裝:
[root@admin ~]# rpm -qa | grep yum
yum-3.4.3-167.el7.centos.noarch
yum-plugin-fastestmirror-1.1.31-53.el7.noarch
yum-metadata-parser-1.1.4-10.el7.x86_64
可以看到,系統上已經安裝了 yum
如未安裝, 可以掛載映象檔案在Packages目錄中找到yum軟體進行安裝
1.顯示設定的倉庫
yum repolist
yum repolist all #顯示所有設定的軟體倉庫/軟體源
yum repolist enabled #顯示可用的軟體倉庫/軟體源
軟體源/軟體倉庫(repository)
1.概念:
軟體源,顧名思義就是軟體的來源,軟體的來源就是存放各種軟體包的軟體倉庫或者官方發佈的ISO檔案,其中包含各種應用軟體
多數Linux發行版都有自己的軟體安裝、設定方案,同時還有各自的軟體包管理系統。爲了省去使用者四處尋找合適軟體安裝包的麻煩,這些發行版將常用的軟體集中到一個伺服器上,併爲使用者提供了自動下載、安裝軟體的介面,這就是我們所說的「軟體倉庫」。
爲了方便大衆存取,人們爲這些軟體倉庫建立了大量的「映象」,使世界各地的使用者都能方便地使用。不同發行版的軟體倉庫一般不同,如使用者介面各異、軟體豐富程度不同、映象分佈不同等等
軟體倉庫管理軟體,例如yum和zypper,組態檔格式爲.repo,可以在倉庫中自動地定位並獲取正確的RPM軟體包*。多數Linux發行版都有自己的軟體安裝、設定方案,同時還有各自的軟體倉庫管理系統,例如RHEL的yum,suse的zypper,Debian和Ubuntu的apt。
2.格式:
軟體倉庫型別:
線上網路存取獲取方式,包含各類軟體的二進制包或者原始碼包,可以自定義軟體種類及數量,軟體倉庫的獲取方式可以是http、FTP、nfs等,一般官方也會提供這種軟體倉庫。
離線本地存取獲取方式,官方發行版本的離線ISO檔案,內部包含的軟體都是經過篩選的,掛載出來後也可以稱之爲是一個軟體倉庫
軟體倉庫的的組態檔格式一般是:*.repo
3.特性:
軟體倉庫中包含的不止只有軟體包,還有其他資訊(軟體包的資訊,位置資訊,軟體包的依賴關係,索引檔案等) 類似於索引的作用,可以快速的檢索到該包
在Linux操作系統中,軟體包的安裝其實是檔案的拷貝,即把軟體所用的各個檔案拷貝到特定目錄。當然RPM安裝軟體包,也不例外。但RPM更「先進」一些,因爲它在安裝前,還會執行檢查軟體包的依賴(Dependency)、檢查軟體包的衝突(Conflicts)。最後纔將軟體包裏面的相關檔案解出並存放到相應位置。也就是說軟體倉庫中包括了所有RPM包的頭資訊(header)描述,比如依賴性等。用戶端使用例如yum等倉庫管理軟體在安裝的時候就會去下載header檔案並加以分析,這樣才能 纔能自動地從伺服器端下載相關軟體,並正確地完成安裝任務。
注意:Linux軟體包的基本組成部分通常有:共用庫、應用程式、依賴關係,服務和文件。對軟體包的使用和管理被稱爲包管理
2.檢視RPM包
yum list #查詢所有可用軟體包列表,或者yum list all
yum list|grep 包名 #檢視指定包
yum list installed|grep 包名 #檢視是否已安裝某包
yum list available #顯示可安裝的包
yum list updates #顯示已經更新的包
yum list recent #顯示最近增加的包
例
#如果未被安裝,則會顯示可安裝的軟體包
[root@admin ~]# yum list samba
已載入外掛:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
可安裝的軟體包
samba.x86_64 4.10.4-11.el7_8 updates
#如果已經安裝,則會顯示已安裝的軟體包
[root@admin ~]# yum list httpd
已載入外掛:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
已安裝的軟體包
httpd.x86_64 2.4.6-93.el7.centos @base
3.RPM包安裝
yum install 包名 #安裝
yum install -y 包名 #安裝包,並對所有的Y/N選擇Y
4.升級
yum -y update #升級所有軟體包。不過考慮到伺服器強調穩定性,因此該命令並不常用。
yum -y update 包名 #升級特定的軟體包。
5.搜尋
yum search 包名 #從 yum 源伺服器上查詢與關鍵字相關的所有軟體包
6.顯示軟體包資訊
yum info 包名
例:
[root@admin ~]# yum info httpd
已載入外掛:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
已安裝的軟體包
名稱 :httpd
架構 :x86_64
版本 :2.4.6
發佈 :93.el7.centos
大小 :9.4 M
源 :installed
來自源:base
簡介 : Apache HTTP Server
網址 :http://httpd.apache.org/
協定 : ASL 2.0
描述 : The Apache HTTP Server is a powerful, efficient, and
: extensible web server.
7.列出軟體包提供哪些檔案
yum provides 包名
8.建立和清除快取
yum makecache #構建快取
yum clean all #清理
9.解除安裝
使用 yum 解除安裝軟體包時,會同時解除安裝所有與該包有依賴關係的其他軟體包,即便有依賴包屬於系統執行必備檔案,也會被 yum 無情解除安裝,帶來的直接後果是使系統崩潰
除非你能確定解除安裝此包以及它的所有依賴包不會對系統產生影響,否則不要使用 yum 解除安裝軟體包
yum remove 包名 #解除安裝指定的軟體包