前言:运维工程师平时安装服务时很正常的事情,所以软件包的管理就显得尤为重要。

内容:

  1. 基础知识。

    1. 程序发行的源代码都是不可以运行的,需要编译之后才可以运行,linux发行版的厂商会在他的机器上进行编译然后提供下载使用,用户可以直接拿到二进制的可执行文件进行使用。

    2. 通过file可以看到文件时不是可执行文件( ELF 32-bit LSB)是可执行文件,shared libs是使用了共享库。shell脚本显示Bourne-Again是应为#!/bin/bash的原因。 

    3. 程序的组成部分:1.二进制程序 2.库 3.配置文件 4。帮助文件

文件系统说明

/usr/share/man 
/etc
/bin
/sbin
/lib
这些是系统启动是要用到的,不能挂载到额外的分区上,否则是不能在启东时找到。

这些都是启动时内核所要的程序。
/usr/bin
/usr/sbin
/usr/lib
这些是系统启动之后核心的程序,建议独立分区
/usr/local/bin sbin lib etc man


这些一般都是第三方的软件。
/pot第三方程序,现在已经不怎么用了
/sys不能单独的分区,默认为空;只是内核单独的管理。
/dev设备文件不能单独的分区,现在使用的是udev,能够按照需求进行设备文件创建(dynamic device management)
/rootroot用户的家目录,不能单独分区
/var建议单独分区
/boot内核,启动过程:POST-->BIOS(HD)-->(MBR)bootloader(文件系统结构,ext2, ext3, xfs)-->内核
常见的做法:/boot放在一个独立的分区上,而根文件系统放在一个LVM上
原因:/boot是在开机启动的时候要用到,此时的计算机不认识文件系统,但是bootloader知道/boot在哪里,什么样的结构,但是LVM是内核启动之后才能够识别的,所以/boot不能放在LVM上,要放在一个独立的分区上。

2.软件包管理器的核心功能:

    1、制作软件包;

    2、安装、卸载、升级、查询、校验;

3.软件包管理概况

    Redhat, SUSE, Debian

    Redhat, SUSE: RPM

Redhat Package Manager

PRM is Package Manager

    Debian: dpt

    依赖关系:

X-->Y-->Z 传递依赖

X-->Y-->Z-->X 循环依赖

    前端工具:yum, apt-get 前段依赖于后端。

    后端工具:RPM, dpt


rpm包的命名:

包:组成部分

主包:

bind-9.7.1-1.el5.i586.rpm

子包:

bind-libs-9.7.1-1.el5.i586.rpm

bind-utils-9.7.1-1.el5.i586.rpm

包名格式:

name-version-release.arch.rpm

bind-major.minor.release-release.arch.rpm

例如:

            rpm包:

        二进制格式

rpm包作者下载源程序,编译配置完成后,制作成rpm包

bind-9.7.1-1.noarch.rpm

bind-9.7.1-1.ppc.rpm

4.软件包管理器功能:

安装、查询、卸载、升级、校验、数据库的重建、验正数据包等工作;

1、安装

rpm -i /PATH/TO/PACKAGE_FILE

-h: 以#显示进度;每个#表示2%; 

-v: 显示详细过程

-vv: 更详细的过程

    rpm -ivh /PATH/TO/PACKAGE_FILE


--nodeps: 忽略依赖关系;

--replacepkgs: 重新安装,替换原有安装;

--force: 强行安装,可以实现重装或降级;

--test是不装但是测试安装包依赖等。

        2、查询

        rpm -q PACKAGE_NAME: 查询指定的包是否已经安装(注意这里只是包名,不是包的全称)

        rpm -qa : 查询已经安装的所有包

        

        rpm -qi PACKAGE_NAME: 查询指定包的说明信息;

        rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表;

        rpm -qc PACEAGE_NEME:查询指定包安装的配置文件;

        rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件;

        

        rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本

        

        rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的;

        

        如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件;

        rpm -qpi /PATH/TO/PACKAGE_FILE

        rpm -qpl

        rpm -qpc

        rpm -qpd

        3、升级

        rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果装有老版本的,则升级;否则,则安装;

        rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;

         --oldpackage: 降级

        4、卸载

        rpm -e PACKAGE_NAME

         --nodeps忽视依赖

        5、校验

         rpm -V PACKAGE_NAME

         每一个位都对应着不一样的属性改变。

        6、重建数据库/var/lib/rpm

         rpm 

         --rebuilddb: 重建数据库,一定会重新建立;

         --initdb:初始化数据库,没有才建立,有就不用建立;

        7、检验来源合法性,及软件包完整性;

        加密类型:

         对称 :加密解密使用同一个密钥

         公钥:一对儿密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;

         单向:md5

        

        # ls /etc/pki/rpm-gpg/

         RPM-GPG-KEY-redhat-release

        

        rpm -K /PAPT/TO/PACKAGE_FILE

         dsa, gpg: 验正来源合法性,也即验正签名;可以使用--nosignature,略过此项

         sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项

        

        rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 导入密钥文件

     5.yum的用法