19 Star 187 Fork 90

baoke / Linux学完就忘系列

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
24.软件包管理yum.md 9.69 KB
一键复制 编辑 原始数据 按行查看 历史
baoke 提交于 2019-09-29 14:12 . yum

YUM yellow dog,Yellowdog Update Modifier

yum repository:yum repo
存储了:
众多rpm包
包的相关的元数据文件(放置于特定目录下:repodata)

文件服务器:
ftp://
http://
nfs://
file:///

yum客户端:

配置文件:
/etc/yum.conf:为所有仓库提供公共配置,如缓存文件放哪里等...
/etc/yum.repos.d/*.repo:为每一个仓库提供特有配置;

仓库的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}:是否启用此仓库;默认为1(启用),不写为启用;
gpgcheck={1|0}:对于此仓库中的所有程序包,在安装之前是否做完整性验证和来源合法性;
gpgkey=URL:用于指明密钥文件,使用此密钥文件来做完整性验证和来源合法性
enablegroups={1|0}:默认为1(是),是否在此仓库上使用组来批量管理程序包
failovermethod={roundrobin|priority}:故障转移方法;当baseurl指定多个url时,如果来挑选;
默认为:roundrobin,意为随机挑选;
priority:优先级,至上而下的挑选 cost=1000:代表开销,如果希望访问此仓库开销小一点,可以调低一些;
默认为1000

yum命令的用法:

yum [options] [command] [package ...]

repolist [all|enabled|disabled]:显示仓库列表的命令;默认显示启用的仓库即:yum repolist相当于yum repolist enabled
list:显示程序包
yum list [all | glob_exp1] [glob_exp2] [...] :显示匹配指定glob通配符的所有程序包
yum list available [glob_exp1] [...]:显示匹配指定glob通配符,仓库中有尚未安装的程序包(即可用的安装包)
yum list updates [glob_exp1] [...]:可用的升级包
yum list installed [glob_exp1] [...]:已安装的包
yum list extras [glob_exp1] [...]:额外的安装包
yum list obsoletes [glob_exp1] [...]:废弃的安装包

#列出所有可用仓库
yum repolist
#显示所有程序包
yum list | less
#显示php开头的所有程序包,这里使用了glob通配符
yum list php*

安装程序包:
install package1 [package2] [...]

yum install gcc
yum -y install gcc

重新安装(覆盖的方式进行安装):
reinstall package1 [package2] [...]

升级程序包:
update package1 [package2] [...]

降级程序包:
downgrad package1 [package2] [...]

检查可用升级:

check-update

yum update gcc

卸载指定程序包:
remove | erase package1 [package2] [...]

yum remove gcc

查看程序包information:
info package1 [...]

yum info gcc

查看指定的特性(可以是某文件)是由那个程序包所提供的:
provides | whatprovides feature1 [feature2] [...]

yum provides /bin/ls
yum provides /bin/ls /bin/cat

清空本地缓存:
clean [packages | metadata | expire-cache | rpmdb | plugins | all]

构建缓存:(这部一般不需要手工做,在我们每一次使用yum安装时,它会自动去找所有的yum仓库,并把它们相关的文件缓存在本地)
makecahe

一般在配置完新的yum仓库后可以做以下操作:

#清空所有本地缓存
yum clean all
#构建缓存
yum makecache
#显示yum仓库列表
yum repolist

搜索:以指定的关键字搜索程序包名及summary信息
search string1 [string2] [...]

yum search bash

显示程序包的依赖关系
deplist package1 [package2] [...]

yum deplist gcc

history [info | list | packages-info | summary | addon-info | redo | undo | rollback | new | sync | stats ]
查看yum事务历史(每一次yum命令执行都是启动了一次yum事务,如安装、升级、卸载才会启动事务,查询不会启动事务)

yum history
yum history stats

安装及升级本地程序包
假设yum仓库没有想要的包,从网络上下载下来的rpm包,我们通过rpm -ivh rpm包名来安装,问题这个包有很多依赖怎么办呢?如果被它依赖的包在yum仓库里,这个时候我们就可以使用yum localinstall rpm包名来安装本地的rpm包,可以解决该包的依赖问题.localinstall安装本地包时能解决本地包的依赖关系;
localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
注意:在CentOS6、CentOS7以后,本地安装rpm也可以不用localinstall了,直接使用yum install rpm包名即可;目前localinstalllocalupdate仅仅为了兼容才保留
例如:yum install /usr/local/src/testapp-3.2.1-1.el7.x86_64.rpm

包组管理的相关命令:
groupinstall group1 [group2] [...]
groupupdate group1 [group2] [...]
grouplist [hidden] [groupwilcar] [...]
groupremove group1 [group2] [...]
groupinfo group1 [...]

#查看包组列表
yum grouplist  
#安装包组
yum groupinstall "开发工具"
#查看包组信息
yum groupinfo "开发工具"

使用本地光盘的yum仓库

mount -r /dev/cdrom /media/cdrom  
cd /media/cdrom
ls

下图查看以上命令的信息:

#备份系统自带的yum源  
mv CentOS-Base.repo  CentOS-Base.repo.bak
cd /etc/yum.repos.d/
vim local.repo

local.repo文件如下:

[base]
name=CentOS 7 Release
baseurl=file:///media/cdrom
enable=1
gpgcheck=0
yum repolist

yum的命令行选项:

--nogpgcheck:禁止进行gpg check;
-y:自动回答为"yes";
-q:静默模式;
--disablerepo=repoidglob:临时禁涌此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:

$releaserver:当前OS的发行版的主版本号;
$arch:CPU架构平台
CPU架构平台:
i386 32位操作系统
i686 是i386的一个子集
x86_64 64位操作系统
noarch 跨平台
$basearch:基础平台;
$YUM0-$YUM9:自定义变量;

如:http://mirrors.abc.com/centos/$releasever/$basearch/os

创建yum仓库

createrepo用于组织和管理rpm包,创建相关的repodata目录的文件

yum install createrepo

createrepo [options]

mkdir -p /yum/repo
#拷贝php-开头的rpm文件
cp /media/cdrom/Packages/php-* /yum/repo
cd /yum/repo
#创建repodata目录的文件
createrepo ./

有了repodata文件就能指定yum源了

cd /etc/yum.repos.d/
vim local.repo

local.repo文件如下:

[php-centos]
name=CentOS 7 php
baseurl=file:///yum/repo/
enable=1
gpgcheck=0
#查看并获取新的yum源
yum repolist

程序包编译安装:

源代码的rpm包格式:testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;

源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行

源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系;

C、C++: make (configure --> Makefile.in --> makefile)
java:maven

C代码,编译安装三步骤:
./configure:
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
(2) 检查依赖到的外部环境;

make:
根据makefile文件,构建应用程序;

make install

开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in文件

建议:安装前查看INSTALL、README文件

开源程序源代码的获取:

官方自建站点:
apache.org (ASF)
mariadb.org
...
代码托管:
SourceForge
Github.com
code.google.com

c/c++:gcc (GNU C Complier)

编译C源代码:
前提:提供开发工具及开发环境
开发工具:make,gcc等
开发环境:开发库,头文件
glibc:标准库

通过"包组"提供开发组件
"Development Tools",中文版叫"开发工具"

yum groupinstall 开发工具
rpm -q make
rpm -q gcc
gcc --version

第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help:获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;不指定通常默认为/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件的安装路径;

可选特性(Optional Features):
--disable-FEATURE
--enable-FEATURE[=ARG]

可选程序包(Optional Packages):
--with-PACKAGE[=ARG]
--without-PACKAGE

第二步:make

第三步:make install

#上传源码包使用rz选择httpd-2.2.29.tar.bz2上传
#解压源码包
tar jxf httpd-2.2.29.tar.bz2
cd httpd-2.2.29/
#指定安装路径和配置文件安装路径
./configure --prefix=/usr/local/apache2  --sysconfdir=/etc/httpd2
make
make install 

#切换到apache的bin目录
cd /usr/local/apache2/bin
#启动apache
./apachectl start
#查看80端口是否启用且是否是httpd进程
netstat -tnlp
#关闭防火墙后就可以通过ip地址访问了
systemctl stop firewalld

安装后配置(如果没有指定/usr/local/目录,以下文件需要导出,否则无法全局使用):
(1) 导出二进制程序目录至PATH环境变量中:
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH

(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;

让系统重新生成缓存:ldconfig [-v]

(3) 导出头文件
基于链接的方式实现:ln -sv

(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH

Shell
1
https://gitee.com/abcd1234567_1/linux.git
git@gitee.com:abcd1234567_1/linux.git
abcd1234567_1
linux
Linux学完就忘系列
master

搜索帮助