linux软件包企业实战
一
1、基本概述
Linux 整个体系的关键不在于系统本身,而是在于可以基于 Linux 系统去安装和配置企业中相关的软件、数据及应用程序,所以对软件的维护是运维工程师的重中之重。
本节向读者介绍 Linux 系统软件的安装、卸载、配置、维护以及如何构建企业本地 YUM光盘源及 HTTP 本地源。
2、RPM 软件包管理
Linux 软件包管理大致可分为二进制包、源码包,使用的工具也各不相同。Linux 常见
软件包分为两种,分别是源代码包(Source Code)、二进制包(Binary Code),源代码包是
没有经过编译的包,需要经过 GCC、C++编译器环境编译才能运行,二进制包无需编译,
可以直接安装使用。
通常而言,可以通过后缀简单区别源码包和二进制包,例如.tar.gz、.zip、.rar 结尾的包
通常称之为源码包,以.rpm 结尾的软件包称之为二进制包。真正区分是否为源码还是二进
制还得基于代码里面的文件来判断,例如包含.h、.c、.cpp、.cc 等结尾的源码文件,称之为
源码包,而代码代码里面存在 bin 目可以执行文件,称之为二进制包。
CentOS 操作系统中有一款默认软件管理的工具,红帽包管理工具(Red Hat Package
Manager,RPM)。
使用 RPM 工具可以对软件包实现快速安装、管理及维护。RPM 管理工具适用的操作系统包括:CentOS,RedHat,Fedora,SUSE 等,RPM 工具常用于管理.rpm 后缀结尾的软件包。RPM 软件包命令规则详解如下
RPM 包命名格式为:
name-version.rpm
name-version-noarch.rpm
name-version-arch.src.rpm
如下软件包格式:
epel-release-6-8.noarch.rpm
perl-Pod-Plainer-1.03-1.el6.noarch.rpm
yasm-1.2.0-4.el7.x86_64.rpm
RPM 包格式解析如下:
name 软件名称,例如 yasm、perl-pod-Plainer;
version 版本号,1.2.0 通用格式:“主版本号.次版本号.修正号”;
4 表示是发布版本号,该 RPM 包是第几次编译生成的;
arch 适用的硬件平台,RPM 支持的平台有:i386、i586、i686、x86_64、
sparc、alpha 等。
.rpm 后缀包表示编译好的二进制包,可用 rpm 命令直接安装;
.src.rpm 源代码包,源码编译生成.rpm 格式的 RPM 包方可使用;
el* 软件包发行版本,el6 表示该软件包适用于 RHEL 6.x/CentOS 6.x;
devel: 开发包;
noarch: 软件包可以在任何平台上安装。
RPM 工具命令详解如下:
RPM 选项 PACKAGE_NAME
-a, --all 查询所有已安装软件包;
-q,–query 表示询问用户,输出信息;
-l, --list 打印软件包的列表;
-f, --file FILE 查询包含 FILE 的软件包;
-i, --info 显示软件包信息,包括名称,版本,描述;
-v, --verbose 打印输出详细信息;
-U, --upgrade 升级 RPM 软件包;
-h,–hash 软件安装,可以打印安装进度条;
–last 列出软件包时,以安装时间排序,最新的在上面;
-e, --erase 卸载 rpm 软件包
–force 表示强制,强制安装或者卸载;
–nodeps RPM 包不依赖
-l, --list 列出软件包中的文件;
–provides 列出软件包提供的特性;
-R, --requires 列出软件包依赖的其他软件包;
–scripts 列出软件包自定义的小程序
RPM 企业案例演示:
rpm -q httpd 检查 httpd 包是否安装;
rpm -ql httpd 查看软件安装的路径;
rpm -qi httpd 查看软件安装的版本信息;
rpm -e httpd 卸载 httpd 软件;
rpm -e --nodeps httpd 强制卸载 httpd;
rpm -qa|grep httpd 检查 httpd 相关的软件包是否安装。
rpm -ivh httpd-2.4.10-el7.x86_64.rpm 安装 httpd 软件包;
rpm -Uvh httpd-2.4.10-el7.x86_64.rpm 升级 httpd 软件;
rpm -ivh --nodeps httpd-2.4.10-el7.x86_64.rpm 不依赖其他软件包;
root@localhost /]# wget https://mirrors.aliyun.com/centos/6.10/os/x86_64/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm
–2019-03-21 18:21:14-- https://mirrors.aliyun.com/centos/6.10/os/x86_64/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm
Resolving mirrors.aliyun.com… 61.163.8.209, 61.163.8.211, 61.163.8.208, …
Connecting to mirrors.aliyun.com|61.163.8.209|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 72436 (71K) [application/x-redhat-package-manager]
Saving to: “lrzsz-0.12.20-27.1.el6.x86_64.rpm”
100%[==========================================>] 72,436 --.-K/s in 0.02s
2019-03-21 18:21:14 (3.22 MB/s) - “lrzsz-0.12.20-27.1.el6.x86_64.rpm” saved [72436/72436]
[root@localhost /]# ls
bin dev lib lrzsz-0.12.20-27.1.el6.x86_64.rpm opt sbin sys var
boot etc lib64 media proc selinux tmp
data home lost+found mnt root srv usr
[root@localhost /]# rpm -q lrzsz
package lrzsz is not installed
[root@localhost /]#
[root@localhost /]# rpm -ivh lrzsz-0.12.20-27.1.el6.x86_64.rpm
warning: lrzsz-0.12.20-27.1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing… ########################################### [100%]
1:lrzsz ########################################### [100%]
[root@localhost /]# rpm -q lrzsz
lrzsz-0.12.20-27.1.el6.x86_64
[root@localhost /]# rpm -ql lrzsz
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz [root@localhost /]# ost /]# rz
[root@localhost /]# rz
[root@localhost /]# ls
bin etc lost+found opt selinux usr
boot home lrzsz-0.12.20-27.1.el6.x86_64.rpm proc srv var
data lib media root sys 视图.sql
dev lib64 mnt sbin tmp
[root@localhost /]# mv 视图.sql /tmp
[root@localhost /]# ls
bin dev lib lrzsz-0.12.20-27.1.el6.x86_64.rpm opt sbin sys var
boot etc lib64 media proc selinux tmp
data home lost+found mnt root srv usr
[root@localhost /]# rpm -e lrzsz
[root@localhost /]# rz
bash: /usr/bin/rz: No such file or directory
3、YUM:自动化RPM包管理工具
前端软件包管理器(Yellow Updater Modified,YUM)适用于 CentOS、Fedora、RedHat
及 SUSE 中的 Shell 命令行,主要用于管理 RPM 包,与 RPM 工具使用范围类似,YUM 工
具能够从指定的服务器自动下载 RPM 包并且安装,还可以自动处理依赖性关系。
使用 RPM 工具管理和安装软件时,会发现 rpm 包有依赖,需要逐个手动下载安装,而YUM 工具的最大便利就是可以自动安装所有依赖的软件包,从而提升效率,节省时间。
3.1、YUM 工作原理:
学习 YUM,一定要理解 YUM 工作原理,YUM 正常运行,需要依赖两个部分,一是
YUM 源端,二是 YUM 客户端,也即用户使用端。
YUM 客户端安装的所有 RPM 包都是来自 YUM 服务端,YUM 源端通过 HTTP 或者 FTP服务器发布。而 YUM 客户端能够从 YUM 源端下载依赖的 RPM 包是由于在 YUM 源端生成了 RPM 包的基准信息,包括 RPM 包版本号、配置文件、二进制信息、依赖关系等。
YUM 客户端需要安装软件或者搜索软件,会查找/etc/yum.repos.d 下以.repo 结尾文件,
CentOS Linux 默认的.repo 文件名为 CentOS-Base.repo,该文件中配置了 YUM 源端的镜像地址,所以每次安装、升级 RPM 包,YUM 客户端均会查找.repo 文件。YUM 客户端如果配置了 CentOS 官方 repo 源,客户端操作系统必须能联外网,满足网络条件,才能下载软件并安装,如果没有网络,也可以构建光盘源或者内部 YUM 源。在只要 YUM 客户端时,YUM 客户端安装软件,默认会把 YUM 源地址、Header 信息、软件包、数据库信息、缓存文件存储在/var/cache/yum 中,每次使用 YUM 工具,YUM 优先通过 Cache查找相关软件包,Cache 中不存在,然后在访问外网 YUM 源
3.2、YUM 企业案例演练
由于 YUM 工具的使用简便、快捷、高效,在企业中得到广泛的使用,得到众多 IT 运
维、程序人员的青睐,要能熟练使用 YUM 工具,需要先掌握 YUM 命令行参数的使用,如
下为 YUM 命令工具的参数详解及实战步骤:
YUM 命令工具指南,YUM 格式为:
YUM [command] [package] -y|-q 其中的[options]是可选。-y 安装或者卸载出现 YES 时,自
动确认 yes;-q 不显示安装的过程。
yum install httpd 安装 httpd 软件包;
yum search YUM 搜索软件包;
yum list httpd 显示指定程序包安装情况 httpd;
yum list 显示所有已安装及可安装的软件包;
yum remove httpd 删除程序包 httpd;
yum erase httpd 删除程序包 httpd;
yum update tree内核升级或者软件更新;
yum update httpd 更新 httpd 软件;
yum check-update 检查可更新的程序;
yum info httpd 显示安装包信息 httpd;
yum provides 列出软件包提供哪些文件;
yum provides “*/rz” 列出 rz 命令由哪个软件包提供;
yum grouplist 查询可以用 groupinstall 安装的组名称;
yum groupinstall “Chinese Support” 安装中文支持;
yum groupremove “Chinese Support” 删除程序组 Chinese Support;
yum deplist httpd 查看程序 httpd 依赖情况;
yum clean packages 清除缓存目录下的软件包;
yum clean headers 清除缓存目录下的 headers;
yum clean all 清除缓存目录下的软件包及旧的 headers。
(1)/root 目录创建 jingfeng 文件夹,同时在 jingfeng 文件夹中,新建 jf1.txt,jf2.txt 文件,如图
(2)使用 tar 命令第一次完整备份 jingfeng 文件夹中的内容,-g 指定快照 snapshot 文件,第一次没有该文件则会自动创建,如图
cd /root/jingfeng/
tar -g /data/backup/snapshot -czvf /data/backup/2017jingfeng.tar.gz
(3)使用 tar 命令第一次完整备 份 jingfeng 文件夹中之后,会 生成快照文件:/data/backup/snapshot,后期增量备份会以 snapshot 文件为参考,在 jingfeng 文件夹中再创建 jf3.txt jf4.txt 文件,然后通过 tar 命令增量备份 jingfeng 目录所有内容,如图
cd /root/jingfeng/
touch jf3.txt jf4.txt
tar -g /data/backup/snapshot -czvf /data/backup/2017jingfeng_add1.tar.gz *
如上图所示,增量备份时,需-g 指定第一次完整备份的快照 snapshot 文件,同时增
量打包的文件名不能跟第一次备份后的文件名重复,通过 tar –tf 可以查看打包后的文件内容。
二.ZIP 软件包管理
ZIP 也是计算机文件的压缩的算法,原名 Deflate(真空),发明者为菲利普·卡兹(Phil
Katz)),他于 1989 年 1 月公布了该格式的资料。ZIP 通常使用后缀名“.zip”。
主流的压缩格式包括 tar、rar、zip、war、gzip、bz2、iso 等。从性能上比较,TAR、WAR、
RAR 格式较 ZIP 格式压缩率较高,但压缩时间远远高于 ZIP,Zip 命令行工具可以实现对 zip
属性的包进行管理,也可以将文件及文件及打包成 zip 格式。如下为 ZIP 工具打包常见参数详解:
-f freshen:只更改文件;
-u update:只更改或新文件;
-d 从压缩文件删除文件;
-m 中的条目移动到 zipfile(删除 OS 文件);
-r 递归到目录;
-j junk(不记录)目录名;
-l 将 LF 转换为 CR LF(-11 CR LF 至 LF);
-1 压缩更快 1-9 压缩更好;
-q 安静操作,不输出执行的过程;
-v verbose 操作/打印版本信息;
-c 添加一行注释;
-z 添加 zipfile 注释;
-o 读取名称使 zip 文件与最新条目一样旧;
-x 不包括以下名称;
-F 修复 zipfile(-FF 尝试更难);
-D 不要添加目录条目;
-T 测试 zip 文件完整性;
-X eXclude eXtra 文件属性;
-e 加密 - 不要压缩这些后缀;
-h2 显示更多的帮助。
ZIP 企业案例演示
(1)通过 zip 工具打包 jingfeng 文件夹中所有内容,如图
zip -rv jingfeng.zip /root/jingfeng/
(2)通过 zip 工具打包 jingfeng 文件夹中所有内容,排除部分文件,如图
zip -rv jingfeng.zip * -x jf1.txt
zip -rv jingfeng.zip * -x jf2.txt -x jf3.txt
(3)通过 zip 工具删除 jingfeng.zip 中 jf3.txt 文件,如图 所示
zip jingfeng.zip -d jf3.txt
(4)通过 unzip 工具解压 jingfeng.zip 文件夹中所有内容,如图 所示:
unzip jingfeng.zip
unzip jingfeng.zip -d /data/backup/ 可以-d 指定解压后的目录
6、源码包安装
通常使用 RPM 工具管理.rpm 结尾的二进制包,而标准的.zip、tar 结尾的源代码包则不能使用 RPM 工具去安装、卸载及升级,源码包安装有三个步骤,如下:
./configure 预编译,主要用于检测系统基准环境库是否满足,生成 MakeFile 文件;
make 编译,基于第一步生成的 makefile 文件,进行源代码的编译;
make install 安装,编译完毕之后,将相关的可运行文件安装至系统中;
使用 make 编译时,Linux 操作系统必须有 GCC 编译器,用于编译源码。
源码包安装通常需要./configure、make、make install 三个步骤,某些特殊源码可以只有
三步中的其中一个步骤,或者两个步骤。
以 CentOS Linux 系统为基准,在其上安装 Nginx 源码包,企业中源码安装的详细步
骤如下:
(1) Nginx.org 官网下载 Nginx-1.13.0.tar.gz 包
wget http://nginx.org/download/nginx-1.13.0.tar.gz
(2) Nginx 源码包解压 tar -xvf nginx-1.13.0.tar.gz
(3) 源码 Configure 预编译,需进入解压后的目录执行./configure 指令,分号“;”表示连接多个命令。
cd nginx-1.13.0;./configure
(4) make 编译 make
(5) make install 安装 make install
通过以上五个步骤,源码包软件安装成功,源码包在编译及安装时,可能会遇到各种错
误,需要把错误解决之后,然后再进行下一步安装即可,后面章节会重点针对企业使用的软
件进行案例演练。
注:需要加入几个依赖,才能正常操作以上步骤
安装依赖
yum install gcc
yum install pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
//一键安装上面四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
7、通过网络下载源码包的指令
1、使用wget下载单个文件
以下的例子是从网络下载一个文件并保存在当前目录
wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
2、使用wget -O下载并以不同的文件名保存
wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
错误:下面的例子会下载一个文件并以名称download.php?id=1080保存
wget http://www.centos.bz/download?id=1
即使下载的文件是zip格式,它仍然以download.php?id=1080命令。
正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:
wget -O wordpress.zip http://www.centos.bz/download.php?id=1080
3、使用wget –limit -rate限速下载
当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
wget –limit-rate=300k http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
4、使用wget -c断点续传
使用wget -c重新启动下载中断的文件:
wget -c http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。
5、使用wget -b后台下载
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。
wget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
Continuing in background, pid 1840.
Output will be written to `wget-log’.
你可以使用以下命令来察看下载进度
tail -f wget-log