Linux基礎--軟件包管理

在RHEL系列的Linux中安裝軟件包,一般來說分爲三種方式,rpm/yum/編譯安裝。


1. rpm

rpm自不必說,在RHEL系列的Linux中提供的軟件包大多都是以.rpm後綴結尾的格式提供的。比起編譯源碼包來說確實方便很多,但是linux中的軟件包往往存在複雜的依賴關係,而rpm並不能自動解決依賴關係,這讓rpm使用起來很不方便。因此真實場景中很少會用rpm去安裝軟件包,這並不說rpm沒什麼用,事實上yum的廣泛使用正是依賴於rpm建立的軟件包信息庫,也正因爲它提供了這樣一個信息庫,我們可以用它去查詢軟件包信息。

```

# 查詢軟件基本信息

[root@localhost ~]# rpm -qi httpd

# 查詢軟件配置文件

[root@localhost ~]# rpm -qc httpd

# 查詢軟件文檔文件

[root@localhost ~]# rpm -qd httpd

```

rpm的基本用法可見此[鏈接],詳細用法看man手冊。


2. yum

yum就是爲了解決rpm包的依賴關係問題而生的,它是一個C/S架構的。在服務器端建立rpm包倉庫,並通過ftp/http/nfs等網絡協議發佈出來,在客戶端配置訪問倉庫的URL路徑,安裝過程yum自動解決依賴關係,然後去包倉庫找到相應的包下載下來按依賴的先後順序安裝。

也可以在客戶端將系統安裝光盤掛載至文件系統某目錄下,將其作爲服務器端包倉庫。

yum的基本用法可見此[鏈接],詳細用法看man手冊。


客戶端配置包倉庫的最簡模式如下:

```

[base]

name=Local repo on dvd rom

http://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/

# or baseurl=file:///mnt

gpgcheck=0

enabled=1

```


詳細配置參數見man手冊

```

man yum.conf

```


這裏想指出一個在服務端製作包倉庫時需要注意的一個問題。製作包倉庫是使用createrepo這個命令將倉庫中所有的rpm包的元數據信息抽取出來。客戶端訪問倉庫是需要先下載倉庫的元數據信息的,然後根據這些信息去下載包。元數據信息中就有每個rpm包通過單向加密算法計算出來的特徵碼(也叫做指紋信息),它是用來防止傳輸過程中包不完整或者被篡改的。

而這個單向加密算法,在5系列以前的使用的是sha1算法,而6和7系列中默認使用sha256算法,可手動指定爲sha1算法。因此這就存在一個問題,在6或7系列上創建倉庫給5系列機器用時如果沒有手動指定加密算法爲sha1,那麼5系列的機器下載下來的元數據信息所使用的加密算法就會使sha256算法,而5系列的機器的yum使用的是sha1算法,沒有辦法匹配。

因此在6或7系列機器上創建給5系列機器使用的倉庫時需要指定加密算法爲sha1。而反之是不需要的,高版本的yum設計時考慮了後向兼容。

```

[root@localhost repo]# createrepo -s sha ./

```


另外,因爲元數據信息中記錄的是倉庫中所有rpm包的信息,那麼更新或者增加了包,需要相應地更新元數據信息。

```

[root@localhost repo]# createrepo --update ./

```


3. 編譯安裝

當有些軟件沒有rpm包提供,或者以rpm包形式提供的時候有一些特性沒有啓用,或者開啓業務無關但相當消耗資源的特性時,就需要用手動編譯源代碼的方式安裝軟件了。


編譯安裝一般來說是三個步驟

```

./configure prefix=/usr/local

make

make install

```

  • configure是配置文件,可以指定安裝路徑,啓用或關閉某些特性,指定額外的編譯參數等等,用來生成Makefile文件。

  • make,安裝Makefile中描述的代碼組織邏輯去調用編譯器、鏈接器等去完成軟件編譯。

  • make install, 將編譯好的文件安裝到指定目錄,修改用戶/組,權限等等。


編譯安裝一般會將文件安裝到某一指定目錄中,這樣卸載時只需要刪除整個目錄即可卸載乾淨。

而這種用戶自己指定的目錄一般不會加入系統環境變量,使用起來不方便,因此軟件安裝完成後一般還需要以下四步。

  • 導出二進制文件路徑至PATH環境變量中。

    ```

    [root@localhost ~]# echo "export PATH=/PATH/TO/BIN:$PATH" > /etc/profile.d/NAME.sh

    ```

  • 導出庫文件路徑,並讓系統重新生成緩存。

    ```

    [root@localhost ~]# echo "/PATH/TO/LIB" > /etc/profile.d/ld.so.conf.d/NAME.conf

    [root@localhost ~]# ldconfig -v

    ```

  • 導出頭文件。

    ```

    [root@localhost ~]# ln -sv /PATH/TO/INCLUDE /usr/include

    ```

  • 導出幫助手冊。

    ```

    [root@localhost ~]# echo "MANDATORY_MANPATH /PATH/TO/MAN" /etc/man_db.conf

    ```

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章