云计算基础-9:Linux软件管理
博客原文链接Breeze在 Linux 世界中安装软件不像 Windows 那样双击.exe文件那么简单。Linux 提供了多种软件管理方式RPM 包、YUM 仓库、源码编译安装……每种方式都有其适用场景。很多新手在装软件这件事上踩坑无数依赖关系报错、找不到安装包、编译失败……本文将系统讲解 RPM 包的基础知识、YUM 仓库的配置与使用、以及源码包编译安装的全流程。学完本章安装软件将不再是难题。概述Linux 软件包的两种类型Linux 软件包主要分为两大类类型RPM 包二进制包源码包Source Code是否需要编译无需编译直接使用需要编译后才能运行能否自定义配置无法设定个人设置、开关功能可以自定义配置和开关功能安装速度快慢需要编译时间依赖处理YUM 可自动处理依赖需要手动安装依赖示例mysql-community-common-5.7.12-1.el7.x86_64.rpmnginx-1.8.1.tar.gz认识 RPM 包RPM 包的命名有严格的规范理解命名规则能帮你快速判断软件包的兼容性。RPM 包命名拆解以zip-3.0-11.el7.x86_64.rpm为例zip - 3.0-11 . el7 . x86_64 . rpm │ │ │ │ │ │ │ │ │ └── 文件后缀 │ │ │ └── 系统平台32/64 位 │ │ └── 发布版本对应 CentOS/RedHat 版本 │ └── 软件版本号 └── 软件包名部分示例值说明软件包名zip软件的名称版本号Version3.0-11软件的版本格式为主版本.次版本-修订号发布版本Releaseel7对应 CentOS/RHEL 7 系统el5→CentOS 5el6→CentOS 6el7→CentOS 7系统平台x86_6464 位系统i386/i686表示 32 位noarch表示不依赖架构文件后缀.rpm包格式标识更多示例wget-1.14-15.el7.x86_64.rpm tcpdump-4.9.0-5.el7.x86_64.rpm认识源码包源码包的命名相对简单nginx - 1.8.1 . tar.gz │ │ │ │ │ └── 压缩格式 │ └── 版本号 └── 包名源码包通常以.tar.gz、.tar.bz2、.tar.xz等格式发布下载后需要解压 → 配置 → 编译 → 安装。RPM 包管理YUM 工具YUM 简介YUMYellow dog Updater, Modified是一个在 Fedora、RedHat 和 CentOS 中使用的 Shell 前端软件包管理器。YUM 的核心优势基于 RPM 包管理能够从指定的服务器自动下载RPM 包并安装自动处理依赖关系一次安装所有依赖的软件包无需繁琐地一次次下载、安装配置 YUM 仓库YUM 仓库Repository是存放 RPM 包的服务器或本地目录。YUM 的配置文件位于/etc/yum.repos.d/ ← YUM 仓库配置文件目录本地源使用系统安装光盘场景在没有网络的环境下使用 CentOS 安装光盘作为软件源。步骤备份官方 YUM 配置[rootlocalhost ~]# mv /etc/yum.repos.d/* /tmp/步骤编写本地 YUM 库配置文件[rootlocalhost ~]# vim /etc/yum.repos.d/dvd.repo[dvd]namedvdbaseurlfile:///mnt/cdromgpgcheck0配置文件详解配置项示例值说明[dvd]仓库名称中括号[]是必须的自定义名称namedvd仓库的描述说明必须的baseurlfile:///mnt/cdrom下载库的具体地址最重要的配置gpgcheck0关闭签名校验0关闭1开启注意配置文件中很容易打错字特别是baseurl和gpgcheck务必仔细检查步骤挂载安装光盘千万记得要把光盘放到服务器上并确保光驱已连接# 创建挂载点[rootlocalhost ~]# mkdir /mnt/cdrom# 手动挂载光驱[rootlocalhost ~]# mount /dev/cdrom /mnt/cdrom/mount: /dev/sr0 写保护将以只读方式挂载步骤验证光盘内容[rootlocalhost ~]# ls /mnt/cdrom/CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7 EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL能看到Packages和repodata目录说明挂载成功。步骤使用 YUM 安装软件# 安装 Apache HTTP 服务器[rootlocalhost ~]# yum install -y httpd# 启动服务[rootlocalhost ~]# systemctl start httpd步骤验证安装打开虚拟机内的浏览器输入http://127.0.0.1能看到 Apache 测试页面说明部署成功。步骤查看仓库信息[rootlocalhost ~]# yum repolist已加载插件fastestmirror, langpacks Loading mirror speeds from cached hostfile 源标识 源名称 状态 dvd dvd4,021说明我们使用的是本地光驱中的软件包共 4,021 个可用软件。网络源使用国内镜像源前提虚拟机需要联网网络模式设置为 NAT。# 例如ping百度测试网络连通性 [rootlocalhost ~]# ping www.baidu.com PING www.a.shifen.com (183.2.172.177) 56(84) bytes of data. 64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq1 ttl128 time5.34 ms 64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq2 ttl128 time4.93 ms 64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq3 ttl128 time5.07 ms ^C --- www.a.shifen.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev 4.930/5.116/5.346/0.182 ms场景使用阿里云等国内镜像源下载速度更快软件包更全。站点地址阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区适合centos7的源地址CentOS镜像-CentOS镜像下载安装-开源镜像站-阿里云步骤清理原有 YUM 配置[rootlocalhost ~]# mv /etc/yum.repos.d/* /tmp/步骤下载阿里云 YUM 配置wget-O/etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo# 或者curl-o/etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo第一个不行多半是因为你的系统没有安装wget这个软件工具wget功能非常类似于迅雷下载使用第二条命令结果也是一样的。-O参数指定输出文件名大写字母 O不是数字 0。wget -O和curl -o效果类似。步骤更新 YUM 缓存[rootlocalhost ~]# yum clean all[rootlocalhost ~]# yum repolist[rootlocalhost ~]# yum makecache步骤验证可以打开看/etc/yum.repos.d/CentOS-Base.repo文件可以看到baseurl带着aliyun的链接EPEL 源额外软件包网页链接Epel镜像-Epel镜像下载安装-开源镜像站-阿里云EPELExtra Packages for Enterprise Linux企业版 Linux 的额外软件包仓库。很多常用软件不在 CentOS 官方源中但在 EPEL 中能找到。# 如没有wget工具现在就可以下载了[rootlocalhost ~]# yum -y install wget# 下载 EPEL 配置文件[rootlocalhost ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo# 重建缓存[rootlocalhost ~]# yum makecache软件官方源以 Nginx 为例最佳实践系统的更新和升级可以使用基础源阿里云、163但具体软件的安装建议使用官方源能获取最新版本。步骤查找官方文档访问 Nginx 官网 → Document文档 → Install安装 → Packages包说明站点nginxLinux 软件包步骤根据提示创建 YUM 配置文件Nginx 官方会提供.repo配置文件的模板按照提示创建即可。步骤安装教程示例如下#安装说明#在你第一次在新机器上安装nginx之前你需要先 建立NGINX软件包仓库。 之后你可以从仓库安装并更新nginx。#RHEL及其衍生产品#本节适用于红帽企业Linux及其衍生版本如 CentOS、Oracle Linux、Rocky Linux、AlmaLinux。#安装先决条件sudoyuminstallyum-utils# 要设置 yum 仓库创建以下内容的文件/etc/yum.repos.d/nginx.repo[nginx-stable]namenginx stable repobaseurlhttps://nginx.org/packages/centos/$releasever/$basearch/gpgcheck1enabled1gpgkeyhttps://nginx.org/keys/nginx_signing.keymodule_hotfixestrue[nginx-mainline]namenginx mainline repobaseurlhttps://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck1enabled0gpgkeyhttps://nginx.org/keys/nginx_signing.keymodule_hotfixestrue#默认情况下稳定的nginx包仓库被使用。 如果你想使用主线nginx软件包 执行以下命令sudoyum-config-manager--enablenginx-mainline#安装nginx时请执行以下命令sudoyuminstallnginx使用 YUM 管理 RPM 包安装软件全新安装# 网络测试[rootlocalhost ~]# ping www.baidu.com# 安装单个或多个软件包[rootlocalhost ~]# yum -y install httpd vsftpd参数说明yum主命令-y自动确认无需手动按 yinstall安装操作httpd软件包 1vsftpd软件包 2重新安装修复缺失文件[rootlocalhost ~]# yum -y reinstall httpd升级软件# 升级单个软件[rootlocalhost ~]# yum -y update httpd# 升级所有软件[rootlocalhost ~]# yum -y update查询软件# 查询 YUM 源列表[rootlocalhost ~]# yum repolist# 查询某个软件包的状态[rootlocalhost ~]# yum list httpd已加载插件fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 已安装的软件包 httpd.x86_642.4.6-88.el7.centos dvd 可安装的软件包 httpd.x86_642.4.6-99.el7.centos.1 update判断是否已安装带符号表示已经安装的软件包。httpd.x86_64 2.4.6-88.el7.centos dvd卸载软件[rootlocalhost ~]# yum -y remove httpdremove会卸载指定的软件同时移除其依赖的其他软件如果有。实用技巧查询命令来自哪个软件包当你使用某个命令时发现命令不存在又不知道需要安装哪个包# 场景ifconfig 命令失效了不知道如何安装# 查询命令的提供者[rootlocalhost ~]# yum provides ifconfig已加载插件fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com net-tools-2.0-0.24.20131004git.el7.x86_64:Basic networking tools 源 anaconda 匹配来源 文件名 /usr/sbin/ifconfig# 安装对应的工具包[rootlocalhost ~]# yum -y install net-tools-2.0-0.24.20131004git.el7.x86_64yum provides是排障利器任何找不到命令的场景都可以用它来找到对应的软件包。RPM 包管理RPM 工具简介RPMRed Hat Package Manager是管理 RPM 包的基础工具。特性说明功能与 YUM 功能相同管理 RPM 包优点不需要配置直接使用缺点无法自动解决依赖关系下载无法自行下载软件包需要手动获取适用场景当你有现成的.rpm文件或者在无网络环境下安装软件时使用。安装软件-i# 先挂载光盘找到安装包[rootlocalhost ~]# mkdir /mnt/cdrom[rootlocalhost ~]# mount /dev/cdrom /mnt/cdrom# 进入 Packages 目录[rootlocalhost ~]# cd /mnt/cdrom/Packages# 检查软件包是否存在[rootlocalhost Packages]# ls wget*wget-1.14-18.el7.x86_64.rpm# 安装 RPM 包[rootlocalhost Packages]# rpm -ivh wget-1.14-18.el7.x86_64.rpm参数说明-i安装install-v显示详细信息verbose-h显示安装进度条hash安装输出示例[rootlocalhost Packages]# rpm -ivh wget-1.14-18.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:wget-1.14-18.el7 ################################# [100%]如有关于签名警告NOKEY警告不影响安装只是说明系统没有导入对应的 GPG 密钥。可以通过以下命令导入rpm--import/mnt/cdrom/RPM-GPG-KEY-CentOS-7查询软件-q[rootlocalhost Packages]# rpm -q wgetwget-1.14-18.el7.x86_64参数说明-q查询query判断能看到软件包名称说明已安装。如果未安装会显示未安装软件包 wget。更多查询方式# 查询所有已安装的 RPM 包[rootlocalhost ~]# rpm -qa# 查询某个包是否安装[rootlocalhost ~]# rpm -q httpd# 查询软件包安装了哪些文件[rootlocalhost ~]# rpm -ql httpd# 查询软件包的信息[rootlocalhost ~]# rpm -qi httpd# 查询某个文件属于哪个软件包[rootlocalhost ~]# rpm -qf /etc/httpd/conf/httpd.conf卸载软件-e[rootlocalhost Packages]# rpm -evh wget参数说明-e卸载erase-v显示详细信息-h显示进度条输出示例[rootlocalhost Packages]# rpm -evh wget 准备中... ################################# [100%] 正在清理/删除... 1:wget-1.14-18.el7_6.1 ################################# [100%]验证卸载结果[rootlocalhost Packages]# rpm -q wget未安装软件包wget注意如果软件被其他软件依赖RPM 会拒绝卸载。此时可以使用--nodeps强制卸载不推荐rpm-e--nodeps软件包名YUM vs RPM 对比对比维度YUMRPM依赖处理自动解决依赖关系不处理依赖需手动安装软件来源从仓库自动下载需要手动提供.rpm文件配置需求需要配置 YUM 源无需配置安装命令yum install -y 包名rpm -ivh 包名.rpm查询命令yum list 包名rpm -q 包名卸载命令yum remove 包名rpm -e 包名升级命令yum update 包名rpm -Uvh 包名.rpm日常使用建议优先使用YUM只在无网络或特殊场景下使用RPM。源码包管理获得源码包从官方网站可以获取最新的源码包软件官网Apachewww.apache.orgNginxwww.nginx.orgTenginetengine.taobao.org实战案例编译安装 TengineTengine是由淘宝发起的 Nginx 增强版本在 Nginx 基础上添加了大量高级功能和特性。下载 Tengine 源码包[rootlocalhost ~]# wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz安装编译环境和依赖[rootlocalhost ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel依赖说明依赖包作用gccC 语言编译器make编译构建工具zlib-devel压缩库支持pcre/pcre-devel正则表达式库Nginx 重写规则需要openssl-develSSL/TLS 加密库支持HTTPS 需要解压源码包# 创建运行用户[rootlocalhost ~]# useradd www# 解压[rootlocalhost ~]# tar xvf tengine-2.2.0.tar.gz[rootlocalhost ~]# cd tengine-2.2.0配置编译选项configure# 第一种方式看着整洁干净[rootlocalhost tengine-2.2.0]# ./configure \--userwww\--groupwww\--prefix/usr/local/nginx# 第二种方式不换行输入注意空格即可[rootlocalhost tengine-2.2.0]# ./configure --userwww --groupwww --prefix/usr/local/nginx配置项说明--userwww指定运行用户--groupwww指定运行用户组--prefix/usr/local/nginx指定安装路径注意参数之间注意空格和换行符\用于换行。./configure会检查系统环境并生成 Makefile 文件。编译make[rootlocalhost tengine-2.2.0]# makemake会根据 Makefile 文件调用 gcc 编译器将源代码编译成可执行文件。这个过程可能需要几分钟。安装make install[rootlocalhost tengine-2.2.0]# make installmake install将编译好的文件复制到--prefix指定的安装目录。启动并测试# 如果之前安装过 httpd需要先关闭避免端口冲突[rootlocalhost ~]# systemctl stop httpd# 启动 Tengine[rootlocalhost tengine-2.2.0]# /usr/local/nginx/sbin/nginx# 关闭防火墙方便测试[rootlocalhost tengine-2.2.0]# systemctl stop firewalld验证部署打开浏览器访问http://127.0.0.1如果能看到 Nginx/Tengine 的欢迎页面说明部署成功源码编译安装通用流程1. 下载源码包.tar.gz ↓ 2. 安装编译环境和依赖gcc, make 等 ↓ 3. 解压源码包tar xvf ↓ 4. 配置编译选项./configure --prefix... ↓ 5. 编译make ↓ 6. 安装make install ↓ 7. 配置并启动服务记忆口诀解压 → 配置 → 编译 → 安装configure → make → make install常见问题Q1yum install报错 “No package xxx available” 怎么办检查网络是否正常ping www.baidu.com检查 YUM 源配置是否正确yum repolist清除缓存后重试yum clean all yum makecache如果软件不在官方源中尝试添加 EPEL 源Q2RPM 安装时提示依赖缺失怎么办# 错误示例error: Failed dependencies: libc.so.6()(64bit)is needed by xxx# 解决办法1去找这个依赖的rpm包安装但是有时依赖需要依赖的依赖一直套娃部署非常麻烦# 解决办法2使用 YUM 安装自动处理依赖yum localinstall-yxxx.rpm技巧yum localinstall可以安装本地的.rpm文件同时自动解决依赖关系。Q3./configure报错缺少某个库怎么办# 错误示例./configure: error: the HTTP rewrite module requires the PCRE library.# 解决办法安装对应的 -devel 包yuminstall-ypcre-devel一般缺少某个库安装对应的-devel开发包即可。Q4如何查看 YUM 安装了哪些文件[rootlocalhost ~]# rpm -ql httpd/etc/httpd /etc/httpd/conf/httpd.conf /usr/sbin/httpd...Q5源码安装后如何卸载源码安装的文件通常都在--prefix指定的目录下直接删除即可[rootlocalhost ~]# rm -rf /usr/local/nginx建议编译前用checkinstall替代make install可以生成 RPM 包方便管理。最佳实践软件安装优先级YUM 安装 源码编译安装 RPM 手动安装能用 YUM 就用 YUM自动处理依赖需要自定义功能时选择源码编译无网络环境下使用 RPM定期更新系统# 安全更新推荐生产环境使用yum update--security# 全量更新测试环境yum update-y使用官方源获取最新版本系统基础组件使用阿里云/163 源数据库、Web 服务器等核心软件使用官方源编译安装前备份# 编译前记录当前状态rpm-qa|sort/root/before-nginx-install.txt源码安装的软件做好服务管理# 创建 systemd 服务文件vim/usr/lib/systemd/system/nginx.service# 这样就可以用 systemctl start/stop/restart nginx总结通过本章节的学习你应该掌握了理解 RPM 包和源码包的区别识别 RPM 包的命名规范名称、版本、发布版本、平台配置本地 YUM 源使用系统安装光盘配置网络 YUM 源阿里云、EPEL、软件官方源使用 YUM 安装、查询、升级、卸载软件使用yum provides查找命令所属的软件包使用 RPM 工具进行安装、查询、卸载操作理解 YUM 和 RPM 的区别和使用场景从官方网站获取源码包掌握源码编译安装的完整流程configure → make → make install独立完成 Tengine/Nginx 的编译安装学习建议软件管理是 Linux 运维的基础技能。建议在自己的虚拟机上多练习搭建本地 YUM 源、配置阿里云源、编译安装一个软件。实际操作一遍远胜于阅读十遍文档