程序包管理器

在未发布RPM(红帽软件包管理器)之前,想在Linux安装软件只能通过获取源码包的方式安装,相当麻烦费心。

获取程序包的途径

互联网上提供的软件,可能存在后门,存在安全隐患,插件

正确的途径

  • 操作系统发行版本光盘
  • 文件服务器

支持多个协议并且能够自动识别

1
2
3
4
ftp://
http://
nfs://
file://
  • 镜像站点
1
2
http://mirrors.aliyun.com
http://mirrors.163.com
  • epel,提供centos众多额外的第三方包,可信任的第三方软件包组织
1
https://mirrors.aliyun.com/epel/7/x86_64/Packages/m
  • 搜索引擎
1
http://www.rpmfind.net/linux/mageia/distrib/7/x86_64/media/core/release

软件依赖关系

说明

必须解决依赖关系软件才能正常工作。

软件包管理可以将管理员从无休止的兼容问题中释放。

  • rpm软件包在安装时,由作者定义依赖关系。
  • yum工具可以自动搜索依赖关系,并执行安装。

查询方式

rpm命令

语法

1
rpm [options] [package_file]

参数

1
2
3
4
5
-i 表示安装
-v 显示详细过程
-h 以进度条显示,每个井号表示2%的进度
-U 升级软件包
-e, --erase=<package>+ 清除 (卸载) 软件包
1
2
#其它参数可以通过查询
rpm --help

缺点

还是需要用户手动解决软件依赖关系

自动解决依赖关系软件包管理器

Yum工具

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。

基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum是采用C-S架构的。

Yum仓库

yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。

yum仓库,存储了众多软件包,以及相关的元数据文件。

yum仓库可以存在多个,自动选择软件最新的,以及有限选择离我们最近的。

Yum软件仓库的技术拓扑

如何写一个仓库文件

1
2
3
4
5
6
7
[base]                                 
name= #此为描述信息,可以看情况填写
baseurl=file:///media/ #此项为yum软件仓库位置,指向光盘挂载点
enabled=1 #此项为是否开启,1为开启, 0为不开启

gpgcheck=1 #此项为是否检查签名,1为检测, 0为不检测
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release #签名认证信息的路径

Yum客户端

1
/etc/yum.conf #为所有仓库提供公共配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@localhost ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0 #本地缓存是否保留,0否,1是
debuglevel=2 #调试日志级别
logfile=/var/log/yum.log #日志路径
exactarch=1 #精确系统平台版本匹配
obsoletes=1
gpgcheck=1 #检查软件包合法新
plugins=1
installonly_limit=5 #同时安装几个工具包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release


# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

yum命令

通过配置文件指定仓库地址

1
/etc/yum.repos.d/*.repo

语法

1
yum [options] COMMAND

参数

man yum #可以查看更详细的手册

yum –help #常用参数等

1
2
3
4
5
6
7
8
install        向系统中安装一个或多个软件包
update 更新系统中的一个或多个软件包
reinstall 覆盖安装软件包
list 列出一个或一组软件包
version 显示机器和/或可用的源版本。
info 显示关于软件包或组的详细信息
grouplist/groups list 列出可安装的组
groupinstall 安装组(中文也可以)

源代码编译安装

无论是rpm命令或者yum命令,都是安装二进制格式的程序包,是别人编译好的。

可能存在的问题:别人编译好的rpm包,可能版本过低,不适合当前需求。

yum和编译安装的区别

yum的优缺点

yum是自动取yum源中寻找rpm包下载且安装自动解决依赖,自动指定安装路径,无需人为干预;

适合初学者,不需要考虑依赖关系即可安装使用大部分软件;

功能由rpm包控制,这个rpm包是别人编译好的,版本可能较低,功能受限,存在漏洞;

yum自动安装的软件不能自定义软件的路径、功能,机器数量较多,与后期维护成本较大

编译安装优缺点

可以手动下载最新源代码,按照指定需求设置参数、指定安装路径,拓展第三方工功能,更加灵活;

无法自行解决依赖关系,对新手不友好

建议方法

yum和编译安装结合使用,能够最大程度解决问题

编译三部曲

环境准备

1
2
3
#gcc、make开发工具
yum groupinstall "Development Tools" -y
#yum groupinstall "Server Platform Development" -y

Centos7安装Server Platform Development可能会报不存在!可以先跳过不安装

1
2
3
4
Warning: group Server does not exist.
Warning: group Platform does not exist.
Maybe run: yum groups mark install (see man yum)
指定组中没有可安装或升级的软件包

演示源文件准备(以nginx为例)

Nginx

1
https://nginx.org/download/nginx-1.23.1.tar.gz

下载

1
wget https://nginx.org/download/nginx-1.23.1.tar.gz

解压缩

1
tar -zxvf nginx-1.23.1.tar.gz

查看文件

1
2
3
[root@localhost ~]# ls nginx-1.23.1
auto CHANGES.ru configure html man src
CHANGES conf contrib LICENSE README

第一曲

执行脚本configure文件

cd /nginx-1.23.1 切换到解压文件夹下运行

此处演示放在/root/nginx目录下

1
./configure --prefix=/root/nginx

针对C、C++代码,进行编译安装,需要指定配置文件Makefile,需要通过configure脚本生成;

通过选项传递参数,指定启用特性,安装路径等,执行时会生成Makefile;

整个过程会检查依赖的外部环境

报错

如果出现pcre报错,请执行命令安装

1
yum install pcre-devel -y

解决后,又出现zlib报错,请执行命令安装

1
yum install zlib zlib-devel -y

第二曲

执行make命令

参阅文献

Linux中make, make install命令分别是什么,用法?

linux中make是用来编译的,它从Makefile中读取指令,然后编译。

make的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能。

make是 Linux 开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用 gcc 、ld 以及运行某些需要的程序进行编译的程序。

第三曲

执行make install

开始安装软件到./configure <目录> 指定的安装路径

此时,我们已经完成了nginx软件的安装,我们可以在指定的安装目录下找到sbin文件夹,里面即是nginx的启动文件。

启动

1
/root/nginx/sbin/nginx

我们可以将启动命令直接写入PATH中,这样就可以直接使用nginx执行

在全局配置文件夹中写入nginx.sh文件

1
vi /etc/profile.d/nginx.sh

内容为命令所在目录与PATH的拼接

1
PATH=/root/nginx/sbin:$PATH

重新登录后生效,可以直接使用nginx执行

1
logout
1
nginx