- rpm包管理器
- yum工具使用
- 构建私有仓库
- 源码包编译安装
程序包管理器:RPM-redhat package manager, c语言编写。将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序的安装、升级、卸载和查询等管理操作;
-
rpm包命名格式:以rpm结尾 name-version-release.arch.rpm version:major.minor.release release:rpm包发行号 arch:架构:x64,i386,i686,noarch
-
获取程序包的方法: 1.系统发行的光盘ISO镜像、镜像站点、系统发行官方网站 2.项目的官方站点,如Apache下的众多项目 3.第三方组织:epel... 4.下载源码包自己编译
-
rpm命令使用:
- 安装: rpm {-i|--install} [install-options] PACKAGE_FILE ... 通用选项: -v: 详细信息 -vv:更详细信息 安装选项: -h: hash mask显示进度条,,每个#表示2%进度 --test:仅测试安装,检查报告是否有冲突 --nodeps:忽略依赖关系 --replacepkgs:重新安装 --force:强制安装 --nosignture:不检查包签名信息,不检查来源合法性 --nodigest:不检查包完整性信息
- 卸载: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ... 选项: --allmatches:卸载所有匹配指定名称的程序包的各版本; --nodeps:忽略依赖关系 --test:测试卸载模式
- 升级: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -U:升级或者安装 -F:仅升级 选项: --oldpackage:降级 --force:强制更新
- 查询: rpm {-q|--query} [select-options] [query-options] [select-options]: PACKAGE_NAME:查询指定已安装的程序包 -a.--all:查看所有已安装的程序 -f,--file FILE_NAME:查询文件是由那个程序提供 -p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作; [query-options]: --changelog:查询rpm包的changlog; -l, --list:程序安装生成的所有文件列表; -i, --info:程序包相关的信息,版本号、大小、所属的包组,等; -c, --configfiles:查询指定的程序包提供的配置文件; -d, --docfiles:查询指定的程序包提供的文档; --provides:列出指定的程序包提供的所有的CAPABILITY; -R, --requires:查询指定的程序包的依赖关系; --scripts:查看程序包自带的脚本片断;
- 校验: rpm {-V|--verify} [select-options] [verify-options] 检查包来源是否安全:来源合法性与完整性 获取并导入信任的包制作者的公钥:发行商的提供的包附带在光盘内 对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 验正: (1) 安装此组织签名的程序时,会自动执行验正; (2) 手动验正:rpm -K PACKAGE_FILE
-
yum工具能够自动解决依赖关系,底层的实现还是依赖于rpm,要使用yum安装需要先配置file.repo结尾的仓库配置文件,存储了众多rpm包,以及包的相关的元数据文件(repodata) 其他版本: yum:rhel系列系统上rpm包管理器的前端工具; apt-get (apt-cache):deb包管理器的前端工具; zypper:suse的rpm管理器前端工具; dnf:Fedora 22+系统上rpm包管理器的前端工具;
- yum配置文件: /etc/yum.conf:主配置文件为所有仓库提供公共配置 /etc/yum.repos.d/*.repo:为仓库的指向自定义配置
- 配置文件格式: [repositoryID] #仓库名称 name=Some name for this repository#仓库描述信息 baseurl=url://path/to/repository/ #可以多个,指向源的有效路径,可以是:ftp://、http://、nfs://、file:/// enabled={1|0} 是否启用 1启用 ,去掉默认启动 gpgcheck={1|0} 1 检查其来源合法、完整 gpgkey=URL 密钥文件
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
文件中可用的变量:
$releasever: 当前OS的发行版的主版本号; 6 7
$arch: 平台架构;
$basearch:基础平台;
- 构建私有仓库
createrepo-0.9.9-28.el7.noarch ,创建仓库元数据repodata
用法:createrepo [options] <directory>
选项:
-o --outputdir <url> 指定元数据输出位置
-v:详细信息
-q:静默模式
-g ,--groupfile <groupfile>#指定本地软件仓库的组划分 ,组文件和包需放在一起
# createrepo -g comps.xml ./
1.创建元数据
[root@xt data]# ls rpm/
crmsh-3.0.0-6.2.noarch.rpm ldirectord-3.9.6-0rc1.1.2.x86_64.rpm repodata
[root@xt data]# man createrepo
[root@xt data]# createrepo -v ./rpm/ -o ./
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 1 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Worker 0: reading crmsh-3.0.0-6.2.noarch.rpm
Worker 1: reading ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Starting other db creation: Thu Jan 10 14:59:06 2019
Ending other db creation: Thu Jan 10 14:59:06 2019
Starting filelists db creation: Thu Jan 10 14:59:06 2019
Ending filelists db creation: Thu Jan 10 14:59:06 2019
Starting primary db creation: Thu Jan 10 14:59:06 2019
Ending primary db creation: Thu Jan 10 14:59:06 2019
Sqlite DBs complete
[root@xt data]# ls
repodata rpm
2.配置yum源文件
baseurl需要指定到repodata目录即可
- yum命令使用: 用法:yum [options] [command] [package ...]
command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
* repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-syn‐
chronization> [package2] [...]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* load-transaction [txfile]
* updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-
kernel]
* fssnapshot [summary | list | have-space | create | delete]
* fs [filters | refilter | refilter-cleanup | du]
* check
* help [command]
- 命令选项:
--nogpgcheck:禁止进行gpg check;
-y:自动回答为“yes”;
-q:静默模式;
--disablerepo=repoid glob:临时禁用此处指定的repo;
--enablerepo=repoid glob:临时启用此处指定的repo;
- 清空本地缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
- 构建缓存
yum makecache fast
- 显示仓库列表:
yum repolist [all|enabled|disabled]
- 显示程序包
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
- 安装|重新安装:
yum {install | reinstall} package1 [package2] [...]
- 拆卸
yum remove | erase package1 [package2] [...]
注:卸载也会把依赖的包删除,需要看清楚,否则可能删除与系统相关的包
- 升级
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
- 查看程序包信息
yum info [...]
- 搜索:以关键字符搜索
yum search string1 [string2] [...]
- 查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides file
[root@xt ~]# yum provides "*/gdisk"
Loaded plugins: fastestmirror
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
base: mirrors.aliyun.com
extras: mirrors.tuna.tsinghua.edu.cn
updates: mirrors.163.com
epel/7/x86_64/filelists | 10 MB 00:00:01
gdisk-0.8.10-2.el7.x86_64 : An fdisk-like partitioning tool for GPT disks
Repo : base
Matched from:
Filename : /usr/sbin/gdisk
gdisk-0.8.10-2.el7.x86_64 : An fdisk-like partitioning tool for GPT disks
Repo : @base
Matched from:
Filename : /usr/sbin/gdisk
- 包组相关命令管理:7+groups包含所有子命令
yum groups install group1 [group2] [...]
yum info group1 [group2] [...]
yum list [groupwildcard] [...]
yum remove group1 [group2] [...]
yum summary :快速查看有哪些包组可用或已安装
- ** 源码包编译安装**
有时候别人做好的包不一定满足需求,需要定制某些功能,可以下载程序的源代码自己编译符合需求的程序。
- 开源代码的获取: 官方站点:apache.org 、 https://www.kernel.org/ 代码托管:SourceForge、Github.com、code.google.com 比如从ntfs-3g下载源码包:里面包含一切需要的文件 安装编译前查看INSTALL,README,文件里描述了安装步骤及功能详细说明
- 通常C代码编译安装三步骤:
./configure:
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
(2) 检查依赖到的外部环境;
make [-j #]:根据makefile文件编译,构建应用程序,启用cpu多线程任务
make install:安装
[root@xt ntfs-3g_ntfsprogs-2017.3.23]# ./configure --prefix=/root/data #指定默认安装位置,默认为/usr/local/
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for style of include used by make... GNU
checking for gcc... no #gcc等开发工具没有,需要先安装,通常提供Development Tools即可(需要看安装版本)
checking for cc... no
checking for cl.exe... no
configure: error: in `/root/data/ntfs-3g_ntfsprogs-2017.3.23':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
=============================
yum groups install Development\ Tools
=============================
./configure --prefix=/root/data重新检查
....................
/usr/bin/rm: cannot remove 'libtoolT': No such file or directory#个别警告或者错误可以忽略
You can type now 'make' to build ntfs-3g.#进行下一步操作编译
=============================
# make -j 4
......................
libtool: link: gcc -DFUSE_USE_VERSION=26 -I../include/fuse-lite -I../include/ntfs-3g -DPLUGIN_DIR=\"/root/data/lib/
ntfs-3g\" -g -O2 -Wall -o .libs/lowntfs-3g lowntfs_3g-lowntfs-3g.o lowntfs_3g-ntfs-3g_common.o -ldl ../libfuse-lite/.libs/libfuse-lite.a -lpthread ../libntfs-3g/.libs/libntfs-3g.so -Wl,-rpath -Wl,/root/data/libmake[2]: Leaving directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23/src'
make[2]: Entering directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23'
make[2]: Leaving directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23'
make[1]: Leaving directory `/root/data/ntfs-3g_ntfsprogs-2017.3.23'
=============================编译完成即可安装
make install
[root@xt data]# ls
bin include lib sbin share
- 安装完后的文件:
- 安装后配置一些文件便于使用
(1) 导出二进制程序目录至PATH环境变量中;不导出执行命令需要用绝对路径!
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:/root/data/ntfs-3g
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/ntfs-3g.conf, 添加/root/data/ntfs-3g/lib 到文件中;
让系统重新生成缓存:
ldconfig [-v]
(3) 导出头文件
基于链接的方式实现:一般用于二进制包名称比较长
ln -sv
(4) 导出帮助手册
编辑/etc/man_db.config文件,添加一个MANPATH
#MANPATH /root/data/ntfs-3g/share/man
- 当某个程序中的某个文件丢失或者误删,重装程序带来不便,有没有多余备份 rpm2cpio - Extract cpio archive from RPM Package Manager (RPM) package.
[root@xt rpm]# rpm2cpio ldirectord-3.9.6-0rc1.1.2.x86_64.rpm | cpio -id #注意展开的目录会覆盖原有的目录
382 blocks
[root@xt rpm]# ls
crmsh-3.0.0-6.2.noarch.rpm etc ldirectord-3.9.6-0rc1.1.2.x86_64.rpm repodata test usr
[root@xt rpm]# ls etc/
ha.d/ logrotate.d/
[root@xt rpm]# ls etc/ha.d/resource.d/ldirectord
crmsh-3.0.0-6.2.noarch.rpm ldirectord-3.9.6-0rc1.1.2.x86_64.rpm test/
etc/ repodata/ usr/