软件包的组成

1、二进制程序

   /bin,/sbin        系统启动(不允许脱离根)

   /usr/bin,/usr/sbin        系统提供基本功能(RHEL6中不允许脱离根)

   /usr/local/bin,/usr/local/sbin        三方软件

2、配置文件(单文件,单文件在内部分割为多个片段)

   /etc

   /etc/httpd/

3、库文件(多个软件共有的功能,被组成一个独立功能模块,只能被其他程序调用执行)

   /lib,/usr/lib

   路径定义        /etc/ld.so.conf/etc/ld.so.conf.d/*.conf

   头文件(对库文件的说明,如何去调用本库)        /usr/include

   静态库多个功能放入一个库文件中,程序在编译时候把整个库文件包含至程序中。

   动态库不同程序调用相同功能,复制动态库副本至自己的内存空间中。

4、帮助文件

   手册页        /usr/share/man(/etc/man.config)

   文档           /usr/share/doc


软件包管理工具

Debian    dpkg(数据库记录安装生成文件的相关信息)    deb

RedHat    rpm(数据库记录安装生成文件的相关信息)     rpm    标准的软件管理格式


rpm格式的软件包命名格式

   name-[subname|devel]-version-release.arch.rpm

   name         名字

   subname    一个软件包为了管理方便,在制作rmp包时候,可以划分为多个功能相对独立的rpm包

   devel         被其他软件包以来的库文件和头文件(其他软件依赖于此主包,需要装此devel包)

   version      {major(质的飞跃).minor(改变一些功能).release(修正bug补丁)}

   release{     软件包制作者发型版本号.[系统平台号]}

   arch          二进制程序有格式(编译器自身会在软件编译时对软件在特定平台上运行做优化)

                   32bit (i386,i486,i586,i686)

                   64bit  (x86_64)

                   noarch(文本文件,根平台没关系)


前段工具

rpm --->  yum

dpkg --->  aptget


Linux上软件包的安装途径

1、rpm包

   rmp命令

   yum命令

2、源码包

   编辑安装

3、编译好的二进制包压缩包

   解压后配置使用


rmp包中包含的内容

   要安装的文件

   要执行的脚本

       pre          安装之前

       post        安装完成

       preun      卸载之前

       postun    卸载之后


软件管理功能

安装        (依赖的包叫做能力)

       rpm  -i           PK1 PK2 PK3 ...

              -v           详细信息

              -h           进度

             --test       测试是否可以安装

             --nodeps     忽略依赖关系

             --replacepkgs    重新安装

             --force        无视冲突

卸载

       rpm  -e      PK_name PK2_name ...

               --nodeps    忽略依赖关系(其他软件包依赖于它的时候不让卸载)

升级

       rpm  -F     无old,则不new

               -U     无old,则安装new

               -v

               -h

               --oldpackage    降级

               注意:内核不应该升级安装,内核允许多版本并存,可直接安装多个不同版本内核

查询

       rpm  -qPK_name

               -qa    当前系统上所有已经安装的软件包

               -qi    查询软件包的相关信息

               -ql    列出此rpm包安装之后在系统上生成那些文件

               -qf    查询此文件是由哪个软件包生成的

               -qc    查看此软件包有哪些配置文件

               -qd    查看此软件包有那些文档

               -q    --scripts        查看软件包脚本

               -qp    查看尚未安装rpm的软件信息(支持上述选项)

校验    检查某rpm包安装生成的文件有没有被非法修改过

       rpm  -V   PK_name

                      S.5....T不改变用.  该表表示出来

                      S file Size differs

                     M Mode differs (includes permissions and file type)

                     5 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

              -K    PKG    检查软件包签名(或者发行光盘)

                                需要公钥/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

              --import    导入公钥

             -K    --nodigest          不检查单项加密相关内容sha1 md5

                     --nosignature    不检验签名gpg dsa

             rpm包签名:提取特征码,附加在软件包上,官方使用自己的私钥加密此特征码

             验证签名

                           用官方的公用解密这段被加密的特征码,得到可靠的官方特征码

                           自己再使用同样的单项加密提取软件包特征码。并比较和官方特征码是否一致。

       rpm数据库        /var/lib/rpm

                       --initdb             重新初始化丢失的库

                       --rebuilddb       重建,无论事先是否存在


yum

   RPM

   rpm databas/var/lib/rpm

yum    自动解决依赖关系

   x--->y

   x         依赖哪些包

   y         安装情况

   yum    如何解决依赖关系

   repository    仓库    yum源    repodata

rmp    每一个rpm包依赖于其他的那些capacity,是rpm包的制作者指定的

         就算没有定义rpm命令也可以识别。

yum    配置文件指定找相应的yum仓库,已经安装多少个,多少为安装

         下载未安装包到本地缓存,安装完成

         仓库在本地某目录

               file:///

         仓库在远程服务器

               ftp:///

               http:///

         rpm包

         repodata/            自由包含此目录为其子目录的路径,才可以用作yum源

         repomd.xml         保留时间戳校验值

         primary.xml.gz     当前yum仓库内每个rpm包名字和彼此间依赖关系

                                    每个rpm包能够安装生成的文件

         filelists.xml.gz      所有rpm包包含的安装生成的文件的文件列表

         other.xml.gz        额外信息,主要包含rpm包的changelog

         comps-rhel5-server-core.xml    包组


yum配置

   /etc/yum.conf    主配置文件    全局配置

   /etc/yum.repos.d/*.repo    分片配置文件    分段配置

   /etc/yum/pluginconf.d/    插件目录


   [repo]

   name=My Date Base

   baseurl=file:///var/yumrepo/Server

   baseurl=ftp://192.168.0.254/pub/Server

       baseurl=ftp://USERNAME:PASSWORD@192.168.0.254/pub/Server

   enabled={0|1}

   gpgcheck=1

   gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


yum命令

   repolist

   list             {installed|available|updates|all}

   clean         {expire-cache|packages|headers|metadata|dbcache|all}

           /var/cache/yum

                           元数据

                           rpm包

   grouplist    列出包组

   groupinfo "GROUP_NAME"    查看包组信息

   info zsh    查看包信息

   search KETWORD     模糊查询

   whatprovides FILE    某文件是由哪个rpm包生成

   installPKG_NAME     安装

   removey<--x            卸载

   update                     升级

   groupinstall "NAME"        安装包组

   groupremovec "NAME"    卸载包组

   localinstall         使用yum源安装;如果不是光盘导读作者公钥或者不检查签名

   reinstall             重新安装

   check-update    检查有哪些可用于升级的包


yum的选项命令

       -y        自动回答为yes

       -nogpgcheck


创建本地yum源

       1、先安装 yum install createrepo(创建yum源命令)

       2、createrepo 路径目录


createrepo

       -g支持包组定义


yum    高级用法

       baseurl=ftp://192.168.0.254/pub/mirrorlist.txt


软件包源码编译安装

source code --> binary

编译安装需要事先安装“开发环境”

Development Tools

Development Libraries

X Software Development

c/c++

   ./configure

           Makefile.in--->makefile (autoconf automake)

       -prefix=制定安装路径

      --sysconfdir制定配置文件的安装路径

二进制程序        /usr/local/apache/bin        在PATH中添加此路径

库文件管理        /usr/local/apache/lib         如何让系统识别此库

                       /lib /usr/lib                        系统默认库文件路径


导出库文件路径

第一种方法      

    /etc/ld.so.conf

第二种方法

   1、新建文件/etc/ld.so.conf.d/*.conf

                        并将当前软件的库文件所在的目录添加至此新文件

   2、# ldconfig [-v] 通知系统重新读取库

                       /etc/ld.so.cache并保存至缓存中


头文件管理

       /usr/include        系统默认头文件目录

       /usr/local/apache/include        如何让系统识别头文件

       # ln -s  /usr/local/apache/include /usr/include/apache

       或者使用cp 也可以


手册页文件

       /etc/man.config

       /usr/local/apache/man

       MANPATH /usr/local/apache/man

       如果只是临时使用一次

       man -M /usr/local/apache/man httpd

      注意:一般情况下都要导出库和头文件

make-->makefile

make install

大多数源程序都会自带文件 INSTALL README


perl

   perl Makefile.PL

   make

   make install