2024年1月21日 星期日

(Centos-7_rpm) rpm 相關的指令語法

蠻壟長的..., 所以收錄到 blog裡留存!!~
 
===========================
查詢
列出所有已安裝的套件。
rpm -qa
列出這個檔案屬於什麼套件。
rpm -qf /PATH/FILE_NAME
查詢這個套件是否已經安裝到系統裡。
rpm -q PACKAGE_NAME
 
已安裝的套件
查詢詳細資訊 (Information)。
rpm -qi PACKAGE_NAME
列出安裝後所有建立的目錄及檔案清單 (All Files)。
rpm -ql PACKAGE_NAME
列出全部設定檔 (Configuation Files)。
rpm -qc PACKAGE_NAME
列出所有說明文件 (Documents)。
rpm -qd PACKAGE_NAME
列出相依套件們用到的所有檔案 (Depend Files)。
rpm -qR PACKAGE_NAME

未安裝的 RPM 檔
查詢詳細資訊 (Information)。
rpm -qpi /PATH/FILE_NAME.RPM
列出在安裝後所有建立的目錄及檔案清單 (All Files)。
rpm -qpl /PATH/FILE_NAME.RPM
列出全部設定檔 (Configuation Files)。
rpm -qpc /PATH/FILE_NAME.RPM
列出所有說明文件 (Documents)。
rpm -qpd /PATH/FILE_NAME.RPM
列出相依套件們用到的所有檔案 (Depend Files)。
rpm -qpR /PATH/FILE_NAME.RPM

特殊參數
--provides
查詢套件提供了什麼功能
--conflicts
查詢套件會跟哪些檔案相衝
--changelog
查詢套件的更新紀錄
--triggers
查詢安裝完畢後自動觸發的腳本 (Scripts)

安裝
所有的安裝步驟中,RPM 跟 SRPM 檔案不一定要先下載到本機裡,可以直接輸入 HTTP、HTTPS、FTP 之類的超連結位置來取代。

RPM 格式
安裝並顯示詳細訊息及進度。
sudo rpm -ivh /PATH/FILE_NAME.RPM
安裝並顯示非常非常詳細的除錯專用訊息。
sudo rpm -ivv /PATH/FILE_NAME.RPM
測試安裝並顯示詳細訊息及進度。
sudo rpm -ivh --test /PATH/FILE_NAME.RPM
忽略相依套件們,強迫安裝 RPM 檔。
sudo rpm -ivh --nodeps /PATH/FILE_NAME.RPM
重新安裝一次已安裝好的套件。
sudo rpm -ivh --replacepkgs /PATH/FILE_NAME.RPM
安裝並顯示詳細訊息,以連續的百分比數字呈現進度。
sudo rpm -iv --percent /PATH/FILE_NAME.RPM

特殊參數
--replacefiles
強制覆蓋已存在的檔案們
--replacepkgs
強制覆蓋已存在的套件們
--oldpackage
以舊版套件來取代
--force
等於同時使用 --replacefiles、--replacepkgs、--oldpackage 這三個參數
--prefix
修改預設安裝路徑
--nosignature
不檢查數位簽章

SRPM 格式
這種格式幾乎等同於我們在 套件升級不求人,手動編譯自己來 - 以 OpenSSH 為例 裡提到的 Tarball 原始碼格式,必須自行編譯、打包及安裝。

但是又有些不同,因為 SRPM 檔裡面除了原始碼之外,還針對了不同的發行版、平台、版號預先建立好適當的設定檔,讓我們可以直接使用。

那就直接用原始碼就好啦,何必多此一舉呢?
比方像是我們希望快速的完成套件的安裝,不打算從頭做起,但是又想要在事先做一些小幅度的調整,例如:修改預設安裝路徑、修改部份的程式碼、加入新功能 ...... 之類的動作。

過程也很簡單,先把 SRPM 檔案下載下來,這邊以 screen 為例。
wget http://vault.centos.org/7.2.1511/updates/Source/SPackages/screen-4.1.0-0.23.20120314git3c2946.el7_2.src.rpm

安裝必要的套件。
sudo yum -y install rpm-build

開始產生 RPM 檔,這邊可能會顯示缺少相依套件之類的錯誤訊息,而且可能會顯示很多次。
rpmbuild --rebuild screen-4.1.0-0.23.20120314git3c2946.el7_2.src.rpm

把所有相依套件全部裝起來。
sudo yum -y install ncurses-devel pam-devel autoconf texinfo automake libutempter-devel gc gcc

既然是從頭開始編譯,這邊就請多點耐心,等它全部完成。
沒有任何錯誤訊息,出現「exit 0」就可以了。

編譯過程中,會建立一個叫 rpmbuild 的目錄,編譯完成的 RPM 檔會存在 rpmbuild/RPMS 的子目錄裡。

既然是個 RPM 檔,安裝的方法就依照上一段的參數操作就行了。
sudo rpm -Uvh rpmbuild/RPMS/x86_64/screen-4.1.0-0.23.20120314git3c2946.el7.centos.x86_64.rpm

如果打算編譯、打包及安裝一次完成,那就換個參數再上!
rpmbuild --recompile screen-4.1.0-0.23.20120314git3c2946.el7_2.src.rpm


驗證
驗證系統裡的所有套件是不是有檔案被竄改。
rpm -Va
驗證這個套件是不是有檔案被竄改。
rpm -V PACKAGE_NAME
驗證這個目錄下的檔案是不是曾被竄改 (不含子目錄)。
rpm -Vf /PATH
驗證這個 RPM 檔跟目前系統裡的差異。
rpm -Vp /PATH/FILE_NAME.RPM

怎麼分辨檔案的哪個部份被竄改了呢?依序比對開頭的 9 個字就對了。
S (File Size)
檔案的容量大小。
M (File Mode)
檔案的類型或存取權限。
5 (MD5 Checksum)
檔案的 MD5 驗證碼。
D (Device Major Number & Minor Number)
裝置的型態,主編號就像是 /dev 目錄裡的 character 跟 block 型態,次編號則像是 /dev 目錄裡的 sda1、hdc3。
L (Symbolic Link)
符號連結,也就是捷徑。
U (File Ownership)
檔案的擁有者。
G (File Group)
檔案的擁有群組。
T (Modification Time)
檔案的建立時間。
P (Ca pabilities)
能力,這個不太容易解釋,請參閱 H's 手札 - 利用capability特徵加強Linux系統安全。


接著,獨立的第 10 個字代表檔案的型態:
c (configuration files)
設定檔
d (documentation files)
說明文件檔
g (ghost files)
不應該存在的不明檔案
l (license files)
授權檔案
r (read me)
讀我檔案



更新、降級
用 RPM 檔升級並顯示詳細訊息及進度,如果已安裝了舊版本就更新,未安裝就開始安裝。
sudo rpm -Uvh /PATH/FILE_NAME.RPM
用 RPM 檔升級並顯示詳細訊息及進度,如果已安裝了舊版本就更新,未安裝就什麼事都不做。
sudo rpm -Fvh /PATH/FILE_NAME.RPM
用 RPM 檔降級並顯示詳細訊息及進度,如果已安裝了舊版本就更新,未安裝就開始安裝。
(F 參數無法用於降級)
sudo rpm -Uvh --oldpackage /PATH/FILE_NAME.RPM


移除
移除套件並顯示詳細訊息及進度。
sudo rpm -evh PACKAGE_NAME
測試移除套件的所有動作,並顯示非常非常詳細的除錯專用訊息。
sudo rpm -evv --test PACKAGE_NAME


異常處理
如果發現套件無法安裝、移除、更新等等的神奇狀況,可能是 RPM 資料庫有問題。
解決方法很簡單,刪除狀態暫存檔,再重建 RPM 資料庫即可。
sudo rm -rf /var/lib/rpm/__db.00*
sudo rpm --rebuilddb

沒有留言:

張貼留言

(Centos-7s) 更新: 網卡名稱改回 eth0 的方法

將 CentOS 7 網卡名稱修改, 用回 Eth0 的方法:   1) # vi /etc/sysconfig/grub 內容大概是這樣:   GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release...