Linux的程序包管理
专业概念
POSIX:Portable Openratin System 跨平台调用
API:兼容,意味开发库兼容,因此,源代码可跨平台
ABI:兼容,编译后的程序可以跨平台
库为函数,function
库:可执行程序,本身不能作为程序执行入口,但可以被调用,是编译好的二进制格式
程序的过程:
预编译、编译、汇编、链接
#静态链接:将库包含在程序中
#动态链接:dll,so(shared object)
#编译:源代码翻译成cpu指令集的过程
*注意:1.os平台:编译好的应用程序必须为特定平台所支持的版本
2.硬件平台:应用程序为特定的cpu所支持*
软件包的组成部分
二进制程序:/bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin
自身库文件:/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
开发时调用API,运行时调用ABI
通过调整/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
配置文件:/etc,无须额外配置
帮助文件:
man文件,info文件,README,INSTALL,ChangeLog
man COMMAND
到某路径下查找与命令名同名的通常以。gz结尾的压缩文件的名字
/usr/share/man
ldd命令:
查看应用所依赖的共享库
ldd [options] 二进制文件
root@localhost Desktop]# ldd /bin/cat
linux-vdso.so.1 => (0x00007ffff63ea000)
libc.so.6 => /lib64/libc.so.6 (0x0000003cc4400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003cc3c00000)
应用程序管理器
1、数据库:
名称和版本,
安装生成的各文件路径,校验码,
依赖关系
提供功能性的说明
2、提供程序组成格式:
文件清单
安装卸载时运行的脚本
应用程序格式:
源代码 name(名称)-major(主版本).minor(次版本).release(修正号).tar.gz
依赖关系
循环依赖: x-->Y
版本依赖: x-->y-->x
Debian:.deb dpkg
RadHat: .rpm(perl编写),rpm(RadHat Package Manager)
rpm:RPM is Package Manager
SUSE: rpm
包管理器的基本功能
打包
安装
查询
升级
卸载
校验
数据库管理
前段管理器:
出现原因:因为依赖关系太麻烦
apt-get
yum
rpm包的使用:
rpm包命名格式:
源程序:name-version.tar.{gz|bz2|xz}
命名格式:
version:major.minor.release
rpm包:name-version-release.arch.rpm
release:通常包含rpm的只做发行号,还包含使用的OS(平台)
OS平台
el6:redhat enterprise linux6
el5:redhat enterprise linux5
CentOS5:
suse11
arch:
X86_64
i386,i586,i686
ppc
noarch
来源合法性验证:
源程序:通过md5或sha1校验码验证;
rpm包:发行商提供的是合法性是可信的
验证包完整性:校验码
验证来源合法:公钥加密算法
获取rpm的途径:
1、发行商的光盘或站点服务器
CentOS:
http://mirrors.163.com
http://mirrors.sohu.com
2、rpmfind
http://rpmfind.net
3、rpmpbone
http://rpm.pbone.net
**注意:
1、发行商。发行光盘中的包,需要升级时,官方释放出升级包
2、Fedora EPEL**
安装程序包
rpm -i --install 安装
rpm -i /path/to/rpm_package ...
-v:显示安装信息
-vv:二级详细
-vvv:三级详细
-h:hash 以#的个数显示安装进度,一个#表示2%的进度
--test:仅测试,不真正执行安装过程
如果存在依赖
解决依赖关系:
忽略依赖关系:--nodeps
重新安装:
-ivh --replacepkgs
原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件
卸载:
rpm -e --erase
rpm -e package_name
如果卸载被其他程序所依赖的包
1、把依赖者一同卸载
2、忽略依赖关系:--nodeps
3、不在卸载
rpm管理:查询
查询
rpm -q
查询所有已安装的包:
rpm -qa
查询包的描述信息:
rpm -qi package_name
查询某单个包是否安装:
rpm -q 包名
查询安装包生曾的列表的位置
rpm -ql package
查询某文件是那个包安装生成的:
rpm -qf 文件
查询包安装后生成的帮助文档:
rpm -qd 包名
查询安装后生成的配置文件:
rpm -qc 包名
查询包相关的脚本:
rpm -q --scripts 包名
脚本分四类
preinstall 安装前脚本
postinstall 安装后脚本
preuninstall 卸载前脚本
postuninstall 卸载后脚本
查询尚未安装的rpm包文件的相关信息:
查询安装后会生成的文件列表:
rpm -qpl 包名
查询其简单描述信息:
rpm -qpi 包名
rpm管理:升级
rpm -U:升级或安装
rpm -F:只升级
rpm {-Uvh|-Fvh}/path/to/package_file
--nodeps: 忽略依赖关系
--force:强行安装
**注意:不要对内核执行升级操作;
多版本内核可以并存,因此,建议执行安装操作**
rpm管理:校验:检查包安装后生成的文件是否被修改过
rpm -V package_Name
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 能力改变了
rpm管理:校验来源合法性和软件完整性
包完整行:通过单向加密机制(MD5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg
rpm -K /path/to/somefile
rpm --checksig /path/to/package_file
--nosigeature:不检查来源合法性
--nodigest:不检查包完整性
rpm管理:导入密钥
rpm --import /path/to/gpg-key-file
导入以后再做验证
rpm包管理:数据库
位置:/var/lib/rpm
重建:rpm --initdb:初始化
如果事先不存在一个数据库,则新建之
rpm --rebuilddb 重建
直接新建数据库,会覆盖原有库
依赖关系:
解决依赖关系:程序包管理器的前段工具
yum(Yellowdog Update Modifier)依赖于rpm
文件服务器(共享rpm包):
通过yum所支持的文件共享机制将各rpm包通过文件服务共享
repository:仓库
1.需要的各rpm包
2.依赖关系、程序包安装后所能够生成的列表等元数据文件
yum客户端
1.配置文件:指定各可用的yum仓库;
2.缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地
3、分析元数据:根据具体的操作请求完成元数据分析,可能包括依赖关系、文件列表等信息
4.执行具体操作
客户端配置文件指定对服务器配置文件:
ftp ftp://server/path/to/repo
http http://server/path/to/repo
nfs nfs://servr/nfs_path
file file:///path/to/path
yum操作
格式:yum [install] command
check 检查在rpmdb中的问题
check-update 检查可升级的软件包
clean [all|package|metadata|expire-cache|rpmdb|plugins] 清除缓存
deplist 列出软件包的依赖
downgrade 降级包
groupinfo “package_group_name” 显示包组信息
groupinstall "group_name" 安装包组
grouplist 列出所有包组
groupremove ”group_name“: 卸载组
help 显示有帮助的用法信息
history 查看yum的命令历史
info 列出包的描述信息
install 安装
list [all|installed|available] 把所有可以使用的
provides 查询某文件是由那个包安装的
reinstall 重新安装指定的程序包
repolist[all|enabled|disabled] 显示各可用的仓库列表
search 对于给定的字符串搜索包详细信息
update package_name 升级指定的程序包
updateinfo 在资料库更新信息的行为
upgrade 更新程序包回吐废弃考虑
version 显示机器和/或可用回购一个版本。
要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中
/etc/yum.conf
/etc/yum.repo.d/*.repo
配置文件格式:由两段组成。类似window的ini配置文件
[main]:主配置段
[repo]:仓库配置段
配置repo
[repo_ID]
name=String
baseurl=仓库的访问路径
enabled={1|0}1,表示启用。0表示不启用
gpgcheck={1|0}1,验证gpg。0表示不验证
gpgkey=公钥地址(可以是本地,也可以是服务器端路径)
cost=定义此仓库开销,默认为1000
安装本地包
install /path/to/package_file
手动禁止检查来源及完整性:--nogpgcheck
*如果系统为Centos 5,开发包组为”Development Tools“和”DeveLopment Libraries“
如何系统为centos 6,常用的开发包为”Development tools“和”Server Platform Development”
yum配置文件中可用的宏*
yum配置文件中可用的宏
$releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
$arch:系统架构
$basharch:系统基本架构,如i686,i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用
获取当前系统相应宏替换的办法
python
import yum,pprint
yb=yum.YumBase() pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: product-id, refresh-packagekit
{'arch': 'ia32e',
'basearch': 'x86_64',
'releasever': '6Server',
'uuid': '238c299d-9681-4725-ad7a-c2ae6302e693'}
quit()
测试实现yum repository的配置
yum repository:制作yum仓库文件
1.yum install createrepo -y 制 作creatrepo
2.createrepo 路径
3.配置yum源
制作一个远程的yum仓库
1.准备文件服务器;使用httpd为例,请事先确保以安装httpd程序包
2.在/var/www/html目录。使用一个目录来保存准备制作称为yum仓库的所有rpm包
cd /var/www/html
lftp 172.16.0.1/pub/Sources/6.x86_64
lftp : >mirror openstack
bye
3.创建yum仓库
rm -rf /var/www/html/openstack/repodata
createrepo /var/www/html/openstack
4.启动http服务
service httpd start
5.配置实用自建的yum仓库
[openstack]
name=Openstack Repository
baseurl=http://172.16.100.7/openstack
enabled=1
gpgcheck=0
6.配置好epel的yum源
7.测试使用
yum install openstack-keystone
程序包管理之编译安装
源码程序包:
c,c++ perl源码 python源码
应用程序:项目组
软件基金会:FSF,ASF
项目组:主导者,contributor
小项目:一个人维护
商业公司支持:开源版/企业版
开源网站
github.com
code.google.com
源程序:
项目工程:把代码分散于多个源代码文件
GNU/make(项目编译工具)
autoconf:configre脚本,
用来检查编译环境是否满足编译需求,并定义当前程序编译时启用那个特性或功能,已经安装路径的定义等等
结果:会根据makefile.in文件生成makefile文件
automake:生成Makefile.in文件
用于结合configure脚本生成makefile文件
makefile文件是make命令的配置文件
编译安装的步骤:
1.拿到源代码,并解压
tar -xf package-version.tar.{gz|bz2|xz}
注意:展开后的目录通常为package-version
2.切换至源码目录中
cd package-version
3.执行configure脚本
./configure
4.编译
make
5.安装
make install
configure脚本的通用功能:
1.指定安装路径
--prefix=前缀,用于指定安装路径
--prefix=/usr/local/package_name
--sysconfdir=/etc/package_name
2.指定启动/禁用的特性
--enable-feature:例如--enable-fpm
--disable-fecture;例如 --disable-socket
3.指定所依赖功能、程序或文件
--with-function: 启用某功能
--without-function: 禁用某功能
不同的程序,其configure不尽相同,应获取帮助信息
./configure --help
二进制程序的访问方法
1.vim /etc/profile.d/apache.sh
PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH
expore PATH
2.source /etc/profile.d/apache.sh
头文件输出给系统
ln -sv /usr/local/apache/include /usr/include/httpd
库文件输出
vim /etc/ld.so.conf.d/httpd.conf
/usr/local/apache/lib
让系统重新生成库文件路径缓存
ldconfig
输出man文件
1. vim /etc/man.conf
2. 添加 MANPATH /usr/local/apache/man