CentOS7軟件包管理

軟件包管理

rpm,yum,源碼編譯安裝


rpm

1、rpm工具的安裝、升級、卸載平時都是很少使用的。對於安裝來說,它經常需要認爲的解決依賴關係。yum經常用於安裝或升級軟件包

2、但是,雖然rpm的安裝功能很少使用,但rpm的查詢功能非常實用。

rpm -qf

rpm -ql

rpm -qRp

...

3、說到查詢,yum-utils包中的repoquery也很強大

rpm -ivhUe --nodeps --test --force --prefix
選項說明:
-i 表示安裝,install的意思
-v 顯示安裝信息,還可以"-vv"、"-vvv",v提供的越多顯示信息越多
-h 顯示安裝進度,以#顯示安裝的進度
-U 升級或升級包
-F 只升級已安裝的包
-e 卸載包,卸載也有依賴性,"--erase"
--nodeps 忽略依賴性強制安裝或卸載(no dependencies)
--test 測試是否能夠成功安裝指定的rpm包
--prefix 新路徑 自行指定安裝路徑而不是使用默認路徑,基本上都不支持該功能,功能極其簡單的軟件估計才支持重定位安裝路徑
--force 強制動作
--replacepkgs 替換安裝,即重新覆蓋安裝。
-q[p] -q查詢已安裝的包,-qp查詢未安裝的包。它們都可接下面的參數
    -a 查詢所有已安裝的包,也可以指定通配符名稱進行查詢
    -i 查詢指定包的信息(版本、開發商、安裝時間等)。從這裏面可以查看到軟件包屬於哪個包組。
    -l 查詢包的文件列表和目錄(包在生產的時候就指定了文件路徑,因此可查未裝包)
    -R 查詢包的依賴性(Required)
    -c 查詢安裝後包生成的配置文件
    -d 查詢安裝後包生成的幫助文檔
    -f 查詢系統文件屬於哪個已安裝的包(接的是文件而不是包)
    --scripts 查詢包相關的腳本文檔。腳本文檔分四類:安裝前運行、安裝後運行、卸載前運行、卸載後運行

1、rpm -qi查詢包的詳細信息

[root@centos7 tmp]# rpm -qi tree
Name        : tree
Version     : 1.6.0
Release     : 10.el7
...
[root@centos7 tmp]# rpm -qi nginx
Name        : nginx
Epoch       : 1
Version     : 1.16.0
...

2、rpm -qf查詢某個文件來自那個軟件包

[root@centos7 tmp]# rpm -qf /etc/nginx/nginx.conf 
nginx-1.16.0-1.el7.ngx.x86_64
[root@centos7 tmp]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.60-1.el7_5.x86_64

3、rpm -ql列出某個包的相關文件(安裝時生成的文件)

repoquery -l nginx也可以

[root@centos7 tmp]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
...

4、rpm -e卸載,有依賴卸載不了

[root@centos7 tmp]# rpm -e rpm
error: Failed dependencies:
    rpm = 4.11.3-35.el7 is needed by (installed) rpm-libs-4.11.3-35.el7.x86_64
    rpm is needed by (installed) color-filesystem-1-13.el7.noarch
    rpm = 4.11.3-35.el7 is needed by (installed) rpm-python-4.11.3-35.el7.x86_64
    rpm >= 0:4.11.3-22 is needed by (installed) yum-3.4.3-161.el7.centos.noarch
    rpm >= 4.1.1 is needed by (installed) createrepo-0.9.9-28.el7.noarch
    rpm is needed by (installed) policycoreutils-2.5-29.el7.x86_64

5、rpm -e --nodeps 忽略依賴性,強制卸載

[root@centos7 tmp]# rpm -e rpm --nodeps
# 救援請參考:https://blog.51cto.com/14012942/2426136
# 救援模式注意事項:要指定系統的根安裝,如下所示
# [root@centos7 tmp]# rpm -ivh /run/initall/repo/rpm-4.11.3-35.el7.x86_64.rpm --root=/mnt/sysimage
[root@centos7 cd]# rpm --help
-r, --root=ROOT                  use ROOT as top level directory (default: "/")

6、rpm --import導入密鑰

7、查詢某個未安裝包的依賴性

rpm -qRp packagename

[root@centos7 ~]# repoquery -R nginx

8、提取包中的文件rpm2cpio

rpm2pcio 結合cpio -idv

rpm2cpio是將rpm轉換爲cpio格式歸檔文件的命令,有了cpio文件,就可以使用cpio命令對其進行相關的操作。

rpm2cpio package_full_name|cpio -idv dir_name

該命令可以修復誤刪的命令:刪除/bin/ls並修復

[root@xuexi cdrom]# which ls     # 查找需要刪除的ls文件位置
alias ls='ls --color=auto'
        /bin/ls

[root@xuexi cdrom]# rpm -qf /bin/ls   # 查找ls命令屬於哪個包
coreutils-8.4-37.el6.x86_64

[root@xuexi cdrom]# rm -f /bin/ls      # 刪除ls命令
[root@xuexi cdrom]# ls                           # ls命令已不可用
-bash: /bin/ls: No such file or directory

[root@xuexi ~]# yumdownloader coreutils         # 下載所需的rpm包

[root@xuexi ~]# rpm2cpio coreutils-8.4-37.el6.x86_64.rpm | cpio -id ./bin/ls   # 提取bin/ls到當前目錄下

[root@xuexi ~]# dir ~/bin     # 使用dir命令查看已經提取成功,dir命令功能等價於ls
ls

[root@xuexi tmp]# cp bin/ls /bin/      # 複製ls命令到/bin下
[root@xuexi tmp]# ls                     # 測試,ls已經可用

實戰:tree命令刪除後如何恢復:

https://blog.51cto.com/14012942/2426136

實戰:刪除linux依賴庫後如何恢復:

https://blog.51cto.com/14012942/2426097


yum

1、/etc/yum.conf是yum的默認文件,裏面配置的也是全局默認項

7、yum group list 列出包組

[root@centos7 ~]# yum group list
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirror.lzu.edu.cn
 * extras: mirror.jdcloud.com
 * updates: mirror.lzu.edu.cn
Available Environment Groups:
   Minimal Install
   Compute Node
   ...

8、yum group info "包組名" 查看包組信息

[root@centos7 ~]# yum group info "Minimal Install"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirror.lzu.edu.cn
 * extras: mirror.jdcloud.com
 * updates: mirror.lzu.edu.cn

Environment Group: Minimal Install
 Environment-Id: minimal
 Description: Basic functionality.
 Mandatory Groups:
   +core
 Optional Groups:
   +debugging

9、yum group install "Development Tools安裝開發工具包

[root@centos7 ~]# yum group install "Development Tools"

10、卸載包組:yum group remove

11、createrepo創建倉庫

12、yum安裝mariadb-server,測時間

[root@centos7 dnf]# time yum install mariadb-server.x86_64 -y
Complete!

real    0m17.482s
user    0m6.337s
sys 0m3.311s

13、使用yum history undo卸載

[root@centos7 dnf]# yum history 
Loaded plugins: fastestmirror, langpacks
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     9 | root <root>              | 2019-08-03 20:19 | Install        |   10   
     8 | root <root>              | 2019-08-03 20:15 | Install        |   11   
     7 | root <root>              | 2019-08-03 20:07 | Install        |    1   
     6 | root <root>              | 2019-08-03 19:02 | Install        |    5   
     5 | root <root>              | 2019-08-03 09:15 | Reinstall      |    1   
     4 | root <root>              | 2019-08-02 16:30 | Install        |    1   
     3 | root <root>              | 2019-07-29 19:21 | Install        |    4   
     2 | root <root>              | 2019-07-29 14:14 | Install        |    1 E<
     1 | System <unset>           | 2019-07-17 16:27 | Install        | 1382 > 
history list
[root@centos7 dnf]# yum history undo 9

14、dnf安裝mariadb,time側時間

[root@centos7 dnf]# time dnf install mariadb-server.x86_64 -y
Complete!

real    0m23.413s
user    0m9.023s
sys 0m4.995s

15、程序包編譯

  • 源代碼->預處理->編譯->彙編->鏈接->執行
  • c、C++ make項目管理器
  • java:maven

16、yum源配置

1、mirrors.aliyun.com去下載

2、手動配

[base] # 倉庫ID,ID必須保證唯一性
name # 倉庫名稱,可隨意命名
mirrorlist # 該地址下包含了倉庫地址列表,包含一個或多個鏡像站點,和baseurl使用一個就可以了
#baseurl # 倉庫地址。網絡上的地址則寫網絡地址,本地地址則寫本地地址,格式爲“file://”後接路徑,如file:///mnt/cdrom
gpgcheck=1 # 指定是否需要簽名,1表示需要,0表示不需要
gpgkey= # 簽名文件的路徑
enable # 該倉庫是否生效,enable=1表示生效,enable=0表示不生效
cost= # 開銷越高,優先級越低
【repo配置文件中可用的宏:】
$releasever:程序的版本,對Yum而言指的是redhat-relrase版本。只替換爲主版本號,如Redhat6.5 則替換爲6
$arch:系統架構
$basharch:系統基本架構,如i686,i586等的基本架構爲i386
$YUM0-9:在系統定義的環境變量,可以在yum中使用

3、切記,repodata這一級的目錄就是需要配置的baseurl

示例、手動配置阿里雲的epel源(最好備份原有的源文件)

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basharch
enabled=1
gpgcheck=0

實戰:配置基於httpd的yum源:

https://blog.51cto.com/14012942/2426285

17、yum常用命令

<font color=red>很多時候,yum 操作失敗的原因是repo配置錯誤,或者緩存未更新</font>

Usage: yum [options] COMMAND

List of Commands:
clean           清除緩存數據,如yum clean all
makecache       生成元數據緩存數據,如yum makecache
history         查看yum事務信息,yum是獨佔模式的進程,yum undo 可以撤銷某個操作
insall          安裝包
list            列出包,一般結合grep,如yum list all | grep nginx
provides        搜索給定的內容是誰提供的。如yum provides lsof,查lsof來自哪個包
resinstall      重新安裝,某個文件命令誤刪修復
search          搜索給定關鍵字的包
update          更新包

options:

-q, --quiet     安靜模式
-y, --assumeyes       對所有問題回答yes
--enablerepo=[repo]   啓用一個或多個倉庫,可用通配符通配倉庫ID
--disablerepo=[repo]  禁用一個或多個倉庫,可用通配符通配倉庫ID
--downloadonly        僅下載包,不安裝或升級。默認下載在yum的緩存目錄中,默認爲/var/cache/yum/$basearch/$releasever

源碼編譯

一、源碼編譯的步驟

首先拿到包要解壓

1.1、閱讀INSTALL/README,看看要怎麼安裝

1.2、解壓後目錄一般有configure文件,用於檢查環境,生成makefile

configure一般的參數

--prefix=          :指定安裝的路徑
--sysconfdir=      :指定配置文件目錄
--enable-feature   :啓用某個特性
--disable-fecture  :禁用特性
--with-function    :啓用某功能
--without-function :禁用某功能

1.3、執行make進行編譯,主要是調用編譯器(gcc等)將源碼編譯爲可執行文件,通常會調用一些函數庫

1.4、make install 將上一步的編譯好的數據複製到指定目錄下面

二、源碼編譯實戰實戰

2.1、實戰

實戰:CentOS7編譯httpd-2.4.25:

https://blog.51cto.com/14012942/2427580

實戰:CentOS7腳本一鍵編譯和卸載httpd-2.4.25

https://blog.51cto.com/14012942/2427694

**實戰:源碼編譯cmatrix,實現*帝國的桌面

https://blog.51cto.com/14012942/2428339

參考:https://www.cnblogs.com/f-ck-need-u/p/7049750.html

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