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.178linux.com/25823