rpm与yum详解
CentOS系統上rpm命令管理程序包:
rpm是rpm Package Manager,即軟件包管理工具;
一、rpm包管理的用途;
1、可以安裝、刪除、升級和管理軟件;當然也支持在線安裝和升級軟件;
2、通過rpm包管理能知道軟件包包含哪些文件,也能知道系統中的某個文件屬于哪個軟件包;
3、可以在查詢系統中的軟件包是否安裝以及其版本;
4、作為開發者可以把自己的程序打包為RPM 包發布;
5、軟件包簽名GPG和MD5的導入、驗證和簽名發布
6、依賴性的檢查,查看是否有軟件包由于不兼容而擾亂了系統;
?
二、rpm 的使用權限;
rpm軟件的安裝、刪除、更新只有root權限才能使用;對于查詢功能任何用戶都可以操作;如果普通用戶擁有安裝目錄的權限,也可以進行安裝;
?
三、rpm命令:rpm? [OPTIONS]?[PACKAGE_FILE]
? ?rpm的基本選項:
? ? ? ? 1、安裝:-i,--install
? ? ? ? 2、升級:-U,--update, -F, --freshen
? ? ? ? 3、卸載:-e,--erase
? ? ? ? 4、查詢:-q,--query
? ? ? ? 5、校驗:-V,--verify
? ? ? ? 6、數據庫維護:--builddb,--initdb
???????????????????????????
? ?1)rpm安裝:
? ? ? ?rpm{-i|--install} [install-options] PACKAGE_FILE ...
? ? ??
? ? ? ? ?rpm–ivh PACKAGE_FILE ...
? ? ? ? ?根據路徑安裝并顯示進度
? ? ? ? ? ?GENERAL OPTIONS:
? ? ? ? ? ?-v:以詳細信息輸出
? ? ? ? ? ?-vv:更詳細的輸出
????????????????????????????????????
? ? ? ? ?[install-options]:
? ? ? ? ? ? ?-h:輸出進度條;每個#表示2%的進度; ?
? ? ? ? ? ? ?--test:測試安裝,檢查并報告依賴關系及沖突消息等,并不實際安裝;
? ? ? ? ? ? ?--nodeps:忽略軟件包的依賴關系強行安裝;不建議使用;
? ? ? ? ? ? ?--replacepkgs:無論軟件包是否已被安裝,都強行重裝軟件包
? ? ? ? ? ? ?--nosignature:不檢查包簽名信息,不檢查來源合法性;
? ? ? ? ? ? ?--nodigest:不檢查包完整性信息;
? ? ? ? ? ? ? ? ? ??
? ?2)升級:
? ? ? rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...
? ? ? rpm{-F|--freshen} [install-options] PACKAGE_FILE ...
? ? ?????????????????????????????
? ? ? ? -U:升級或安裝,如后面接的包若沒有安裝過,則系統將直接安裝
? ? ? ? -F:升級,如果后面接的包若沒有安裝過,則該包不會安裝。
????????????????????????????????????
? ? ? ? rpm -Uvh PACKAGE_FILE ...
? ? ? ? rpm -Fvh PACKAGE_FILE ...
????????????????????????????????????
? ? ? ? --oldpackage:降級;
? ? ? ? rpm –Uvh –oldpackage PACKAGE_FILE…
?
? ? ? ? --force:忽略軟件包及文件的沖突,強制升級;
? ? ? ? rpm–ivh PACKAGE_FILE… --force
???????????????
????注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核;
? ? ? ? ?(2) 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
?????????????????????????????????????????????? ???
? ?3)卸載:
? ? ? rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
????????????????????????????????
? ? ? ? ? --allmatches:卸載所有匹配指定名稱的程序包的各版本;
? ? ? ? ? --nodeps:忽略軟件包的依賴關系強行安裝
? ? ? ? ? --test:安裝測試,并不實際安裝
????????????????????????????????????
? ?4)查詢:
? ? ? rpm{-q|--query} [select-options] [query-options]
? ? ??????????????????????????
? ? ? ? [select-options]
? ? ? ? ? ? PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
? ? ? ? ? ? -a,--all:查詢所有已經安裝過的包;
? ? ? ? ? ? -f FILE:查詢指定的文件由哪個程序包安裝生成;
? ? ? ? ? ? -p,--package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作;
??????????????????????????? ???
? ? ? ? ? ? --whatprovidesCAPABILITY:查詢指定的功能由哪個程序包提供;
? ? ? ? ? ? --whatrequiresCAPABILITY:查詢指定的功能被哪個包所依賴;
????????????????????????????????????
? ? ? ? [query-options]
? ? ? ? ? ? --changelog:查詢rpm包的changlog;
? ? ? ? ? ? -l,--list:程序安裝生成的所有文件列表;
? ? ? ? ? ? -i,--info:程序包相關的信息,版本號、大小、所屬的包組,等;
? ? ? ? ? ? -c,--configfiles:查詢指定的程序包提供的配置文件;
? ? ? ? ? ? -d,--docfiles:查詢指定的程序包提供的文檔;
? ? ? ? ? ? --provides:列出指定的程序包提供的所有的CAPABILITY;
? ? ? ? ? ? -R,--requires:查詢指定的程序包的依賴關系;
? ? ? ? ? ? --scripts:查看程序包自帶的腳本片斷;
????????????????????????????????????
? ? 用法:
? ? ? ? -qiPACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
? ? ? ? -qpiPACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...
????????????????????????????????????
? ? 5)校驗:
? ? ? rpm{-V|--verify} [select-options] [verify-options] ?
???????????????????????????
?包來源合法性驗正和完整性驗正:
? ??來源合法性驗正:
? ??完整性驗正:
??????????????????
? ??獲取并導入信任的包制作者的密鑰:
? ? ??對于CentOS發行版 :rpm --import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
???????????????????????????
? ??驗正:
? ? ?(1)安裝此組織簽名的程序時,會自動執行驗正;
? ? ?(2)手動驗正:rpm -K PACKAGE_FILE
???????????????????????????
??數據庫重建:
? ? ? rpm管理器數據庫路徑:/var/lib/rpm/
? ? ? ?查詢操作:通過此處的數據庫進行;
???????????????????????????
? ??獲取幫助:
? ? ? ? CentOS6:man rpm
? ? ? ? CentOS7:man rpmdb
???????????????????????????
? ? ? ? rpm{--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
? ? ? ? ? --initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作;
? ? ? ? ? --rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
???????????????????????????
yum(全稱為 Yellow dogUpdater, Modified):是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器。
?yumrepository: yum repo(yum倉庫)
? ??存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄下:repodata);
?
? yum客戶端:?
? ? ? 配置文件:
? ? ? ? /etc/yum.conf:為所有倉庫提供公共配置
? ? ? ? /etc/yum.repos.d/*.repo:為倉庫的指向提供配置
?
? ? ?倉庫指向的定義:
? ? ? [repositoryID]:倉庫的名字
? ? ? name=倉庫的描述,也可以說是名字
? ? ? baseurl=url://path/to/repository/:倉庫的位置
? ? ? enabled={1|0}:是否啟用這個倉庫,1為啟用,0為禁用
? ? ? gpgcheck={1|0}:是否檢查gpg簽名,檢查來源完整性
? ? ? gpgkey=URL指明密鑰文件
? ? ? enablegroups={1|0}是否在此倉庫上使用組來批量處理程序包
? ? ? failovermethod={roundrobin|priority}(默認為:roundrobin,意為隨機挑選)
? ? ? cost=:開銷數字(默認為1000)
?
yum命令的用法:
? ? ? yum[options] [command] [package ...]
? ? ?顯示倉庫列表:
? ? ? ? repolist [all|enabled|disabled]
? ? ??
? ? ? 顯示程序包:
? ? ? list
? ? ? ? # yum list [all | glob_exp1][glob_exp2] [...]
? ? ? ? # yum list{available|installed|updates} [glob_exp1] [...]
? ? ??
? ? ? 安裝程序包:
? ? ? ? install package1 [package2] [...]
? ? ??
? ? ? ? reinstall package1 [package2][...]? (重新安裝)
? ? ??
? ? ?升級程序包:
? ? ? ? update [package1] [package2] [...]
? ? ??
? ? ? ? downgrade package1 [package2] [...] (降級)
?
? ? ?檢查可用升級:
? ? ? ? check-update
??? 卸載程序包:
? ? ? ? remove | erase package1 [package2][...]
? ? ??
??? 查看程序包information:
? ? ? ? info [...]
??? 查看指定的特性(可以是某文件)是由哪個程序包所提供:
? ? ? ? provides | whatprovides feature1[feature2] [...]
? ??清理本地緩存:
? ? ? ? clean [ packages | metadata |expire-cache | rpmdb | plugins | all ]
??? 構建緩存:
? ? ? ? makecache
?
??? 搜索:
? ? ? ? search string1 [string2] [...]
? ? ??
? ??以指定的關鍵字搜索程序包名及summary信息;
?
? ??查看指定包所依賴的capabilities:
? ? ? ? deplist package1 [package2] [...] ? ?
? ? 查看yum事務歷史:
? ? ? ??History [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|
? ? ? ? new|sync|stats]
??? 安裝及升級本地程序包:
? ? ? ? *localinstall rpmfile1 [rpmfile2] [...]
??????????(maintained for legacy reasons only - use install)
? ? ? ? *localupdate rpmfile1 [rpmfile2] [...]
??????????(maintained for legacy reasons only - use update)
?
??? 包組管理的相關命令:
???????* groupinstall group1 [group2] [...]
???????* groupupdate group1 [group2] [...]
???????* grouplist [hidden] [groupwildcard] [...]
???????* groupremove group1 [group2] [...]
???????* groupinfo group1 [...]
?
??? 如何使用光盤當作本地yum倉庫:
? ? ? ? (1) 掛載光盤至某目錄,例如/media/cdrom
? ? ? ? ? # mount -r -t iso9660 /dev/cdrom /media/cdrom
? ? ? ? (2) 創建配置文件
? ? ? ? ? ? ? ?
? ? yum的命令行選項:
? ? ? ? ? ? --nogpgcheck:禁止進行gpgcheck;
? ? ? ? ? ? -y: 自動回答為“yes”;
? ? ? ? ? ? -q:靜默模式;
? ? ? ? ? ? --disablerepo=repoidglob:臨時禁用此處指定的repo;
? ? ? ? ? ? --enablerepo=repoidglob:臨時啟用此處指定的repo;
? ? ? ? ? ? --noplugins:禁用所有插件;
?
???yum的repo配置文件中可用的變量:
? ? ? ? ? ? $releasever: 當前OS的發行版的主版本號;
? ? ? ? ? ? $arch: 平臺;
? ? ? ? ? ? $basearch:基礎平臺;
? ? ? ? ? ? $YUM0-$YUM9
?
? ?創建yum倉庫:
? ? ? ? ? ? createrepo [options] <directory>
? ?程序包編譯安裝:
? ? ? ? ? ? testapp-VERSION-release.src.rpm --> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝;
? ? ? ? ? ??源代碼 --> 預處理 --> 編譯(gcc)--> 匯編 --> 鏈接 --> 執行
? ? ? ? ? ??源代碼組織格式:
? ? ? ? ? ? ? ??多文件:文件中的代碼之間,很可能存在跨文件依賴關系;
?
? ? ? ? ? ? ? ? C、C++: make(configure --> Makefile.in --> makefile)
? ? ? ? ? ? ? ? java: maven
?
? ? 源代碼編譯安裝三步驟:
? ? ? ? ./configure:
? ? ? ? ??]#?./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2
? ? ? ?(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;
? ? ? ? (2) 檢查依賴到的外部環境;
? ? ? ? ? make:
? ? ? ?根據makefile文件,構建應用程序;
? ? ? ? ? make install
?
??? ??開發工具:
? ? ? ? ? autoconf: 生成configure腳本
? ? ? ? ? automake:生成Makefile.in
?
??? 建議:安裝前查看INSTALL,README
?
??? ??開源程序源代碼的獲取:
??? ????官方自建站點:
? ? ? ? ? apache.org (ASF)
? ? ? ? ? mariadb.org
? ? ? ? ? ? ...
??? ????代碼托管:
? ? ? ? ? SourceForge
? ? ? ? ? Github.com
? ? ? ? ? code.google.com
?
? ? ? ?c/c++: gcc (GNU C Complier)
?
??? 編譯C源代碼:
??? ??前提:提供開發工具及開發環境
??? ??開發工具:make,gcc等
??? ??開發環境:開發庫,頭文件
? ? ? ?glibc:標準庫
?
??? 通過“包組”提供開發組件
? ? ? ?CentOS 6:"Development Tools", "Server Platform Development",
?
??? 第一步:configure腳本
??? ??選項:指定安裝位置、指定啟用的特性
? ? ? ?注:上面是啟動時遇到的一個問題;
? ? ? ? ? ? --help: 獲取其支持使用的選項
??? 選項分類:
??? ??安裝路徑設定:
? ? ? ? ? ? --prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置;默認為/usr/local/
? ? ? ? ? ? --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;
?? ? ? ? ? ? ??
? ? ? ? ? ? Systemtypes:
?
? ? ? ? ? ? OptionalFeatures: 可選特性
? ? ? ? ? ? ? ?--disable-FEATURE
? ? ? ? ? ? ? ?--enable-FEATURE[=ARG]
?
? ? ? ? OptionalPackages: 可選包
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- ? ? ? ? ? ? ?with-PACKAGE[=ARG]
? ? ? ? ? ?--without-PACKAGE
? ??第二步:make
? ??第三步:makeinstall
? ??安裝后的配置:
? ? 1) 導出二進制程序目錄至PATH環境變量中;
??? 編輯文件/etc/profile.d/NAME.sh
? ? ? export PATH=/PATH/TO/BIN:$PATH
?
? ?2) 導出庫文件路徑
??? ?編輯/etc/ld.so.conf.d/NAME.conf
? ? ??添加新的庫文件所在目錄至此文件中;
??? ??讓系統重新生成緩存:
? ? ? ? ?ldconfig[-v]
? ? (3) 導出頭文件
? ? ? ??基于鏈接的方式實現:
? ? ? ? ? ?ln -sv
?
? ? (4) 導出幫助手冊
??? ??編輯/etc/man.config文件
??? ??添加一個MANPATH
?
轉載于:https://blog.51cto.com/yaoliang83/1728915
總結
- 上一篇: Android定位开发之百度定位、高德定
- 下一篇: FilterDispatcher is