写在前面
在centOS系统中,安装软件主要有三种方法:
rpm包安装
yum安装
源码包安装
这则笔记分别对上述三种方法进行整理。
rpm工具
rpm,全称是red hat package manager, 是Red Hat公司提出了软件安装管理程序。
挂载 rpm
包安装源
rpm 包是预先在linux系统上编译打包的文件,就藏在centos7 的光盘镜像里。要使用它,首先要把这些包都找出来。
- 第一步:挂载光驱镜像
依次点击virtual machine
-> CD/DVD(IDE)
->connect CD/DVD
,选择光驱镜像
注:如果是已经加载了光驱镜像的,就会显示disconnect CD/DVD
- 第二步:将光驱挂载到
/mnt
目录
1 | [root@stevey mnt]# mount /dev/cdrom /mnt |
- 第三步:进入/mnt 目录,查看/mnt/Packages,就能找到rpm包了。
rpm 初始化
1 | [root@stevey Packages]# rpm --initdb |
rpm
包安装:
命令格式: rpm [参数] [rpm包名称]
常见参数 | 用法 |
---|---|
-i | 安装 |
-v | 可视化 |
-h | 显示安装进度 |
-U | 升级rpm包 |
–force | 特殊用法,强制安装,即使覆盖其他包也会安装 |
–nodeps | 即使依赖包没有安装,也要强制安装 |
- 安装检测:
--test
用来检查依赖关系,并不是真正的安装;
1 | [root@stevey Packages]# rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm |
- 安装:
rpm -ivh [rpm包名称]
这里的包名称必须包括平台信息、版本号等一长串信息,必须吐槽一下,简直是一夜回到解放前,好土著的感觉。
1 | [root@stevey Packages]# rpm -ivh gaim-1.3.0-1.fc4.i386.rpm |
- 升级 file.rpm,使用
-U
参数。
1 | [root@stevey Packages]#rpm -Uvh file.rpm |
- 由新版本降级为旧版本,加
--oldpackage
参数:
1 | [root@stevey Packages]# rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm |
- 为软件包指定安装目录:要加
--relocate
参数:
1 | [root@stevey Packages]# rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //把gaim-1.3.0-1.fc4.i386.rpm指定安装在 /opt/gaim 目录中 |
注:通常情况下,centos执行文件都放在 /bin 或者 /sbin目录下,指定目录可能会导致找不到命令,解决方法:在 /bin
或者 /sbin
目录下建立一个软链接文件,然后设置软链接:ln -s [源文件] [目标文件]
1 | [root@stevey Packages]# ln -s /opt/lynx/etc/lynx.cfg /etc/lynx.cfg |
rpm
包卸载
命令行格式: rpm -e [软件包名]
1 | [root@stevey Packages]# rpm -e lynx |
注:这里的 rpm 包名是不包括平台信息和后缀名的。
rpm 包的查询
命令行格式: rpm [参数] [rpm包名]
以下是rpm的常见用法:
查看已安装文件
- 查询系统已安装的软件:
rpm -q [软件名]
1 | [root@stevey Packages]# rpm -q gaim |
- 查看系统中所有已经安装的包,要加
-a
参数 ;
1 | [root@stevey Packages]# rpm -qa |
- 在所有已经安装的软件包中查找某个软件: 与管道符
| grep
连用
1 | [root@stevey Packages]# rpm -qa |grep gaim |
- 查询已安装的文件属于哪个软件包:
rpm -qf [文件名]
1 | [root@stevey Packages]# rpm -qf /usr/lib/libacl.la |
注:此处的文件需要使用绝对路径
- 查询已安装软件包信息:
rpm -qi [软件名]
1 | [root@stevey Packages]# rpm -qi lynx |
- 查询已安装软件位置:
rpm -ql [软件名]
1 | [root@stevey Packages]# rpm -ql lynx |
- 查看已安装软件的配置文件:rpm -qc [软件名]
1 | [root@stevey Packages]# rpm -qc lynx |
- 查看已安装软件所依赖的软件包:
rpm -qR [软件名]
1 | [root@stevey Packages]# rpm -qR rpm-python |
查看未安装文件
- 查看软件包的用途及版本等信息:
rpm -qpi [软件名]
1 | [root@stevey Packages]# rpm -qpi lynx-2.8.5-23.i386.rpm |
- 查看软件包所包含的文件:
rpm -qpl [软件名]
1 | [root@stevey Packages]# rpm -qpl lynx-2.8.5-23.i386.rpm |
- 查看软件包的文档所在位置:
rpm -qpd [软件名]
1 | [root@stevey Packages]# rpm -qpd lynx-2.8.5-23.i386.rpm |
- 查看软件包的配置文件:
rpm -qpc [软件名]
1 | [root@localhost RPMS]# rpm -qpc lynx-2.8.5-23.i386.rpm |
- 查看软件包的依赖关系:
rpm -qpR [软件名]
1 | [root@localhost archives]# rpm -qpR yumex_0.42-3.0.fc4_noarch.rpm |
源码包安装
源码包是所有安装方式里面最复杂的,如果可能,尽量不使用源码包安装。
安装工作流:
第一步:
./configure
第二步:
make
第三步:
make & install
以安装php为例,具体过程如下;
前提条件:
采用源码包安装的方式,需要用编译器进行。linux下的c语言编译器是gcc,centos下运行 yum install -y gcc
进行安装。
第一步:下载源代码
命令行格式: wget [源码包地址]
注意:
下载源码包一定要到官方镜像地址,这里选择了香港镜像下载;
建议源码包放置在固定目录,建议存放在
/usr/local/src/
;
第二步:解压源码包
1 | tar -jxvf php-7.2.4.tar.bz2 //这里下载的`.tar.bz2` ,所以用`-jxvf` 解压。 |
注:解压完成之后务必要进入文件目录,查看一下README
、 INSTSLL 这两个帮助文档,能够获得很多必要的说明信息。
1 | [root@stevey php-7.2.4]# less INSTALL |
第三步:配置选项并生成makefile
进入源码包目录,配置选项。运行 ./configure --help | less
查看帮助文档;
TroubleShooting:运行之后,出现了错误提示:configure: error: xml2-config not found. Please check your libxml2 installation.
google了半天,最终在这里找到了答案,解决办法:
1 | yum install -y libxslt libxslt-devel libxml2 libxml2-devel |
常见的配置选择有 --perfix=[安装目录]
,用来自定义软件包的安装目录。
1 | ./configure --prefix=/usr/local/php7 |
注:这里的路径一定要写绝对地址,否则会报错。
配置完成后,输入 echo $?
进行验证,返回值为0,说明配置成功。
第四步:编译安装包
命令行: make
TroubleShooting: 这里有遇到了坑,错误提示:virtual memory exhausted: Cannot allocate memory
虚拟内存不够,又折腾了很久,找到解决思路
错误原因:虚拟内存不够,从而导致编译失败。
解决问题:涉及知识点就是手动增加swap
- 建立swapfile
1 | [root@stevey php-7.2.4]# mkdir /usr/img/ |
- 格式化swap
1 | [root@stevey php-7.2.4]# mkswap /usr/img/swap |
- 挂载swap
命令:swapon /usr/img/swap
TroubleShooting: 好吧,真的跟打游戏一样,这里又复习一遍chmod
的用法。
1 | chmod 0600 /usr/img/swap |
再次输入命令 echo $?
,验证操作是否成功。
swap空间在编译完毕之后,就没用了,可以删掉。当然,也可以选择保留。
1 | [root@stevey php-7.2.4]# swapoff swap |
第五步:安装
1 | make install |
yum 工具
注:比rpm更智能、更人性化的软件安装管理工具,
查询可用的安装包: yum list
注:左侧是软件名;中间是版本信息;右侧是安装信息。
base、anaconda表示不同的
repos
仓库;加上@表示已安装,不加@表示本机未安装;
@updates 表示已安装需要升级;
以下是一些常用的查询命令:
- 列出所有可更新的软件包:
yum list updates
- 列出所有已安装的软件包:
yum list installed
- 列出所有已安装但不在 Yum Repository 内的软件包:
yum list extras
- 使用YUM获取软件包信息:
yum info
- 列出所有软件包的信息:
yum info
- 列出所有可更新的软件包信息:
yum info updates
- 列出所有已安装的软件包信息:
yum info installed
- 列出软件包提供哪些文件:
yum provides
搜索安装包:
- 第一种方式:
yum search [keyword]
- 第二种方式:
yum list | grep ‘keyword’
- 第三种方式:
yum provides '/*/vim'
yum安装卸载:
单独安装卸载
- 安装:
yum install -y [rpm 名]
升级 rpm 包:
yum update [-y] [rpm 名]
卸载:
yum remove [rpm 名]
注:卸载跟安装类似,卸载也可以加上-y
参数,省略交互环节;不过稳妥起见,还是不加-y
比较好。
组团安装
除了一个一个地安装,yum还支持一堆一堆的安装,就是按照功能把软件分组,一次安装一组软件。
yum grouplist
查询
yum groupinstall [组名]
安装,注意此处的组名要用单引号括起来
1 | [root@stevey ~]#yum groupinstall 'Basic Web Server' |
yum搭建本地仓库
相较于rpm,使用yum安装要方便很多,但是当系统无法联网,就不能使用yum安装软件了。这里的变通的方法,是搭建本地仓库。
实现办法如下:
- 第一步:挂在光驱镜像
1 | mount /dev/cdrom /mnt |
- 第二步:删除 /etc/yum.repos.d 目录下所有repos文件(强烈建议:先备份,再删除)
1 | cp -r /etc/yum.repos.d /etc/yum.repos.d_bak //备份到/`etc/yum.repos.d_bak` |
- 第三步:创建dvd.repo
1 | vim /etc/yum.repos.d/dvd.repo //vim编辑,加入以下内容 |
- 第四步:刷新repos生成缓存
1 | yum clean all //先清楚之前到缓存 |
之后,就可以使用本地repos了。
yum 下载安装包
yum只下载安装包(注:该方法适用于未安装软件)
1 | yum install -y [包名] --downloadonly |
默认情况下,下载的rpm包保存在这里:
1 | /var/cache/yum/x86_64/[centos/fedora-version]/[repository]/packages //[repository]表示下载包的来源仓库的名称(例如:base、fedora、updates) |
上述方法,只适用于未安装软件,如果是已安装软件,则使用以下命令:
1 | yum reinstall -y [包名] --downloadonly |
下载的安装包地址在:
设置保留yum安装包
1 | vim /etc/yum.conf //修改 yum 配置文件,如下: |
切换国内源
国内源地址:
服务商 | repo地址 |
---|---|
163 | http://mirrors.163.com/.help/CentOS7-Base-163.repo |
阿里巴巴 | http://mirrors.163.com/.help/CentOS7-Base-163.repo |
- 第一步:备份源地址
1 | mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup |
- 第二步: 下载源
1 | cd /etc/yum.repos.d/ //转到源目录: |
- 第三步:生成缓存:
1 | yum clean all //先清空缓存 |
安装拓展源epel
EPEL 是yum的一个软件源,包含了PHP、Redis、htop等基本源没有到软件。
方法一:yum 安装
1 | [root@stevey ~]# yum install -y epel-release |
方法二:rpm安装
- 先查看系统版本
1 | [root@stevey ~]# arch //该命令用于显示当前主机的硬件架构类型 |
- 安装EPEL的rpm包,命令行格式:
rpm -ivh [rpm地址]
,各系统版本命令如下:
1 | rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm # CentOS 7 64位 |
- 检查repo源
yum repolist
能看到红框标出的那一行,说明以安装成功
成功之后就可以使用yum 命令安装更多的命令了。
epel源删除(不推荐)
删除EPEL源需要同时删除配置和rpm文件。
1 | rm epel.repo epel-testing.repo # 删除配置文件 |
yum设置源优先级
前提条件:需要安装yum-priorities
安装完成后确认一下配置文件是否存在。
编辑 /etc/yum.repos.d/目录下的*.repo 文件来设置优先级。
注意:
这里所有的repo文件都需要设置。例如
vim /etc/yum.repos.d/CentOS-Base.repo
在文件中另起一行写入priority=1
,保存退出即可;其他repo也做同样修改,根据需求设置不同priority。数字越大,优先级越低
推荐的设置为:
1 | [base], [addons], [updates], [extras] … priority=1 |
yum下载rpm包
命令行格式:yum install --downloadonly <package-name>
例如,尝试下载zsh的rpm包:
默认情况下,下载的rpm包保存在这里,/var/cache/yum/x86_64/7/[repository]/packages/
。这里的[repository]表示下载包的来源仓库的名称(例如:base、fedora、updates),也就是上图中红圈标出来的位置。
如果想要指定下载目录,使用以下命令:
1 | yum install --downloadonly --downloaddir=/tmp <package-name> `--downloaddir`后面跟的是指定的目录 |
注意:
在CentOS/RHEL 6或更早期的版本中,你需要安装一个单独yum插件(名称为 yum-plugin-downloadonly)才能使用–downloadonly命令;
另一个专门下载安装包的软件
yumdownloader
,这种方式只会将指定的包下载到当前目录下,不包括依赖包,所以实际使用起来仍然是比较麻烦的。
1 | yum install yum-utils //下载安装插件 |