软件包管理
软件运行环境
软件包基础
Rpm包管理
Yum管理
定制yum仓库
编译安装
ABI
应用程序的二进制接口,和操作系统相关,一个程序二进制编好了,想要在你的系统上跑,要符合你的操作系统的接口标准Windows:PE linux:ELF
WINDOWS和LINUX二进制程序是不兼容的
库级别的虚拟化
Linux:WINE 可以让Windows程序在linux跑
Windows:cywin
API:应用程序的开发接口
我们做软件,不是从头到尾所有的软件自己构建,有些现成的功能我们可以放好,写成模块,,下次想用这个功能调用这个模块就可以了,调用这个模块,就涉及到一个接口,这个接口就是API
C语言是文本方式写的程序,文本不能再操作系统上跑,需要最终解析成二进制,才能执行
程序源代码——预处理——编译—-汇编—-链接
静态库,.a最终生成的文件,既包括目标文件,也包括依赖库文件,这个文件存放的内容全,放到任何主机上都能运行,
动态库,.so,动态库不会打包的一起,还是放在磁盘上,不会放到二进制文件中,只是一个指针
C语言编好的二进制程序,只能通过符合操作系统
标准的接口api来运行,和操作系统打交道,
Java的虚拟机,Java的程序是依赖虚拟机,
而Java的虚拟机有多种版本,
虚拟机帮助和操作系统打交道,
不需要程序直接和操作系统打交道
二进制应用程序的组成部分:二进制文件,库文件,配置文件,帮助文件 ,,还有数据文件,日志
程序不仅需要程序本身而且严重依赖于库文件,
复杂的程序都有配置文件,稍微小点的工具ls,就没有配置文件,要想配置加个选项就好啦 ls -a
一些大型的软件,都有配置文件,用来设置程序不同的工作,配置文件的功能相当于选项的功能
加上选项就有不同的效果,对于大软件来说由于太复杂了,加单一选项没法加,只能加到配置文件当中,而且加到配置文件能够存的住,(ls -a)的选项存不住,下次还需要重新加,
Bash
程序包管理器,
对于linux来讲,安装一个软件,使用一个软件,最早以前,源码编译,C语言的源代码(hello.c)直接运行是不可以的,需要用jcc工具把它编译成二进制才能运行,
编译成二进制进行运行,对普通用户,太难
为了降低难度,提供软件包的管理器,软件包的管理器,就相当于,你不需要记二进制的编译器,只需要记最基本的工具,
在linux中,都是以统一的文件后缀,组织这些文件的, 不同的版本使用的工具是不一样的,
Debian:deb文件,dpkg包管理器
Redhat:rpm文件,rpm包管理器
对于红帽来讲,所有的安装包都是统一后缀的,
rpm中集成了很多软件,安装管理,rpm -i 安装的时候,自动就把rpm解开,按事先预定好的路径放好,设置好
Rpm包的命名格式,包名,包的版本号,作者自己加的版本信息,CPU架构,rpm
Name-VERSION-release.arch.rpm
包的分类和拆包
Application-VERSION-ARCH.rpm:主包
Application-devel-VERSION-ARCH.rpm:开发子包
Application-utils-VERSION-ARCH.rpm:工具子包
Application-libs-VERSION-ARCH.rpm:库子包
包之间:可能纯在依赖关系,甚至循环依赖
解决依赖包管理工具:
Yum:rpm包管理器的前段工具
Apt-get:deb包管理器前端工具
Zypper:suse上的rpm前端管理工具
Dnf:Fedora 18+ rpm包管理器前端管理工具
库文件
查看二进制程序所依赖的库文件
Ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件
Ldconfig 加载库文件
/sbin/ldconfig -p:显示本机已经存在的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf. /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.sl.cache
程序包管理器
Rpm
不仅是个后缀也是个命令
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验 等管理操作
包文件组成(每个包独有)
Rpm包内的文件
Rpm的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
所谓的安装其实就是把里面包含的文件给解开,按事先规定好的路径一个一个给复制过去,(按规定好的目录,设好相应的属性,所有者,所属组)
系统安装好的rpm包,在linux系统中有个数据库,存你安装了那些rpm包,详细的rpm信息,什么时候安的,生成了那些文件,都放在那些目录中
数据库(公共)目录:/var/lib/rpm
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
这里面信息很重要,含有你装了那些包,
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径
1系统发布的光盘或官方的服务器
Centos镜像
https://www.centos.org/download/
http:mirrors.sohu.com
http:mirrors.163.com
- 目官方站点
3第三方组织 Fedora-epel
企业版额外附加的程序包,光盘放不下,经红帽官方测试,可以使用
Centos系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:rpm{-i|–install} [install-aptions ]PACKAGES_FILE…
-v verbose 冗长
-vv 详细信息
-h:以#显示程序包管理执行进度
Rpm -ivh PACKAGE_FILE…安装包
Rpm -e 卸载包
[install-options]
–test:测试安装,但不真正执行安装,
–nodeps:忽略依赖关系
–replacepkgs 覆盖安装 –replacefiles 替换文件
–nosignature:不检查来源合法性
–nodigest:不检查包的完整性
–noscripts:不执行程序脚本
%pre
%post
%preun
%postun
Rpm -ivh
Rpm -ql
Rpm -qa
Rpm升级
Rpm{-U|–upgrade}[jinstall-options] PACKAGE_FILE…
Rpm{-F|–upgrade}[jinstall-options] PACKAGE_FILE…
Upgrade:安装有旧版本程序包,则升级
如果不存在就版本程序包,则安装
Freshen:安装有旧版本程序包,则升级
如果不存在旧版程序包,则不执行升级操作
Rpm -Uvh PACKAGE_FILE…
Rpm -Fvh PACKAGE_FILE…
–oldpackage:降级
–force :强制安装
注意:1不要对内核做升级操作;linux支持多内核版本并存,因此,对直接安装新版本内核
- 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名后保留
包查询
Rpm -qa 查询所有安装的包
Rpm -q tree 查找该包有没有安装
Rpm -qa | grep tre
Rpm -qa “tre”
Rpm -qf /usr/bin/tree 该文件来自哪个包
Rpm
-a 所有包
-f 查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
–whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
–whatrequires CAPABILITY:查询指点的CAPABILITY被哪个包所依赖
Rpm2cpio 包文件|cpio -itv 预览保内文件
Rpm2cpio 包文件|cpio-id “*.conf”释放包内文件
【query-options】
–changelog:查询rpm包的changelog 更改其日志
-c 查询程序的配置文件
-d 查询程序的配置文档
-i information
-l 查看指定的程序包安装后生成的所有文件
–scripts 程序包自带的脚本
–provides 列出指定程序包所提供的CAPABILITY
-R 查询指定的程序包所依赖的CAPABILITY
常用查询用法:
-qi
-qf
-qc 只是配置文件
-ql 所有文件
-qpi
-qpl
-qa
包卸载
Rpm{-e|–erase}[-allmatchses][–nodeps] [–nosctipts][–notriggers][test]
全部匹配 忽略依赖性
包校验
Rpm {-V|–verify}[select-options][verify-options]
包来源合法性及完整性验证
完整性验证:SHA256
来源合法性验证:RSA
公钥加密:加密解密使用同以秘钥
非对称加密:密钥是成对的
导入所需要公钥
Rpm -K|checksig rpmfile 检查包的完整性和签名
Rpm –import/etc/pki/rpm-gpg/RPM-GPG-KEY-CectOS-7
CentOS 7 发行版光盘提供:RPM-GPG-KEY-CectOS-7
Rpm -qa “gpg-pubkey”
Centos:yum dnf
Yum是依赖于yum数据库的,一般叫yumrepo仓库
客户端要想利用yum安装,需要做一下配置,在自己的电脑上配置仓库在哪,仓库可能不在同一台电脑上,可能在网络上另外一个主机,所以需要在客户端配置一个yum仓库的路径,baseurl=ftp http/s
可以通过网络路径寻找yum的路径,
配置好软件,客户安装软件,yum install http(包名)
当敲命令,它就可以查它的配置,通过路径找仓库的服务器,在仓库的服务器上存了仓库的服务信息
除了必须的rpm包文件,仓库还记录的这些包之间的依赖关系,这些包是怎么分组的(同类型的包在一组),记录包元数据,包组信息,
可以理解为一个数据库,表现为目录repodata 信息存在这个目录中
Rhel5 /server/repodata
/server/*.rpm
Centos6 /Packages/*rpm
dir /repodata/*
Baseurl,路径必须是repodata所在文件夹的上一级目录
在本机上baseurl=file:///dir dir在目录的根下
当客户端敲yuminstall httpd的时候,连到服务器上查,有这个包吗,有依赖性吗,这些信息会自动下载下来,缓存在自己的机器上,下一次就不需要连到服务器上,直接查缓存,现在需要装包http,需要再次下载下来rpm文件,下载到本机的某一个目录里,安装完成,包就默认删除了,发现依赖别的包,就同时下载下来,安装,(安装完,只留缓存)
对于yum重要的两点
1配置文件,路径
2清缓存
本地yum的配置文件,/etc/yum.conf
Yum仓库配置文件的客户端 /etc/yum.repo.d
Cd /etc/yum.repos.d
Mkdir bak
Mv *.repo bak/
光盘做yum源,光盘本身所有的配置,元数据,rpm包都在里面
光盘的挂载路径,lsblk 默认为路径 /run/media/root/ecntos 7 x86_64
神奇的目录 ls /misc/cd/
Vim base.repo
最简单格式
[base]
baseurl=file:///misc/cd
gpgcheck=0
缓存文件
[root@centos7 yum.repos.d]# du -sh /var/cache/yum/
92M /var/cache/yum/
Yum clean all 清缓存
制作yum源服务器
共享服务,ftp httpd
共享资源存放的目录ftp /var/ftp/pub
httpd var/www/html
放在,cd /var/ftp/pub
mkdir centos/6/os/x86_64/
Mount /dev/sr0 centos/6/os/x86_64/ 进到这个目录这就是光盘内容
Systemctl start vsftpd 启动ftp服务
ftp://地址 访问
关闭防火墙,
关闭安全策略
客户端配
[base]
Name =
Baseurl=ftp://地址/pub/centos/6/os/x86_64/
Gpgcheck=0
Ls /app/ tree-1.5.3-3.e16.x86_64.rpm
Createrepo /var/ftp/pub/app/ 制作仓库
Yum install 包 安装
Yum remove 包 移除
Rpm -q http 判断
Package=http;rpm -q $package &> /dev/null || yum -y install package -y 自动装,没有提问yes
Yum reinstall tree 对于破话一部分的rpm安装
Yum的常见选项 install remove -y list repolist列出仓库列表,clean all history
Yum gropeinstall
Rpm的常见选项 -qi显示相关的信息 -ql显示文件列表
-qf查询拥有指定文件的包 -q –scripts脚本 -qa查询所有的安装包
Yum rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,
Yum repository(仓库):yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)
文件服务器:http:// https:// ftp:// file://
Yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repo.d/*.repo:为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
Name=Some name for this repository
Baseurl=url://path/to/repository/
Enable={1|0}
Gpgcheck={1|0}
Gpgkey=URL
Enablegroups={1|0}
Failovermethod={roundrobin|priority}
Roundrobin:意为随机挑选,默认值
Priority:按顺序访问
Cost=默认为1000
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90787