软件包管理

API:Posix

ABI:Application Binary Interface

glibc:系统核心库


Debian:dpt

Redhat:rpm(Redhat Package Manager)


软件包组成部分:

1) 二进制程序(/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin)

2) 库文件(/lib、/usr/lib、/usr/local/lib)

3) 配置库文件(/etc)

4) 帮助文件(手册、README、INSTALL、/usr/share/doc)


软件包管理工具:

1) 文件清单

2) 文件放置路径

3) 提供的功能说明

4) 依赖关系


软件包数据库:存储软件相关信息(如:已安装软件、版本等)


两大软件包管理器:

1) dpt --> apt-get(Debian开发的前端管理工具)

2) rpm(改名为:RPM is Package Manager) --> update(Redhat开发) --> yum(Redhat二次发行版YellowDog开发)


软件包管理器功能:

打包、安装、查询、升级、校验、卸载、数据库管理(重建)


编译器:gcc, g++

提供编译环境:开发环境

二进制:

库:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

帮助手册:/etc/man.config, man -M

头文件:/usr/include


安装程序的方式:

1) 通用二进制格式

2) 软件包管理器

3) 软件包管理器的前端工具

4) 源代码编译


软件版本号、发行号:

1) 源程序

name-version.tar.gz

版本号:major.minor.release(主版本.次版本.release版本),如:bash-4.3.1.tar.xz


2) rpm包

name-version-release.arch.rpm

发行号:用于标识rpm包本身的发行号,还可包含所适用的操作系统

el6:RHEL6

el5:RHEL5

centos6:

suse11:

arch:主机平台

i686、x86_64、amd64、ppc(powerpc)、noarch(任何平台)

如:bash-4.3.2-el6.x86_64.rpm


一、rpm软件包管理

rpm分包:

主包:核心包,如:bind

分包:支包,如:bind-devel


rpm获取:

fedora-epel(Extra Packages for Enterprise Linux)如:http://mirrors.sohu.com

http://rpmfind.net

http://rpm.pbone.net


1、rpm包验证机制:

来源的合法性:使用非对称加密gpg(pgp规范的一种实现)--> pgp(规范)

软件包的完整性:使用数据签名

RedHat系列官方公钥:

1) 存放在:/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

2) 安装光盘:/RPM-GPG-KEY-redhat-release


验证方法:

rpm

--import PUBKEY 导入公钥(默认使用系统下的KEY)

–K|checksig RPMfile 检测签名和合法性

--nosignature 不检测签名

--nodigest 不检测合法性


2、安装、卸载

rpm

-i|--install: 安装

-v|vv|vvv: 显示详细信息的级别

-h: 以#号(hash)方式显示安装进度,一个#号表示2%

--nodeps: 忽略依赖关系

--test: 测试安装

--replacepkgs:重新安装

-e: 卸载


源码格式的rpm包安装:

根据SPEC文件将其打包为rpm安装包后,再进行安装


安装步骤:

1) rpm -ivh nginx-1.0.15-5.el6.src.rpm (当前目录生成rpmbuild目录)

2) cd rpmbuild/SPECS

3) rpmbuild -bb nginx.spec 只生成二进制包

rpmbulid –ba nginx.spec 生成二进制包和源码包(任选一种方式生成)

4)cd ../RPMS/x86_64

5)rpm –ivh nginx-1.0.15-5.el6.x86_64.rpm


3、查询

rpm –q|--query 包名(同样适用于未安装的包)

rpm –qa 查询所有已安装包

rpm –qi 查询包的摘要信息

rpm –ql 查询包安装生成的文件清单

rpm –qf 查询某文件是由哪个rpm包安装生成的

rpm –qc 查询包安装生成的配置文件

rpm –qd 查询包安装生成的帮助文档

rpm –q –changelog 查询已安装软件的修改记录

rpm –q –scripts 查询包相关的脚本:

preinstall:安装前脚本

postinstall:安装后脚本

preuninstall:卸载前脚本

postuninstall:卸载后脚本


4、 升级

rpm

-U:升级+安装

-F:升级

--force:强制

--nodeps:忽略依赖关系


注意:内核不应该升级,应该尽可能安装,它允许多版本共存


5、 检验

检验安装后的软件包相关文件是否被修改:

# rpm -V vsftpd

S.5....T. c /etc/vsftpd/ftpusers

S.5....T. c /etc/vsftpd/user_list

S.5....T. c /etc/vsftpd/vsftpd.conf

权限说明:

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


6、 数据库

rpm数据库位置:/var/lib/rpm

rpm --initdb:新建

--rebuilddb:重建


二、yum

yum repository支持协议:ftp、http、file

yum缓存目录:/etc/cache/yum



1、 yum客户端配置

a)主配置文件:/etc/yum.conf

[]即为一个仓库,除[main]外,[main]段为其它仓库定义默认选项,且必须存在

也可以将仓库定义单独文件中,并保存至/etc/yum.repos.d/*.repo


[main]

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0 #是否保留下载至本地的软件包

debuglevel=2

logfile=/var/log/yum.log

exactarch=1 #是否与本地系统平台完全匹配

obsoletes=1

gpgcheck=1 #是否检查软件包来源合法性

plugins=1

installonly_limit=3




[base]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=http://mirror.sohu.com/centos/$relasever/os/$basearch/

enabled=1

cost=1000 #同时有多个仓库时,可配置优先级

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

b)yum内置变量

$releasever

This is replaced with the package's version, as listed in distroverpkg. This defaults to the version of the redhat-release package.

$arch

This is replaced with your system's architecture, as listed by os.uname() in Python.

$basearch

This is replaced with your base architecture. For example, if $arch=i686 then $basearch=i386.

$YUM0-9

This is replaced with the value of the shell environment variable of the same name. If the shell environment variable does not exist, then the configuration file variable will not be replaced.


可使用Python查看变量值:

[root@server1 ~]# python -c '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':'f1114e9d-d994-4b37-9c31-51b5cf3c0c9f'}



2、 yum命令使用

yum subcommand

-y 自动回答为yes

list [all|installed|available] 可用软件包

repolist [all|enable|disabled] 可用的仓库

info 软件包信息

groupinfo 软件包组信息

install 安装软件包

reinstall 重新安装软件包

check-update 检查更新

update 更新

update-to 更新到某个版本

remove 移除软件包

provides|whatprovides 搜索包含关键字的软件包,支持通配符

search 搜索包含关键字的软件包

groupinstall

groupupdate

groupremove

localinstall 安装本地软件包(RHEL6直接使用install)

localupdate

history yum安装的历史记录

clean [packages|metadata|expire-cache|rpmdb|plugins|all] 清空yum缓存目录

makecache 从当前可用的仓库下载并生成可用的无数据

--nogpgcheck 不检查合法性,优先级高于配置文件

version

downgrade 降低当前软件包版本


常用开发包组:

RHEL6:

"Development tools"、"Server Platform Development"、"Desktop Platform Development"

RHEL5:

"Development tools"、"Development Libraries"


3、 yum仓库创建

createrepo rpmDir

# createrepo rpmDir

# ls rpmDir/repodata/ #repodata目录会自动生成

401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz

6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz

77a287c136f4ff47df506229b9ba67d57273aa525f06ddf41a3fef39908d61a7-other.sqlite.bz2

8596812757300b1d87f2682aff7d323fdeb5dd8ee28c11009e5980cb5cd4be14-primary.sqlite.bz2

dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz

f8606d9f21d61a8bf405af7144e16f6d7cb1202becb78ba5fea7d0f1cd06a0b2-filelists.sqlite.bz2

repomd.xml


filelists文件: 所有rpm包文件列表

primary文件: 当前仓库内所有rpm包有哪些,以及各rpm包之间的以来关系

other文件(changelog): 版本修改等信息

repomd.xml文件:保存以上每个文件的时间戳信息


三、编译安装

make:软件包组(项目)编译工具,它会自动调用gcc、g++等进行编译,编译过程需要Makefile文件,而Makefile文件通过configure脚本+Makefile.in生成。configure脚本可使用autoconf工具生成,Makefile.in文件可使用automake工具生成。


编译安装步骤:

1)cd SOURCE_CODE

2)./configure (检查编译环境、用户定制编译配置)

--help 查看可用选项及帮助信息

--prefix=/usr/local/apache 指定安装目录

--sysconfdir= 指定配置文件目录

3)make

4)make install


编译安装后配置(可选):

1、 PATH环境变量

1) 安装软件通常放在 /usr/local/ 下,默认PATH变量不包含

2) 可编写修改PATH变量脚本,并放到 /etc/profile.d/*.sh下,由系统自动加载

export PATH=/usr/local/apache/bin:$PATH


2、 库文件搜索路径

1) 修改配置文件 /etc/ld.so.conf

2) 编写脚本内容为搜索路径,并放到 /etc/ld.so.conf.d/*.conf 下

ldd ls :查看ls 命令所依赖的库文件

ldcoonfig –v:重新搜索当前系统上所有库文件搜索路径下的库文件,并生成缓存 /etc/ld.so.cache


3、 man文档目录

1) 修改man配置文件 /etc/man.conf ,添加MANPATH变量

2) 使用 man –M /Dir 指定man文档路径


4、 头文件

1) 创建软件链接

如:

ln –sv /usr/local/apache/include /usr/include/httpd 整个目录

ln –sv /usr/local/apache/include/* /usr/include/* 每个文件



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章