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 包逐个进行解压,格式如下:

<pre>
#explodepkg package1.tgz package2.tgz ...
</pre>

提示: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.

使用实例:

<pre>
#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
</pre>

3.removepkg --删除

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

<pre>
#removepkg test-1.0-i386-1.tgz
#removepkg test-1.0-i386-1
#removepkg test.tgz
#removepkg test
</pre>

提示:

 

  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)。那么我们只要如下操作,就可完成包的更新:
    <pre>
    #upgradepkg package.tgz
    </pre>

     

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

注意:

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

提示:

  • 如果要指定在某目录下(比如/mnt)进行更新而不是默认的/,那么操作如下:
    <pre>
    ROOT=/mnt upgradepkg package.tgz
    </pre>

     

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

5.makepkg --制作

1)为什么要制作Slackware包?
我认为:

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

2)制作方法:
这里为以制做cce的Slackware包为例,说明makepkg的使用方法。

  1. 首先制作一个临时目录,以便将所有要制做成软件包的文件放于此目录。假设为works,则建立目录:
    <pre>
    # mkdir /works
    </pre>

     

  2. 接着解压cce-0.51.tar.gz:
    <pre>
    # tar zxvf cce-0.51.tar.gz
    </pre>

     

  3. 进入解压目录,进行configure,注意configure的参数应该指定安装目录为/works,如下:
    <pre>
    # cd cce-0.51
    # ./configure --prefix=/works
    </pre>

     

  4. 接下来,进行make,make install:
    <pre>
    # make && make install
    </pre>

     

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

    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目录:

    <pre>
    # rm -rf /works
    </pre>

    包制作已经完成,如果你又想往里面加入其他文件,或者对其中的文件进行修改,那么可以使用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目录下,该文件要遵循一定的格式,否则不会被显示!

"#"开始的行为注释。行长度不得超过表尺的右边界,共11行,哪怕你的描述没有那么多,要要保证有11行,当然这可用空行补上。如下源文件:

<pre>
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|' on
# the right side marks the last column you can put a character in. You must make
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
       |-----handy-ruler--------------------------------------------------------------|
kdebase: kdebase (KDE base package)
kdebase:
kdebase: Core applications for the K Desktop Environment. Included are: kdm
kdebase: (replacement for xdm), kwin (window manager), konqueror (filemanager,
kdebase: web browser, ftp client), konsole (xterm replacement), kicker
kdebase: (application starter and desktop pager), kaudio (audio server),
kdebase: kdehelp (viewer for kde help files, info and man pages), kthememgr
kdebase: (system for managing alternate theme packages) plus other KDE
kdebase: components like kcheckpass, kikbd, kscreensaver, kcontrol, kfind,
kdebase: kfontmanager, kmenuedit, and kappfinder.
kdebase:
</pre>

6.pkgtool--工具集

简介:pkgtool可以让你在交互式的图形界面下进行包的安装|删除,以及查看已安装的包。当然,通过它我们还可以进行一些基本的系统配置(比如鼠标|时区|Lilo|服务等)。

工作机理:

  • Current:调用/sbin/installpkg安装当前目录下的Slackware支持包。
  • Other:调用/sbin/installpkg安装指定目录下的Slackware支持包。
  • Remove:扫描/var/log/packages目录,返回已安装包的清单。选定欲删除的包后,调用 / sbin/removepkg进行删除。
  • View:扫描/var/log/packages目录,返回已安装包的基本包名(除去.tgz剩下的部分)清单。
  • Floppy:调用/sbin/installpkg安装指定软驱设备上的Slackware包。
  • Setup:使用/var/log/setup目录下的setup.*文件(比如setup.05.fontconfig)进行基本的系统配置。你可以删除此目录下的文件使Setup中设置项也相应删除。反之,也可以加入自己的setup.文件!

四、Slackware包管理机制的问题

  1. 安装时包的依赖性管理差,默认缺少依赖性包也会安装上Slackware包。
  2. 没有网络安装模式,只能从本地安装Slackware包。
  3. 如果采用的是源代码方式安装软件包,那么标准包管理机制对这些包的管理维护似乎显得束手无策。

相应的解决办法得依靠外来得Slackware包管理工具。

你可能感兴趣的:(脚本,application,character,工具,图形,Components)