Linux学习命令汇总七——软件包管理(rpm包 yum repo源码包管理及相关命令)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习命令汇总七——软件包管理(rpm包 yum repo源码包管理及相关命令)相关的知识,希望对你有一定的参考价值。

本章Blog相关Linux知识点


程序:预编译,编译(源代码——>cpu指令),汇编,连接

    API:application programing interface 应用程序接口;兼容,意味开发库接口兼容,因此源代码可跨平台

    ABI:application binary interface 应用二进制接口;兼容,编译后的程序可跨平台

库:可执行的程序,本身不能作为程序执行入口,但可以被调用;编译好的二进制格式

头文件(/usr/include):

    # which cat  查看一个可执行程序的具体路径,即外部命令位置

    # ldd  /bin/cat  查看可执行程序依赖的共享库

    # man -M /usr/locla/nginx/man  nginx   调用安装路径man 帮助文件,查看命令功能

两台操作系统相同的平台,在A主机上编译的程序,手动迁移到B主机,无法保证其正常运行,需要保证程序依赖的库在B主机上存在 。

软件包的组成部分:

    二进制程序:默认安装目录/bin , /sbin ,/usr/bin ,/usr/sbin ,/usr/local/bin ,/usr/local/sbin

    库文件: 默认安装目录/lib ,/usr/lib ,/lib64 , /usr/lib64

    头文件:默认安装目录 /usr/include

    配置文件:使用纯文本文件保存配置信息 ,默认安装目录为/etc 

    帮助文件:默认安装目录为/usr/share/man ,配置文件/etc/man.conf  包含man 文件 ,info文件 ,readme 等 文件 

# man command 到某路径下查找与命令相同的通常以.gz结尾的压缩文件的文件名.

例: 编译安装的mysql 程序,包括

    二进制程序文件:/usr/local/mysql-5.5.54/bin

    库文件:/usr/local/mysql-5.5.54/lib

    头文件:/usr/local/mysql-5.5.54/include

    配置文件:/usr/local/mysql-5.5.54/support_files/*.cnf

    帮助文件:/usr/local/mysql-5.5.54/man  , /usr/local/mysql-5.5.54/README

例: 编译安装的httpd 程序,包括

    二进制程序文件:/usr/local/httpd-2.2.34/bin

    头文件:/usr/local/httpd-2.2.34/include

    配置文件:/usr/local/httpd-2.2.34/conf/

    帮助文件:/usr/local/httpd-2.2.34/man  , /usr/local/mysql-5.5.54/README

应用程序管理器:

    debian:.deb使用dpkg应用程序管理软件

    Redhat:.rpm 使用RPM(RPM is package manager)应用程序管理器

包管理器的基本功能:打包,安装,查询 ,升级,卸载,校验,数据库管理

应用程序的安装:

    包管理rpm 安装

    使用源码编译安装

    通用二进制格式安装

    使用前端管理器工具(yum)安装

程序包格式:

    源程序包格式:name-major.minor.release.tar.{gz|bz2|xz} 例:mysql-5.5.54.tar.gz

    rpm 包格式:name-version-release.arch.rpm  例:MySQL-client-5.5.54-1.el6.x86_64.rpm ,通常release中包含版本发行号及适用的os版本

    源码包格式:源码包拥有10个功能,大多数用户只用其中的6个功能,余下的4个分别为:大包,核心主包,支包,分包。

验证来源合法性:

    源码包:通过MD5 或SH1 码校验

    RPM包:通过发行商提供的可信。包括验证包完整性——校验码(MD5 或SH1),验证来源合法——公钥(RSA)。

获取RPM途径:

    发行商提供的光盘或站点服务器

    http://mirrors.163.com ,http://mirrors.sohu.com , http://mirrors.aliyutn.com

    http://rpmfind.net

    http://rpm.pbone.net 


rpm包管理及命令使用


rpm包管理:

1、校验包来源合法及软件包完整性

导入公钥:

rpm --import /mnt/RPM-GPG-KEY-CENTOS-6 导入公钥

验证来源合法性:

    源码包:通过MD5 或SH1 码校验

    RPM包:通过发行商提供的可信。包括验证包完整性——校验码(MD5 或SH1),验证来源合法——公钥(RSA)。

rpm [ -K | --checksig ] rpm_name.rpm  检查包来源合法及软件包完整性

    --nosignature :不检查来源合法性

    --nodigest:不检查包完整性

例:# rpm -K rpm -K zsh-4.3.10-7.el6.x86_64.rpm --nodigest

2、rpm包安装

如存在依赖关系,需先解决依赖关系 ;若忽略依赖关系 ,--nodeps

rpm {-i|--install} [install-options] PACKAGE_FILE ... 

    -v :显示详细信息

    -h :以#的个数表示安装进度

    -ivh :一般三者组合使用

    --test :仅测试,不执行安装

    --nodeps :忽略依赖关系

    --replacepkgs :重新安装

例:

# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm   安装zsh包

# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm  重新安装zsh包
3、rpm包卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]

例 :# rpm -e zsh-4.3.10-7.el6.x86_64 --nodeps 忽略依赖关系,卸载zsh 包

4、rpm包查询

# rpm {-q|--query} [select-options] [query-options] 

   query-options

        [--changelog] [-c,--configfiles] [-d,--docfiles] [--dump]
        [--filesbypkg] [-i,--info] [--last] [-l,--list]
        [--provides] [--qf,--queryformat QUERYFMT]
        [-R,--requires] [--obsoletes] [--scripts] [-s,--state]
        [--triggers,--triggerscripts

    -qa:查询所有安装的包 例:# rpm -qa apr* 或 # rpm -qa |grep “^apr”

    -qc:查询安装包生成的配置文件

    -qd:查询安装包生成的帮助信息 例# rpm -qd apr

    -qi:查询安装包的描述信息 

    -ql:查询安装在当前生成的列表信息

    -qf:查询某文件是由那个安装包生成的 例 # rpm -qf /etc/passwd

    -q --scripts :查询包相关脚本

    -p :查询尚未安装的rpm包信息,可以 -i ,-l,-c等选项组合使用  例:# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm

5、rpm包升级

# rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

    --nodeps :忽略依赖关系

    --force :强制安装

6、校验安装后的rpm包

# rpm {-V|--verify} [select-options] [verify-options]

    状态值及含义:

       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

例: [[email protected] Packages]# rpm -V apr  校验安装后的rpm包
    S.5....T.    /usr/lib64/libapr-1.so.0.3.9
7、rpm包数据库初始化及重建

# rpm {--initdb|--rebuilddb}

    --initdb 重建初始化,如果事先不存在,则重建一个管理库

    --rebuilddb 重建管理库,若存在,则覆盖

注:这两个参数是极为有用,有时rpm 系统出了问题,不能安装和查询,大多是这里出了问题;


yum  repo管理及相关命令


程序包管理器的前段工具:yum(yellowdog update modifier)

1、依赖关系

    yum自动解决依赖关系

2、文件服务器(共享rpm包):通过yum所支持的文件共享机制将各个rpm包通过文件服务共享

    repository:仓库

  • 需要的各rpm包

  • 依赖关系、程序包安装后所能够生成的列表等元数据文件

3、yum客户端

  • 配置文件,指定各可用的yum仓库

  • 缓存元数据,yum回到各可用的yum仓库获取元数据,并缓存到本地

  • 分析元数据(包的依赖关系),根据具体操作请求完成元数据分析,包括检查依赖关系、文件列表等信息

  • 执行具体操作

4、客户端配置文件指定对应服务器的访问方式

  • ftp服务器: ftp://server/path_to_repo

  • http服务器:http://server/path_to_repo

  • NFS服务器:nfs://server/path_to_repo

  • file服务器: file:///server/path_to_repo

5、配置yum仓库,要使用yum管理应用程序,首先为其配置可用的yum仓库。 

配置文件:/etc/yum.conf  ,/etc/yum.repos.d/*.conf

配置文件格式:由两段组成,类似于Windows的ini配置文件

    [main] 主配置段

    [repo] 仓库配置段

配置repo:

    [repo_id]

    name=string 定义仓库名称

    baseurl=仓库访问路径。系统中repodata文件目录,即仓库目录

    enabled={1|0} 1代表仓库启用,0代表仓库关闭

    gpgcheck={1|0} 1代表校验,0代表不校验

    gpgkey=公钥路径(可以是本地,也可以是服务器端路径)

    cost=定义此仓库开销,默认为1000 ,值越小越优先使用

yum配置文件中可用的四个宏

    $releasever :程序的脚本。对yum而言指的是redhat-release版本,只替换为主版本号。如redhat6.5 ,则 $releasever 表示为6

    $basearch:系统基本架构 ,如i686 ,i586等的基本架构为i386

    $arch:系统架构

    $YUM0-9 :在系统定义的环境变量,可以在yum中使用

例:配置yum仓库

# vi  /etc/yum.repos.d/Base.conf

    [base]

    name=CentOS-$releasever - Base

    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

    baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

    gpgcheck=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    enabled=1

6、yum相关命令

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

    包管理

        * help [command]

        * install package1 [package2] [...] -y  安装指定的程序包

        * update | upgrade  [package1] [package2] [...]   升级指定的程序包

        * downgrade package1 [package2] [...]  降级安装的程序包

        * check-update    检查可升级的包   例# yum check-update apr
        * remove | erase package1 [package2] [...]   删除yum包,被依赖的包会一同删除

        * repolist [all|enabled|disabled]   :列出所有可用的yum仓库

        * reinstall package1 [package2] [...]  重新安装指定的包

        * list [...]       显示rpm列表   例 # yum list
        * info [...]     显示rpm包信息  例 # yum info apr 等同于 #rpm -qi apr
        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]   清除缓存
        * provides | whatprovides /path/to/somefile  查询某文件是由那个包安装生成
        * version [ all | installed | available | group-* | nogroups* | grou-plist | groupinfo ]

        * history    [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

    包组管理:

        * groupinstall group1 [group2] [...]   安装包组
        * groupupdate group1 [group2] [...]  升级包组
        * grouplist [hidden] [groupwildcard] [...]  列出所有的包组
        * groupremove group1 [group2] [...]  卸载包组
        * groupinfo group1 [...]    列出包组信息,注意组名有空格

    三个与开发有关的组:

         Server Platform Development  服务器开发组

         Development Tools  基本开发环境组

         Desktop Platfrom Development  有图形程序时,需安装此组

    安装本地包:

         install /path/to/package_file --nogpgcheck   手动禁止检查来源及合法性

7、yum repository:文件

    # yum install createrepo -y  创建createrepo

ftp mirror 下载包

    repodata ,自动生成

        repomd.xml :为repodata中的其他文件提供元数据信息


实验1:把本地光盘作为yum源

步骤:

  • 禁用其他yum源,设置enable=0;清理缓存 # yum clean all

  • 创建本地yum源

    # vi /etc/yum.repos.d/local.repo

    [local_base]
    name=Centos-$releasever-$basearch
    baseurl=file:///mnt/    光盘挂载到/mnt/ 目录
    gpgcheck=1
    enabled=1
    gpgkey=file://mnt/RPM-GPG-KEY-CentOS-6

  • 查看确认该yum源是否生效

    # yum repolist

    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: centos.ustc.edu.cn
     * extras: mirror.bit.edu.cn
     * updates: mirror.bit.edu.cn
    repo id                              repo name                                    status
    local_base                           Centos-6-x86_64                              6,518

     

实验2:把2张光盘复制到本地作为yum源

  • 禁用其他yum源,设置enable=0;清理缓存 # yum clean all

  • 分别插入2张Centos6.6光盘,并制作本地iso光盘镜像: # dd if=/dev/sr0 of=/media/Centos-6.6(1).iso

                                                                                        # dd if=/dev/sr0 of=/media/Centos-6.6(2).iso

  • 挂载本地iso文件: # mount -o loop  /media/Centos-6.6(1).iso  /usr/local/yum/dvd1

                                  # mount -o loop /media/Centos-6.6(2).iso /usr/local/yum/dvd2

  • 配置开机自动挂载  # vi /etc/fstab  添加如下两行

                               /media/Centos6.6(1).iso   /usr/local/yum/dvd1  iso9660  defaults,loop  0 0

                                 /media/Centos6.6(2).iso   /usr/local/yum/dvd1  iso9660  defaults,loop  0 0

  • 验证是否实现开机自动挂载 #mount -a  

  • 使用createrepo命令创建软件源目录 # createrepo /usr/local/yum/   ,将会在 /usr/local/yum目录下生成repodata的子目录。

  • 调整软件源配置文件/etc/yum.repos.d/CentOS-Media.repo

    # vi /etc/yum.repos.d/CentOS-Media.repo

    [c6-media]
    name=CentOS-$releasever - Media
    baseurl=file:///usr/local/yum/    调整该文件,指向repodata目录
    gpgcheck=1
    enabled=1                启用该软件源
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    [c6-epel]
    name=CentOS-$releasever - Epel
    baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/
    enabled=1
    gpgchek=1
    gpgkey=http://mirrors.sohu.com/fedora-epel/RPM-GPG-KEY-EPEL-6

  • 验证该本地源生效

    [[email protected] media]# yum repolist enabled
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    repo id                                                             repo name                                                                   status
    c6-epel                                                             CentOS-6 - Epel                                                             12,455
    c6-media                                                          CentOS-6 - Media                                                            4,184
    repolist: 16,639
    [[email protected] media]# yum install mysql-libs   可正常使用本地yum源
    Loaded plugins: fastestmirror
    Setting up Install Process
    Loading mirror speeds from cached hostfile
     * c6-media:
    Resolving Dependencies
    --> Running transaction check
    ---> Package mysql-libs.x86_64 0:5.1.73-3.el6_5 will be installed
    --> Finished Dependency Resolution

    Dependencies Resolved

    ======================================================================================================================================================
     Package                             Arch                            Version                                  Repository                         Size
    ======================================================================================================================================================
    Installing:
     mysql-libs                          x86_64                          5.1.73-3.el6_5                           c6-media                          1.2 M

    Transaction Summary


源码包管理及编译安装


程序包管理之编译安装:源码:c ,c++;perl源码 ;python源码

应用程序: https://sourceforge.net   https://github.com   

1、源程序组成:

    项目工程:把代码分散于多个源代码文件

    GNU/make :项目编译工具

    autoconf :configure 脚本

  • 检查编译环境是否满足需求,并定义当前程序比哪一时启用那个特性或功能,以及安装路径的定义等

  • 结果:会根据Makefile.in 文件生成makefile文件

    automake:生成Makefile.in文件

  • 用于结合configure脚本生成Makefile.in 文件

  • makefile 文件是make命令的配置文件

2、编译安装步骤:

  • 源代码解压:  #tar -xf package-version.tar.{gz|bz2|xz}

    注意:展开后的目录名通常为package-version

  • 切换至解压目录 # cd package-version

  • 执行./configure 脚本 # ./configure

  • 编译 # make && make install

3、configure脚本的通用功能

  • 指定安装路径 : --prefix=/path_to_somefile

  • 配置文件路径 : --sysdir=/path_to_somefile

  • 指定启用特性: --enable-feature ,例 --enable-fpm ;指定禁用特性 : --disable-feature ,例--disable-socket

  • 指定依赖的功能、程序或文件: --with-function 启用功能 ;--without-function 禁用功能

  • 不同的程序,其configure脚本功能不同,获取帮助方式 # ./configure --help

实验:编译安装nginx

  1. 下载并解压源码包:

    # wget http://mirrors.sohu.com/nginx/nginx-1.10.3.tar.gz

    # tar -xf nginx-1.10.3.tar.gz

  2. 切换至解压目录

    # cd nginx-1.10.3

  3. 执行./configure 脚本

    # ./configure --prefix=/usr/local/nginx-1.10.3 

  4. 执行编译安装

    # make && make install

  5. 二进制程序设置环境变量

    # vi /etc/profile.d/nginx.sh

    export PATH=$PATH:/usr/local/nginx-1.10.3/sbin

    :wq

    # source /etc/profile.d/nginx.sh   重读环境变量

  6. 库文件输出

    # vi /etc/ld.so.conf.d/nginx.conf

    /usr/local/nginx-1.10.3/lib

    :wq

    #ldconfig       让系统重新生成库文件路径缓存

  7. 头文件输出给系统

    # ln -sv /usr/local/nginx-1.10.3/include /usr/include/nginx

  8. 配置文件

    # cp /usr/local/nginx-1.10.3/conf/nginx.conf /etc/nginx.conf

  9. 帮助文件

    # vi /etc/man.conf

    MANPATH_MAP    /usr/local/nginx-1.10.3/bin  /usr/local/nginx-1.10.3/man


本章知识点汇总


程序包管理器:rpm ,deb(dpkg)

rpm - RPM Package Manager

    导入公钥:# rpm --import

    验证:# rpm -K | --checksig

    安装: # rpm -ivh ,--replacepkgs  ,--nodeps

    升级: # rpm -Uvh | -Fvh --force ,--nodeps

    卸载: # rpm -e | --erase ,--nodeps

    查询: # rpm -qa | -qc | -qd | -ql | -qi | -qf | -qpl | -q --scripts

    校验: # rpm -V

    重建数据库:  # rpm --rebuilddb | --initdb

yum : C/S 架构

  • yum repository : 文件服务器 (rpm包 + 元数据)

    文件服务器格式: ftp://  ,http://  , nfs:// , file:///   

    生成元数据: # createrepo 

  • yum client:

    依赖配置文件:/etc/yum.conf  , /etc/yum.repos.d/*.repo

    配置yum repo :

    [repo_id]

    name=

    baseurl=

    gpgcheck=

    enabled=

    gpgkey=

    cost=

yum 管理命令

    安装: # yum install | reinstall

    卸载: # yum remove | erase

    查询升级包:# yum check-update

    升级: # yum update | upgrade

    降级: # yum downgrade

    查询: # yum info

    列出yum repo : # yum repolist

    清除缓存: # yum clean

    重读缓存: # yum makecache

    列出包组:#yum grouplist

    安装包组: # yum groupinstall

    显示包组信息: # yum groupinfo

    删除包组: # yum groupremove

源码包管理安装:

    下载源码包,解压并切换进入该解压目录

    ./configure 检查编译环境,定义特性及功能

    make && make install  安装

    输出: 环境变量,头文件 ,库 ,配置文件及帮助文件

 

以上是关于Linux学习命令汇总七——软件包管理(rpm包 yum repo源码包管理及相关命令)的主要内容,如果未能解决你的问题,请参考以下文章

linux 学习6 软件包安装

Linux学习-软件安装

(总结五)Linux指令学习——软件管理

Linux基本命令——RPM包管理工具

软件包管理——Linux基本命令(13)

linux软件管理命令-- rpm