RPM软件包管理之一二
源程序–>编译–>链接–>可执行文件
程序:指令+数据
指令最终转换为cpu可执行的指令:
普通指令
特权指令
源程序会依赖于某些库:库一般不包含数据,只是一些功能模块,都是指令
linux中.so(shared object)
静态库
动态库
链接:
静态链接:将所依赖的库直接打包放到源程序中
动态链接:利用共享库
一般程序在内存运行后,其在内存中大致内容如下:
代码段text |
---|
数据段data+bss |
heap:堆 |
堆向下增长(内存空间) |
栈向上增长(内存空间) |
stack:栈(包括本地变量等) |
配置文件:说白了都是一些本地的变量
eg:dir=/path/to/somewhere
系统启动去读取变量的值加载进相应的程序和服务中
linux中一般程序的组成部分
linux中一般程序的组成部分:
二进制程序
库(非前面提到的共享库,为程序本身对外提供的调用接口库)
配置文件
帮助文件
linux文件目录
/boot
/etc
/usr
/var
/dev
/lib
/tmp
/bin
/sbin
/proc
/sys
/mnt
/media
/home
/root
/misc
/opt
/srv
其中:
/usr/share/man #帮助文件
/etc,/bin,/sbin,/lib `#系统启动就需要使用到的目录(程序),这些路径不能挂载额外分区,必须在根文件系统的分区上`
/usr/ `#提供操作系统核心功能,可以单独分区`
bin
sbin
lib
/usr/local/ `#安装的第三方软件,外围软件`
bin
sbin
lib
etc
man
/proc #不能单独分区,默认为空;伪文件系统
/sys #不能单独分区,默认为空;伪文件系统
/dev #设备,不能单独分区
/root #不能单独分区
/var #建议单独分区
/boot #内核,initrd(initramfs),单独分区
linux大致启动过程:POST-->BIOS(HD)-->bootloader(MBR)(要能识别文件系统结构,ext3,ext4)-->Kernel
linux软件包管理
软件包管理器:
1.将二进制文件,库文件,配置文件,帮助文件等打包为一个文件;
2.生成数据库,跟踪所安装的每一个文件
软件包管理器的核心功能:
1.制作软件包;
2.安装、卸载、升级、查询、校验;
Redhat,SUSE:RPM(Redhat Package Manager,后来改名RPM is Package Manager)
Debian:dpt
rpm包管理的难点,依赖关系:
比如:x的运行依赖于y的某些功能,y依赖于z的某些功能
x–>y–>z
前段工具:yum,apt-get #解决依赖关系
后端工具:RPM,dpt #管理软件包
yum:Yellowdog Update Modifier #依赖于redhat的二次发型版软件包管理器
rpm命令
rpm:
数据库:/var/lib/rpm
rpmbuild:
rpm工作包括:安装、卸载、升级、查询、校验、数据库的重建、验证数据包等工作;
rpm包命名:
包:组成部分:主包,子包
命令格式:name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm #第一个release表示源程序版本,第二个release表示rpm包版本
major主板本号:重大改进
minor次版本号:某个子功能发送重大变化
发行号:修正部分bug,调整部分功能
主包:eg:bind-9.3.2-1.i586.e15.rpm
子包:eg:bind-libs-9.3.2-1.i586.e15.rpm/bind-utils-9.3.2-1.i586.e15.rpm
rpm包格式:
二进制格式:安装简单;由rpm包作者下载源程序,编译配置完成后制作为rpm包
eg:bind-9.3.2-1.i686.rpm
bind-9.3.2-1.noarch.rpm #无平台限制
源码格式:编译安装,更好发挥硬件性能
rpm命令:
`1,安装`
rpm -i /PATH/TO/PACKAGE_FILE
-h: # 以#显示进度,每个#号表示2%;
-v:显示详细过程
-vv:显示更详细的过程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps:忽略依赖关系
--replacepkgs:重新安装,替换原有安装
--oldpackage:安装时,允许旧版本替换新版本
--force:强制安装,可以实现重装或者降级安装
`2,查询`
rpm -q PACKAGE_NAME
rpm -qa :查询已经安装的所有包
rpm -qi PACKAGE_NAME:查询指定包的说明信息
rpm -ql PACKAGE_NAME:查询指定包安装后生成的文件列表
rpm -qc PACKAGE_NAME:查询指定包安装的配置文件列表
rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件
rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本
rpm -qf /path/to/somefile:查询指定文件是由哪一个rpm包安装的
如果某rpm包尚未安装,我们需要查询其说明信息、安装以后会生成的文件等信息,则:
rpm -qpi /PATH/TO/PACKAGE_FILE #信息
rpm -qpl /PATH/TO/PACKAGE_FILE #安装后生成的文件列表
`3,升级`
rpm -Uvh /PATH/TO/PACKAGE_FILE :`如果装有老版本的,则安装;否则,重装`
rpm -Fvh /PATH/TO/PACKAGE_FILE :`如果装有老版本的,则安装;否则,退出`
`4,卸载`
rpm -e PACKAGE_NAME
--nodeps
`5,校验`
rpm -V PACKAGE_NAME
`6,重建数据库`
ls /var/lib/rpm/
rpm --rebuilddb #重建数据库,一定会重建数据库
--initdb #初始化数据库,没有才建立,有就不用建立
`7,检验来源合法性,及软件包完整性`
回忆加密类型:
对称加密:加密解密使用同一个密钥
公钥加密:一对密钥:公钥,私钥;公钥隐含于私钥中,可以提取出来并公开出去
单向加密:
ls /etc/pki/rpm-gpg
RPM-GPG-KEY-redhat-release
rpm -K /PATH/TO/PACKAGE_FILE #检查是否合格(签名与完整性)
dsa,gpg:来源合法性
shal,md5:验证软件包完整性,使用--nodigest略此项
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release #导入密钥文件
校验错误提示:
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
检验来源合法性,及软件包完整性