万字详解Linux下安装软件的方式(yum配置+rpm+源码安装)
Posted 何翰宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了万字详解Linux下安装软件的方式(yum配置+rpm+源码安装)相关的知识,希望对你有一定的参考价值。
文章目录
注意:本文采用CentOS7.6
一、Linux下有哪些软件安装方式
- RPM软件包管理(格式一般为
软件名.rpm
) - yum软件管理包(使用
yum
命令安装软件) - 源码编译安装(手动编译+安装)
1.rpm包(二级制软件包)
- 二进制包,指的是已经
编译
后的软件包,直击安装就能使用了 - 二进制包需要根据自己的CPU以及操作系统去选择合适的包,和Window的
.exe
软件包类似
2. 源码软件包
- 源码包,是程序员写好的
源代码
,不能在计算机上直击运行 - 源码包,需要
编译
生成二进制软件包后,才能安装使用,源码包一般可以在任何计算机上使用 - 源码包的命名方式一般为
.tar.gz
.tar.bz2
tar.xz
zip
3. 二进制源码包
- 二进制源码包,是一个半成品,安装后不能直接使用
- 二进制源码包,需要使用
rpmbuild
工具重建成真正的rpm
包或者重建成源码包才可安装使用 - 二进制源码包,命名方式一般为:
- mysql-community-5.7.25-1.el6.
src.
rpm - mysql-community-5.7.25-1.el7.
src
.rpm
- mysql-community-5.7.25-1.el6.
4. 常见的二进制软件包
系统平台 | 包类型 | 工具 | 在线安装 |
---|---|---|---|
RedHat/CentOS/Fedora/SUSE | rpm | rpm,rpmbuild | yum |
Ubuntu/Debian | deb | dpkg | apt |
5. 二进制包和源码包区别
软件包类型 | 是否编译 | 安装难易程度 | 可定制性 |
---|---|---|---|
二进制包 | 否 | 直接安装 | 差 |
源码包 | 是 | 麻烦(配置+编译+安装) | 好 |
6. 二进制软件包的安装方式
- 基于
rpm
进行安装(先下载软件到本地再进行安装) - 基于
yum
进行安装(在线下载然后进行安装)
二、各种软件包安装步骤
1. rpm软件包的安装和卸载
1)rpm安装
命令:rpm -ivh 软件包名
注意:软件包名必须写全
- -i:install 安装
- -v:显示进度条
- -h:表示以 # 形式显示进度条
2)rpm卸载
命令:rpm -e [软件包名]
3) rmp升级包
命令:rpm -Uvh 软件包
或者:rpm -Fvh
常用选项:
-v
:输出详细信息-h
:打印散列标记,一般和-v一起使用-U
:升级软件包,如果该软件包没安装,会自动帮你安装-F
:升级软件包,如果该软件包没安装,不会自动帮你安装
4)查看rpm包相关信息
- 查看已经安装的软件的文件列表
命令:rpm -ql 软件包名
- 查看已经安装的所有rpm包
命令:rpm -qa 软件包名
- 查看未安装的rpm包里的文件列表
命令:rpm -qlp 软件包(xxx.rpm)
- 查看已经安装软件的文档列表
命令:rpm -qd 软件包名
- 查看已经安装软件的配置文件
命令:rpm -qc 软件包名
- 查看已经安装软件的详细信息
命令:rpm -qi 软件包名
- 查看指定文件来自哪个rpm包
命令:rpm -qf 文件名
4)rmp其它选项
-
--force
:表示强制强制安装软件包:
rpm -ivh [软件包名] --force
强制卸载软件包:rpm -e [软件包名] --force
-
--nodeps
:忽略依赖关系
忽略依赖关系卸载:rpm -e [软件包名] --nodeps
忽略依赖关系安装:rpm -ivh [软件包名] --nodeps
其它:
rpm --import key_file
导入公钥用于检查rpm文件的签名rpm --checksig package.rpm
检查rpm包的签名
5)如何获取rpm包
Linux只是内核,Linux发行版本:GNU/Linux
6)如何选择合适的rpm包
- 选择适合当前系统的版本号
- 找不到适合的,才去尝试别的系统版本号
- el6兼容el5;el5无法安装 el6
- 选择适合当前计算机cpu的架构
- x86_64包,只能安装在64位的系统上
- i386,i586,i686的软件包可以安装在32和64位系统上
- noarch表示这个软件包与硬件构架无关,可以通用
- 32位系统不能安装64位包
注意:建议不要跨大版本号去安装软件包,尽量使用当前系统版本自带软件包安装
2. yum软件包管理工具
yum就是一个软件包管理器,不同版本的Linux的软件管理器名字可能会有差异,Centos上就是使用的yum
1)yum安装rpm包
命令:yuim -y install [软件包名]
安装包组命令:`yum -y groupinstall [包组名]
注意:包组里面包含很多的软件包
2)yum工具卸载rpm包
命令:yum -y remove [软件包名]
卸载一组包:yum -y groupremove [包组名]
3)yum升级rpm包
命令:yum update [软件包名]
4)yum常用选项
- 列出仓库里的软件包:
yum list
- 列出可用仓库:
yum repolist
- 清空yum缓存:
yum clean all
- 创建yum缓存:
yum makecache
三、源码安装
源码安装一般可以去软件的官网,官网的源码包一般都是xxx.tar.gz
格式
1. 源码安装步骤
- 配置
.configure
(配置软件安装路径,也可以不配置,不配置使用默认路径) - 编译
make
(把软件的源代码编译成类似于rpm可以直接安装的软件) - 安装
make install
(把编译好的程序安装到Linux系统)
2. 源码安装示例
使用源码安装安装cmarix
代码雨
-
对软件进行解压缩
命令:tar -zxf cmatrix-1.2a.tar.gz
-
进入到cmatrix-1.2a文件夹,对软件进行配置
使用命令:
./configure
执行配置文件,没有指定安装目录,就会安装到默认路径
-
编译软件
命令:make
常见错误
cmatrix.c:37:20: fatal error: curses.h: No such file or directory
出现以上问题的主要原因在于系统中没有找到ncurses-devel软件包
因为这个软件是 C/C++
写的,需要C/C++
的编译器
安装命令:yum install gcc gcc-c++ ncurses-devel -y
如果遇到这种情况,把原来的解压目录删了,重洗解压安装
4. 安装软件
命令:make install
- 测试
命令:cmatrix
3. 详解源码安装的配置过程
一条命令解决编译安装:./configure && make && make install
cd [软件源码包]
./configure [选项]
查看./configure
用法
-
./configure --help
-
--prefix=...
Directories to put files in /usr/local 软件家目录 -
–
bindir=...
$prefix/bin 命令的目录 -
--etcdir=...
$prefix/etc 配置文件的目录 httpd => /etc/httpd/httpd.conf -
--mandir=...
$prefix/share/man man 文档路径 -
--locale=...
$prefix/share/locale 语言编码
1. axel多线程下载软件源码安装
- 对源码软件包进行解压缩
命令:tar -xzf axel-2.4.tar.gz
2. 进入axel
目录进行配置(不采用默认配置)
指定新的安装目录 /opt/axel
-
编译安装
命令:make && make install
-
测试和使用
命令:axel http://mirrors.163.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
出现以上问题的主要原因在于:我们没有采用默认的安装方式,所以导致当我们执行axel
命令的时候,找不到对应命令
解决这个问题有两种方式
- 第一种方式:采用软链接形式(类似Windows中的快捷方式)
- 第二种方式:使用环境变量(重要,Linux中的环境变量)
2. 使用软链接解决command not found
找不到是因为我指定的安装目录不是默认的安装目录,指定安装到了/opt/axel/bin
解决方案:
给/opt/axel/bin/axel
创建一个快捷方式到/usr/local/bin
注意:这几个目录都是一些命令
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
命令:ln -s [源文件路径] [软连接路径]
执行命令:ln -s /opt/axel/bin/axel /usr/local/bin/axel
查看/usr/local/bin/
目录
相当于在usr/local/bin
目录下创建了一个快捷方式
执行命令:axel http://mirrors.163.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
下载完成
3. 使用环境变量解决command not found
其实我们的命令都是通过环境变量执行的
终端 => 命令 => 系统的环境变量(PATH => /etc/profile) => 一些命令的存放路径
axel多线程下载软件,通过源码的方式安装成功后,由于没有使用默认的安装路径,导致axel这个命令没有出现在系统的环境变量中,所以其会出现command not found。
-
查询当前系统的环境变量
命令:echo $PATH
-
把acel所在目录添加到环境变量
- 使用vim编辑/etc/profile文件,把
export PATH=$PATH:/opt/axel/bin
追加到最后一行 - 或者直接使用命令
echo 'export PATH=$PATH:/opt/axel/bin' >> /etc/profile
追加到最后一行
再执行命令:source /etc/profile
,让配置文件马上生效
使用axel
命令下载文件
4. 解决源码安装man手册找不到问题
解决方案
命令:vim /etc/man.config
在最后一行增加MANPATH /opt/axel/share/man
5. 卸载源码安装的软件
-
进入到源码安装包中
-
安装软件的安装包等程序
命令:make uninstall
-
卸载编译与配置过程
命令:``make distclean -
删除软件的目录
rm -rf /opt/axel
四、yum
1. yum源
1. yum源作用
yum类似于手机的应用商店
2. yum源优点
RPM安装(下载软件、单独安装、需要解决依赖关系)
源码安装(下载软件的源码包,解压,进入目录=>配置+编译+安装)
yum源:相当于rpm软件包管理的升级版
能够解决软件包之间的依赖关系,提高工作效率
注意: yum源底层还是基于RPM进行软件安装操作的,所以yum安装软件后,我们也可以通过rpm -qa |grep 软件名称
3. yum源分类
1)本地yum源
yum仓库在本地(系统光盘/镜像文件) => 不需要网络的支持
2)网络yum源
yum仓库不在本地,在远程
国内比较知名的网络源
国外比较知名的网络源
centos源、redhat源、epel源等
特定软件:相关的网络源(nginx、MySQL、Zabbix等),一般的源里找不到它们
4. 本机yum备份
在/etc/yum.repos.d
目录里
使用命令:tar -zcf repo.tar.gz *.repo
,对本地yum源进行备份
再用命令:rm -rf *.repo
,删除以.repo
结尾的文件
2. 本地yum源配置
本机yum源,可以使用光盘镜像作为YUM源仓库,或者下载很多软件,使用软件包作为YUM源仓库
使用光盘镜像作为yum源仓库
-
在VM系统中装在CentOS7.8系统的光盘镜像
-
把光盘挂载到某个目录(mount)
命令:
mount 设备文件原始地址(/dev目录) 要挂载的位置路径(盘 符)
常用选项:-o
:挂载范式ro
:ro代表以readonly,只读的方式进行挂载rw
:rw表示以read/write,读写的方式进行挂载
挂载到
/mnt
目录下
先把目录清空:rm -rf /mnt/*
挂载命令:
mount -o ro /dev/sr0 /mnt
sr0
是光盘文件使用
lsblk
命令:用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等
解挂命令:umount /mnt
-
把光盘故挂载添加到开机启动文件中
命令:echo 'mount -o ro /dev/sr0 /mnt' >> /etc/rc.local
/etc/rc.local,属于系统的开机启动文件。系统启动后,会自动加载并执行这个文件
-
编写本地yum本地仓库文件
第一步:创建一个以
*.repo
结尾的文件,名称随意第二步:编写
yum.repo
文件
yum仓库的标准格式
[仓库标识名称]
,名称任意,在一个文件中可以拥有多个标识
-name=仓库名称
-baseurl=仓库的路径
,支持多种格式,file://本地路径,ftp://,http://或https://
-gpgcheck=gpg密钥
,值可以是0(代表不检测),1(代表检测,如果是1,下方还要定义一个gpgkey=密钥连接)
-enabled=是否启动当前仓库
,值可以0,也可以是1,默认为1,代表启动仓库
- 清空yum缓存
- 清空原来的yum缓存:
yum clean all
- 创建新yum缓存:
yum makecache
- 列出可用仓库:
yum repolist
- 测试本地yum是否可用
安装Apache
命令:yum -y install httpd
man 5
在Linux系统中,给定我们一个配置文件,怎么查询这个文件中每一个选项的作用呢?
命令:man 5 [配置文件名]
比如:man 5 yum.conf
3. 网络yum源配置
- 使用比较知名平台的YUM源(阿里云、腾讯、清华)
- 有些特定软件(如Nginx、MySQL、Zabbix等等)需要根据官网文档自定义网络YUM源
- 阿里源:
https://opsx.alibaba.com/mirror
- 网易源:
http://mirrors.163.com/
- 清华源:
https://mirrors.tuna.tsinghua.edu.cn/
- 华为源:
https://mirrors.huaweicloud.com/home
百度搜索 某某 mirror镜像源即可
-
知道想要的yum源官网,找到CentOS
-
根据官网提示,配置
- 备份配置文件:
cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
- 备份配置文件:
-
配置方案
命令:wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
4. 执行yum clean all
清除原有yum缓存
5. 执行yum makecache
(刷新缓存)或者yum repolist all
(查看所有配置可以使用的文件,会自动刷新缓存)
6. 测试
安装php:yum -y install php
4. EPEL源配置
什么是EPEL源?
答:EPEL是对官网源的一个扩展。
CentOS-Base.repo文件 => 基础源(官方在带的YUM源)
epel.repo文件 => 扩展源,是对官方YUM源的一个补充
命令:yum install epel-release -y
测试:一般源是没有小火车sl的,但epel
源有
5. 特定软件的yum源配置
比如特殊的几个软件,如Nginx、MySQL、Zabbix
找到官方文档,把YUM源配置,写入到一下文件中(repo文件)
找到官网
在/etc/yum.repos.d
目录下创建nginx.repo
把一下配置文件写入保存
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
清理缓存:
yum clean all
yum makecache
下载:yum -y install nginx
6. 自建yum源仓库
1. 缓存安装软件包
什么时候需要缓存软件?
- 下次还需要安装相同版本的软件包
- 由于网络原因导致网络安装非常慢,将软件包缓存下来,配置本地仓库
2. 如何缓存软件安装包
编辑配置文件/etc/yum.conf
keepcache
:为1代表开启缓存,为0代表关闭缓存
3. 把软件及依赖软件全部下载到某个路径
只下载不安装软件:可以获得软件的软件包
命令:yum install --downloadonly --downloaddir=[保存路径] [软件名称]
4. 自定义YUM仓库
- 在系统中安装
createrepo
制作仓库的软件
命令:yum -y install createrepo
- 把
custom
文件夹做成一个本地的自建仓库
命令:createrepo custom
- 在
/etc/yum.repos.d
目录中创建一个custom.repo仓库
用vim命令编辑:vim custom.repo
[soft]
name=customyum
baseurl=file:///custom
gpgcheck=0
enabled=1
- 清理缓存+重建缓存:
命令:yum clean all
命令:yum makecache
注意:这个是本地仓库目录,仓库里要提前保存有软件包,才能使用yum安装
以上是关于万字详解Linux下安装软件的方式(yum配置+rpm+源码安装)的主要内容,如果未能解决你的问题,请参考以下文章