Linux 第16天 程序包管理

Linux 第16天自习 程序包管理

时间: 20180802

目录

Linux程序包管理

rpm包管理工具使用

yum在线包管理工具

源码编译安装程序

Linux程序包管理

linux上的大部分软件是开源的,所以他们的源码都是公开的,可以自由获取并安装至自己的

linux系统上,但是对于大部分用户而言,配置源码安装程序包实属不易,并还需要安装编译

环境,因此发行版的厂商将这些开源的软件在自己公司内部将其开源的软件包在各个硬件平台

上编译使其形成二进制文件,并打包好此时用户只需要获取到此安装包并一键执行安装即可。

此时又形成了一个新问题,虽然已经解决了安装,但是如果用户想要卸载软件又是个问题,

Linux安装软件会形成很多文件,而且其配置文件和安装目录可能不在同一个文件夹下,此时

如果用户对此软件不了解卸载此软件也会非常令人头痛。如果有一个和windows一样的软件,

即程序软件安装管理组件,这样用户卸载或安装软件就会方便很多,这便是linux制作出rpm,

dpkg等程序包管理组件的原因,程序包管理软件其实是在每次安装或卸载程序时都有一个数据

库用来记录程序包安装的位置和所生成的文件等,以备用户以后卸载删除等。

现在包管理方便了,但是linux还有一个问题,linux软件和window软件安装有一个非常大

的区别,便是解决依赖关系。linux软件安装时可能会需求其它软件包安装后才能安装此程序。

rpm或dpkg虽然可以解决安装程序问题,也可以提示出需要依赖其它程序包的安装,但不会主

动去安装所依赖的程序包。 因为一般都是安装本地所下载的程序包,如果此程序依赖其它程序

包,则用户还需要去网上再下载,操作比较繁琐。 由此便产生了yum, apt等在线软件安装程序

管理工具。此类工具可以提供在线安装所指定的程序包,并会主动下载和安装所依赖的包。

rpm包管理工具使用

安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-h 以#来表示安装进程

-v verbose 显示安装过程

-vv

-vvv

--test 不执行真正的安装过程,仅报告依赖关系及冲突信息等

--nodeps 忽略依赖关系,副作用是能安装成功,可能无法运行成功

--replacepkgs 覆盖安装,重新安装并覆盖原有的文件

--force 强制安装

安装时常用的组合-ivh -ivvh

升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

-U 升级或安装

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

-F 升级,即当前程序已经在此机器上有并已经安装过,并还是一个旧版本

组合使用 -Uvh, -Fvh

-h 以#来表示安装进程

-v verbose 显示安装过程

-vv

-vvv

--test 不执行真正的安装过程,仅报告依赖关系及冲突信息等

--nodeps 忽略依赖关系,副作用是能安装成功,可能无法运行成功

--oldpackage 降级到旧版本

注意:一定不要对内核执行升级,linux允许多内核共存,所以可以直接安装多个

不同版本内核

如果程序包的配置文件安装后曾被修改,升级时新版本的文件不会覆盖老版本的

配置,而把新版本的文件重命名如加后缀.rpmnew后保存

卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...

简单用法rpm -e PKG_name

--nodeps 忽略依赖关系,此程序可能被其它程序依赖,卸载有可能会导致

其它程序无法正常运行

--test 测试卸载

--allmatches 一个程序包同时安装多个版本,则此选项一次全部卸载

注意:如果程序包的配置文件安装后曾被修改,卸载时此文件通常不会被删除,而是

被命名加后缀.rpmsave后留存。

查询

查询某包是否已经安装,检查安装的所有包,和包的详细信息,或查询某命令由哪个

程序包生成等

rpm {-q|--query} [select-options] [query-options]

[select-options]

-qa 查询所有已经安装的程序包

-q 查询程序包是否安装

-qf 查询文件是由哪个包安装生成

-qpi 查询尚未安装的包的相关信息

[query-options]

-qi 查询某包说明信息

-ql 列出安装包所生成的文件列表

-qc 列出安装包所生成的配置文件

-qd 列出安装包的所生成的帮助文件、

-q --changelog 查看程序包制作时随版本变化的changelog信息

-q --provides 列出程序包所提供的capabilities

-q --requires 列出程序包所依赖的capabilities

-q --scripts 列出程序包安装卸载时所执行的脚本

脚本有四类

preinstall 安装之前执行的脚本

postinstall 安装之后执行的脚本

preuninstall 卸载之前执行的脚本

postuninstall 卸载之后执行的脚本

校验

查询包安装之后生成的文件是否发生了改变

rpm {-V|--verify} [select-options] [verify-options]

常用用法 rpm -V PKG_name

当没有输出结果时表示软件包完整OK,当有相应的结果输出表明对应的内容有修改

具体如下:

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

yum在线包管理工具

yum [options] [command] [package ...]

yum 仓库管理

yum repolist 列出已经配置的所有可用仓库

yum repolist [all|enable|disabled]

yum 缓存管理

yum clean 清理缓存

yum clean [packages|metadata|expire-cache|rpmdb|plugins|all]

yum makecache 缓存创建,自动连接至每一个可用仓库,下载其元数据,将其创

建为缓存

程序包查看

yum list [all|glob_exp1|glob_exp2][...]

yum list {available|updates|installed|extras|obsoletes} [glob_exp1].

yum grouplist [hidden] [groupwildcard] [...]

程序包安装

yum install package1 pkg2...

注意:  只需要提供包名

如果某包有在不同的仓库中有多个不同版本,默认会安装最新版本

如果要安装指定版本 install pkag-version

重新安装(覆盖安装)

yum reinstall package1 pkg...

程序包升级

yum update [package1] pkgs...

程序包降级

yum downgrade pkag1...

检查有哪些升级可用

yum check-update

程序包卸载

yum remov|erase package1 ...

注意: 所有依赖于正卸载的程序包的程序包会被一并卸载

查询

程序包简要信息yum info pkge...

搜索程序包 yum search pkge...

查询指定文件由哪个程序包安装生成: provides|whatprovides /path/file

安装或升级本地的程序包文件

yum localinstall rpmfile1 ...

yum localupdate rpmfile1 ...

此种安装方式可以解决本地的rpm所依赖的程序包无须手动安装

包组管理

列出所有包组 yum grouplist

安装包组 yum groupinstall group1 ...

卸载 yum groupremove group1 ...

升级 yum groupupdate group1...

查看组里的包 yum group info grou1...

也可以使用install, remove或update来管理包组,此时需要在组名前加@符号,

如yum install @"Server Platform Development"

yum命令的可用选项

-y 自动回答yes

--disablerepo= 临时禁用在配置文件中配置并启用的某个repository

--enablerepo 临时启用指定的某repository

--nogpgcheck 禁止做包校验

yum的一些内置变量

$releaseever 当前OS发行版的主版本号

如CentOS 6.6 x86_64 主版本号为6

$arch 平台 i386 i486

$basearch 基础平台

制作本地yum源仓库

需要用到createrepo程序 这里不再详述

源码编译安装程序

源码编译安装需要依赖环境支持,即编译开发工具、以及各个被依赖到的程序包的开发组件

另外还需要通过订制的编译参数来进行编译安装

1. 安装编译开发工具(包组有)

Development tools

Server Platform Development

Desktop Platform Development

Debug Tools

2. 被依赖的程序包的开发组件

1) 编译安装被依赖的程序

2) 安装相关程序的名称中包含devel的子包

源码程序中会将程序分开保存在多个文件夹中,文件间或许存在依赖关系,因此编译

时可能需要按特定次序进行编译,此时,一般会使用项目管理工具(也称为GNU make

)对其进行管理: 构建工具会调用合适的编译器,并根据配置文件makefile中定义的

次序对源代码文件进行编译。需要注意的是:

1)每个项目的程序员开发完成某版本之后,会使用autoconf为程序代码生成一

个脚本文件configure, 其功用: 此脚本会收集当前系统上的开发环境中所依赖

各组件的版本、特性等,并检查所依赖的环境是否能满足,最后会根据Makefile

.in 文件生成一个makefile文件

2)每个项目的程序员开发完成某版本之后,会使用automake为程序代码生成一

个makefile模板文件,即Makefile.in

编译人员的编译安装过程如下

1) 运行configure脚本

configure脚本的选项

--help 查看帮助信息

--prefix 指定默认的安装路径

--sysconfdir 指定配置文件安装路径

--with-CAPABILITY 依赖的程序包

--without-CAPABILITY

--enable-FEATURE 启用某个特性

--disable-FEATURE 禁用某个特性

2) 运行make 完成项目构建

3) 运行make install 完成安装

3. 程序运行的环境

配置环境变量使其执行时不需要输入很长的路径去执行该程序

export PATH=extra_path:$PATH 保存于/etc/profile.d/*.sh

配置库文件使系统可以查找到此程序的库文件

1) 可以编辑/etc/ld.so.conf.d/*.conf文件, 添加新库文件搜索路径至

此文件中,每行一个

2) 执行ldconfig命令,重新生成库映射缓存 ld.so.conf

ldconfig 命令用于生成/etc/ld.so.cache

-p 打印当前程序ld.so.cache中已经缓存的所有库文件目录及

库文件映射列表

-v 显示命令执行过程的详细信息

配置头文件信息方法

1) 复制所有新生成的头文件至/usr/include目录中

2) 创建软链接 (以apache为例)

ln -sv /usr/local/apache/include /usr/include/httpd

ln -sv /usr/local/apache/include/* /usr/include/

配置man手册文件,使man 可以读取其配置文件

修改man的配置文件/etc/man.config /etc/man_db.conf

使用MANPATH MANPATH_MAP指令指向路径,来让其识别新的帮助信息

注意

如果安装的程序是服务类程序,服务脚本文件编译安装不会有

尽量安装编译程序包至一个专用路径下,卸载时删除此目录即可

其它程序语言开发的源码包,编译安装方式可能会有所不同

可以通过查看程序包中自带的安装信息如INSTALL, README之类的文件

来获取安装帮助信息例如 perl python ruby java

原文地址:http://blog.51cto.com/winthcloud/2154630

时间: 2024-11-06 10:12:45

Linux 第16天 程序包管理的相关文章

Linux之Redhat系列程序包管理

安装.升级和卸载应用软件是每个系统不可或缺的一部分:对于在企业使用越来越广泛的Linux操作系统而言,强大而简洁的程序包管理机制为工程师们带来了很大的便利:下文主要介绍在RedHat系列的系统上如何使用RPM/YUM/编译三种方式去管理程序包. 一.RPM程序包管理 PRM全称是Red Hat Package Manager(RedHat 包管理器).Linux RPM软件包的命名有一定的规律:名称-版本-修正版-类型.rpm 例如: RPM命令详解: 功能: 安装.卸载.升级.查询和数据库维护

Linux系统管理-(8)-RPM程序包管理器

Centos下RPM程序包管理器:     安装:     rpm {-i|--install} [install-options] PACKAGE_FILE ...            -v: 显示过程            -vv:  显示更详细的过程            -h: 以#显示程序包管理执行进度:每个#表示2%的进度          其他选项: --test 测试安装 --nodeps:忽略依赖关系:                    --replacepkgs: 重新

linux自学笔记——rpm程序包管理

RPM是Redhat PackageManager(RPM程序包管理器)的缩写,这一文件格式名称虽然打上了Redhat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.Suse以及Turbo Linux的分发版本也都有采用.RPM程序包管理器可分为安装.升级.卸载.查询.校验等五种功能,以下我们将会对这五种功能的相应的用法一一说明. RPM程序包: 源代码:name-VERSION.tar.gz    源代码由RPM自动编译安装: VERSION: major.minor.rel

Linux系统之前端程序包管理器-yum

[前言] 当我们使用rpm命令安装程序时,时常会因为程序包之间的依赖关系而焦头烂额,使得很多程序的安装过程复杂而费力,那有没有一种工具可以帮我们解决这个问题呢?当然有啦!这就是我们今天的重点yum,让我们一块来学习总结下吧! [什么是yum] yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依

linux运维基础程序包管理

软件运行环境软件包下载软件包的格式和其中可能的依赖关系软件包可用仓库加入可用服务器看到就是可用服务器,加入服务器输入会自动生成 移除软件包 升级软件包 查找全部相同的软件包 查看已安装的软件包 原文地址:http://blog.51cto.com/13896223/2151901

CentOS程序包管理、上

程序包管理:应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程: 应用程序的结构形式: 源代码: 包含了整个应用程序完整的编程语言的所有代码的文本文件集合: 使用源代码安装应用程序: 编译开发环境:编译器(gcc, GNU C Compiler),开发库,头文件,... 预处理(预处理器) --> 编译(编译器) --> 汇编(汇编器) --> 链接(链接器) -->可以直接在CPU上运行的二进制程序文件: API:Application Programing In

Linux中程序包管理

u    无论我们使用哪种操作系统,仅使用操作系统自带的程序包一般都满足不了我们的使用需求,所以我们都需要安装程序.这篇博文我们来讲解一下在Linux操作系统中我们该如何安装程序. 本篇文章会涉及rpm管理程序包.yum管理程序包.yum仓库的指定.自己编译源码安装程序.简要介绍一下该如何自己建立一个yum仓库给其他主机提供程序包. 一.rpm管理程序包 (1)如何获取安装包 1)系统发行版的光盘或者官方的文件服务器(或者镜像站点): http://mirrors.aliyun.com/ htt

Linux程序包管理及yum安装管理

Linux程序包管理: API:ApplicationProgramming Interface   应用编程接口 POSIX:Portable OS    遵循本协议的程序均可在不同系统间移植 程序编写完成后,执行所要经过的处理步骤: 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:直接调用.so共享对象实现 ABI:ApplicationBinary Interface  应用二进制接口 Windows与Linux所支持的可执行二进制

Linux程序包管理之RPM

一.RPM的简介 由于程序源代码到可被计算机识别并运行的指令是需要多步骤处理的:程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接. 这里以C,C++为例做为说明.程序员写完C,C++源代码后需要把源代码进行预处理,即通过预处理器把源代码分割或处理成为特定的符号用来支持宏调用.预处理后进一步通过编译器(gcc)编译为目标代码(object code),它由接近于机器语言的代码组成.目标代码通过编译器编译后才能生成可供CPU识别的机器代码.机器指令.由于C,C++在