rpm和yum整理
Linux程序包管理: API:Application programing Interface 程序編譯需要通過以下的幾個步驟: 程序源代碼-->預處理-->編譯-->目標代碼-->匯編-->鏈接 編譯有分成2種: 靜態編譯: 動態編譯:.so 二進制應用程序的組成部分: 二進制文件,庫文件,配置文件,幫助文件: 程序包管理器: debian:deb,dpt redhat:rpm,rpm rpm:redhat package manager RPM is package manager rpm的命名方式: name_VERSION_release.arch.rpm VERSION: major.minor.release 對應主版本號.次版本號.修訂號 release.arch: release: 包的發行號和對應的操作系統 arch表示適用的平臺 X86: i386 i486 i586 i686 X86_64: x86 x86_64 amd64 noarch:表示此包可以安裝到所有的平臺上 例如:zsh-5.0.2-7.el7.x86_64.rpm: zsh:軟件名稱 5.0.2:軟件版本 7.el7:軟件包發行商版本,7表示發行號,el7表示RHEL7 x86_64:適用的平臺 注意:軟件包中包和包之間存在著依賴關系; RPM中的管理工具: yum:rpm包管理器的前端工具; apt-get:deb包管理器前端工具; zypper: suse上的rpm前端管理工具; dnf: Fedora 22+ rpm包管理器前端管理工具; 查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE 以及查看本機裝載的庫文件: ldconfig /sbin/ldconfig -p: 顯示本機已經緩存的所以可用庫文件名及文件路徑映射關系; 配置文件為:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf [root@localhost ~]# cat /etc/ld.so.conf.d/*.conf # This directive teaches ldconfig to search in nosegneg subdirectories # and cache the DSOs there with extra bit 1 set in their hwcap match # fields. In Xen guest kernels, the vDSO tells the dynamic linker to # search in nosegneg subdirectories and to match this extra hwcap bit # in the ld.so.cache file. hwcap 1 nosegneg /usr/lib64/mysql /usr/lib64/qt-3.3/lib /usr/lib64/xulrunner-2 緩存文件:/etc/ld.so.cache 程序包管理: 功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷的實現程序包的安裝、卸載、查詢、升級和校驗等管理操作; 1,程序的組成組成清單(每個包獨有) 文件清單 安裝或卸載時運行的腳本 2,數據庫(公共) 程序包名稱及版本 依賴關系: 功能說明: 安裝生成的各文件的文件路徑及效驗碼信息: 管理程序包的方式: 使用包管理器:rpm 使用前端工具:yum,dnf CentOS系統上rpm命令管理程序包: 安裝,卸載,升級,查詢,校驗,數據庫維護 rpm命令的分解: 安裝: rpm {-i|--install} [install-options] PACKAGE_FILE ... -v:顯示詳細信息 -vv:顯示更多丑陋的調試信息 -h:以#顯示程序包管理執行進度,每個#表示2%的進度 rpm -ivh packge——file。。。 [install-options] --test:測試安裝,但不是真正的執行安裝過程,dry run模式; --nodeps:忽略依賴關系: --replacepkgs: 重新安裝; --nosignature: 不檢查來源合法性; --nodigest:不檢查包完整性; --noscipts:不執行程序包腳本片斷; %pre: 安裝前腳本; --nopre %post: 安裝后腳本; --nopost %preun: 卸載前腳本; --nopreun %postun: 卸載后腳本; --nopostun 升級: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”; freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作; rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級; --force: 強行升級; 注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核; (2) 如果原程序包的配置文件安裝后曾被修改,長級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留; 查詢: rpm {-q|--query} [select-options] [query-options] [select-options] -a:查詢當前系統已安裝的程序包 -f:查詢指定的文件由那個程序安裝生成 -p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作; --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供; --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴; [query-options] --changelog:查詢rpm包的changlog -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information -l: 查看指定的程序包安裝后生成的所有文件; --scripts:程序包自帶的腳本片斷 -R: 查詢指定的程序包所依賴的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY; 用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa 卸載: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ... 校驗: 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 包來源合法性驗正及完整性驗正: 完整性驗正:SHA256 來源合法性驗正:RSA 導入所需要公鑰: rpm --import /PATH/FROM/GPG-PUBKEY-FILE CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7 數據庫重建: rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作; rebuilddb:重建 無論當前存在與否,直接重新創建數據庫; 安裝沒依賴關系的軟件包: [root@localhost Packages]# pwd /media/cdrom/Packages [root@localhost Packages]# rpm -ivh tree-1.5.3-2.el6.x86_64.rpm warning: tree-1.5.3-2.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] package tree-1.5.3-2.el6.x86_64 is already installed 安裝有依賴關系的軟件包: [root@localhost Packages]# rpm -ivh tomcat6-6.0.24-49.el6.noarch.rpm warning: tomcat6-6.0.24-49.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: jakarta-commons-collections is needed by tomcat6-0:6.0.24-49.el6.noarch jakarta-commons-daemon is needed by tomcat6-0:6.0.24-49.el6.noarch jakarta-commons-dbcp is needed by tomcat6-0:6.0.24-49.el6.noarch jakarta-commons-logging is needed by tomcat6-0:6.0.24-49.el6.noarch jakarta-commons-pool is needed by tomcat6-0:6.0.24-49.el6.noarch log4j is needed by tomcat6-0:6.0.24-49.el6.noarch mx4j is needed by tomcat6-0:6.0.24-49.el6.noarch tomcat6-lib = 0:6.0.24-49.el6 is needed by tomcat6-0:6.0.24-49.el6.noarch 查詢一個已安裝的軟件包: [root@localhost Packages]# rpm -qa | grep tree tree-1.5.3-2.el6.x86_64 Linux程序包管理: CentOS上用的rpm前置工具:yum與dnf yum repository: yum repo 存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄下:repodata); 在編寫yum中需要指定文件服務器: 我們常用的文件服務器有如下的幾種方式可以進行下載: ftp:// http:// nfs:// file:/// yum相當于一個眾多的rpm包的一個倉庫: 配置文件放在如下幾個位置: /etc/yum.conf:為所有倉庫提供公共配置 /etc/yum.repos.d/*.repo:為倉庫的指向提供配置 設定yum的庫的定義: [repositoryID] name=Some name for this repository baseurl=url://path/to/repository/ enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} 默認為:roundrobin,意為隨機挑選; cost= 默認為1000 yum命令的用法: * install package1 [package2] [...]安裝指定的包: * update [package1] [package2] [...]指定更新包: * update-to [package1] [package2] [...]更新指定包組到目標包 * remove | erase package1 [package2] [...]對指定包重命名: * list [...]查看已安裝的包: * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]清除指定的緩存: * groupinstall group1 [group2] [...]安裝指定的包組 * groupupdate group1 [group2] [...]指定更新包組 * grouplist [hidden] [groupwildcard] [...]查看已安裝的包組 * groupremove group1 [group2] [...]對指定包組重命名 * 以及以下幾個命令: * groupinfo group1 [...] * search string1 [string2] [...] * shell [filename] * resolvedep dep1 [dep2] [...] * 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] * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] * check * help [command] 顯示倉庫列表: repolist [all|enabled|disabled] 顯示倉庫列表: 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) 創建配置文件 [CentOS7]=定義ID name=對yum源起名: baseurl=定義yum源的地址可以使用網址,ftp,本地目錄 gpgcheck= enabled= yum的命令行選項: --nogpgcheck:禁止進行gpg check; -y: 自動回答為“yes”; -q:靜默模式; --disablerepo=repoidglob:臨時禁用此處指定的repo; --enablerepo=repoidglob:臨時啟用此處指定的repo; --noplugins:禁用所有插件; yum的repo配置文件中可用的變量: $releasever: 當前OS的發行版的主版本號; $arch: 平臺; $basearch:基礎平臺; $YUM0-$YUM9 例如:http://mirrors.magedu.com/centos/$releasever/$basearch/os 創建本地的yum源: 必須要先安裝createrepo createrepo [options] <directory> 程序包的編譯安裝: 源代碼 --> 預處理 --> 編譯(gcc) --> 匯編 --> 鏈接 --> 執行 源代碼組織格式:C或C++要使用到make make(configure --> Makefile.in --> makefile) C代碼編譯安裝三步驟: ./configure: (1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile; (2) 檢查依賴到的外部環境; make: 根據makefile文件,構建應用程序; make install 開發工具: autoconf: 生成configure腳本 automake:生成Makefile.in 編譯C源代碼: 前提:提供開發工具及開發環境 開發工具:make, gcc等 開發環境:開發庫,頭文件 glibc:標準庫 使用yum grouplist查看已有的可以安裝的包組: [root@localhost ~]# yum grouplist 已加載插件:fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile * base: mirrors.163.com * c7-media: * extras: centos.ustc.edu.cn * updates: mirrors.163.com 可用的環境分組: 最小安裝 基礎設施服務器 計算節點 文件及打印服務器 基本網頁服務器 虛擬化主機 帶 GUI 的服務器 GNOME 桌面 KDE Plasma Workspaces 開發及生成工作站 已安裝的組: CIFS 文件服務器 MySQL 數據庫客戶端 MySQL 數據庫服務器 基于網頁的企業級管理 開發工具 可用組: Eclipse FCoE 存儲客戶端 NFS 文件服務器 SNMP 支持 TeX 支持 TurboGear 應用程序框架 iSCSI 存儲客戶端 傳統 UNIX 兼容性 兼容性程序庫 可擴展文件系統 圖形管理工具 存儲可用性工具 安全性工具 客戶端管理工具 控制臺互聯網工具 智能卡支持 服務器平臺 服務器平臺開發 桌面 桌面平臺 桌面平臺開發 短信客戶端支持 科學記數法支持 系統管理 系統管理工具 系統管理消息服務器支持 網絡存儲服務器 虛擬化 通用桌面 高可用性管理 CentOS6上要安裝: "Development Tools", "Server Platform Development", 第一步:configure腳本 選項:指定安裝位置、指定啟用的特性 --help: 獲取其支持使用的選項 選項分類: 安裝路徑設定: --prefix=/PATH/TO/SOMEWHERE: 指定默認安裝位置;默認為/usr/local/ --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置; System types:目標系統平臺結構 Optional Features: 可選特性 --disable-FEATURE --enable-FEATURE[=ARG] Optional Packages: 可選包 --with-PACKAGE[=ARG] --without-PACKAGE 第二步:make 第三步:make install 以上我就不一一演示了:在安裝完成以后需要到特定的目錄下使用bin/文件進行 由于本地的bin文件以及man文件都沒有系統默認的需要加入到系統默認當中: 安裝后的配置: (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
原創文章,作者:wostop,如若轉載,請注明出處:http://www.www58058.com/25823