1. 程式人生 > >第6章 DNF軟體包管理工具

第6章 DNF軟體包管理工具


DNF是FEDORA的軟體包管理工具,可以查詢軟體包的資訊、從軟體倉庫中獲取軟體,安裝、刪除軟體包,並自動處理包依賴。它還可以把所有軟體更新到最新版本。因為DNF能在安裝、刪除和更新軟體時自動處理包依賴,所以也就可以自動安裝依賴包。DNF可以配置多個的軟體倉庫,也提供了很多增強功能的外掛。DNF能執行與RPM相同的任務,而且命令列的選項也相似。NDF可以很容易的管理單個或多個電腦上的軟體包。
用GPG簽名為軟體包提供安全管理
DNF提供了GPG簽名工具用來管理軟體包的安全,可以對軟體倉庫,也可以只針對單個的軟體包。DNF拒絕安裝任何錯誤的GPG安全簽名的軟體。意思是,你要相信你下載並安裝到你係統上的RPM包來源於一個可信的源,並且沒有被修改過。
DNF也可以讓你很容易的建立自己的軟體倉庫來,以讓其它電腦能夠下載和安裝。
你必須要有超級許可權才能用DNF命令安裝、升級或刪除軟體。下面的內容都假定你已經通過su或sudo獲得了超級許可權。
6.1 檢查和更新軟體
6.1.1 檢查更新
檢查可用的更新最快的方式是用DNF UPDATE命令:
~]# dnf upgrade
Last metadata expiration check performed 1:24:32 ago on Thu May 14 23:23:51 2015.
Dependencies resolved.
Nothing to do.
Complete!
注意,NDF UPGRADE只安裝那些可以安裝的更新,如果軟體包由於包依賴問題等不能更新,那麼這個軟體包將不會安裝到系統上。
DNF CHECK-UPDATE是用來檢查系統中已安裝的軟體包是否有更新的版本的,並不意味著就能夠成功安裝。這個命令在檢查哪些更新包未能安裝的時候更有用。
比如:
~]# dnf check-update
Using metadata from Mon Apr 20 16:34:10 2015 (2:42:10 hours old)
python.x86_64 2.7.9-6.fc22 updates
python-cryptography.x86_64 0.8.2-1.fc22 updates
python-libs.x86_64 2.7.9-6.fc22 updates
輸出的是有新版本的軟體包。以第一行為例:
Python-軟體包的名稱
X86_64-適用的CPU架構
2.7.9-軟體版本號
6.fc22-軟體的小版本號
Updates-testing-軟體包所在的源
6.1.2更新軟體包
更新時可以選擇對單個、多個或所有軟體更新。如果所依賴的軟體也有更新包,那麼將自動更新。
更新單個軟體包
命令如下:
dnf upgrade package_name
比如要更新python軟體:
~]# dnf upgrade python
Using metadata from Mon Apr 20 16:38:16 2015 (2:42:14 hours old)

Dependencies resolved.

Package Arch Version Repository Size

Upgrading:
python x86_64 2.7.9-6.fc22 updates 92 k
python-libs x86_64 2.7.9-6.fc22 updates 5.8 M

Transaction Summary

Upgrade 2 Packages
Total download size: 5.9 M
Is this ok [y/N]:
輸出資訊包括:
1.python.x86_64-可以下載並安裝的軟體包
2.Python-libs.x86_64-dnf找到的python的依賴包
3.DNF會提示你是否執行更新,預設DNF是以互動式方式啟動的。可以用 -y引數讓DNF自動回答Y以達到自動更新的目的。
4.如果出現了錯誤,你可以用dnf history來查看出錯資訊。
用DNF更新和安裝核心
DNF安裝核心時是用RPM的rpm -i kernel方式,所以不用擔心dnf upgrade和dnf install的區別。
當使用RPM更新時,rpm -i kernel和rpm -u kernel是不一樣的,前者是安裝一個新核心(與舊的並存),後者是把當前的核心替換成新版本。
更新所有的軟體及其依賴包
更新全部軟體並將其依賴包一起更新時不需要任何引數:
dnf upgrade
6.1.3 儲存配置檔案的變化
安裝軟體後不可避免的會修改配置檔案。使用RPM的DNF更新軟體時會用自動更新和整合配置檔案。
6.2.1 查詢軟體
命令如下:
dnf search term…
增加all引數在所有源內查詢:
dnf search all term…
比如查詢meld或者kompare軟體:
~]# dnf search meld kompare
Loaded plugins: langpacks, presto, refresh-packagekit
============================== N/S Matched: meld ===============================
meld.noarch : Visual diff and merge tool
python-meld3.x86_64 : HTML/XML templating system for Python
============================= N/S Matched: kompare =============================
komparator.x86_64 : Kompare and merge two folders
Name and summary matches only, use "search all" for everything.
6.2.2 顯示軟體列表
Dnf list顯示軟體的相關資訊,軟體所在的組和源。
Dnf所有的list命令引數都可以使用簡化後的正則表示式過濾顯示的資訊。包括(表示多個字元)和?(表示單個字元)。
用正則表示式過濾顯示資訊
如果你是把要正式表示式傳遞給DNF做為引數,就一定要注意,否則BASH有可能會解析成目錄表示式,而在當前目錄裡查詢軟體。把正則表示式傳遞給DNF引數(而非作為BASH的目錄引數)時要注意:
1.前面用\;
2.用雙引號或單引號把表示式包起來。
DNF在使用正則表示式時只適用於軟體包名。如果查查版本號,請用-隔開:
~]# dnf search kernel

-4*
Last metadata expiration check performed 2:46:09 ago on Thu May 14 23:23:51 2015.
Installed Packages
kernel.x86_64 4.0.0-1.fc22 @System
kernel.x86_64 4.0.2-300.fc22 @System
kernel-core.x86_64 4.0.0-1.fc22 @System
kernel-core.x86_64 4.0.2-300.fc22 @System
[output truncated]
dnf list glob_expression…
用正則表示式查詢所有安裝的和可安裝的軟體。
例子6.1 顯示所有ABRT及相關的軟體(用正則表示式):
~]# dnf list abrt-addon* abrt-plugin*
Last metadata expiration check performed 0:14:36 ago on Mon May 25 23:38:13 2015.
Installed Packages
abrt-addon-ccpp.x86_64 2.5.1-2.fc22 @System
abrt-addon-coredump-helper.x86_64 2.5.1-2.fc22 @System
abrt-addon-kerneloops.x86_64 2.5.1-2.fc22 @System
abrt-addon-pstoreoops.x86_64 2.5.1-2.fc22 @System
abrt-addon-python.x86_64 2.5.1-2.fc22 @System
abrt-addon-python3.x86_64 2.5.1-2.fc22 @System
abrt-addon-vmcore.x86_64 2.5.1-2.fc22 @System
abrt-addon-xorg.x86_64 2.5.1-2.fc22 @System
abrt-plugin-bodhi.x86_64 2.5.1-2.fc22 @System
Available Packages
abrt-addon-upload-watch.x86_64 2.5.1-2.fc22 fedora
Dnf list all
顯示所有已安裝和可用的軟體。
~]# dnf list all
Last metadata expiration check performed 0:21:11 ago on Mon May 25 23:38:13 2015.
Installed Packages
NetworkManager.x86_64 1:1.0.2-1.fc22 @System
NetworkManager-libnm.x86_64 1:1.0.2-1.fc22 @System
PackageKit.x86_64 1.0.6-4.fc22 @System
PackageKit-glib.x86_64 1.0.6-4.fc22 @System
aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
abrt.x86_64 2.5.1-2.fc22 @System
[output truncated]
Dnf list installed
顯示所有已經安裝的和可安裝軟體。
例子6.2 顯示所有已經安裝的和可安裝軟體。
~]# dnf list all
Last metadata expiration check performed 0:21:11 ago on Mon May 25 23:38:13 2015.
Installed Packages
NetworkManager.x86_64 1:1.0.2-1.fc22 @System
NetworkManager-libnm.x86_64 1:1.0.2-1.fc22 @System
PackageKit.x86_64 1.0.6-4.fc22 @System
PackageKit-glib.x86_64 1.0.6-4.fc22 @System
aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
abrt.x86_64 2.5.1-2.fc22 @System
[output truncated]
Dnf list installed
顯示所有已安裝的軟體。最右側列顯示的是軟體來源於哪個包。
例子6.3 顯示所有已經安裝的軟體包(用雙引號)
顯示所有以krb開頭的、後面只跟著一個字母或數字的、再後面是短橫線的已經安裝的軟體:
~]# dnf list installed "krb?-"
Last metadata expiration check performed 0:34:45 ago on Mon May 25 23:38:13 2015.
Installed Packages
krb5-libs.x86_64 1.13.1-3.fc22 @System
krb5-workstation.x86_64 1.13.1-3.fc22 @System
Dnf list avaliable
顯示所有可用的軟體。
例子6.4 顯示所有可用的軟體(單引號的使用)
顯示名字裡包括gstreamer並且後面有plugin的軟體包:
~]# dnf list available gstreamer*plugin*
Last metadata expiration check performed 0:42:15 ago on Mon May 25 23:38:13 2015.
Available Packages
gstreamer-plugin-crystalhd.i686 3.10.0-8.fc22 fedora
gstreamer-plugin-crystalhd.x86_64 3.10.0-8.fc22 fedora
gstreamer-plugins-bad-free.i686 0.10.23-24.fc22 fedora
gstreamer-plugins-bad-free.x86_64 0.10.23-24.fc22 fedora
gstreamer-plugins-bad-free-devel.i686 0.10.23-24.fc22 fedora
gstreamer-plugins-bad-free-devel.x86_64 0.10.23-24.fc22 fedora
[output truncated]
Dnf group list
顯示所有軟體組。
例子6.5 顯示所有軟體組。
~]# dnf group list
Loaded plugins: langpacks, presto, refresh-packagekit
Setting up Group Process
Installed Groups:
Administration Tools
Design Suite
Dial-up Networking Support
Fonts
GNOME Desktop Environment
[output truncated]
Dnf repolist
顯示源的ID,名字和提供的軟體數量
例子6.6顯示已啟用的源的資訊
~]# dnf repolist
Last metadata expiration check performed 0:48:29 ago on Mon May 25 23:38:13 2015.
repo id repo name status
*fedora Fedora 22 - x86_64 44,762
*updates Fedora 22 - x86_64 - Updates 0
Dnf repository-packages repo_id list
顯示指定源的資訊。
例子6.7 顯示某個源的軟體資訊。
~]# dnf repository-packages fedora list [option]
Last metadata expiration check performed 1:38:25 ago on Wed May 20 22:16:16 2015.
Installed Packages
PackageKit.x86_64 1.0.6-3.fc22 @System
PackageKit-glib.x86_64 1.0.6-3.fc22 @System
aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
[output truncated]
沒有引數時預設顯示的是源裡所有可用的軟體以及通過該源已經安裝的軟體。如果要分別顯示的話,可以增加avaliable和installed引數區分。
6.2.3 顯示軟體資訊
命令如下:
dnf info package_name…
比如要顯示abrt包的資訊:
~]# dnf info abrt
Last metadata expiration check performed 5 days, 1:12:55 ago on Wed May 20 22:16:16 2015.
Installed Packages
Name : abrt
Arch : x86_64
Epoch : 0
Version : 2.5.1
Release : 2.fc22
Size : 2.1 M
Repo : @System
From repo : updates-testing
Summary : Automatic bug detection and reporting tool
URL :
https://github.com/abrt/abrt/wiki/ABRT-Project

License : GPLv2+
Description : abrt is a tool to help users to detect defects in applications and
: to create a bug report with all information needed by maintainer to fix it.
: It uses plugin system to extend its functionality.
Dnf info package_name和rpm -q --info package_name差不多,但多提供了軟體源的資訊。
6.2.4 安裝軟體
DNF可以安裝單個或多個軟體或者是一個軟體組。
安裝單個軟體
dnf install package_name
安裝多個軟體
dnf install package_name package_name…
如果你可安裝到特殊多個lib庫的系統,比如amd64或者intel64位,你可以指定軟體適用的架構,增加.arch到包名即可。比如安裝sqlite2的i586版本:
~]# dnf install sqlite2.i586
你可使用正則表示式快速安裝多個架構的軟體:
~]# dnf install audacious-plugins-*
也可以提供檔名給dnf install,如果你知道要安裝的二進位制檔名,但不知道軟體包的名字,你可以把二進位制檔案的名字傳遞給dnf install:
~]# dnf install /usr/sbin/named
Dnf 會查詢軟體的檔案列表,找到含有/usr/sbin/name的包。
找到含有某個檔案的包
如果你知道包裡某個檔名,但不知道軟體包的名,你可以用dnf provides命令查詢:
~]# dnf provides "
bin/named"
Using metadata from Thu Apr 16 13:41:45 2015 (4:23:50 hours old)
bind-32:9.10.2-1.fc22.x86_64 : The Berkeley Internet Name Domain (BIND) DNS (Domain Name
System) server
Repo : @System
*/file_name:在所有包裡查詢file_name.
安裝軟體組(套件)
軟體組類似軟體包,安裝時會安裝所有依賴的元件。軟體組有名字和ID,dnf group list -v 會顯示所有的軟委肉虎蹊且資訊。比如kde-desktop-environment:
~]# dnf -v group list kde*
cachedir: /var/cache/dnf/x86_64/22
Loaded plugins: builddep, config-manager, copr, playground, debuginfo-install, download,
generate_completion_cache, kickstart, needs-restarting, noroot, protected_packages, Query,
reposync, langpacks
initialized Langpacks plugin
DNF version: 0.6.5
repo: using cache for: fedora
not found deltainfo for: Fedora 22 - x86_64
not found updateinfo for: Fedora 22 - x86_64
repo: using cache for: updates-testing
repo: using cache for: updates
not found updateinfo for: Fedora 22 - x86_64 - Updates
Using metadata from Thu Apr 16 13:41:45 2015 (4:37:51 hours old)
Available environment groups:
KDE Plasma Workspaces (kde-desktop-environment)
用軟體組名安裝:
dnf group install group_name
多個時要用雙引號。
用軟體組ID安裝:
dnf group install groupid
ID也可以用雙引號。如果你要安裝軟體組,可以用@group引數查詢。
dnf install @group
比如,你要安裝KDE PLASMA WORKSPACES組:
~]# dnf group install "KDE Plasma Workspaces"
~]# dnf group install kde-desktop-environment
~]# dnf install @kde-desktop-environment
6.2.5 刪除軟體包:
dnf remove package_name…
比如你可刪除totem, rhythmbox, and sound-juicer時:
~]# dnf remove totem rhythmbox sound-juicer
remove和install一樣,可以用:軟體包名、正則表示式、檔案列表、包的其它資訊。
特別提示:當要刪除的軟體包被其它包所依賴時
在依賴於當前軟體的軟體未刪除時,Dnf 不能刪除當前軟體,只能用RPM刪除當前軟體。
刪除軟體組
dnf group remove group
dnf remove @group
比如刪除KDE PLASMA WORKSPACES組,下面3個都是可以的:
~]# dnf group remove "KDE Plasma Workspaces"
~]# dnf group remove kde-desktop-environment
~]# dnf remove @kde-desktop-environment
6.2.6 歷史資訊的管理
Dnf history允許復現DNF下載軟體時的資訊,包括日期、時間、影響的軟體的數量,包括下載成功、取消、失敗的情況。
顯示所有下載資訊:
dnf history list
顯示某一部分資訊:
dnf history list start_id..end_id
也可以使用正則表示式:
dnf history list glob_expression…
比如:
~]# dnf history list 1..4
Using metadata from Thu Apr 16 13:41:45 2015 (5:47:31 hours old)

ID | Login user | Date a | Action | Altere

4 | root | 2015-04-16 18:35 | Erase | 1
3 | root | 2015-04-16 18:34 | Install | 1
2 | root | 2015-04-16 17:53 | Install | 1
1 | System | 2015-04-16 14:14 | Install | 668 E
顯示的資訊包括:
ID-整數,定位於某一次下載。
Login user -執行人,格式為 Full Name 。非特定使用者執行的(比如系統自動更新),顯示為System 。
Date and time-日期及時間
Actions(s)-操作型別(見表6.1)
Altered-影響的軟體數量。
表6.1 操作型別列表
操作型別 簡稱 說明
Downgrade D 下載
Install I 安裝
Obsoleting O 淘汰
Reinstall R 重灌
Update U 升級
恢復和重新執行
Dnf history可以恢復到安裝之前的狀態:
dnf history undo id
重新執行:
dnf history redo id
可以使用last引數對最近一次的操作執行恢復或重新執行。
注意,如果源裡的包不存在這,這兩個命令會失敗。Dnf history undo可能會嘗試刪除和降級軟體包。
6.3 配置DNF和DNF的源
DNF的配置檔案為/etc/dnf/dnf.conf,包括main部分和reposity部分。Main部分是全域性選項,可以改變DNF的配置。REPOSITORY部分是針對某個源的選項。建議對每個源的設定放到/etc/yum.repos.d目錄裡,在這裡定義的將優先於dnf.conf裡的部分。
6.3.1 main部分的設定
樣子如下:
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=true
debuglevel=value
0-10之間,預設為2,顯示除錯輸出資訊。
exclude=package_name [more_package_names]
排除某些包,可以使用*和?
gpgcheck=value
0 — 不檢查GPG簽名
1 — 檢查GPG簽名,預設為1.
installonlypkgs=space separated list of packages
以空格分開,指可以安裝新軟體的包名,但永不更新。
installonly_limit=value
預設為3,指同一軟體最多可安裝的版本數,不建議修改。
keepcache=value
0 — 預設值,不保留快取。
1 — 成功安裝後仍保留快取。
6.3.2 reposity部分的配置
[repository]
name=repository_name
baseurl=repository_url
name=repository_name
源的名字
parameter=repository_url
baseurl, metalink, or mirrorlist的引數設定
通常使用HTTP
baseurl=http://path/to/repo/releases/$releasever/server/$basearch/os/
enabled=value
0 —啟用源
1 — 停用源
6.3.3 使用DNF引數
引數可以在/etc/dnf/dnf.conf或者.repo檔案裡設定,包括:
$releasever 指作業系統的版本號
$arch 指CPU的架構,如i586,i686,x86_64。
$basearch 指系統架構,比如i686 i586都是i386架構,amd64和intel64都是x86_64架構。
6.4 顯示當前配置資訊
~]$ dnf config-manager --dump
=============================== main ======================================
[main]
alwaysprompt = True
assumeno = False
assumeyes = False
bandwidth = 0
best = False
bugtracker_url = https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=dnf
cachedir = /var/cache/dnf/x86_64/22
[output truncated]
6.5 增加、啟用、停用源
增加一個源
可以在 /etc/dnf/dnf.conf 裡增加,也可以單獨寫一個.repo檔案放在/etc/yum.repos.d/ 目錄裡。
例子6.8 增加example.repo
http://www.example.com/example.repo增加到源裡:
~]# dnf config-manager --add-repo http://www.example.com/example.repo
adding repo from: http://www.example.com/example.repo
啟用DNF源
dnf config-manager --set-enabled repository…
注意引數是源的ID,顯示當前的配置,使用--dump引數。
停用dnf源
dnf config-manager --set-disabled repository…
注意引數是源的ID,顯示當前的配置,使用--dump引數。
其它資訊