前言
首先說說一個軟件的誕生過程:
程序員用編程語言寫文本格式的源代碼,但是計算機只能讀懂二進制文件,那么就需要將源代碼轉換成二進制格式,這個過程稱為編譯。編譯用的工具稱為編譯器,編譯器有很多種,在Linux上常用gcc這個編譯器。利用編譯器,得到二進制格式的文件(二進制程序(Windows上.exe.msi,Linux.elf)、庫文件、配置文件、幫助文件)。
手動編譯是一個麻煩的事情,所以軟件發行商將程序照平臺編譯好之后,成為二進制的程序包。Windows的程序包就兩個步驟:安裝和卸載。
Linux的程序包根據發行版的不同,格式也不一樣。主要是RedHat系的RPM包和debian系的deb包。主要介紹RPM包,以后再介紹deb包的使用。
Linux不是,Linux的哲學有一點是:Linux由眾多功能單一的程序構成,只做一件事,并做到最好。那么這些功能單一的程序怎么去實現復雜的工作呢?
分工和協作嘛,我不會的事讓別人去做,我會的事我還可以讓其他比我做得更好的人去做。所以在Linux的程序包之間有著復雜的包間依賴關系,A程序需要B程序,B程序又依賴于C程序…
如果要單個單個的去安裝包的話是一件很折磨人的事情,A包裝上了告訴你沒裝B包,我運行不了,沒滿足依賴關系,那就裝B包,B包裝好了說你沒裝C包,C包又裝好了,又缺D包…這可咋整2333。而且包的格式還不一樣。
Linux的程序包根據發行版的不同,格式也不一樣。主要是RedHat系的RPM包和debian系的deb包。主要介紹RPM包,以后再介紹deb包的使用。
下面進入正題:介紹RPM包、rpm命令、前端工具yum
RPM包
紅帽系Linux用rpm命令管理RPM程序包RPM包:
主要實現的是 :安裝、升級、卸載、查詢、校驗和數據庫維護
語法: rpm [OPTION] [PACKAGE_FILE]
安裝: -i,--install
升級: -u,--update,-F,--freshen
卸載: -e,--erase
查詢: -q,--query
檢驗: -V,--verify
數據庫維護: --builddb,--initdb
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE
-v:
-vv
[install-options]:
-h:顯示進度,hash marks,每個#表示2%
--test:測試安裝
--nodeps:不檢測依賴直接安裝
--replace:重新安裝(不會修改配置文件,如果是想通過重裝恢復默認配置,將那個配置文件刪除后replace)
--noscript
注意:rpm可以自帶腳本:
preinstall:安裝前進行,%pre,--nopre
postinstall:安裝后運行,%post,--nopost
preuninstall:卸載前運行,%preun,--unpreun
postuninstall:卸載完運行,%postun,--nopsdtun
--nosignature:不檢查包簽名信息,不檢查來源合法性
--nodigest:不檢驗包完整性信息
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
-U:升級或安裝
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-F:只升級,如果原來沒有,不安裝
rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE
--oldpackage:降級為較老版本的;回滾
--force:強制升級;
注意:
1.不要對內核進行升級操作;Linux支持多內核版本共存,因此,直接安裝新版本內核
2.如果某原程序包的配置文件被修改過,升級后同名的配置文件不會被更新,而是把新配置文件重命名提供;一般叫filename.rpmnew(原文件的新版)
查詢:
rpm {-q|--query} [select-options] [query-options]
[select-options]:
PACKAGE_NAME:查詢指定程序包是否安裝,
-f, --file:查詢文件是由哪個程序生成的
-g, --group:
-a, --all:查詢所有已經安裝過的包
-p, --package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個程序包所依賴
[query-option]
--changelog:查看版本更迭
-l, --list:程序安裝生成的文件列表
-i, --info:程序包相關的信息,版本號、大小
-c, --configfiles:List only configuration files (implies -l).
-d, --docfiles:List only configuration files (implies -l).
--provides:List capabilities this package provides.
-R, --requires:List capabilities on which this package depends.
--scripts:List the package specific scriptlet(s) that are used as part of the installation and uninstallation processes.
用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
-qpi PACKAGE_FILE,-qpl PACKAGE_FILE,-qpc PACKAGE_FILE...
包相關信息查詢:-i, --info
有這些信息:版本、配置文件、文檔文件、安裝生成的文件、包間依賴、包的腳本
校驗:
rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
文件大小、權限、校驗碼、主次設備號、屬主、屬組、修改時間、功能
包來源合法性驗證和完整性驗證:
來源合法性驗證:
GPG密鑰
數字簽名:
包制作者將包的特征碼非對稱加密,
1.將源包提取特征碼a
2.用私鑰加密特征碼a,放在包的后面
3.用戶用公鑰得到特征碼a,再算得到包的特征碼b,匹配ab特征碼
獲取并導入信任的包制作者的密鑰:
對于CentOS發行版來說:
rpm --imprt /etc/pkl/rpm-gpg/RPM-GPG-KEY-CentOS-7
通過光盤導入數字簽名:
rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-7
完整性驗證:
驗證:
1.安裝此組織簽名的程序時,會自動執行驗證;
2.手動驗證:rpm -K PACKAGE_FILE
數據庫(database)(包的數據庫)重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行
rpm {--initdb|--rebuilddb}
--initdb:初始化數據庫,當前無任何數據庫時新建,有數據庫時不操作
--rebuilt:根據已安裝的程序包首部信息(headers)重建數據庫
但是rpm只是解決了包的安裝卸載的問題,有個困擾用戶的巨大問題沒有被解決:包間依賴!在紅帽系列的上采用了yum這個前段工具。
所以我們通常使用yum管理軟件,很好用哦。
yum
yum能干什么呢?yum能根據所要安裝的軟件,分析軟件的依賴關系,并且在軟件倉庫中下載軟件到本地安裝,也就是說,只需要輸入一條yum指令就可以直接裝好軟件并使用了特別方便。下面介紹yum的用法:
yum命令用法:
yum [OPTIONS] [COMMAND] [PACKAGE]
看看有哪些command可以用:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
* repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* load-transaction [txfile]
* updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel]
* fssnapshot [summary | list | have-space | create | delete]
* fs [filters | refilter | refilter-cleanup | du]
* check
* help [command]
有點多了,常用的選項有這些:
顯示倉庫列表:repolist [all|enable|disable]
顯示程序包:list
# yum list [all| glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
安裝程序包:install
install package [package2] [...]
reinstall package1 [package2] [...] (重裝)
升級程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降級)
檢查升級:check-update
卸載程序包:
remove| erase package1
查詢包信息:info
info [...]
查看指定特性或文件是由哪個程序包所提供的:
provides | whatprovides feature1 [feature2] [...]
清除本地緩存(包):
clean [ package | metadate | expire-cache | rpmdb | plugins | all ]:我愛用all選項
構建緩存:
makecache
搜索關鍵字:
search string1 [string2] [...]
以指定的關鍵字搜索程序包及summary信息
依賴關系分析:
deplist package1 [package2] [...]
yum歷史事務:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
安裝及升級本地的包:
localinstall rpmfile1 [rpmfile2] [...]
localupdate rpmfile1 [rpmfile2] [...]
包組管理相關的命令:groups
groupinstall group1 [group2] [...]
groupupdate group1 [group2] [...]
grouplist [hidden] [groupwildcard] [...]
groupremove [groupr1] [groupr2] [...]
grouprinfo group1 [group2] [...]
yum倉庫
再來說說倉庫,repository,倉庫又被稱為源,有本地源和網絡源,可以用光盤作為本地源獲取軟件并安裝,這樣不用擔心軟件來源和安全問題。網絡源國內有阿里源(吐槽一下阿里源太慢了),搜狐源,還有清華大學的源。
將光盤作為本地源
首先掛載光盤:
mount -r /dev/cdrom /media/cdrom
# -r只讀掛載,將光盤掛載到/media目錄下的cdrom目錄
修改本地的yum倉庫文件,/etc目錄下的/etc/yum.repos.d/目錄下的以.repo文件。
vi /etc/yum.repos.d/locationcdrom.repo
# 格式如下
[repositoryID]
#自定義一個軟件倉庫的ID
name=
#
baseurl=
enabele=
gpgcheck=
然后用yum repolist查看是否已經建立好的倉庫
#yum repolist還會更新一下本地軟件倉庫列表的緩存
如果想將定義一個網絡源,.repo文件需要將baseurl選項修改為網絡源的URL即可。
那么我平常只會用到幾款軟件并不想讓本地緩存變得特別大,怎么辦?
可以自建yum倉庫。用createrepo一鍵輕松搞定!
eg:我有100個RPM包放在~/software目錄下
createrepo ~/software
于是就建立了一個repodate目錄,就可以提供給本地使用了
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90826
博文描述的有點簡單哈~可以深入一點,類似yum中遇到的問題、搭建網絡yum源等~