自动解决依赖关系的软件包管理器
自动解决依赖关系的软件包管理器
- yum,红包系列rpm包管理工具
- apt-get,deb包管理工具
- zypper,suse的rpm管理工具
windows软件管理工具 (安装包仓库)
linux软件管理
yum命令是再Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细化的管理rpm软件包,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软体包,无需繁琐的一次次下载、安装。
尽管rpm能够帮助用户查询软件相关的依赖关系,但问题还是需要运维人员自己来解决、而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件是非常痛苦的。
yum软件仓库便是为了进一步降低软件安装难度和复杂度而设计的计划。yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统
yum软件仓库中的rpm软件报可以是由红帽官方发布的,也可以是第三方发布的,当然也可以是自己编写的。
yum工具
- yum(全称为 Yellow dog Updater,Modified)是一个在Fedora和Radhat以及centos中shell前端软件包管理器。基于rpm包挂你了,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次安装所有依赖关系的软件包,无需繁琐的一次次下载、安装。
- yum源 ,yum就是为了解决依赖关系而存在的。yum源就相当于是一个目录项,当我们使用yum机制安装软件时,若需要安装依赖软件,则yum机制就会根据在yum源中定义号的路径查找依赖软件,并将依赖软件安装好。
- yum是“Yellow dog Updater,Modified”的缩写,是一个软件包管理器,yum从指定的地方(相关的rpm包地址或本地的rpm路径)自动下载rpm包并且安装,能够很好的解决依赖关系。
- yum的基本工作机制如下:服务器端:在服务器上面存放了所有的rpm软件报,然后以相关的功能去分析每个rpm文件的依赖关系,将这些数据记录成文件存放在服务器的特定目录内。客户端:如果需要安装某个软件,先下载服务器上面记录的依赖性关系文件(可通过www或ftp方式),通过对服务器下载的记录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
- yum repository:yum仓库存储了众多的软件包,以及相关的元数据文件
- 文件服务器
- ftp://
- http://
- nfs://
- file://
- yum仓库可以存在多个,自动选择软件最新的,以及优先选择离我们近的仓库下载
- 文件服务器
# yum其实也是一个rpm软件
[root@xuexi3 ~]# rpm -qa yum
yum-3.4.3-168.el7.centos.noarch
yum客户端
/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
#请放置你的仓库在这里,并且命名为*.repo类型
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
repo仓库文件
/etc/yum.repo.d/*.repo #提供仓库的地址文件
[root@xuexi3 yum.repos.d]# cat CentOS-Base.repo
[base]
name=CentOS-$releasever - Base -mirrors.aliyun.com #仓库文件说明
failovermethod=priority #存在多个url的时候,按顺序来连接,如果roundrobin,意外随机挑选
mirrorlist=http://mirrorlist.centos.org/? #镜像站 release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/#指定仓库网站
=http://mirror.aliyun.com/centos/$releasever/os/$basearch/
=http://mirror.aliyuncs.com/centos/$releasever/os/$basearch/
=http://mirror.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1 #是否检测密匙
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #公匙文件存放路径
#released updates #指定rpm需要升级的地址,此处可以去网页上寻找对应的包
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
=http://mirror.aliyun.com/centos/$releasever/updates/$basearch/
=http://mirror.aliyuncs.com/centos/$releasever/updates/$basearch/
=http://mirror.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras] #额外的第三方
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
=http://mirror.aliyun.com/epel/7/$basearch/
failovermethod=priority
enabled=1 #是否启用此仓库
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
自定义一个简单的repo文件
配置yum源
[root@xuexi3 yum.repos.d]# yum install wget -y #wget在线下载资源命令
[root@xuexi3 yum.repos.d]# mv *.repo ./bak
[root@xuexi3 yum.repos.d]# ls
bak
[root@xuexi3 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
--2022-09-07 11:24:00-- https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 221.204.23.239, 60.28.216.218, 221.204.16.238, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|221.204.23.239|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2495 (2.4K) [application/octet-stream]
Saving to: ‘/etc/yum.repos.d/CentOS-Base.repo’
100%[==========================>] 2,495 --.-K/s in 0.004s
2022-09-07 11:24:01 (559 KB/s) - ‘/etc/yum.repos.d/CentOS-Base.repo’ saved [2495/2495]
[root@xuexi3 yum.repos.d]# ls
bak CentOS-Base.repo
[root@xuexi3 yum.repos.d]#
[root@xuexi3 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
--2022-09-07 11:24:00-- https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 221.204.23.239, 60.28.216.218, 221.204.16.238, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|221.204.23.239|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2495 (2.4K) [application/octet-stream]
Saving to: ‘/etc/yum.repos.d/CentOS-Base.repo’
100%[==========================>] 2,495 --.-K/s in 0.004s
2022-09-07 11:24:01 (559 KB/s) - ‘/etc/yum.repos.d/CentOS-Base.repo’ saved [2495/2495]
[root@xuexi3 yum.repos.d]# ls
bak CentOS-Base.repo
[root@xuexi3 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
--2022-09-07 11:25:31-- https://mirrors.aliyun.com/repo/epel-7.repo
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 211.91.241.223, 124.163.196.210, 221.204.23.7, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|211.91.241.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 664 [application/octet-stream]
Saving to: ‘/etc/yum.repos.d/epel.repo’
100%[==========================>] 664 --.-K/s in 0s
2022-09-07 11:25:31 (2.61 MB/s) - ‘/etc/yum.repos.d/epel.repo’ saved [664/664]
[root@xuexi3 yum.repos.d]# ls
bak CentOS-Base.repo epel.repo
下载nginx
yum install nginx -y
使用yum安装的软件,可以用系统服务管理命令,去启动,停止,看状态等
[root@xuexi3 yum.repos.d]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead) #没启动 挂掉了
[root@xuexi3 yum.repos.d]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) #启动状态(running)
Active: active (running) since Wed 2022-09-07 11:34:21 CST; 22s ago
Process: 4074 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 4072 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 4068 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 4076 (nginx)
Tasks: 2
CGroup: /system.slice/nginx.service
├─4076 nginx: master process /usr/sbin/nginx
└─4078 nginx: worker process
Sep 07 11:34:21 xuexi3 systemd[1]: Starting The nginx HTTP and r....
Sep 07 11:34:21 xuexi3 nginx[4072]: nginx: the configuration fil...k
Sep 07 11:34:21 xuexi3 nginx[4072]: nginx: configuration file /e...l
Sep 07 11:34:21 xuexi3 systemd[1]: Started The nginx HTTP and re....
Hint: Some lines were ellipsized, use -l to show in full.
yum命令的用法
yum [options] [command] [package....]
command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb |
plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or
yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
显示仓库列表 全部 开启
* repolist [all|enabled|disabled]
显示程序包
list
# yum list [all |glob_exp1] [glob_exp2]
# yum list {available |installed |updates} [glob_exp1] [...]
源代码编译安装
无论是rpm命令或是yum命令,都是安装二进制格式的程序包,别人编译好的
mysql-xx.rpm
redis-xx.rpm
nginx-xx.rpm
可能存在的问题,别人给的rpm包,可能版本较低,不适合我们现有的需求
yum和编译安装的区别
yum的优缺点
- yum是自动去yum源中寻找rpm包下载安装,自动解决依赖,自动指定安装路径,无需人为干预
- 适合初学者,不用考虑依赖关系即可安装使用大部分软件
- 功能有rpm包控制,这个rpm包也是别人编译好的,版本可能较低,功能受限,存在漏洞
- yum自动安装的软件不能定义软件的路径,与功能,机器数量多,与后期维护成本较大
编译安装优缺点
- 可以手动下载最新的源代码,按照指定需求,设置参数,指定安装路径,扩展第三方功能,更加灵活
- 无法自动解决依赖关系,对新手不友好
建议方式
yum和编译安装结合使用,能够最大程度的解决问题
编译三部曲
前提条件:准备好开发工具及环境
开发工具:gcc make等
开发组件
yum groupinstall "Development tools"
yum groupinstall "server platfrom Deverlopment"
第一曲,执行脚本configure
./configure --prefix=软件安装路径
针对c,c++代码,进行编译安装,需要指定配置文件"makefile",需要通过"configure"脚本生成
通过选择传递参数,指定启用特性,安装路径等<执行时灰生成makefile
检查依赖到的外部环境
第二曲,执行make命令
make是linux开发套件里面自动编译的一个控制程序,他通过借助makefile里面编写的编译规范进行自动化的调用 gcc、ld以及运行某些需要的程序进行编程的程序
make这一步就是编译,大多数的源代码包都是经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)
make的作用就是开始进行源代码编译,以及一些功能的模块,这些功能由他的makefile设置文件提供相关的功能,比如make
第三部曲
开始安装软件到./configure指定的安装路径
编译安装nginx
下载源代码安装包文件,以nginx服务为例,我们需要进入找到nginx的软件包。
如果想要在虚拟机中下载,则复制链接地址,然后使用 wget 链接地址 下载
解压安装包
使用 tar zxvf 压缩包名字 将压缩包解压,解压后会在同级目录下出现一个以软件包为名字的文件夹,也可 -C 指定目录
…/configure配置
–prefix=/xx/xx/xx (/xx/xx/xx为软件安装路径,就像windows里询问你软件安装在哪里一样)
下面有报错,因为我们的编译环境不对,少东西,那么我们就根据他的报错信息一步一步进行改进。
报错说找不到xxx…的东西,那我们就用yum安装,由于不知道是xxx…后面的名字,所以我采取以xxx开头的所有软件都安装上。
yum install -y apr*
再执行一次./configure
发现还有软件没装,和上面一样,yum再安装一下
yum install -y pcre*
再执行./configure,这次发现没有报错
make编译
直接在该文件夹中执行 make 命令,进行编译,make编译是为了生成可执行的二进制文件。
make install 安装
接着使用 make install 命令进行安装,其用途是将可执行的二进制文件复制到系统中,配置应用环境。
6.测试
首先,我们使用 cd 命令移动到软件安装的目录下,进入sbin目录下 执行./nginx命令
[root@xuexi3 sbin]# ./nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
其次,关闭虚拟机防火墙。
相关firewalld(防火墙命令)
#查看防火墙状态
systemctl status firewalld
service iptables status
#暂时关闭防火墙
systemctl stop firewalld
service iptables stop
#永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off
#重启防火墙
systemctl enable firewalld
service iptables restart
#永久关闭后重启
chkconfig iptables on
物理机访问。
检查环境变量,需要手动配置nginx的PATH路径,否则必须绝对路径才能找到
编辑文件/etc/profile.d/nginx.sh
写入export PATH=可执行nginx文件目录:$PATH
最后物理机访问