前言小文章
《量的积累与质的飞跃》
成功不会如约而至 恰如烧水 99℃的热水和100℃的开水不一样。 我很喜欢说一句话 水没开 不是天气太冷 而是火候未到。没有成功 一定是量的累积不够。 成功就由一件又一件小事 一个又一个细节积累而成的。如果能把握住这些细节 人们就能获得成功 如果不注重细节的积累 而只想一举成功 那实在是白日做梦。 成功不是偶然 是要付出努力的 没有量的变化哪有质的飞跃? 所以 不要忽略每天一点点小小的进步 一天一天的积累就是从量变到质变的分水岭。只要踏踏实实过好每一天 保持平常心 克服浮躁心 每天进步一点点 每次都努力一点 你一定会成功的。 要有耐心 要有信心 要能守得住。形式坚持久了 就会成为内容的一部分。比如生活,你生活的方式就定位了你是什么样的人 成功亦或不成功。 失败是特例 真的能够失败到足够多的次数 多数人就会认为你成功了 而且老天总会给你一次“成功”的机会 让你翻盘。 增加你的量 无论什么 都会有质的飞跃 那时的感觉将美极了! 一直往北走 能到南极 这世界就是如此奇妙。
软件包介绍
与windows类似 在linux系统上也可以安装各种应用程序 或称软件包 linux下软件包分为三类
分类 | 安装 | 特点 |
---|---|---|
rpm包 | 预先编译打包 安装简单 | 通常软件的稳定版会被官方做成rpm 所以软件版本偏低 |
源码包 | 手动编译打包 安装繁琐 | 软件版本丰富 可选择性强 |
二进制包 | 解压即可使用 安装简单 | 不能修改源代码 |
二 rpm包管理
2.1什么是rpm包
在主流的linux系统上 多数软件的安装、升级、移除以及维护工作都是使用rpm软件包管理程序来完成的 那什么是rpm软件包呢? RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写 这一文件格式名称虽然打上了RedHat的标志 但是其原始设计理念是开放式的 通常软件的稳定版会被官方做成rpm 所以软件版本偏低 rmp包格式 RPM包格式举例 例1 mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm 软件包名:mysql-connector-odbc 版本号Version:5.2.5 发布版本Release:8.el7 平台:el7.x86_64 后缀:.rpm 例2 abrt-python-doc-2.1.11-57.el7.centos.noarch.rpm abrt-python-doc # 软件包的名称 2.1.11 # 软件的版本 57 # 软件编译之后的发布的次数 el7 # 适合的操作系统的版本 noarch # 适合不同版本的CPU .rpm # 后缀名 RPM闭包使用的平台 redhat/centos/redora/suse #查看自己当前的平台 [root@localhost ~]# uname -m x86_64 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 管理rpm包有两种命名 #1.rpm命令 需要自己找到rpm包,并且手动解决包的依赖性关系 ps:实际情况下,很难分辨缺少什么依赖包 #2.yum命令: 相关rpm包事先都被存放于一个仓库里,仓库包含了所有的依赖包,所以yum按照可以帮我们解决依赖性问题 RPM包获取 #1.本地的ISO镜像光盘(软件包可能存在版本偏低情况) : 挂载镜像有以下三种方式 方式1: [root@localhost ~]# mount /dev/cdrom /opt/ 方式2: [root@localhost ~]# mount /dev/sr0 /opt/ 方式3 [root@localhost ~]# mount -o loop /xxx.iso /opt 查看光盘里的rpm包 [root@localhost ~]# ls /opt/Packages/ #2.自己去网上下载rpm包进行安装 #3.联网从yum仓库里获取rpm包 #yum的时候
三 rpm命令
选项 1、安装:rpm -ivh <RPM包名全称> 2、卸载:rpm -e <RPM包名> 3、升级:rpm -Uvh <RPM包名> 4、查询: rpm -qa #查询系统中安装的所有RPM软件包 rpm -qa | grep php #检索系统中已经安装有关php的软件包 rpm -q <RPM包名> #查询指定软件包是否已安装 [root@fly ~]# rpm -q zip zip-3.0-11.el7.x86_64 rpm -qi <RPM包名> #查询系统中已安装包的描述信息 rpm -ql <RPM包名> #查询系统中已安装包里所包含的文件 rpm -qc <RPM包名> #查询指定软件包的所有配置文件 [root@fly ~]# rpm -qc mariadb /etc/my.cnf.d/client.cnf rpm -qd <RPM包名> #查询某个包安装的帮助文档 [root@localhost ~]# rpm -qd zlib rpm -qf 文件路径 #查询系统中指定文件所属的软件包 [root@egon ~]# rpm -qf /usr/sbin/ifconfig net-tools-2.0-0.25.20131004git.el7.x86_64 -p #在上述选项的基础上加选项-p,就可以查看尚未安装的rpm包信息 [root@localhost ~]# rpm -e dos2unix #先卸载一下,证明本地rpm数据库中没有该包信息 [root@localhost ~]# rpm -qip /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm [root@localhost ~]# rpm -qlp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm [root@localhost ~]# rpm -qcp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm [root@localhost ~]# rpm -qdp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm 额外选项 --nomd5 #不检验软件包的签名 --nodeps #忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后再安装 [root@localhost ~]# rpm -e dos2unix --nodeps #忽略依赖关系 --force #强制安装软件包,只有安装和升级可以强制执行 安装 1、rpm包在本地 [root@fly ~]# mount /dev/sr0 /opt [root@fly ~]# rpm -ivh /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm 2、rpm来自于网络,如果安装过程中报错:curl: (60) Peer's Certificate has expired,请先将系统时间修改正确,然后再安装即可 [root@fly ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm 安装与依赖性 [root@fly ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 错误:依赖检测失败: /etc/mime.types 被 httpd-2.4.6-88.el7.centos.x86_64 需要 httpd-tools = 2.4.6-88.el7.centos 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libapr-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 #解决思路:安装提示的库,安装 [root@fly ~]# rpm -ivh /opt/Packages/apr-1.4.8-3.el7_4.1.x86_64.rpm [root@fly ~]# rpm -ivh /opt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm [root@fly ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
[root@fly ~]# yum search mime.types # 查看到mime.types对应的依赖包为mailcap-。。。 [root@fly ~]# rpm -ivh /opt/Packages/mailcap-2.1.41-2.el7.noarch.rpm 然后重新安装 [root@fly ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 准备中...
正在升级/安装... 1:httpd-2.4.6-88.el7.centos
升级rpm包 #1、下载一个低版本、一个高版本 wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm #2、先安装低版本 [root@fly ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm #3、再安装高版本,会报错 [root@fly ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm #4、如果采用--force选项,那就是强制安装,会同时存在两个版本,该方案不可取 [root@fly ~]# rpm -qa |grep zabbix zabbix-agent-3.0.9-1.el7.x86_64 [root@fly ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm --force 。。。安装成功。。。 [root@fly ~]# rpm -qa |grep zabbix # 同时两个版本共存 zabbix-agent-3.0.9-1.el7.x86_64 zabbix-agent-4.2.0-1.el7.x86_64 #5、重来,采用升级方式安装 [root@fly ~]# rpm -e zabbix-agent-3.0.9-1.el7.x86_64 [root@fly ~]# rpm -e zabbix-agent-4.2.0-1.el7.x86_64 [root@fly ~]# rpm -qa |grep zabbix [root@fly ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm [root@fly ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rp 。。。清理老版本,安装新版本。。。 [root@fly ~]# rpm -qa |grep zabbix-agent #只留下一个新版本 zabbix-agent-4.2.0-1.el7.x86_64
三yum管理RPM包
3.1介绍
yum自动解决依赖关系 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
查看yum命令与配置文件
[root@localhost ~]# rpm -q yum yum-3.4.3-161.el7.centos.noarch [root@localhost ~]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf /etc/yum/version-groups.conf
yum命令常用选项
#仓库 yum repolist #查询可用仓库 yum repolist all #查看包括已启用或禁用的所有仓库状态 #关闭与启用仓库:本质:都是在修改repo文件中的enable的值 0 不启用 1 启用 yum-config-manager --disable epel #关闭仓库epel yum-config-manager --enable epel #启用仓库epel #查看 yum list #列出可用仓库中所有的软件包 yum list | less yum grouplist #列出可用仓库中的软件组 yum provides /usr/sbin/ifconfig #查询命令所属的软件包,可以不加路径,只写命令名字 #与rpm -qf的区别在于yum provides后可以只跟命名名 #安装 yum install httpd httpd-tools #加上-y选项可以变成非交互 yum groupinstall "开发工具" -y #安装软件组,一个软件组中包含了多个软件包 yum groups install "开发工具" -y #同上 #卸载 yum remove httpd httpd-tools http* #卸载软件包 yum groupremove "开发工具" -y. #卸载软件组 yum groups remove "开发工具" -y #同上 #重装 yum reinstall httpd #不小心删除了配置文件的时,可以reinstall一下 #更新 yum check-update #检查可以更新的软件包 yum update -y #更新所有软件包,包括内核,通常只在刚装完系统时执行 yum update httpd -y #更新某个软件包 #缓存 yum makecache #制作元数据缓存 yum clean all #清理元数据缓存 vim /etc/yum.conf #默认软件包下载安装后会自动删除 #设置keepcache=1 即开启了软件包缓存 #缓存目录为配置文件中指定的cachedi #历史记录 yum history #查看执行过的yum命令历史记录 yum history info ID号 #查看具体某一条yum命令的详细信息 yum history undo ID号 #撤销执行过的历史命令 关于安装需要注意: 无论yum安装的软件来自何方,yum时刻以自己仓库中的repodata存储的依赖关系为准,如果有多个仓库,就依次检索 #1、yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系 yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba-4.8.3-4.el7.x86_64.rpm #2、Yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系 yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
要使用yum前,需要准备一个yum源(我们也称为yum仓库), 这个可以是一个互联网上的仓库,也可以是本地自己搭建的仓库.仓库里面有什么呢?里面全部都是.rpm的软件包.一台linux,可以添加N多个yum源, 能搜索的软件包数量就是N个yum源之和. 系统常见yum源
1.自定义的本地源 2.网络上的源头,如:base基础源、epel扩展源、与服务相关的源(官网)
3.2 镜像文件作为yum源(本地源)
1、先挂载
#方式1: [root@localhost ~]# mount /dev/cdrom /opt/ #方式2: [root@localhost ~]# mount /dev/sr0 /opt/ #方式3 [root@localhost ~]# mount -o loop /xxx.iso /opt 查看光盘里的rpm包 [root@localhost ~]# ls /opt/Packages/
2、编辑repo文件
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# vim local.repo # 文件名自定义,必须以.repo结尾 [local] # 仓库的实际名字,任意 name=local # 仓库的描述,任意 baseurl=file:///opt # 仓库位置,可以是 http:// https:// ftp:// file:// enabled=1 # 启用仓库,默认就是启用的 gpgcheck=0 # 检查安装的rpm是否是合法的,0表示不检验
3、检查可用仓库
[root@localhost ~]# yum repolist # 查询可用仓库 [root@localhost ~]# yum repolist all # 查看所有仓库,包括禁用的
4、安装、查询、卸载
[root@localhost ~]# yum list # 列出可用的软包 [root@localhost ~]# yum install vsftpd -y [root@localhost ~]# yum list vsftpd httpd [root@localhost ~]# yum remove vsftpd -y [root@localhost ~]# yum install glib* httpd -y [root@localhost ~]# yum provides vsftp # 查询某个软件(可以是未安装的)是由哪个rpm包提供 #yum reinstall [root@fly ~]# rm -rf /etc/httpd/conf/httpd.conf [root@fly ~]# yum reinstall httpd -y &> /dev/null [root@fly ~]# ls /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf #yum update [root@localhost ~]# yum -y update samba [root@localhost ~]# yum -y update
5、软件包组安装、查询、卸载
[root@localhost ~]# yum grouplist [root@localhost ~]# yum groupinstall "GNOME 桌面" -y [root@fly ~]# yum groupinstall "开发工具" -y [root@fly ~]# yum groupremove "开发工具" -y
3.2 使用开源yum源(网络源)
然后下载开源的yum源头: 例如阿里云的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
例如163的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
例如红帽的epel扩展源
#可以直接下载 [root@fly ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #也可以安装一个软件包来生成 [root@fly ~]# yum install epel-release -y # EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。 RHEL以及他的衍生发行版如CentOS、Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。
例如nginx官网的软件包源
#进入nginx官网->download->Pre-Built Packages->Stable and mainline->RHEL/CentOS->编辑到本地 [root@fly yum.repos.d]# cat 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 [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [root@fly yum.repos.d]#
将Centos系统默认的源备份
[root@fly ~]# cd /etc/yum.repos.d/ [root@fly yum.repos.d]# mkdir bak [root@fly yum.repos.d]# mv CentOS-* bak/ [root@fly yum.repos.d]# ls bak CentOS-Base.repo epel.repo local.repo nginx.repo [root@fly yum.repos.d]#
3.3 自己制作本地yum源
1、下载好一堆rpm包,相关依赖包也都存在,将所有的rpm包都放置于一个文件夹下,比如/aaa
2、安装工具createrep
[root@localhost ~]# yum install createrepo -y
制作repodata
[root@localhost ~]# createrepo /aaa/
4、配置本地repo文件,指向/aaa
[root@localhost ~]# vim /etc/yum.repos.d/soft.repo [soft] name=soft baseurl=file:///aaa enabled=1 gpgcheck=0
yum扩展知识
1、yum元数据缓存:指的将yum仓库的元数据缓存下来,下次安装时省去了检索过程,安装速度可以加快
root@localhost ~]# yum clean all # 清理缓存 [root@localhost ~]# yum makecache # 制作缓存
2、yum软件包缓存:开启软件包缓存后,从网络源下载安装完的软件安装包不再删除,都缓存到了本地
[root@localhost ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 指定软件安装包的缓存目录 keepcache=1 # 设置为1 debuglevel=2 #缓存目录为:ls /var/cache/yum/x86_64/7/
基于软件包缓存,可以做成自己的yum源,以此来控制各个服务的版本,通常的做法为
#1、在测试环境中,在每个节点上都开启软件包缓存 #2、在测试环境中,安装相同版本的操作系统,安装完毕后统一执行yum update -y #3、在测试环境中,部署完完你的架构,测试完毕 #4、把测试环境中每台机器上缓存好的软件包安装包采集到一个文件下 [root@fly ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/ #5、然后用createrepo命令制作好依赖关系,即repodata数据库 #6、然后在线上环境部署时,就用该本地源就好,不要轻易升级,不要滥用yum源,这样可以严格控制好各个服务的版本
3.4 自己制作本地yum源共享给别人
==================在服务端上执行如下操作================== #1、环境准备 [root@fly ~]# systemctl stop firewalld [root@fly ~]# systemctl disable firewalld [root@fly ~]# setenforce 0 [root@fly ~]# sed -i 's#^SELINUX=.#SELINUX=disabled#g' /etc/selinux/config
#2、安装ftp服务 [root@fly ~]# yum install vsftpd -y
[root@fly ~]# systemctl start vsftpd [root@fly ~]# systemctl status vsftpd # 查看状态,确保开启 [root@fly ~]# systemctl enable vsftpd #3、采集软件包放到一个目录下 可以基于3.3的方式,也可以偷个懒直接用镜像里现成的,毕竟是实验嘛,但无论何种方式,都一定要解决好依赖关系才能用来做yum源,本例就用现成的吧 [root@fly ~]# mkdir /var/ftp/centos7 [root@fly ~]# mount /dev/sr0 /var/ftp/centos7 #或者拷贝 [root@fly ~]# mount /dev/sr0 /opt [root@fly ~]# mkdir /var/ftp/centos7 [root@fly ~]# find /opt/Packages/ -type f -name ".rpm" |xargs -I {} cp -rp {} /var/ftp/centos7/ ==================在客户端上执行如下操作================== #1、环境准备 [root@fly ~]# systemctl stop firewalld [root@fly ~]# systemctl disable firewalld [root@fly ~]# setenforce 0 [root@fly ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
[root@fly ~]# ping -c 2 192.168.12.42 # ping一下服务端的ip地址,保证网络畅通 #2、在客户端配置网络yum源 [root@fly yum.repos.d]# cd /etc/yum.repos.d/ [root@fly yum.repos.d]# mkdir bak [root@fly yum.repos.d]# mv *.repo bak/ [root@fly yum.repos.d]# cat >> ftp.repo << EOF [ftp_repo] name = This is Ftp Share Repo baseurl = ftp://192.168.12.42/centos7
enabled = 1 gpgcheck = 0 EOF #注意:客户端baseurl指向的文件夹无论是什么,在该文件夹的子目录一级必须有一个repodata数据库
3.5 yum的历史记录
yum history #查看执行过的yum命令历史记录 yum history info ID号 #查看具体某一条yum命令的详细信息 yum history undo ID号 #撤销执行过的历史命令
3.6 拓展了解:签名检查机制
==RPM工具使用签名检查机制:== [root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 导入centos公钥 [root@localhost ~]# rpm --import /etc/pki/rpm-gpg/* 额外选项: --nomd5 # 不检验软件包的签名 ==YUM使用签名检查机制:== 方法一: [root@localhost yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [root@localhost yum.repos.d]# vim local.repo [local] name=local baseurl=file:///opt enabled=1 gpgcheck=1 # 开启检查软件包的签名 方法二: [root@localhost yum.repos.d]# vim local.repo [local] name=local baseurl=file:///opt enabled=1 gpgcheck=1 # 开启检查软件包的签名 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 指定公钥文件 额外选项: --nogpgcheck //不检查软件包的签名
四 源码包
1、官网下载,如nginx
#浏览器下载 #或者执行命令 wget http://nginx.org/download/nginx-1.18.0.tar.gz
2、预先安装编译安装依赖的库
yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 或者 LANG=C yum -y groupinstall "Development tools"
3、解压、编译、编译安装
[root@localhost ~]# tar xvf nginx-1.18.0.tar.gz -C /tmp/ [root@localhost ~]# cd /tmp/nginx-1.18.0/ [root@localhost nginx-1.18.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module #1、--prefix 指定安装的目录,/usr/local/nginx 是安装目录 #2、带ssl stub_status模块 添加strem模块 –with-stream,这样就能传输tcp协议了 #3、http_stub_status_module 状态监控 #4、http_ssl_module 配置https #5、stream 配置tcp得转发 #6、http_gzip_static_module 压缩 #7、http_sub_module 替换请求 [root@localhost nginx-1.18.0]# make && make install #将程序设定一个软连接,便于后续的升级 [root@fly soft]# ln -s /soft/nginx-1.16.0/ /soft/nginx [root@fly ~]# /soft/nginx/sbin/nginx 注意:现在百分之90,能用上的软件,都提供了rpm包. --->使用户可以使用yum直接安装使用.
总结编译安装=》三部曲
#./configure --prefix=/usr/local/nginx-1.18.0 a. 指定安装路径,例如--prefix=DIR b. 启用或禁用某项功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module c. 和其它软件关联,例如--with-pcre=/root/pcre-8.31 d. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求 最终生成:Makefile #make //按Makefile文件编译,可以使用-j 2指定两颗CPU编译 #make install //安装 ps:如果中途发生错误,多半是因为缺少必要的库支持,可以先清理 #make clean //清理掉以前编译后产生的 *.o目标文件 然后安装好依赖库,重新执行三部曲 ps:有一些源码包是已经编译好的结果,下载后解压即可使用