您的位置:首页 > 运维架构 > Linux

Linux程序包管理

2016-07-21 15:08 399 查看
应用程序 shell
————————
lib call
————
system call
————————
硬件
————————

API:应用编程接口
ABI:应用二进制接口

c/c++程序格式:
源代码:文本格式的程序代码

二进制格式:将文本格式的程序代码通过编译器编译成二进制格式

编译开发环境:编译器,头文件,开发库

java/python程序格式:
源代码:文本格式的程序代码
二进制:将源代码编译成能在其虚拟机(jvm/pvm)运行的格式

开发环境:编译器,开发库

程序包管理器:
源代码——>目标二进制格式——>组织成一个或有限几个"包"文件

完成:安装,卸载,查询,校验

程序包管理器:

debian:dpt,dpkg ".deb"

redhat:rpm ".rpm"

suse:rpm ".rpm"
gentoo:ports

源代码包命令格式:name-version.tar.gz

rpm包命名格式:name-version-release.arch.rpm
如:redis-3.0.2-1.centos7.x64.rpm

拆包:主包和支包

主包:name-version-release.arch.rpm

支包:name-function-version-release.arch.rpm

function:devel,untils,libs
依赖关系:一个程序包的安装卸载可能需要另外几个程序包的支持
前端工具:自动解决依赖关系

yum:rhel系类os上rpm的包管理前端工具

apt-get(apt-cache):deb系类os上包管理前段工具

zypper:suse上的rpm包管理前段工具

dnf:Fedora 22+系统上的rpm包管理前端工具

程序包管理器的功能:
1.程序包的组成清单(独立):文件清单,安装或卸载时运行的脚本

2.数据库(公共):/var/lib/rpm

记录程序包的名称,版本,依赖关系,功能说明,安装生成的各文件的文件 路径及校验信息等

获取程序包的途径:
1.系统发行版本的光盘,官方文件服务器,镜像站点

2.项目官方站点:如:zabbix.org

3.第三方:(a)EPEL

(b)程序包搜索引擎:pkgs.org,rpmfind.net,rpm.pbone.net
4.自己动手,丰衣足食

建议:检查其来源的合法性,程序包的完整性

Centos系统上rpm命令管理程序包:
安装,升级,卸载,查询和校验,数据库维护

rpm命令: rpm [options] [PACKAGE_FILE]
安装:-i

升级:-U,-F

卸载:-e

查询:-q

校验:-V

数据库维护:--buliddb,--initdb

安装:rpm -i [install options] PACKAGE_FILE
-v:显示信息

-vv:更详细的输出

-h:以hash标记输出进度条;每个进度条代表2%的进度

--test:测试安装,检查并报告依赖关系

--nodeps:忽略依赖关系,不建议使用

--replacepkgs:重新安装

--nosignature:不检查包的签名信息,即不检查来源合法性

--nodigest:不检查包的完整性

注意rpm可以自带脚本,共4类

perinstall:安装过程之前运行的脚本 %pre

postinstall:安装完成之后运行的脚本 %post

preuninstall:卸载前运行的脚本 %preun

postuninstall:卸载后运行的脚本 %postun

升级:rpm -Uvh PACKAGE_FILE:升级或安装
rpm -Fvh PACKAGE_FILE:升级
--oldpackage:降级

--force:强制

注意:1.不要对内核做升级;linux支持多内核版本并存,因此直接安装新内核

2.如果某原程序包的配置文件安装后曾被修改,那么升级后新版本的程序提供的同一个配置 文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后 提供

卸载:rpm -e PACKAGE_NAME
--allmatches:卸载所有匹配指定名称的程序包的各版本

--nodeps:忽略依赖关系

--test:测试卸载

查询:rpm -q [selection options] [query-options]
selection options:
PACKAGE_NAME:查询指定的程序包是否已安装及其版本

-a:查询所有已安装过的程序包

-f FILE:查询指定的文件由哪个程序包安装生成

-p PACKAGE_FILE:查询未安装的程序包的相关信息

--whatprovides CAPABILITY:查询指定的capability由哪个程序包 提供

--whatrequires CAPABILITY:查询指定的capability被哪个包依赖

query-options:

-changelog:查询rpm包的changelog

-l:程序安装生成的所有文件列表

-i:程序包的相关信息,版本号,大小,所属的包组...

-c:查询指定的程序包的配置文件

-d:查询指定的程序包提供的文档

--provides:列出指定的程序包提供的CAPABILITY

-R:查询指定程序包的依赖关系
--scripts:查看程序包自带的脚本

校验:rpm -V
程序包来源合法性验证:数字签名

完整性验证:

获取并导入信任的包制作者的密钥 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CENTOS-7

数据库重建:
rpm管理数据库的路径:/var/lib/rpm
查询,安装等操作都通过数据库进行
rpm [--initdb|--rebuilddb] [--dbpath directory] [--root directory]
--initdb:初始化数据库,当前无任何数据库时可实现创建一个新的,当前有数据库则不会 执行任何操作 --rebuilddb:重新构建,是通过读取当前系统上以安装过的程序包进行重建的

yum前端管理工具:
显示仓库列表:repolist [all|enabled|disabled]
显示程序包:list [all]
安装:install package1 [package2]...
重新安装:reinstall package1 [package2]...

升级:update package1 [package2]...
降级:downgrade package1 [package2]
检查可用升级程序包:check-update
卸载:remove
查看程序包简要信息:info
查看指定的特性(可以是文件)是由哪个程序包提供的:provide
清理本地缓存:clean [packages|rpmdb|all]
构建缓存:makecache
搜索:search STRING1 [STRING2]...
查看指定的程序依赖的capabilities:deplist [package1] [package2]...
查看YUM事物历史(安装,卸载等信息):history [info|list|packages-list|packages-info]

包组管理的相关命令:
groupinstall group1 [group2]...
grpupupdate group1 [group2]...
grouplist group1 [group2]...
groupremove group1 [group2]...
groupinfo group1 [group2]...

如何使用光盘当做本地YUM仓库:
1.mount -r /dev/cdrom /media
2.vim /etc/yum.repos.d/base.repo

[base]

name=Centos7 packages
baseurl=file:///media
enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CENTOS-7

:wq

yum的命令行选项:
--nogpgcheck:不检查程序包来源的合法性和程序包的完整性

-y:无需用户确认安装

-q:静默

--disablerepo=xxx:临时禁用此处指定的repo

--enablerepo=xxx:临时启用此处指定的repo

--noplugins:禁用所有插件

YUM的repo配置文件中的可用变量:
$releasesever:当前os发版本的主版本号
$arch:平台(cpu架构i386,X86_64,PPC)

$basearch:基础平台(i386,i486,i586-->i386)

如:http://mirrors.echoh.com/centos/$releasesever/$basearch/OS

创建YUM仓库:createrepo [option] FILE

源码包编译安装:
源代码组织格式:

多文件:文件中的代码间可能存在跨文件依赖关系,所以需要用项目管理工具(make/maven)

开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in

编译安装3步骤:
(1)./configure:A通过传递参数指定安装路径,启用的特性等,执行时参考用户指定的Makefile.in 文件生成makefile
B检查依赖到的外部环境(编译环境)

(2)make:根据makefile文件,构建应用程序

(3)make install:安装

开源程序源代码的获取:
官方站点:apache.rog,mariadb.org..

托管站点:code.google.com,Github.com,SourceForge

编译安装C源代码程序:
1.提供开发工具(make,gcc),开发环境(开发库,头文件,glibc:标准C库)

yum -y install "Development Tools" "Server Platform Development"

2. ./configure 配置(--help获取其支持的选项)
选项分类:

指定安装路径:--prefix=/PATH/TO/FILE:默认为/usr/local/xxx

指定system os:System type:作用是实现交叉编译

可选特性:--disable-FEATURE,--enable-FEATURE
可选包:--with-PACKAGE,--without-PACKAGE

3.make
4.make install

安装后的配置:
(A)导出程序二进制目录至PATH环境变量中:

cp xx /etc/profile.d/xx.sh
vim xx.sh

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

(B)导出库文件路径

添加新的库文件至/etc/ld.so.conf.d/文件中

让系统重新生成缓存:ldconfig [-v]

(C)导出头文件
基于链接的方式(ln -s)
(D)导出帮助手册:
添加一个MANPATH
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 管理 程序包