目录:
- 软件运行环境介绍
- 包管理器
- 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端口,至此安装完毕。
网友评论