当前位置:操作系统 > Unix/Linux >>

SlackwareLinux技术内幕之--包管理机制

郑重声明:本文从行文构思到章节安排均由本人独自完成,未参考任何网文,书籍、杂志。没有任何侵权行为。文中内容如果是参考网文的,我均已做明确标示.

  简介:包管理机制是Slackware区别于其他Linux 发行版的重要的甚至是本质的区别。Slackware的包管理机制简单、灵活、高效、安全,用户透明性大,可定制程度高。因为Slackware的标准包管理工具皆为Shell脚本,这样,你可用简单而又方便的对其进行修改、移植。但是也存在一些不足之处,比如没有灵活的网络安装模式等。本文对 Slackware的包管理进行全面详细的介绍。

  第一部分 Slackware标准包管理

一、简介



  包管理机制是Slackware区别于其他Linux 发行版的重要的甚至是本质的区别。Slackware的包管理机制简单、灵活、高效、安全,用户透明性大,可定制程度高。因为Slackware的标准包管理工具皆为Shell脚本,这样,你可用简单而又方便的对其进行修改、移植。但是也存在一些不足之处,比如没有灵活的网络安装模式等。本文对 Slackware的包管理进行全面详细的介绍。

二、基本架构



  所使用的文件及目录:
  • /bin/installpkg:用于安装Slackware包
  • /sbin/removepg:用于删除Slackware包
  • /sbin/explodepkg:用于解压Slackware包
  • /sbin/upgradepkg:用于更新Slackware包
  • /sbin/makepkg:用于制做Slackware包
  • /sbin/pkgtool:用于安装|删除|查看Slackware包
  • /bin/tar-1.13:用于安装、解压等
  • /bin/dialog:用于生成基于文本的图形界面
  • install-packages:Slackware CD下使用的shell脚本
  • tagfile:用于说明包的安装优先级别
  • /var/log/packages:保存已安装的Slackware包的基本信息
  • /var/log/scripts:保存已安装的Slackware包的安装脚本
  • /var/log/removed_packages:保存已删除的Slackware包的基本信息
  • /var/log/removed_scripts:保存已删除的Slackware包的安装脚本

三、命令使用说明



  1.explodepkg---解压

  它主要用来对Slackware的tgz包进行维护,只是简单的解压.tgz包,并不运行解压目录下的install或/var/log/setup目录下的安装脚本。explodepkg解压tgz包,然后通过对其中的文件进行修改、升级,最后再用 makepkg制做Slackware可用的tgz包。explodepkg也可以 对多个tgz 包逐个进行解压,格式如下:

  #explodepkg package1.tgz package2.tgz ...

  

  提示:explodepkg实际上用的是tar进行解压,运行explodepkg和运行tar xzvf package1.tgz效果完全一样!

  警告:explodepkg(实际上所有的那些工具包括installpkg|removepkg等)所用的tar版本不得>1.13(默认使用1.13),否则不稳定。查看/bin目录,可以发现里面同时有tar-1.13和tar-1.14.

  2.installpkg---安装

  使用Slackware,你免不了用用到它。installpkg提供了丰富的参数,使得包的安装简单、灵活、安全而又 快捷。下面是常用参数简介:

  
  • -warn:在标准输出上显示出将安装哪些包,哪些包将会被覆盖,强烈建议使用该选项!
  • -root:自定义安装目录而不采用默认的目录。在制做LiveCD时你也许少不了要使用该项。
  • -menu:使用该项后会跳出一个文本图形,让你选择安装/不安装/退出。一般用于其他程序调用installpkg进行安装的情况,当然你喜欢图形界面,也可以试试.
  • -tagfile:指定安装使用的tagfile文件,该文件用于说明包的安装属性(自动|建议|可选|忽略).


  其他的参数请man installpkg.

  使用实例:

  #installpkg package.tgz#installpkg -warn package.tgz#installpkg -warn -install package.tgz#installpkg -menu -root /usr/local package1.tgz package2.tgz#installpkg -menu -root /usr/local -tagfile/b]./tagfile package1.tgz package2.tgz

  3.removepkg --删除

  removepkg提供多种格式让你可用非常轻松的删除已经安装的Slackware包,删除过程会完整的显示哪些包已被删除。你可用指定该包的全名、基本名,例如:已经安装了一个名为test-1.0-i386-1.tgz 的包,那么可用如下格式进行删除:

  #removepkg test-1.0-i386-1.tgz#removepkg test-1.0-i386-1#removepkg test.tgz#removepkg test

  提示:
  1. 你可用通过查看/var/log/packages来得知你已经安装了哪些Slackware包。
  2. removepkg删除前会进行包的依赖性检查(这就是为什么运行该命令一段时间后你才能看到deleting的输出信息),并且只删除那些没有依赖关系的包。可见其安全性!
  3. removepkg删除软件包后会将/var/log/packages下的相应项移至/var/log/removed_packages.而将安装脚本从/var/log/scripts移至/var/log/removed_packages
  4. removepkg也提供一些可选参数,请man removepkg.


  4.upgradepkg --更新

  

  upgradepkg将一个老的Slackware .tgz包升级到一个新的版本。它将新版本的软件包安装到系统上,并且删除那些在新版本中没有的老版本的文件。
  1. 如果新老版本的软件包名字一样(比如都为package.tgz)。那么我们只要如下操作,就可完成包的更新:

      #upgradepkg package.tgz
  2. 通常新老版本的Slackware包名字是不一样的,比如一个是package1.pkg(老),一个是package2.tgz(新),那么,操作为:

      #upgradepkg package1.tgz%package2.tgz


  注意:
  • %前后不能有空格!
  • 进行更新前,请备份相应的配置文件(比如/etc下)。如果要强行安装新的配置文件,请手动删除老配置文件。


  提示:
  • 如果要指定在某目录下(比如/mnt)进行更新而不是默认的/,那么操作如下:

      ROOT=/mnt upgradepkg package.tgz
  • 一些参数提供额外的功能,使更新更灵活方便。具体请man 8 upgradepkg.


  5.makepkg --制作

  1)为什么要制作Slackware包?

  我认为:
  • 并非所有的软件都有Slackware支持的tgz包供使用,自己制作可以方便下次使用也可提供给别人使用。
  • 使用Slackware包(而不是源代码)方式进行安装,可以方便以后对之进行维护(删除|更新等)。


  2)制作方法:

  这里为以制做cce的Slackware包为例,说明makepkg的使用方法。
  1. 首先制作一个临时目录,以便将所有要制做成软件包的文件放于此目录。假设为works,则建立目录:

      # mkdir /works
  2. 接着解压cce-0.51.tar.gz:

      # tar zxvf cce-0.51.tar.gz
  3. 进入解压目录,进行configure,注意configure的参数应该指定安装目录为/works,如下:

      # cd cce-0.51# ./configure --prefix=/works
  4. 接下来,进行make,make install:

      # make && make install
  5. 现在/works目录即为cce的主要程序以及其他文档的存放点。我们进入该目录,然后makepkg:

      # cd /works; makepkg cce.tgz

      makepkg会将/works目录下的所有文件以tar和GNUzip工具打包压缩成Slackware可用的.tgz包。如果在此过程中遇到符号链接的问题,makepkg会制做一个建立这些文件链接的脚本(script),并询问你是否将这些脚本写入install/doinst.sh文件中,并将该目录下的链接文件删除。我们一般选择yes,让makepkg自动处理那些链接问题。这样就会生成一个doinst.sh文件(存放该文件的install目录也会建立),其内容简单,就是建立这些链接的脚本(或者说命令)。当我们使用installpkg进行安装时,便可使用doinst.sh建立那些符号链接。

      接下来,makepkg会询问是否将所有文件的权限设置为755 (rwxr-xr-x)并将所有者设为root.root.基于安全考虑也应选yes.

      

      现在makepkg就开始进行包的制作了,一会儿就好了。现在你就可以使用installpkg安装/works目录下的cce.tgz了。当然现在我们可以删除/works目录:

      # rm -rf /works

      包制作已经完成,如果你又想往里面加入其他文件,或者对其中的文件进行修改,那么可以使用explodepkg对包进行解压,增加|修改后,重复以上步骤,直到你满意为止!


  注意:
  • makepkg制作软件包只适合于使用autoconf automake 这些自动配制工具规则的软件。
  • 如果想将编译好的文件复制到指定目录,便于制作tgz包,可以在make install 后加上DESTDIR=/YOUR_DIR 或 ROOT=/YOUR_DIR 或 prefix=/YOUR_DIR ( 推荐率由前往后) 。(由hupeng923提供)
  • 最好不在./configure的时候加 --prefix=/YOUR_DIR (想安装到此目录除外)。因为在 ./confiure 后加了--prefix=/work 后,编译出的二进制文件可能会保留指向/work的链接,打包成tgz让别人安装后,二进制文件可能还会搜索/work的路径。我自己做过这样的实验。(由hupeng923提供)


  软件包的描述文件--slack-desc的制作

  这是一个附加(或者非必须)部分,makepkg不会为你建立一个slack-desc文件,为了制作一个标准的Slackware包,我建议大家在制作Slackware时制作此文件!slack-desc也位于install目录下,该文件要
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,