十七程序包管理之yum和编译安装
Posted liuzhiyun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十七程序包管理之yum和编译安装相关的知识,希望对你有一定的参考价值。
YUM
Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发
yum命令的工作原理
1、接收用户命令
2、yum扮演为客户端,请求启用的仓库(yum.repos.d/*.repo)中URL对应的文件服务器,下载元数据(repodata),保存至缓存中。
3、yum命令分析元数据,找出将要安装的程序包所依赖的程序包且在系统中没有安装的程序包列表,并向文件服务器请求下载程序包,保存至缓存中。
4、根据缓存中的程序包,先安装被依赖的程序包。
5、安装后,删除程序包,保留元数据。
yum repository: yum repo
存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)
1、接收命令
2、请求下载repodata目录中元数据校验码:repomd.xml文件
3、比对repomd.xml
相同:用本地的元数据
不相同:重复首次安装过程
一、Yum作用
1、rpm前端管理工具,自动解决程序包安装/卸载时的依赖关系。
2、C/S架构:C:yum程序所在的电脑,S:文件服务器
3、基于插件,提供众多功能,工作机制或设计体系存在问题,安装过程中半道中止时,下次重启yum命令不能够解决。
4、dnf命令能够解决Yum命令存在的问题,使用方法基本同yum
5、yum支持proxy,color,ssl
二、配置文件
ini风格: [] 表示一个配置段
获取帮助:
man的章节: 1: 普通用户 8:管理员 2:syscall 3:libcall 4:设备 5:配置文件 6:game 7:杂项
1)查看帮助手册所有的章节: whatis yum
2)查看帮助: man 5 yum.conf
获取配置文件
rpm -qc yum
yum.conf ## 为所有仓库提供公共配置
yum.repos.d/*.conf ## 为仓库的指向提供配置
配置文件格式
三、yum命令
获取帮助: man yum
获取子命令的帮助:yum help [SUB_COMMAND]
3.1、yum [OPTIONS...] [SUB_COMMAND]
OPTIONS
-y 交互式询问,自动回答为yes
-q 静默模式,grep , xz , zip,不显示程序包的依赖信息
--nogpgcheck 禁用 GPG 签名检查,不检查完整性和来源合法性
--disablerepo=REPO 仓库中如果enabled=1,本次安装忽略由REPO指定的仓库
--enablerepo=REPO 仓库中如果enabled=0,本次安装启用由REPO指定的仓库
--noplugins 本次安装禁用所有插件
注:yum -y -q :需要分开写
yum不允许同时在多个终端同时安装
3.2、SUB_COMMAND
安装:install,localinstall,groupinstall
install package ...
localinstall package ... (centos 5安装rpm必须)
groupinstall GROUP ...
1、直接给出: yum install gcc 默认安装最新
2、给出版本: yum install gcc-1.2.3 指定安装版本
3.3、查询:list/repolist grouplist info whatprovides
显示仓库列表:
repolist [all|enables|disabled]
仓库信息:安装、可用
repolist [all|enabled|disabled] 默认为enabled(启用和禁用)
显示程序包:
显示: yum list [all|available|installed|updates] [glob_expr1] ...
搜索:search STRING ... (STRING由Glob通配符和纯文本字符组成)
查看指定CAPABILITY(文件/功能)由哪个程序包所提供
whatprovides CAPABILITY
包内
信息: info package ...
3.4、常用命令
yum install PACKAGES # yum安装程序包 yum reinstall package1 [package2] [...] # 重新安装 yum remove PACKAGES # yum卸载程序包 yum remove | erase package1 [package2] [...] yum repolist # 可查看搭建的yum库有多少个安装包。
yum repolist all # 显示所有的仓库情况
yum clean # 清除yum缓存 cat /var/log/yum.log # 查看yum安装报的日志文件,包括安装、卸载、更新等 yum list # 显示所有库中所有的包,前带@说明已经安装 yum list *ftp* # 支持文件名通配符,列出包含ftp的程序包 yum list [all | glob_exp1] [glob_exp2] [...] # 列出包,支持文件名通配符 yum list available|installed|updates [glob_exp1] # 列出可用的、可安装的、能升级的 yum update [package1] [package2] [...] # 升级,一般不建议升级 yum downgrade package1 [package2] [...] # 降级 yum check-update # 检查可用升级
1、检查可用升级[root@izpo45bh60h6bsz ~]# yum --enablerepo=updates check-update
2、升级:[root@izpo45bh60h6bsz ~]# yum --enablerepo=updates update
yum info [...] # 查询包信息
yum provides | whatprovides feature1 [feature2] # 查看指定的特性(可以是某文件)是由哪个程序包所提供
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] # 清除/var/cache/yum/$basearch/$releasever缓存,清楚类型指定,all为所有
yum makecache # 构建缓存
yum search string1 [string2] [...] # 以指定的关键字搜索程序包名及summary信息
yum deplist package1 [package2] [...] # 查看指定包所依赖的capabilities
3.5、本地缓存
清理: clean [headers|packages|metadata|dbcache|plugins|expire-cache|all]
构建: makecache
3.6、查看yum历史事务:
历史: history [info|list|packages-list|summary|addon-info|redo|undo|rollback|new]
yum history # 查看历史记录 yum history info 6 # 查看yum历史记录第六条的详细信息 yum history undo 6 # 反向操作yum历史记录第六条的操作
3.8、版本: version
如何使用光盘当作本地yum仓库
1)、挂载光盘
挂载光盘至某目录,例如/media/cdrom
#mount -r -t iso9660 /dev/cdrom /media/cdrom
2)、创建配置文件
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台
$basearch: 基础平台(x86平台,统一识别为i386)
$YUM0-YUM9 自定义变量
比如: 实例:(针对不同版本的系统) http://mirrors.magedu.com/centos/$releasever/$basearch/os http://server/centos/7/x86_64 http://server/centos/6/i384
对于repo文件我们也可以参考阿里云,
http://mirrors.aliyun.com/repo/
将其的配置格式直接作为我们自己的配置。
可通过:
wget url....下载配置文件至当前目录
开销:服务器距离主机的距离,网络的延迟
镜像:同类仓库出现多个时,yum基于插件,同一个仓库指向一堆服务。不同站点同时提供同类仓库
程序包选择:
1、多个版本时,安装新的版本。
2、多个镜像站点,有相同的程序包,选择cost低的服务器
yum仓库配置及生成
仓库配置
1)、挂载光盘
挂载光盘至某目录
2)、配置仓库
yum -y install createrepo
仓库的生成
抽取rpm包中元数据(rpm内部文件的清单,CAPABILITY信息),制作repodata文件,放在repodata文件中及元数据的特征码。用createrepo命令实现
createrepo命令
元数据的存储的位置
压缩后存储于文件
sqllite接口存储,便于查询
lftp命令
程序包编译安装
目的:
1、提供的rpm功能不全
2、新功能,rpm包还没有制作
原理: 源代码 -- 预处理(预处理器) -- 编译(编译器gcc) -- 汇编代码 -- 汇编(汇编器) -- 二进制指令 -- 链接(链接器)
源代码命名:
testapp-1.2.3-1.操作系统平台.src.rpm -----》安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
编译:
静态: 共享库编译进程序,运行时不调用共享库,不链接,占内存。
共享库:在编译成二进制程序后,需要用链接器,链接库。运行时,调用共享库。节约内存。
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系:
为了简化难度提供项目管理工具
java源程序: maven
c,c++程序: make (configure----->Makefile.in(开发工具生成)----->makefile)
C,C++代码编译的步骤:
1、获取程序包开源代码的途径
1)、官方自建的站点
apache.org(ASF:Apache Software Fundition)
mariadb.org
2)、代码托管站点
SourceForge
Github.com
code.google.com
2、
1)、手动提供开发环境及工具
开发工具 :make 、gcc
autoconf 生成confiugre脚本
automake 生成Makefile.in文件
建议:安装前查看INSTALL 、README (/usr/share/doc/* )
开发环境:开发库,头文件
glibc(Gnu C标准库)、头文件
2)、通过“包组”提供开发组件 :
CentOS包组 :可使用yum grouplist 查看
6 "Development Tools" "Server Platform Development"
yum -y groupinstall "Server Platform Development" :安装包组以后不需要自己解决依赖环境 或者自己安装软件时自己解决依赖也可以
7 "Development Tools"
3、展开查看INSTALL,README帮助手册:获取安装方式
1)只需要make
2)只需要make install
3) 直接使用
4、安装后检验gcc是否安装完毕: gcc --version
5、编译
5.1、 获取编译可指定的选项: ./configure --help
1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.ini文件生成makefile;
2)检查依赖到的外部环境;
--prefix=DIR 程序默认安装位置,便于卸载(只有此选项时,所有其他目录均在DIR目录下) --sysconfdir=CONF_DIR 配置文件安装 --disable-FATURE 默认启用,不想用时,才禁用 --enable-FATURE 默认禁用,想用时,才启用 --with-PACKAGE=PATH 指定当前程序包依赖的包及其所在的路径 --without-PACKAGE 指定当前程序包不依赖的包
5.2 、make 当./configure成功后,生成Makefile文件后,方可make
根据makefile文件,构建应用程序
**注意Make后error信息**
5.3、make install 调用install命令,完成复制文件(dd,cp,install)
一些脚本,就是把构建出来的应用程序,二进制扔到所指定的二进制路径里面去,库文件扔到所指定的库文件里面去
6、编译后的处理
PATH变量输出、库路径输出、头文件路径输出、man手册路径输出
1)导出二进制程序目录至PATH环境变量
环境变量: profile类
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
全局: /etc/profile 、 /etc/profile.d/*.sh
个人: ~/.bash_profile
2)导出库文件路径
查看库: ldconfig -p
编辑库文件: /etc/ld.so.conf 、 /etc/ld.so.conf.d/*.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓存: ldconfig [-v]
查看程序依赖的库:
# ldd path
3)导出头文件
基于链接的方式实现:
ln -sv /path/to/include /usr/include/NAME
4)导出帮助手册
编辑/etc/man.config文件
添加:MANPATH /PATH/TO/man
不导出时:
man -M /PATH/TO/man COMMAND
以上是关于十七程序包管理之yum和编译安装的主要内容,如果未能解决你的问题,请参考以下文章