Linux基础学习——程序包管理

时间:2022-06-28 12:01:50

程序包管理

概念

GPL:源码
glibs:标准的C库
rpm:软件包管理工具

POSIX:Portable Openratin System 跨平台调用

API:兼容,意味开发库兼容,因此,源代码可跨平台
ABI:兼容,编译后的程序可以跨平台

库:可执行程序,本身不能作为程序执行入口,但可以被调用,是编译好的二进制格式
程序的过程:预编译、编译、汇编、链接
静态链接:将库包含在程序中
动态链接:dll,so(shared object)
编译:源代码翻译成cpu指令集的过程

软件包的组成部分:

    二进制程序:
        /bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin
    自身库文件:开发时调用API,运行时调用ABI
        /lib /lib64 /usr/lib /usr/lib64 /usr/local/lib  /usr/local/lib64
        可以通过修改配置文件调整:
        /etc/ld.so.conf /etc/ld.so.conf.d/*.conf
    配置文件:
        /etc
    帮助文件:
        man文件,info文件,README,INSTALL,ChangeLog
        man COMMAND
        到某路径下查找与命令名同名的通常以.gz结尾的压缩文件的名字
        /usr/share/man

应用程序管理器

应用程序管理器
1、数据库
名称和版本,
安装生成的各文件路径,校验码,
依赖关系
提供功能性的说明
2、提供程序组成格式
文件清单
安装卸载时运行的脚本

应用程序:源代码 name-major.minor.release.tar.gz

依赖关系:循环依赖、版本依赖等

Debian:.deb dpkg
RadHat: .rpm(perl编写),rpm(RadHat Package Manager)
SUSE: rpm

包管理器的基本功能:

打包
安装
查询
升级
卸载
校验
数据库管理

前端管理器:
apt-get
yum

总结:应用程序的安装方式
1、使用包管理器:便捷、易用
2、包管理器的前端管理:yum
3、源代码编译
4、简单打包的二进制格式

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/CentOS5/suse11
arch:X86_64/i386,i586,i686/ppc/noarch

分包:把一个复制的程序打包制作成多个rpm格式
来源合法性验证
源程序:通过md5或sha1校验码验证;
验证包完整性:校验码
验证来源合法:公钥加密算法

获取rpm的途径:
1、发行商的光盘或站点服务器
http://mirrors.163.com
http://mirrors.sohu.com
2、rpmfind
http://rpmfind.net
3、rpmpbone
http://rpm.pbone.net

安装程序包

rpm -i --install 安装
rpm -i /path/to/rpm_package ...
    -v:显示安装信息
    -vv:二级详细
    -vvv:三级详细
    -h:hash 以#的个数显示安装进度,一个#表示2%的进度
    --test:仅测试,不真正执行安装过程
如果存在依赖:
    解决依赖关系
    忽略依赖关系:--nodeps
重新安装:
    -ivh  --replacepkgs
    原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件

卸载:
rpm -e package_name

如果卸载被其他程序所依赖的包
1、把依赖者一同卸载
2、忽略依赖关系:–nodeps
3、不再卸载

查询:-q

查询所有已安装的包:rpm -qa
查询包的描述信息:rpm -qi package_name
查询某单个包是否安装:rpm -q 包名
查询安装包生成的列表的位置 rpm -ql
查询某文件是那个包安装生成的:rpm -qf 文件
查询包安装后生成的帮助文档:rpm -qd 包名
查询安装后生成的配置文件:rpm -qc 包名
查询包相关的脚本:rpm -q --scripts 包名
    脚本分四类:
    1、preinstall 安装前脚本
    2、postinstall 安装后脚本
    3、preuninstall 卸载前脚本
    4、postuninstall 卸载后脚本
查询尚未安装的rpm包文件的相关信息:
   查询安装后会生成的文件列表: rpm -qpl 包文件
   查询其简单描述信息:rpm -qpi 包文件

升级:

rpm -U:升级或安装
rpm -F:只升级
rpm {-Uvh|-Fvh} /path/to/package_file
--nodeps: 忽略依赖关系
--force:强行安装
注意:
    不要对内核执行升级操作;
    多版本内核可以并存,因此,建议执行安装操作

校验:检查包安装后生成的文件是否被修改过
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 能力改变了

校验来源合法性和软件完整性
包完整行:通过单向加密机制(MD5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg
rpm -K /path/to/somefile
–nosigeature:不检查来源合法性
–nodigest:不检查包完整性

导入密钥:
rpm –import /path/to/gpg-key-file
导入以后再做验证

数据库
位置:/var/lib/rpm
rpm –initdb:初始化,如果事先不存在一个数据库,则新建之
rpm –rebuilddb 重建,直接新建数据库,会覆盖原有库

YUM

依赖关系:
程序包管理器的前端工具:yum(Yellowdog Update Modifier),自动解决依赖关系

文件服务器(共享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 [options] command

install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系

要使用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

yum的各命令:

yum repolist [all|enabled(默认)|disabled]:列出所有可用的yum repo

yum clean [all|packeages(包)|metadata(元数据)|expire-cache(过期数据)|rpmdb(rpm数据)plugins]:清理缓存

yum list [all|installed(已安装过的)|available(可用)]:列出yum包
yum info :显示包的详细信息
yum grouplist:列出所有的包组
yum groupinfo “package_group_name”: 显示包组信息

三个跟开发相关的包组:
Desktop Platform Development:有图形程序时需安装此组
Server Platform Development
Development Tools

yum install /path/to/package_file 安装本地包
yum install package_name ….. 安装指定的程序包
yum reinstall package_name ….:重新安装指定的包
yum check-update:检查可升级的包
yum update packe_name ….:指定升级的程序包(要升级到指定版本要带版本号)
yum downgrade packe_name:降级
yum erase pack_name ….:依赖的包也会被卸载
yum whatprovides|provides /path/to/somefile: 查询某文件是由谁提供的
yum groupinstll “group_name” 安装包组
yum groupremove ”group_name“:卸载组
yum history 查看yum的命令历史

手动禁止检查来源及完整性:–nogpgcheck
如果系统为Centos 5,开发包组为”Development Tools“和”DeveLopment Libraries“
如何系统为centos 6,常用的开发包为”Development tools“和”Server Platform Development”

yum配置文件中可用的宏
r e l e a s e v e r Y u m r e d h a t r e l r a s e R e d h a t 6.5 6 arch:系统架构
b a s h a r c h : i 686 i 586 i 386 YUM0-9:在系统定义的环境变量,可以在yum中使用

获取当前系统相应宏替换的办法
python
import yum,pprint
yb=yum.YumBase()
pprint.pprint(yb.conf.yumvar,width=1)
quit()

编译安装

GNU/make(项目编译工具)

autoconf:configre脚本,用来检查编译环境是否满足编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等
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
    //自定义安装路径以及conf路径
4.编译
    make
5.安装
    make install

configure脚本的通用功能:
我们需要定义的配置:
1.指定安装路径
–prefix=前缀,用于指定安装路径
–sysconfdir=/etc/package_name
2.指定启动/禁用的特性
–enable-feature:例如–enable-fpm
–disable-fecture;例如 –disable-socket
3.指定所依赖功能、程序或文件
–with-function: 启用某功能
–without-function: 禁用某功能

不同的程序,其configure不尽相同,应获取帮助信息
./configure –help

二进制程序的访问方法
/etc/profile.d/apache.sh
PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH
expore PATH

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文件
/etc/man.conf 添加 MANPATH /usr/local/apache/man