`
weiyinchao88
  • 浏览: 1235186 次
文章分类
社区版块
存档分类
最新评论

slackware包的管理机制

 
阅读更多
一.简介<!-- begin content -->

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

二.基本架构<!-- begin content -->

所使用的文件及目录:

  • /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包的安装脚本

三、命令使用说明

<!-- begin content -->

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包管理机制的问题

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

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

分享到:
评论

相关推荐

    拍手:Slackware Linux软件包资源管理器(控制台和GUI)

    - **简洁**:Slackware的包管理系统相对简单,没有复杂的依赖解析机制,适合对系统有深入理解的用户。 - **自由**:由于Slackware强调自由和控制,它的包管理方式允许用户完全掌控自己的系统。 - **可定制**:用户...

    SlackPkg - package tool for Slackware-开源

    SlackPkg是一款专为Slackware设计的开源包管理工具,它的出现极大地简化了软件包的安装、更新以及卸载过程。 **SlackPkg的特性与功能** 1. **自动化下载与安装**:SlackPkg的一个主要优点是能够自动下载并安装...

    slackbook 3.0

    2. **简洁性**:与其他发行版相比,Slackware的包管理系统更加简单,没有复杂的依赖关系处理工具。 3. **安全性**:由于其更新策略较为保守,Slackware在安全方面表现优异。 4. **学习价值**:对于希望深入了解Linux...

    pycrypto.SlackBuild:用于PyCrypto的Slackware构建脚本

    通过理解Slackware的包管理机制和Shell脚本的工作原理,以及PyCrypto库提供的加密服务,IT专业人员可以更好地维护系统安全,开发安全的加密应用程序。在实际操作中,还应注意遵循最佳实践,如定期更新脚本以获取最新...

    linux安装的文档

    Fedora Core/Redhat早期因其RPM包管理机制受到批评,而现在FC以其丰富的功能和较快的更新速度吸引用户,但有时可能运行速度较慢,适合愿意尝试新特性的用户。 Linux From Scratch(LFS)提供了一种自定义构建操作系统...

    Slackpack Package Manager-开源

    对于Slackware Linux,一个以简洁和稳定著称的发行版,它的默认包管理系统相对基础,主要依赖命令行工具如`installpkg`和`removepkg`。然而,Slackpack 的出现,为Slackware用户提供了一个更直观、友好的交互方式来...

    SCIM(Linux 中文输入法)

    在大多数Linux发行版中,SCIM可以通过包管理器(如`apt`或`yum`)进行安装。安装完成后,需要配置系统以启动SCIM,并将其与桌面环境集成。例如,在Gnome或KDE环境下,通常需要设置SCIM作为默认的输入法框架,并在...

    alien_7.21.tar.rar

    在Linux世界里,各种不同的发行版有着各自的软件包管理机制,如RPM(Red Hat Package Manager)用于Fedora、CentOS等系统,DEB(Debian Package)则服务于Ubuntu、Debian等。这种多样性为用户带来了便利,但同时也...

    SWareT-开源

    对于那些想要深入了解Linux包管理机制或者希望改善现有工具的人来说,SWareT的源代码是一个宝贵的资源。 总之,SWareT是Slackware用户的一大福音,它使得这个以手动操作为主的发行版变得更加现代化和易用。通过这个...

    slackcurrent-开源

    首先,让我们深入了解Slackware的更新机制。Slackware使用打包管理系统,如`pkgtools`,其中包括`installpkg`和`removepkg`等工具,用于安装和卸载软件包。然而,由于Slackware的哲学,它并不提供像其他Linux发行版...

    slack-desc-开源

    `sbin`和`install`目录中的内容则揭示了工具的运行机制和安装流程,展示了Slackware软件包管理的细节。通过深入理解和使用这些资源,无论是开发者还是系统管理员,都能更好地掌握Slackware的软件包管理,提升系统...

    compat32pkg-开源

    1. **包管理**:该工具提供了一套完整的包管理机制,允许用户轻松地安装、更新和移除32位软件包,类似于其他Linux发行版中的包管理器(如`apt`或`yum`)。 2. **依赖处理**:自动处理32位软件包的依赖关系,确保...

    slackbuilds:我的修改

    5. **软件包管理**:由于Slackware没有像其他Linux发行版那样的包管理系统(如apt或yum),SlackBuilds提供了一种有效的替代方式,使得用户能方便地获取和安装软件,同时保持系统的纯净和可控。 6. **安全性与可靠...

    slackbuilds:SlackBuild 脚本

    它们遵循一定的结构和规范,以确保与 Slackware 的包管理系统兼容。通过使用 SlackBuild 脚本,用户无需详细了解编译过程,只需运行脚本,即可完成软件的安装。 在描述中提到的“我的 SlackBuild 脚本集”,可能是...

    Linux简答题汇总.pdf

    综合以上内容,我们可以看到Linux系统具有多样的发行版,提供了灵活的桌面环境选择,功能强大的shell操作以及完善的用户账户管理机制。这些知识点覆盖了Linux系统的基础架构、图形界面、用户交互、系统安全和管理等...

    linux下google浏览器chrome最新版本

    总之,Google Chrome在Linux上的安装和使用涉及到了Linux文件系统的理解、脚本的执行以及对可能的依赖库的管理。通过正确操作,Linux用户可以在享受Chrome带来的强大浏览功能的同时,充分利用Linux系统的稳定性和...

    Packware-开源

    Packware,一款专为Slackware Linux设计的开源软件包管理工具,它以其强大的功能和灵活性在Linux社区中独树一帜。作为Slackware Linux的扩展,Packware旨在简化软件的安装、升级和卸载过程,提供了一个更为高效且...

    详细讲解配置Linux系统下的动态DNS服务

    总的来说,配置Linux下的DDNS服务涉及DNS服务器软件(如BIND-DNS)与DHCP服务器的协作,以及安全机制的建立,包括密钥的生成和配置文件的正确修改。这个过程对于自动化网络设备的IP地址管理和保持DNS记录的实时更新...

    linux 内核裁剪、文件系统制作等

    - **Slackware vs Debian**:不同的Linux发行版有不同的init实现方式,Slackware使用简单的脚本,而Debian则使用更复杂的机制。 #### 四、引导过程 引导过程是指从系统加电开始直到操作系统完全启动的过程。了解这...

    Linux操作系统线程库性能测试与分析

    这些改进主要得益于NPTL对内核特性的充分利用,以及对用户级线程管理机制的优化。对于追求高性能的服务器系统而言,NPTL无疑是一个值得期待和采用的选择。然而,值得注意的是,NPTL的这些优势在一定程度上依赖于内核...

Global site tag (gtag.js) - Google Analytics