• 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/