第十九章、Linux软件管理


12_01_Linux软件管理之一 rpm

 

程序组成部分:

         二进制程序

         

         配置文件

         帮助文件


跟目录结构

/boot

/etc

/usr

/var

/dev

/lib

/tmp

/bin

/sbin

/proc

/sys

/mnt

/media

/home

/root

/misc

/opt

/srv

 

 

目录讲解:


/usr/share/man:帮助手册


/etc, /bin, /sbin, /lib

         系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上

            

/usr/ :操作系统核心功能,可以单独分区

         bin

         sbin

         lib

            

/usr/local:第三方软件

         bin

         sbin

         lib

         etc

         man

 

/opt:古老的方法第三方软件

 

/proc

/sys

         这两个目录不能单独分区,默认为空;

        

辅助目录:

/dev: 设备,不能单独分区;

         2.6 内核后添加了:udev,动态加载设备文件

        

/root: 不能单独分区

 

/var:建议单独分区

     存放pid, lock, log文件


/boot:内核,initrd(initramfs)

         内核: bootloader负责加载,bootloader加载内核时并没有文件系统,bootloader能够识别文件系统结构

        应该单独分区,根文件系统所在分区可能使用LVM,而LVM是内核的功能。



系统启动次序:

POST-->BIOS(HD)-->(MBR)bootloader(文件系统结构,ext2, ext3, xfs)-->内核-->根

 

程序:指令+数据

         指令:芯片固化

                   CPU: 普通指令,特权指令

                   指令集

                  

 

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

1、制作软件包;

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

 

Linux三大发行版:Redhat, SUSE, Debian 使用的软件包管理工具

 

Redhat, SUSE: RPM

         Redhat Package Manager

         PRM is Package Manager


Debian: dpt

 


前端工具:yum, apt-get,为了解决依赖关系

后端工具:RPM, dpt

 

yum: Yellowdog Update Modifier

 

 

12_02_Linux软件管理之二 rpm


rpm命令:

         rpm:

                   数据库: /var/lib/rpm, 一旦损坏,rpm工具就会失效

         rpmbuild:


软件管理的工作包括:

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

 

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

 

major: 主版本号:重大改进

minor: 次版本号:某个子功能发生重大变化

release: 发行号:修正了部分bug,调整了一点功能

第二个release:rpm包的发行号


源码命名:bind-9.7.1.tar.gz     

 

rpm包格式分为:

         二进制格式:

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

                   bind-9.7.1-1.noarch.rpm

                   bind-9.7.1-1.ppc.rpm


         源码格式:需要自己编译,可以发挥硬件最大性能。

 

rpm的使用:

 

1、安装

rpm -i /PATH/TO/PACKAGE_FILE

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

         -v: 显示详细过程

         -vv: 更详细的过程

         --nodeps: 忽略依赖关系;

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

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

        

一般使用:rpm -ivh /PATH/TO/PACKAGE_FILE

      

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 /PATH/TO/PACKAGE_FILE

 

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、重建数据库

rpm

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

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

 

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

加密类型:

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

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

         3. 单向:hash

 

# ls /etc/pki/rpm-gpg/

         RPM-GPG-KEY-redhat-release : 红帽公司的公钥

        

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


rpm -K /PAPT/TO/PACKAGE_FILE

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

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

        


12_03_Linux软件管理之三 yum


yum仓库中的元数据文件:

1. primary.xml.gz

         所有RPM包的列表;

         依赖关系;

         每个RPM安装生成的文件列表;


2. filelists.xml.gz

         当前仓库中所有RPM包的所有文件列表;


3. other.xml.gz

         额外信息,RPM包的修改日志;

 

4. repomd.xml

         记录的是上面三个文件的时间戳和校验和;

        

5. comps*.xml

        RPM包分组信息;


如何为yum定义repo文件

自己的yum配置文件保存在/etc/yum.respos.d下


[Repo_ID]

name=Description

baseurl=

         ftp://

         http://

         file:///

enabled={1|0}

gpgcheck={1|0}

gpgkey=

 

 

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


options:

-y: 自动回答为yes

--nogpgcheck

 

command:

list: 列表

         支持glob

         all

         available:可用的,仓库中有但尚未安装的

         installed: 已经安装的

         updates: 可用的升级

 

clean: 清理缓存

         [ packages | headers | metadata | dbcache | all ]

        

repolist: 显示repo列表及其简要信息

         all

         enabled:默认

         disabled

 

install: 安装

         yum install PACKAGE_NAME


localinstall: 安装本地rpm包,可以自动安装依赖包


update: 升级

update_to: 升级为指定版本

 

remove|erase:卸载

 

info: infomation,类似 rpm -qi

 

provides| whatprovides: 查看指定的文件或特性是由哪个包安装生成的;


包组管理:

groupinfo

grouplist

groupinstall

groupremove

groupupdate

 

 

使用光盘作为yum源:

/media/cdrom/{Server,VT,Cluster,ClusterStorage}

baseurl=file:///media/cdrom/Server

 

如何创建yum仓库:

createrepo

创建 repodata路径,生成源的元数据文件。

 

练习:

1、将系统安装光盘挂载至/media/yum目录,用其实现yum仓库;

2、配置使用http://172.16.0.1/yum/{Server,VT,Cluster,ClusterStorage}为可用yum仓库;

 


写一个脚本,完成如下功能:

说明:此脚本能够为指定网卡创建别名,则指定地址;使用格式如:mkethalias.sh -v|--verbose -i ethX

1、-i选项用于指定网卡;指定完成后,要判断其是否存在,如果不存在,就退出;

2、如果用户指定的网卡存在,则让用户为其指定一个别名,此别名可以为空;如果不空,请确保其事先不存在,否则,要报错,并让用户重新输入;

3、在用户输入了一个正确的别名后,请用户输入地址和掩码;并将其配置在指定的别名上;

4、如果用户使用了-v选项,则在配置完成后,显示其配置结果信息;否则,将不显示;

 

 

12_04_Linux软件管理之四 yum


RPM安装:

         二进制格式:

         源程序-->编译-->二进制格式

                   有些特性是编译选定的,如果编译未选定此特性,将无法使用;

                   rpm包的版本会落后于源码包,甚至落后很多;bind-9.8.7, bind-9.7.2

                  

定制:手动编译安装

 

编译环境,开发环境

开发库,开发工具

 

Linux: C,

GNU: C

 

C,C++:

    gcc: GNU C Complier, C

    g++:

 

make: 项目管理工具,

         makefile: 定义了make(gcc,g++)按何种次序去编译这些源程序文件中的源程序

 

automake, --> makefile.in --> makefile

autoconf, --> configure

 

编译安装的三步骤:


前提:准备开发环境(编译环境)

安装"Development Tools"和"Development Libraries"

 

# tar

# cd

1. # ./configure 

         --help

         --prefix=/path/to/somewhere

         --sysconfdir=/PATH/TO/CONFFILE_PATH

         功能:1、让用户选定编译特性;2、检查编译环境;

2. # make

3. # make install


e.g: 编译安装tengine

# tar xf tengine-1.4.2.tar.gz

# cd tegnine-1.4.2

# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf

# make

# make install

# /usr/local/tengine/sbin/nginx


如果软件安装到了非默认路径下,需要做的修改:

1、修改PATH环境变量,以能够识别此程序的二进制文件路径;

         修改/etc/profile文件

         在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/somewhere

2、默认情况下,系统搜索库文件的路径/lib, /usr/lib; 要增添额外搜寻路径:

         在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;

         # ldconfig 通知系统重新搜寻库文件

                   -v: 显示重新搜寻库的过程

3、头文件:输出给系统

         默认:/usr/include

         增添头文件搜寻路径,使用链接进行:

                   /usr/local/tengine/include/   /usr/include/

                   两种方式:

                   ln -s /usr/local/tengine/include/* /usr/include/ 

                   ln -s /usr/local/tengine/include  /usr/include/tengine

4、man文件路径:安装在--prefix指定的目录下的man目录;/usr/share/man   

                   1、man -M /PATH/TO/MAN_DIR COMMAND

                   2、在/etc/man.config中添加一条MANPATH

                  

netstat命令:

         -r: 显示路由表

         -n: 以数字方式显示

        

         -t: 建立的tcp连接

         -u: 显示udp连接

         -l: 显示监听状态的连接

         -p: 显示监听指定的套接字的进程的进程号及进程名