軟件包管理 1.軟件運行環境 運維工作的任務: 系統管理、庫調用管理(開發接觸的多,運維接觸的少),安裝配置某些程序包,讓程序包運行并提供相應類型的服務 程序執行的過程: 程序源代碼-->預處理-->編譯-->匯編-->鏈接 預處理:將代碼中的注釋信息刪除 靜態庫:.a結尾的文件 動態庫:.so結尾的文件 使用動態庫的軟件在打包的時候不會將動態我呢間編譯打包進二進制,靜態庫反之 ABI與API API:應用編程接口(用匯編語言編程) API:應用二進制接口 模擬運行其實調用的就是ABI接口 linux WINE windows Cywin 2.包管理器 二進制應用程序的組成部分: 二進制文件、庫文件、配置文件、幫助文件 程序包管理器: debian:deb文件,dpkg包管理器 redhat:rpm文件,rpm包管理器 (RedHat Package Manager (RPM Package Manager)) 3.包命名 源代碼:name-VERSION.tar.gz|bz2|xz VERSION: major.minor.release major:主版本號,代表有重大的版本分支的出現 minor:此版本號,分支中有某些版本的改變 release:發行號,代表修正了某些出現的BUG的版本號 rpm包命名方式: name-VERSION-release.arch.rpm 例:bash-4.2.46-19.el7.x86_64.rpm VERSION: major.minor.release release:release.OS 常見的arch: x86: i386, i486, i586, i686 (32位系統) x86_64: x64, x86_64, amd64 (64位系統) powerpc: ppc 跟平臺無關:noarch 4.包命名和工具 包:分類和拆包 Application-VERSION-ARCH.rpm: 主包 Application-devel-VERSION-ARCH.rpm 開發子包(開發包) Application-utils-VERSION-ARHC.rpm 其它子包(工具類) Application-libs-VERSION-ARHC.rpm 其它子包(庫函數) 包之間:可能存在依賴關系,甚至循環依賴 rpm包安裝時,直接顯示接下來依賴的包,而不是全部的依賴關系。 a--bc--def :a安裝時只顯示依賴于bc不顯示依賴于def包 解決依賴包管理工具: yum:rpm包管理器的前端工具 apt-get:deb包管理器前端工具 zypper:suse上的rpm前端管理工具 dnf:Fedora 18+ rpm包管理器前端管理工具 5.程序包管理器: (1)程序包的組成清單(每個程序包都單獨實現)包括程序包安裝位置 文件清單(程序包安裝時需要的清單) 安裝或卸載時運行的腳本 (2)數據庫(定義系統中已經安裝的程序,程序包安裝生成的文件,包與包安裝之間的依賴關系,安裝生成的各文件的文件路徑以及校驗碼信息) 數據庫存放的位置 /var/lib/rpm(CentOS系列) 獲得程序包的途徑: a.系統發行版及光盤或者官方文件服務器(鏡像站點) http://mirrors.aliyun.com 以阿里云為例 (還包括163 sohu源) b.項目的官方站點: httpd.apache.org (httpd服務,apache的官方網站) www.zabbix.com zabbix的官方站點 c.第三方的組織 EPEL社區(紅帽官方的站點)國內以阿里云為參考 http://mirrors.aliyum.com/epel 搜索引擎:http://pkgs.org http://rpm.pbone.net http://rpmfind.net d.手動編譯安裝rpm包 建議使用完整性校驗:來源合法性和程序包的完整性 6.rpm常用的命令: rpm [OPTIONS][PACKAGE_FILE] 安裝:-i --install (-v -vv 輸出詳細信息) 升級:-U --update,-F --freshen 卸載:-e --erase(擦除) 查詢:-q --query 校驗:-V rpm數據庫的維護:--builddb --initdb 7.rpm常用命令詳解: a.安裝 -i --install 安裝rpm包,正常使用 rpm -ivh PACKAGE_FILE安裝所需要的rpm包 -v:verbose顯示詳細信息 -vv顯示更加詳細的信息 -h:hash marks 輸出進度條#分割,每個#代表2%的進度 -ivh --test PACKAGE_FILE:不真正安裝,測試安裝軟件包,遇到安裝包的依賴關系就會指出,用于檢測并報告依賴關系以及沖突消息 -ivh --replacepkgs PACKAGE_FILE:重新安裝軟件包(當配置文件被修改過們重新安裝不會修復配置文件的損壞,系統認為該損壞是用戶操作的,要想獲得安裝時的源文件,需將配置文件刪除之后,重新安裝即可) --noscripts:rpm安裝包里面可以自帶腳本執行(了解即可,用的比較少) --nopre:preinstall 安裝之前執行的腳本 %pre --nopost:postinstall 安裝過程之后運行的腳本 %Ppost --preun:preuninstall 卸載過程真正執行之前運行的腳本 %preun --nopostun:postuninstall 卸載過程完成之后執行的腳本 %postun --nosignature:不檢查包簽名信息,不檢查包來源的合法性 --nodigest:不檢查包完整性信息(對比文件的MD5值) b.升級 -U:升級或安裝(當存在舊版本的時候就升級,當不存在舊版本的時候就安裝) rpm -Uvh PACKAGE_FILE:升級安裝,顯示詳細信息,顯示具體的執行過程以#顯示每個#代表2% -F:升級(當舊版存在時就升級,不存在的時候就退出升級) rpm -Fvh PACKAGE_FILE:用法和意思相同于-Uvh --test --noscripts --nodeps的用法和安裝 -i的意思相同 --oldpackage:降級操作(安裝),當新版本出現于系統不兼容,不穩定的時候,需要將新版本降級成老版本 --force:強制升級,有時用于老版本的回滾 注意: (1)不要對于系統內核做升級操作(4.0之前的版本,要想使用新內核就必須重啟系統,萬一內核與系統不兼容或因為一些原因報錯,就會導致系統無法啟動,無法進入系統) Linux系統支持多內核版本并存,因此可以直接安裝新版本,不是覆蓋安裝,重啟之后就可以選擇內核操作,萬一內核不兼容,直接重啟系統,以原來穩定的內核進入系統即可。 (2)如果某源程序包的配置文件,在安裝之后曾被修改過,升級時新的版本會提供的同一個配置文件,不會覆蓋的版本的配置文件,而是將新版本的配置文件重命名為FILENAME.rpmnew后提供服務 c.卸載 rpm -e PACKAGE_NAME;卸載某個包,后面跟包名即可 rpm命令會根據后天的rpm數據庫區查詢我們將要卸載的包 --allmatches:卸載所有匹配指定名稱的程序包名的各版本 --nodeps:忽略依賴關系 --test:測試卸載,dry run模式 d.查詢 rpm {-q|--query} [select-options][query-options]: 后續的[select-options]和[query--options]都需要跟上之前的-q,--query進行使用和查詢 [select-options]; PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其安裝的版本信息 -a,--all:查詢所有已經安裝過的包,后面可以跟grep命令使用正則表達式通配查詢 -f FILE:查詢指定文件是由哪個程序包安裝生成的 -g,--group GROUP:查詢指定包組中提供了包含了那些安裝包 -p,--package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作; --whatprovide CAPABILITY:查詢指定的CAPABILITY是由哪個程序包提供的; --whatrequires CAPABILITY:查詢執行的CAPABILITY被哪個包所依賴; [query-options]: --changelog:查詢rpm的changelog,查詢rpm的所有版本的改變的版本,是程序包的修訂版本信息,而不是源碼包的修改信息; -l,--list:程序安裝生成的所有文件列表 -i,--info:查詢程序包相關的信息,安裝時間,版本號,大小,所屬的包組等等 -c,--configfiles:查詢指定的程序提供配置文件,總體的配置文件,不是單用戶的配置文件 -d,--docfiles:查詢相關安裝包提供的文檔,包括文件的幫助文檔 --provides:列出查詢的程序提供的所有的CAPABILITY -R,--requires:查詢指定的程序包的包的依賴關系 --scripts:查看程序包自帶的執行的腳本片段 用法: -qi PACKAGE:查詢安裝包的相關信息 -qf FILE:查詢指定文件是由哪個包安裝生成的 -qc PACKAGE:查詢安裝包的配置文件的位置 -ql PACKAGE:查詢安裝包所生成的文件列表 -qd PACKAGE:查詢安裝包所提供的技術文檔,包括幫助文檔等 -qp{i,c,l,d} PACKAGE_FILE:查詢未安裝的程序包的安裝之后的位置,生成的文件信息,生成的配置文件信息等 e.校驗 rpm {-V|--verify} [select-options] [verify-options] 用于校驗已經安裝的包的信息有沒有被修改過。后面跟選項可以對下面的信息選擇哪些檢查,哪些不去檢查 [root@www Packages]# rpm -V zsh S.5....T. /usr/share/zsh/5.0.2/functions/zfget S.5....T.:每一位代表的含義: S file Size differs:文件大小有沒有被修改 M Mode differs (includes permissions and file type):文件的模式(包括文件的權限和類型)有無修改 5 digest (formerly MD5 sum) differs:文件的加密的MD5有沒有被修改,代表文件的完整性是否被修改過 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:caPabilities是否改變 f.包來源合法性和完整性校驗: 當一個文件的來源合法性無法驗證時,文件的完整性就不用去驗證了,因為無法證明來源的合法性,就無法證明文件的完整性; 來源合法性驗證: 數字簽名:加密程序包的校驗碼, 來源合法性和完整性校驗 獲取并導入信任的包制作的密鑰: 密鑰的獲取方式:(以CentOS7為例) 安裝系統之后在系統的文件里面:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 在安裝的光盤之中:(例光盤掛載到/media/cdrom下面) /media/cdrom/RPM-GPG-KEY-CentOS-7 利用可信的網絡鏡像站點的密鑰:http://mirrors.aliyun.com/centos/7.2.1511/os/x86_64/RPM-GPG-KEY-CentOS-7(以阿里云的鏡像站點為例) 驗證: 安裝此組織簽名程序時,會自動驗證; 手動驗證:rpm -K PACKAGE_FILE 文件的加密過程: 制作者使用單項加密算法提取出該文件包的特征碼(特征碼定長) 制作者利用私鑰去加密文件的特征碼,特征碼加密之后附加在文件的最后面 使用者的公鑰的獲?。? 使用者,利用制作者的公鑰去解密這段特征碼,若能解密,文件的來源合法性就可以保證 使用者用自己的公鑰去加密這段特征碼,得出的特征碼和制作者加密的特征碼相同時,就可以保證文件的完整性 光盤中有系統rpm包的公鑰,將rpm公鑰添加到系統之中: rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-7(光盤下面的RPM-GPG-KEY-CentOS-7) rpm -K PACKAGE_FILE:檢查安裝包的來源合法性 最后顯示OK即表示PACKAGE_FILE的來源合法 g.數據庫的重建:(非特殊要求,不要輕易的對于數據庫做任何的操作) rpm的數據庫存放的位置:/var/lib/rpm 安裝rpm包之后的操作,而非對于rpm包進行的操作。通過數據庫來進行查詢,包括rpm包之后的卸載,都需要對于數據庫文件的讀取進行操作 rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY] --initdb:初始化數據庫,當前無任何數據庫在/var/lib/rpm時,就會創建一個新的數據庫,若系統上面存在數據庫,該命令不會執行任何操作。 --rebuilddb:重新構建數據庫,通過讀取當前系統已經安裝的程序寶包進行重新創建 --dbpath=/path/to/somefile :指明數據庫存檔的位置
原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/38858