Linux学习日志(八)

时间:2021-09-14 19:01:43

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