软件以及软件包管理

  • 软件的架构以及分区建议:
  • 应用程序的组成部分:二进制程序,二进制程序依赖的所有库文件,配置文件文件,帮助文件;/etc,/bin,/sbin,/lib,/usr/share/man 前面三个必须和根在一个分区,因为与操作系统的启动有关;
  • /usr 里面包含 bin,sbin, lib,文件,可以单独分区,里面放置的是操作系统的核心功能;
  • 同时/usr/local bin,sbin, lib,etc, man,表示第三方软件的安装位置,建议安装软件在这里;
  • /sys /proc :提供用户调用接口的伪文件系统,不能单独分区,里面没有任何件;
  • /dev:设备,不能单独分区;
  • udev 机制,可以实现让内核在设别到硬件信息后,动态进行创建设备文件,2.4 内核之前是没有这个功能的,里面提供了所有的设备文件,2.6内核之后引入 udev 机制,管理员是没有家目录的;
  • /var:是一个相对外围的文件位置,多用于存放锁文件,日志文件,以及运行过程中的信息,应该单独分区,里面的文件需要按时进行处理;
  • /boot:内核和 initrd 或者 initranfs;
  • 操作系统启动过程: POST-->BIOS(HD)-->MBRbootloader (需要识别基本文件系统结构, ext2, ext3, xfs) -->加载内核;
  • 其中 bootloader是需要识别基本的文件系统的,虽然不需要出现目录的上下级结构,但是需要找到内核所在的位置;BIOS 里面的 ROM里面的信息是需要被映射进内存的,建议进行单独分区;

  • 软件包管理器

  • 软件包管理器通常提供打包软件的源程序,库文件,配置文件,以及帮助文件信息,并且将软件的信息生成数据库,用于追踪软件的详细信息;
  • 软件包管理器还需要提供软件制作软件,并且需要执行安装,卸载,升级,查询,校验;
  • Redhat SUSE使用RPM:Redhat Package Manger来提供软件包管理;Debian使用dpt来提供软件包的软件管理;
  • 软件包之间的依赖关系的解决,Redhat使用的是YellowDog Update Modifier也就是RPM,dpt解决使用的是apt-get来解决依赖关系
  • rpm命令
  • rpm软件包管理器,是一个基于HASH的数据库,数据库文件在/var/lib/rpm,查询速度快,并且提供了rpmbuild命令来制作软件包;
  • rpm软件包管理器支持软件的安装,查询,升级,校验,数据库的重建,验证软件包来源的合法性等;
  • 命名规则
  • 命名规则:软件包在命名过程中为了避免软件包制作后太大,会拆解为好几个软件包进行制作,分为主包:bind-9.7.1-1.el5.i586.rpm,子包:bind-libs-9.7.1-1.e15.i586rpm;
  • 命名格式:name-version-release.arch.rpm,arch,例如bind-major.minor.release-release.arch.rpm
    • 主版本号: 有重大功能改进;
    • 次版本号: 某个子功能发生重大改变;
    • 发行版本号: 修正了部分 bug,调整了部分功能;
    • rpm软件包格式:
    • 二进制格式: 装上可以直接运行,对于平台的要求比较严格;
    • 源码格式: 需要自己进行编译,更好发挥硬件性能,可以根据自己的需求更改编译的选项;
    • 两个release分别表示软件开发者进行的改进,后面的release表示rpm 包的制作者因为功能改进而进行重新编译时的改进;
    • 常见的平台:i686:表示32为平台;x64:表示x86平台64位系统,noarch,表示和平台无关;
    • el5: 表示的是用在企业版 5上面的,同样的el6 表示的就是用在企业版6上面的;
  • rpm命令
  • 安装
    • -i /PATH/TO/SOMEWHERE:指定软件包路径和名称,用于安装软件;
      • -v:用于显示软件安装的详细信息;
        • -vv:显示更详细的信息;经常结合起来使用 ivh
      • -h:表示使用#来显示安装进度,一个#表示2的进度;
    • --nodeps:表示忽略依赖关系,软件安装可能无法正常使用;
    • --force:表示强行安装,可以实现重新安装或者降级安装
    • --replacepkgs:表示重新安装,替换原有安装;
    • --oldpkgs:表示降级安装;
    • --test:表示仅仅测试,但是不安装;
  • 查询:
  • -qa name:用于匹配已经安转的所有软件包;
    软件以及软件包管理_第1张图片
  • -qi name:查询指定安装包的说明信息;
  • -ql name:查询指定包安装后生成的文件列表;
    软件以及软件包管理_第2张图片
  • -qf file:用于查看某个文件是那个软件包生成的;
  • -qc name:查询指定软件包安装的配置文件;
    软件以及软件包管理_第3张图片
  • -qd name:查询指定软件包安装的帮助文件
    软件以及软件包管理_第4张图片
  • -q --scripts name:用于查询指定安装包在安装过程中执行的脚本,包括安装前,安装前, 安装后,卸载前,卸载后,这个和安全相关的,用于检测在软件安装时,是否会存在系统安全的脚本;
    软件以及软件包管理_第5张图片
  • -qpi:查询未安装的软件包的说明信息,安装以后生成的文件;
  • 升级
    • rpm -Uvh PATH_TO_NAME:如果存在老版本的,则升级,否则安装;
    • rpm -Fvh PATH_TO_NAME:如果存在老版本的,则升级,否则退出;
  • 降级安装:
    • rpm -ivh --oldpackage
  • 卸载
    • -e:用于卸载软件,由于存在依赖性关系,卸载时该软件包不能被其他软件
      包依赖,否则不能卸载;
      • --nodeps:可以使用这个命令来强行卸载;
  • 校验:

    • -V: 校验来源合法性以及软件完整性;
    • 如果被修改会有以下信息改变:
      • S:表示文件大小改变;
      • M:表示文件权限改变;
      • 5:表示文件校验码改变;
      • D:设备文件的主设备号,次设备号不匹配;
      • L:表示路径不匹配;
      • U:所有者不匹配;
      • G:表示所有组不匹配;
      • T:表示最近一次的修改时间发生改变;
  • 对于软件包来说,首先需要导入秘钥信息.然后使用命令进行软件的校验

  • 涉及软件的加解密操作:
    • 文件在/etc/pki/rpm-gpg/ RPM-GPG-KEY-redhat-release文件,使用rpm –K PACKAGE_FILE来检查安装包本身是否是合法的,这个是用来验证redhat 的软件包是否是合法的;
[root@server23 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 
[root@server23 ~]# rpm -K the name of rpm package
  • 软件来源的合法性,使用的算法包括:DSA,GPG,如果需要忽略这个选项使用--nosignature选项;
  • 软件包完整性:常用的算法包括sha1 md5,如果需要忽略这个选项使用--nodigest;
  • rpm 数据库的两种管理方式:

    • 数据库的初始化--initdb:数据库在不存在时,才需要进行初始化操作,数据库不存在时,会进行建立操作,否则是不会进行建立操作的
    • 数据库的重建操作--rebuild:表示重新建立数据库,无论是否存在,是一定会重新建立数据库的;
  • Yum软件包管理器

  • Yum是一种C/S架构的应用,是用来解决依赖关系的前端工具,大致的工作流程如下:
    • 1.首先Client连接Server (Yum Repository)获得需要的软件包;
    • 2.使用类似的Rpm命令进行安装;
    • 3.在本地分析所安装的软件包的依赖关系,并结合已经安装的依赖,分析出还需要安装的软件包;
    • 4.Yum再次查询软件仓库的到还需要安装的软件包,然后同时安装;
    • 5.rpm软件包提供某种能力,在Yum仓库里面结合数据库整理所有软件包的能力形成一张表格,用于进行检索;
    • 6.这张表格可以下载到本地,进行依赖关系的分析,Yum的缓存目录就是用来存储这些元数据文件的;
    • 7.按需下载,并且清除不需要的软件包;
  • Yum软件仓库的文件:
    • 可以将Rhel/Centos ISO镜像文件用来制作软件仓库,使用命令Createrepo来生成元数据文件;
    • yum仓库里面的元数据文件:
      • primary.xml.gz:
        • 1.表示当前所有RPM软件包的列表;
        • 2.依赖关系;
        • 3.每个RPM安装生成的文件列表;
    • filelists.xml.gz:
      • 1.所有RPM软件包的所有文件列表;
    • other.xml.gz :
      • 1.额外信息,RPM软件包的修改日志;
    • repomd.xml :
      • 上述三个文件的时间戳和校验和,为了防止安装包被修改或者时间过期;
    • comp*-core.xml:
      • RPM分组信息,三类,必须,建议,可选安装的;
  • yum命令
    • install:安装
      • --nogpgckeck:不用于检查 gpg
    • update:用于升级软件包;
    • update-to:用于指定升级到某个版本
    • check-update:用于检测更新;
    • remove:用于移除软件包;
    • list:用于列出软件包;
      • all:用于列出所有的软件包;
      • available:用于列出可用的软件包;
      • install:用于列出安装的软件包;
      • updates:用于列出可以升级的软件包;
    • info:用于查询某个软件包的具体信息;
    • provides:查看指定文件或者特性是有哪个软件包提供的;
    • clean:用于清除缓存信息,
      • packages:表示清理软件包;
      • metadata:表示清理元数据文件;
      • headers:用于清除头信息;
      • all:用于清除缓存的所有信息;
    • makecache:用于生成缓存信息;
    • groups:用于查询某些组的软件包;
    • groupinfo:显示组信息;
    • reinstall:表示用于重新安装某些软件包;
    • localinstall:安装包在本地时,使用 localinstall 可以自动解决依赖关系,如果安装的是来自互联网上的安装包时,可以使用—nogpgckeck,来解决依赖关系;
    • downgrade:表示用于降级安装;
    • repolist:用于列出相关的软件包;
      • all:列出所有文件;
      • enabled:表示默认的启用的软件仓库;
      • disabled:表示禁用的软件仓库;
  • 将自己的软件包建立软件仓库:

    • 将相关的软件移动到某个仓库里面;
    • 执行命令createrepo创建生成相关的配置文件;
  • Yum提供的配置文件

  • /etc/yum.conf/:
    软件以及软件包管理_第6张图片
  • cachedir=/var/cache/yum:表示软件安装过程中的,缓存目录;
  • keepcache:表示缓存是否进行保存;
  • logfile=/var/log/yum.log:表示日志文件的位置,里面记录的是软件的安装和卸载信息;
  • tolerant=1:表示安装软件包的过程中,对于已经安装的软件包在安装的过程中,不输出错误信息,并且也不进行安装
  • exactarch=1:表示Yum仓库的软件安平台必须和当前系统平台的严格匹配;
  • obsoretes=1:表示过期的软件包是否进行废弃,1表示进行废弃;
  • gpgcheck=1:检查来源合法性,检查需要提供密钥文件;
  • debuglevel=:表示的是调制级别;
  • plugins=:表示是否允许插件;
  • 对于自己定义的配置文件的命名格式filename.repo格式,否则不会被识别;
  • 关于自定义配置文件的说明
    软件以及软件包管理_第7张图片
  • [base]: 表示repo的唯一标识符;
  • name=basesoftware::关于软件仓库的描述信息;
  • baseurl=http://172.25.23.250/rhel6.5/:用于指定repo软件仓库所在的具体位置,支持的方式包括file http ftp
  • gpgcheck=0:默认是1,表示是否用于检测来源合法性;
  • gpgkey=:用于指定秘钥文件的位置,通常是一个路径值,Redhat提供的路径通常在/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-released,也有可能是由http,或者ftp服务器提供;
  • enabled:表示这部分软件仓库的定义信息是否生效;
  • 创建Yum仓库
  • 首先需要创建一个软件目录
[root@server23 ~]# mkdir /yum/VT -pv
  • 给这个目录里面一些rpm软件包
facter-1.6.13-1.el6.x86_64.rpm
facter-2.4.4-1.el6.x86_64.rpm
hiera-1.1.0-1.el6.noarch.rpm
hiera-1.3.4-1.el6.noarch.rpm
puppet-3.0.1-1.el6.noarch.rpm
puppet-3.8.1-1.el6.noarch.rpm
puppet-dashboard-1.2.12-1.el6.noarch.rpm
puppet-dashboard-1.2.23-1.el6.noarch.rpm
puppet-server-3.0.1-1.el6.noarch.rpm
puppet-server-3.8.1-1.el6.noarch.rpm
  • 然后需要安装createrepo
[root@server23 VT]# yum install createrepo -y
  • 使用命令创建
[root@server23 ~]# createrepo /yum/VT/
Spawning worker 0 with 21 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
  • 首先来查看软件仓库里面已经存在的信息
    软件以及软件包管理_第8张图片
  • 然后编辑配置文件,添加配置的一段信息
# Create repo by myself
[YumVT]
name=Yum VT Repository
baseurl=file:///yum/VT
gpgcheck=0
  • 接下来查看多出来的 软件仓库
    软件以及软件包管理_第9张图片
  • 这里可以看到多出来的自定义YumVT的信息,一共包含21个软件包;
  • 在这里目录里面其实多的是yum仓库的元数据信息
[root@server23 repodata]# pwd
/yum/VT/repodata
[root@server23 repodata]# ls
4af5be4583c6324a2159a122ebb78dbf1c1ee603235e8016ad20999fadd5d1c5-filelists.xml.gz
522c70b653e96bb4ab2c97fb44bf9eba8aac2768a65af269949b4e21cd40b049-other.sqlite.bz2
86370925536a7b1d8a57126d6f898ed72ee4b0a942460af74330ef94f119487a-primary.xml.gz
a95cbc179f2d540d01bd4ae63f618e815f018bb2f3a5302fc0b794068540744d-other.xml.gz
b0d6493c0375a09b9e3215049b16a86a7145188ab24e8ee466013eced055e245-filelists.sqlite.bz2
f7beed7dad2322922feca58e064fd6eb722c218b3c8094523ad3983e9df3c9c0-primary.sqlite.bz2
repomd.xml
  • 关于软件编译安装的注意事项
  • 源代码需要通过指定某些特性之后,可以生成二进制格式的文件,如果在编译时没有指定某些软件特性,那么这些特性是无法使用的,就需要重新进行软件的编译安装;
  • make:是 C 语言或者 C++的项目管理工具,makefile文件定义了gcc按照何种次序来管理这些源程序文件中的程序的;make 本身是调用gcc,或者g++编译器;
    makefile并不属于源程序文件,也不是开发者必须开发的软件;
  • 软件编译安装的三步骤:
    • ./configure:
      • 用于指定安装软件的特性,这通常是一个可执行的脚本文件,根据指定的特性检查系统所必须的头文件,语言环境是否是正确的,并且根据这些信息生成makefile文件;
      • --help:用于获取使用帮助,可以用于得到软件编译安张的特性信息;
      • --prefix=/path/to/something:用于指定软件的编译安装路径;
      • --sysconfdir=/path/to/config_path:用于指定配置文件的路径;
      • 作用:
        • 1.用户选择编译特性;
        • 2.检查编译环境,需要配置环境;
        • 3.需要解决依赖关系:
          • a.不起用相关的功能,通常会有提示
          • b.安装需要的模块 需要安装libiary-devel;
        • makefile.in :需要结合生成./configure生成makefile;
    • make :
      • 根据makefile根据当前系统的环境和配置属性,并且结合makefile编译生成大量的库文件和配置文件等信息
    • make install:
      • 将生成的文件放在系统上面合适的位置;
  • 编译安装之后
  • 1.修改环境变量,用于识别此生序的的二进制文件路径;
    • /etc/profile.d/中建立一个以*.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/something的文件;
  • 2.默认情况下,系统库搜索库文件是/lib,/usr/lib,如果需要增加额外的库文件,需要增加路径/etc/ld.so.conf.d/,创建以*.conf为后缀名的文件,把需要增加的路径写入这个文件里面;然后需要执行:ldconfig -v:表示重新搜寻库文件的过程;
  • 大多数应用程序是提供头文件的,通过二次开发的程序,提供的配置文件,通过使用#include来包含着写头文件的,每一个输出了库文件的软件,系统默认的头文件的位置在/usr/local/里面增添头文件输出路径,可以使用链接来进行:
通过将/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里面,关于man的配置文件在/etc/man.config
# MANDATORY_MANPATH         manpath_element
# MANPATH_MAP       path_element    manpath_element
# MANDB_MAP     global_manpath  [relative_catpath]
  • 如果需要指定man函数的连接,使用MANPATH路径定义找到的man,如果需要的化在里面添加一条MANPATH /usr/local/tenginx/man;
man:
    1.-M:指定路径 /PATH/TO/MAN_DIR  COMMAND
    2./etc/man.config中添加一条MANPATH

你可能感兴趣的:(Linux运维笔记,Yum,rpm,软件编译安装思路)