软件包管理

Posted wang-jin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件包管理相关的知识,希望对你有一定的参考价值。

包管理器
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而
方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
包文件组成 (每个包独有)
RPM包内的文件
RPM的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
 
程序包的来源
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
获取程序包的途径:
(1) 系统发版的光盘或官方的服务器;
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建议要检查其合法性
来源合法性,程序包的完整性
 
rpm包管理
(1):CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE ..
 
 
rpm包安装
-i 安装
--test 仅测试,不安装
--nodeps 忽略依赖性
--replacepkgs 重复安装已安装过的包,文件覆盖
--replacefiles 将要安装包的部分文件与其他已安装的包文件冲突,可继续安装
--noscripts:不执行程序包脚本
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun
--oldpackage 已装新的,再装旧的
--force 等同于--replacepkgs --replacefiles --oldpackage
-U 更新 如果装的有旧的,则升级,如果未装旧的,则安装新的。
-F 更新 如果装的有旧的,则升级,如果未装旧的,不安装新的。
 
-v 详细信息
-vv 更详细信息 *
-h 显示进度
-ivh 安装并详细显示进度 ***
-q 查询
-qa 查询安装的所有包
rpm -qa scr*
rpm -qa |grep ^scr
-qf 查询指定的文件由哪一个rpm包提供(文件用路径表示)
-qp 指定未安装的rpm包
-q --provides 软件包名 查看指定的软件包提供了哪些能力
可以使用-a 显示当前系统中由已安装过的包提供的所有能力
-q --whatprovides webserver 查看指定的能力由哪一个软件包提供
-q --whatrequires CAPABILITY 查询指定的CAPABILITY被哪个包所依赖
-qR 软件包名 查看指定的软件包依赖哪些能力
-qc 软件包名 查看配置文件
-qd 软件包名 查看帮助文档
-ql 软件包名 查看该软件包所提供的所有文件
-qi 软件包名 查看软件包的信息
-q --scripts 软件包名 查看软件包的安装脚本
-V 查看指定包所提供的文件是否发生过改变
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P capabilities differ
 
-K|checksig rpmfile 检查包的完整性和签名
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
 
rpm包升级
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级
--force: 强制安装
 
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
 
实验:丢失文件恢复
/etc/inittab
1.rpm -qf /etc/inittab
initscripts-9.03.58-1.el6.centos.x86_64
 
2.cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
 
3.cd /app; rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id
 
4.cp etc/inittab /etc
 
 
 
yum
vim /etc/yum.repos.d/dvd.repo
[base]
name=magedu centos 7 dvd
baseurl=file:///media
 
yum
CentOS: yum, dnf
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依
赖性,可在多个库之间定位软件包,up2date的替代工具
yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据
文件(放置于特定目录repodata下)
文件服务器:
http://
https://
ftp://
file:/
yum仓库
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
实例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
yum源
 
yum源
阿里云repo文件:
http://mirrors.aliyun.com/repo/
CentOS系统的yum源
阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
教学环境: http://172.20.0.1/cobbler/ks_mirror/$releasever/
EPEL的yum源:
阿里云: https://mirrors.aliyun.com/epel/$releasever/x86_64
教学环境: http://172.20.0.1/fedora-epel/$releasever/x86_64/
 
 
yum命令
yum命令的用法:
yum [options] [command] [package ...]
显示仓库列表:
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)
升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] [...]
查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins |
all ]
构建缓存:
yum makecache
搜索:yum search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
日志 :/var/log/yum.log
 
安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
包组管理的相关命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
 
 
yum repolist
enabled 仅显示激活的仓库,默认
all 显示所有的仓库
disabled 仅显示禁用的仓库
先挂载光盘
mount /dev/sr0 /media/ cd /etc/yum
umount 卸载光盘
写配置文件vim yum.repos.d
#!/bin/bash
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backupi
cat > /etc/yum.repos.d/media.repo <<end
yum源本地配置
vim yum.repo
[base]
name=base
baseurl=file:///media
gpgcheck=0
 
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64/
gpgcheck=0
end
 
yum repolist 初始化文件 相当于刷新。看yum搭建成功了没
yum install +(要安装的东西)比如tree 安装
yum clean all 清除yum缓存,有存储安装
 
本地安装
[base]
name=magedu centos $releasever dvd
baseurl=http://172.18.0.1/centos/$releasever
enabled=1
网络安装
[epel]
name=magedu centos $releasever dvd
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
enabled=1
 
yum-config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64
 
 
yum list [all]
@anaconda 表示操作系统安装时所安装的软件包
installed 表示操作系统安装后,手工通过rpm、yum、dnf所安装的软件包
除以上两种,其他的表示未安装的软件包,@name 显示包来源于哪个repo id
 
available 只显示未安装的包
installed 只显示已安装的,包括@anaconda和installed的
updates 只显示可更新包
yum update
 
yum install httpd
yum reinstall httpd
 
 
lscpu命令 :查看cpu的详细信息
free:查看内存信息
cat /proc/meminfo :查看内存信息
unsit:删除变量
$$:查看当前进程
pstree -p 查看进程
name=
set :查看变量 set|grep PS1,PS1:是命令提示符,改颜色
echo $_ :调用上一次参数的变量
!$:上一条命令的最后一个参数的调用
 
 
[[email protected] ~]# name=test;(echo $name)
test
[[email protected] ~]# name=test;(echo $name; name=222;echo $name);echo $name
test
222
test
 
 
scp +脚本名+IP地址 :直接将脚本考到其他IP地址中
 
 
#!/bin/bash
name=etc`date +%F`
cp -a /etc/ /root/$name
 
cp -a /etc/ /root/etc$(date "+%Y-%m-%d")
 
#!/bin/bash
 
直接:bash scp.sh scp.sh
yum
info
provides [whatprovides] 查看文件来自于哪个rpm包
provides "*bin/tree"
clean all 清空缓存
makecache 构建缓存
search pkgname 以指定的关键字搜索程序包名及summary信息
deplist pkgname 查询指定的包依赖哪些能力及所提供的包
yum history
yum history info 6
yum history undo 6 ***
yum history redo 6
 
localinstall[install] rpm文件。使用yum安装指定的rpm文件,并利用yum安装所依赖 的文件。
locaupdate[update] rpm文件。使用yum更新指定的rpm文件,并利用yum更新所依赖的文件
包组
grouplist
groupinfo 包组名
yum groupinstall "Development Tools"
yum install --downloadonly --downloaddir=/app httpd-manual 仅下载不安装
 
 
使用本地光盘做为yum源
1.mount /dev/cdrom /media/
2.vim /etc/yum.repos.d/dvd.repo
[base]
name=magedu centos $releasever dvd
baseurl=file:///media
enabled=1
gpgcheck=1
gpgkey=file:///media/RPM-GPG-KEY-CentOS-7
 
自建仓库
createrepo /app/rpm/
 
实验:在centos7上编译安装 httpd 2.4
 
1.下载源码包
lftpget ftp://172.18.0.1/pub/Sources/sources/httpd/httpd-2.4.25.tar.bz2
2.2.32
 
2.安装Development Tools
yum -y groupinstall "Development Tools"
3.解压
tar xvf httpd-2.4.25.tar.bz2
一般情况下把源码解压的文件 cd/usrlocal/src
并查看README和INSTALL以及./configure --help
4.配置
./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24
dnf -y install apr-devel apr-util-devel pcre-devel
5.make
 
6.make install
 
7.将执行命令和帮助文档的路径写入PATH
vim /etc/profile.d/env.sh
export PATH=/app/apache24/bin/:$PATH
source /etc/profile.d/env.sh
[[email protected]_v7(nanyibo) ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /app/apache24/man
 
7.启动服务 并 关闭防火墙
apachectl start
iptables -F
 
 
 
实验:在centos6上编译安装 httpd 2.2
 
 
 
vim /etc/yum
1yum install openssl-devel 安装
2在网上下载 。 heepd-2.4.34.tarbz2 传到/xia
mkdir src mv 文件 src
3 解压缩包:tar xvf heepd-2.4.34.tar 在src下生成一个heepd-2.4.34.文件4 cd heepd-2.4.3 执行那三步必须进入heepd-2.4.3里
4 ,ls 下有一个绿色的configure脚本,如果没有需要用工具生成
enable 启用... disable 禁用...
./configure
--prefix=/app 总文件夹
--sysconfdir=etc/httpd22 duli 阿发起软件独立出来。用--sysconfdir,默认 就不会放到app下 配置文件夹
--enable-ssl 完了后直接粘贴到./configure 下
 
 
. /configure --prefix=/app --enable-http2(装第二个)
 
 
./configure 这个脚本运行的时候,除了启用那些禁用那些功能,还会检查当前的环境是否把那些必要的依赖包都装好了,如果缺的话会报提示
5,把那些依赖包都安装下
yum install +包名
echo $?
0 就没有依赖的包了
7 命令:make -j +4(cpu的个数 ) 个数多速度就快 可以报警提示echo -e "a"
 
make -j 4 && echo -e "a" && sleep 1 && echo -e "a"
如果执行,报警休眠1秒。。。。
 
8 make install 自动生成文件夹
9最后一步:bin/apachctl start 这个是不在变量里面 他是在cd /app/bin/apachctl 要运行这个要决定路劲也可以加到PATH变量里面
vim /etc/profile.d/env.sh
PATH= /app/bin:$PATH
生效:. /etc/profile.d/env.sh
echo $PATH 在任何目录下都可以跑这个程序了
apachectl start 启动起来
命令:ss -ntl
 
一键安装centos6 编译 httpd2.2
source +脚本 生效该脚本
 
加入安装一个ifstat
[[email protected] ~]#which ifstat
/usr/sbin/ifstat
[[email protected]~]#rpm -qf /usr/sbin/ifstat
iproute-3.10.0-87.el7.x86_64
[[email protected] ~]#cd Packages/
rpm -ivh iproute-3.10.0-87.el7.x86_64 直接安装
 

以上是关于软件包管理的主要内容,如果未能解决你的问题,请参考以下文章

golang包管理解决之道——go modules初探

转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

Linux笔记 - 软件包管理

Linux笔记 - 软件包管理

CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)