目录:
- 软件运行环境介绍
- 包管理器
- rpm 包管理器的使用
- yum rpm包管理器前端工具的使用
- 编译安装
一、软件运行环境
ABI(Application Binary Interface) 导致不同系统的文件不兼容,linux遵循ELF标准,Windows遵循PE标准
API(Application Programming Interface)是编程使用的统一接口,linux遵循POSIX标准
程序从源代码转变为二进制可执行文件经历的一般过程:
程序源代码--->预处理--->编译--->汇编--->链接-
链接将各个模块之间相互引用部分处理好,使各个模块之间能够正确衔接,分为静态链接与动态链接:
-
静态链接 libxxx.a
- 把程序对应的依赖库复制一份到包
- 嵌入程序包
- 升级难,需重新编译
- 占用较多空间,迁移容易
-
动态链接 libxxx.so
- 只把依赖加做一个动态链接
- 连接指向
- 占用较少空间,升级方便
-
系统开发语言:C,C++
应用开发语言:Java,Python,Go
二、包管理器
(一)包的分类、命名、管理
二进制应用程序组成:
二进制文件、库文件、配置文件、帮助文件-
程序包管理器:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
- dpkg包管理器:Debian,文件格式
.deb
- rpm包管理器:Redhat,文件格式
.rpm
- dpkg包管理器:Debian,文件格式
源代码包命令格式:
name-VERSION.tar.gz|bz2|xz
rpm包命名格式:
name-VERSION-release.arch.rpm
-
将软件包拆分成几个包,便于管理、按需安装
- Application-VERSION-ARCH.rpm 主包
- Application-devel-VERSION-ARCH.rpm 开发子包
- Application-utils-VERSION-ARHC.rpm 工具子包
- Application-libs-VERSION-ARHC.rpm 库子包
(二)包依赖
-
包之间可能存在依赖关系,解决包依赖的管理工具
- yum: rpm包管理前端工具
- apt-get: deb包管理前端工具
ldd 查看二进制程序依赖的库文件,如
ldd /bin/cat
ldconfig 加载库文件
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
(三)rpm包基本知识
-
rpm包文件组成:
- rpm包内的应用程序
- rpm包元数据:名称、版本、依赖性、描述等
- 安装、卸载时运行的脚本
-
数据库
/var/lib/rpm
包含:- 程序包名称及版本
- 依赖关系
- 功能说明
- 包安装后生成的各文件路径及校验码信息
-
获取程序包的途径
- 系统光盘、官方服务器
国内镜像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com - 相关官方网站
- 第三方组织:Fedora-EPEL (Extra Packages for Enterprise Linux),注意第三方包要检查来源合法性、程序包完整性
- 系统光盘、官方服务器
三、rpm 包管理器
(一)rpm 包安装
语法:
rpm {-i|--install} [install-options] PACKAGE_FILE…
选项:
-i //安装
-v //显示安装过程
-vv //显示详细过程
-h //以#符号显示执行进度
--test //测试安装,但不真正执行安装
--nodeps //忽略依赖关系
--replacepkgs| replacefiles //覆盖安装
--nosignature //不检查来源合法性
--nodigest //不检查包完整性
--noscripts //不执行程序包脚本
- 实验:安装tree软件包,显示安装过程
(二)rpm 包升级
- 语法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
//U和F的区别:当存在旧程序,都执行升级;当不存在旧程序,U选项执行安装,F选项跳过
- 选项
--oldpackage //降级
--force //强制安装
注意:
1、内核可以多版本并存,故不推荐对内核进行升级操作,直接安装新版本即可
2、若原程序的配置文件有修改,升级后将不覆盖旧配置文件,新配置文件以增加后缀.rpmnew
方式存在实验:升级tree程序
(三)rpm 包查询
语法:
rpm {-q|--query} [select-options] [query-options]
选项:
// select-options
-a //所有包
-f //查看指定的文件由哪个程序包安装生成
-p rpmfile //针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY //查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY //查询指定的CAPABILITY被哪个包所依赖
// query-options
--changelog //查询rpm包的changelog
-c //查询程序的配置文件
-d //查询程序的文档
-i //information
-l //查看指定的程序包安装后生成的所有文件
--scripts //程序包自带的脚本
--provides //列出指定程序包所提供的CAPABILITY
-R //查询指定的程序包所依赖的CAPABILITY
- 实验:
1.查看/bin/grep文件由哪个包生成
2.查看光盘下zlib文件的详细信息
3.查询grep程序的配置文件、文档
(四)rpm 包删除
语法:
rpm {-e|--erase} [options] PACKAGE_NAME ...
选项:
--allmatches //删除匹配包名的所有版本程序包
--nodeps //忽略依赖关系
--noscripts //不执行程序包脚本
--notriggers //不执行触发器脚本
--test //测试删除,不实际删除
- 实验:卸载tree程序
(五)rpm 包校验
包校验:将本地文件信息与rpm数据库中包文件的元数据相比较
语法:rpm {-V|--verify} [select-options] [verify-options]
选项:
// select-options
select-options 选项同rpm查询中的相应选项
// verify-options
--nodeps //不校验包依赖
--nodigest //不校验包完整性
--nofiles //不校验包文件属性
--noscripts //不执行校验脚本
--nosignature //不校验来源合法性
包完整性验证加密算法:SHA256;来源合法性验证:RSA
验证包文件完整性和签名:rpm -K|checksig rpmfile
-
加密方式:
- 对称加密:加密、解密使用同一秘钥
- 非对称加密:秘钥成对,公钥对外公开,私钥不能公开
导入公钥:
rpm --import PathToGPGKeys
光盘根目录有公钥:以
RPM-GPG-KEY
开头的文件,如CentOS 7光盘根目录的RPM-GPG-KEY-CentOS-7
文件查看当前导入的公钥:
rpm -qa "gpg-pubkey*"
实验:校验vim-common包,有报警提示,导入公钥后再次校验成功进行
四、yum rpm 包管理器前端工具
yum (yellowdog update modifier)可以解决包之间的依赖性问题,可在多个库之间定位软件包
yum设计为C/S架构,服务器端储存包文件和包文件的元数据信息,客户端执行rpm包管理操作时通过缓存包文件元数据信息解决包依赖性问题,并进行相关操作
服务器通信协议:
http://
,https://
,ftp://
,file://
(一)yum客户端配置
配置文件路径:
/etc/yum.conf 所有仓库的通用配置
/etc/yum.repos.d/*.repo 仓库指向配置*.repo
仓库指向配置文件格式
[repositoryID] //每个仓库唯一的标识符,一个单词
name=the description of the repository //简要介绍
baseurl=url://the path to the repository //仓库内repodata目录所在的父目录
enabled={1|0} //是否使用此仓库
gpgcheck={1|0} //是否检查签名
gpgkey=url //公钥的地址
-
配置文件可以使用的变量名
- $releasever: 当前OS的发行版的主版本号
- $arch: 平台,i386,i486,i586,x86_64等
- $basearch:基础平台,i386, x86_64
yum-config-manager yum配置管理工具
yum-config-manager --enable repo_name //启用仓库
yum-config-manager --disable repo_name //禁用仓库
- 实验:建立一个阿里云的yum配置文件,文件名aliyun.repo,仓库ID命名为aliyun,检查签名
实现:建立配置文件/etc/yum.repos.d/aliyun.repo
,文件内容如下:
[aliyun]
name=the repository of aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/RPM-GPG-KEY-CentOS-7
(二)yum 命令使用
语法:
yum [options] [command] [package ...]
显示yum仓库列表
yum repolist
yum repolist all //列出所有仓库列表
yum repolist enalbed //列出所有启用的仓库列表,默认
yum repolist disabled //列出所有未启用的仓库列表
实验:列出所有启用的仓库
- 显示程序包
yum list
yum list all //列出所有可获得和已安装的包
yum list glob_expr //列出所有符合通配符的包
yum list available //列出所有可以安装的包
yum list installed //列出所有已安装的包
yum list updates //列出所有有更新的包
-
实验:列出所有以gp开头的包
最右侧一列可以看到,前三个包以@开头表明已安装,anaconda表明为安装系统时安装,之后的包未有安装,安装包仓库为aliyun。
- 安装
yum install
yum install package1 [package2]... //安装包
yum reinstall package1 [package2]... //重新安装包
- 升级
yum update [package1]...
yum update //升级所有已安装的包
yum update package //升级package包
检查可用升级
yum check-update
卸载
yum remove|erase package1 [package2]...
查看程序包详细信息
yum info package1
查看指定特性由哪个程序包提供
yum provides|whatprovides feature
清除本地缓存
yum clean all
构建本地缓存
yum makecache
以指定字符串搜索程序包和概要描述
yum search string
列出package包的依赖和提供这些依赖的程序包,
yum deplist package
实验:yum安装、卸载、查询软件包:
1.查看screen包的详细信息
2.安装screen包
3.列出screen包的依赖信息
4.卸载screen
- 列出yum历史
yum history
yum history info 6 //查看第6条历史的信息
yum history undo 6 //撤销第6条历史的操作
yum history redo 6 //重做第6条历史的操作
- 实验:yum history的使用:
1.查询yum历史
2.查询第6条历史的详细信息,发现是安装telnet
3.撤销第6条历史的操作,使用undo命令,结果为卸载Telnet
- 包组管理
yum groupinstall group1 [group2] [...] //包组安装
yum groupupdate group1 [group2] [...] //包组升级
yum grouplist [groupwildcard] [...] //按照通配符列出匹配包组
yum groupremove group1 [group2] [...] //包组卸载
yum groupinfo group1 [...] //显示包组信息
- yum 选项
--nogpgcheck //禁止进行gpgcheck
-y //自动回答为"yes",适于脚本
-q //静默模式,往往和y选项配合使用
--disablerepo=repoidglob //临时禁用此处指定的repo
--enablerepo=repoidglob //临时启用此处指定的repo
--noplugins //禁用所有插件
- 实验:静默安装telnet.x86_64包
注意:-y和-q选项必须分开才能同时发挥作用
五、编译安装
(一)C语言源代码编译安装步骤
-
configure
configure
脚本通过参数选项指定安装路径、启用功能等,以用户指定、以makefile.in文件为模板并检查依赖的外部环境,最终生成Makefile
文件 -
make
make
命令依据Makefile
文件将源代码文件转换成为应用程序 -
make install
make install
命令将文件复制到指定目录
- 注意:安装前查询源代码目录的README和INSTALL文件
(二)编译安装前准备
源代码获取:官方网站、代码托管网站
配置开发工具和开发环境
开发工具:make, gcc等
开发环境:开发库,头文件等实现:安装开发组件包组
yum groupinstall "Development tools"
(三)编译安装过程
第一步,configure脚本选项配置
- 选项:
--prefix=/PATH //指定安装位置,默认为/usr/local
--sysconfdir=/PATH //指定配置文件安装位置
--disable-feature //指定启用特性
--enable-feature[=arg] //指定禁用特性
- 注意:执行configure脚本报错信息中的程序包依赖问题,往往是缺少该程序的开发组件,程序包名一般格式为
name-devel-VERSION
第二步,make命令
第三步,make install命令
- 可以将第二步和第三步合并,命令为
make && make install
第四步,安装后配置
- 二进制程序目录导入环境变量
echo 'export PATH=/path/to/bin:$PATH' > /etc/profile.d/httpd22.sh
//将二进制程序添加到PATH变量头部
. /etc/profile.d/httpd22.sh
//设置生效
- 导入帮助手册
编辑/etc/man.config
(CentOS 6)或者man_db.conf
(CentOS 7)配置文件,添加一条MANPATH
(CentOS 6)或MANDATORY_MANPATH
(CentOS 7)条目指向帮助手册路径
(四)实验:在CentOS 7上源代码编译安装apache 2.4
1.系统默认安装了“apache 2.4”的旧版本,先卸载旧版本
rpm -qa "httpd*"
yum remove httpd
2.安装开发工具包组
yum grouplist
yum groupinstall "Development tools"
3.将源代码压缩包解压缩至目录/usr/local/src,并且进入解压缩的目录内
tar xvf httpd-2.4.27.tar.bz2 -C /usr/local/src/
cd /usr/local/src/httpd-2.4.27/
4.解压缩的源代码目录下有README和INSTALL说明文件可在安装时查询,此时目录下尚未存在Makefile文件,运行带用户指定参数的configure脚本,会以用户指定设置以Makefile.in为模板文件生成Makefile,同时检查用户环境的依赖问题
ls
./configure --prefix=/app/httpd24 --enable-so --enable-ssl
5.执行configure脚本后往往会报错,根据错误提示安装相应包,一般为带devel后缀的开发包,再执行configure脚本。通常执行configure脚本时会多次报错,根据提示安装各类开发包后,最终会成功执行。如本实验一共出现四次错误提示,分别为APR not found
,APR-util not found
,pcre-config for libpcre not found
,mod_ssl configure:error
,yum分别安装apr-devel
,apr-util-devel
,pcre-devel
,openssl-devel
包。
yum install apr-devel //报错APR not found,安装apr-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssl //再次执行configure脚本
yum install apr-util-devel //报错APR-util not found,安装apr-util-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll //再次执行configure脚本
yum install pcre-devel //报错pcre-config for libpcre not found,安装pcre-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll //再次执行configure脚本
yum install openssl-devel //报错mod_ssl configure:error,安装openssl-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll //再次执行configure脚本
6.最终成功执行configure脚本
7.执行make命令和make install命令,成功结果如下
make & make install
8.安装完成后,进行相关配置,将二进制目录添加到PATH变量中
echo 'export PATH="/app/httpd24/bin:$PATH"'>/etc/profile.d/httpd24.sh
. /etc/profile.d/httpd24.sh
9.导入帮助手册,在/etc/man_db.conf文件,添加新行MANDATORY_MANPATH /app/httpd24/man
,并更新mandb数据库
vim /etc/man_db.conf
mandb
10.开启httpd服务,查看80端口是否已经开启,如下图成功开启80端口,至此安装完毕。