1. 引言

Slackware Linux是历史最悠久的Linux发行版之一,以其简洁、稳定和接近Unix的设计理念而著称。与其他现代Linux发行版不同,Slackware的包管理系统相对简单直接,它不会自动处理软件包之间的依赖关系,这既是它的特点,也是新手可能面临的挑战。

本教程将全面介绍Slackware的包管理器,从基础命令到高级应用,帮助读者掌握软件安装、卸载、更新以及依赖关系处理的实用方法与案例。无论你是Slackware新手还是有经验的用户,都能从本教程中获得有价值的信息。

2. Slackware包管理基础

2.1 包管理器介绍

Slackware主要使用两种包管理工具:

  1. pkgtool:基础的包管理工具,提供简单的文本界面用于安装、卸载和查看软件包。
  2. slackpkg:更高级的包管理工具,可以处理网络安装、系统更新等任务。

与其他Linux发行版(如Debian的apt或Red Hat的yum)不同,Slackware的包管理器不会自动解决依赖关系。这意味着用户需要手动确保安装了所有必需的依赖库和程序。

2.2 基本命令

pkgtool命令

# 启动pkgtool交互式界面 pkgtool # 安装软件包 installpkg package-name.tgz # 卸载软件包 removepkg package-name # 升级软件包 upgradepkg old-package.tgz,new-package.tgz # 查看已安装的软件包 ls /var/log/packages 

slackpkg命令

# 更新软件包列表 slackpkg update # 升级整个系统 slackpkg upgrade-all # 安装软件包 slackpkg install package-name # 卸载软件包 slackpkg remove package-name # 搜索软件包 slackpkg search package-name # 查看软件包信息 slackpkg info package-name 

2.3 包的格式和结构

Slackware使用.tgz、.tbz或.txz格式的软件包,这些实际上是压缩过的tar归档文件。一个典型的Slackware软件包包含以下部分:

  • 安装脚本(install/doinst.sh):在安装后执行的脚本
  • 文件列表:包含软件包将安装的所有文件
  • 实际文件:程序、库、文档等

软件包通常存储在以下位置:

  • 官方软件包:/slackware64/(对于64位系统)
  • 第三方软件包:/extra/和/testing/

3. 软件安装

3.1 使用slackpkg安装软件

slackpkg是Slackware的官方包管理工具,适合从官方仓库安装软件。

# 首先更新软件包列表 slackpkg update # 搜索软件包 slackpkg search vim # 安装软件包 slackpkg install vim # 安装多个软件包 slackpkg install vim git curl 

安装过程中,slackpkg会显示将要安装的软件包列表,并要求确认。安装完成后,软件包及其文件会记录在/var/log/packages目录中。

3.2 手动安装软件包

有时你可能需要手动下载并安装软件包,特别是对于第三方或非官方软件包。

# 下载软件包 wget http://example.com/package-name.txz # 安装软件包 installpkg package-name.txz # 或者使用pkgtool pkgtool 

在pkgtool界面中,选择”Install packages from the current directory”,然后选择要安装的软件包。

3.3 从源码安装

在Slackware中,从源码安装软件也是一种常见做法,特别是对于那些没有预编译包的软件。

# 下载源码 wget http://example.com/software-version.tar.gz # 解压源码 tar -xzf software-version.tar.gz cd software-version # 配置编译选项 ./configure --prefix=/usr/local # 编译 make # 安装 make install 

为了更好地管理系统,建议使用SlackBuild脚本从源码构建软件包。SlackBuild脚本是一组用于构建Slackware兼容软件包的脚本。

# 下载SlackBuild脚本和源码 wget http://slackbuilds.org/slackbuilds/package-name/SlackBuild wget http://example.com/software-version.tar.gz # 运行SlackBuild脚本 chmod +x SlackBuild ./SlackBuild # 生成的软件包会在/tmp目录下 installpkg /tmp/package-name-version-arch.txz 

4. 软件卸载

4.1 使用slackpkg卸载

使用slackpkg卸载软件非常简单:

# 卸载软件包 slackpkg remove package-name # 卸载多个软件包 slackpkg remove package1 package2 package3 

slackpkg会显示将要卸载的软件包列表,并要求确认。卸载完成后,软件包的记录会从/var/log/packages目录中移除。

4.2 手动卸载

如果你手动安装了软件包,可以使用removepkg命令卸载:

# 卸载软件包 removepkg package-name # 卸载特定版本的软件包 removepkg package-name-version # 查看将要删除的文件(不实际删除) removepkg -warn package-name 

对于从源码安装的软件,通常需要手动删除安装的文件,或者使用make uninstall(如果软件支持):

# 进入源码目录 cd software-version # 卸载 make uninstall 

5. 软件更新

5.1 系统更新

Slackware不频繁发布版本,而是通过安全补丁和更新来保持系统的稳定和安全。使用slackpkg可以轻松更新整个系统:

# 更新软件包列表 slackpkg update # 检查可用更新 slackpkg upgrade-all # 应用所有更新 slackpkg upgrade-all 

在执行upgrade-all时,slackpkg会显示所有可用的更新,并询问是否要继续。更新完成后,可能需要重启系统以应用某些更改(如内核更新)。

5.2 单个软件更新

如果你只想更新特定的软件包,可以使用以下方法:

# 使用slackpkg更新特定软件包 slackpkg upgrade package-name # 手动更新软件包 upgradepkg old-package-version.txz,new-package-version.txz # 如果只提供新软件包,upgradepkg会自动查找已安装的旧版本 upgradepkg new-package-version.txz 

6. 依赖关系处理

6.1 Slackware依赖关系特点

Slackware的包管理器不会自动处理依赖关系,这是它与大多数其他Linux发行版的主要区别。这意味着:

  • 安装软件包时,不会自动安装其依赖的库或程序
  • 卸载软件包时,不会检查是否有其他软件包依赖于它
  • 用户需要手动确保所有依赖关系都得到满足

6.2 处理依赖问题的方法

手动解决依赖

  1. 检查依赖:尝试运行程序或查看文档以了解其依赖
  2. 查找依赖包:使用slackpkg search或在线资源查找所需的包
  3. 安装依赖:使用slackpkg install或installpkg安装依赖包
# 查找包含特定库的软件包 slackpkg search library-name # 安装依赖包 slackpkg install dependency-package 

使用第三方工具

有一些第三方工具可以帮助处理Slackware的依赖关系:

  1. sbopkg:用于管理SlackBuilds.org的软件包
  2. slpkg:提供类似apt的功能,包括依赖解析
  3. sbotools:另一套SlackBuilds管理工具

以sbopkg为例:

# 安装sbopkg slackpkg install sbopkg # 同步SlackBuilds仓库 sbopkg -r # 搜索软件包 sbopkg -i package-name # 查看依赖 sbopkg -d package-name # 构建并安装软件包及其依赖 sbopkg -i package-name 

6.3 使用第三方仓库

除了官方仓库外,还有一些第三方仓库提供了更多的软件包和依赖关系处理:

  1. SlackBuilds.org (SBo):提供大量软件的SlackBuild脚本
  2. MSB (MATE SlackBuild):提供MATE桌面环境及相关应用
  3. Slackonly:提供额外的软件包

使用这些仓库通常需要手动添加配置文件或使用特定的工具。

7. 高级应用

7.1 包管理器配置

slackpkg的配置文件位于/etc/slackpkg/slackpkg.conf,你可以编辑此文件来自定义slackpkg的行为:

# 编辑配置文件 nano /etc/slackpkg/slackpkg.conf 

一些常用的配置选项包括:

# 设置默认下载后删除 DELALL=on # 启用彩色输出 USECOLORS=on # 设置要排除的软件包模式 EXCLUDE=(kernel-* glibc-* aaa_elflibs-*) # 启用GPG检查 CHECKGPG=on 

7.2 自定义软件源

默认情况下,slackpkg使用官方Slackware镜像。你可以编辑/etc/slackpkg/mirrors文件来更改镜像源:

# 编辑镜像文件 nano /etc/slackpkg/mirrors 

注释掉默认镜像,并添加你选择的镜像:

# 默认镜像 # http://slackware.osuosl.org/slackware64-15.0/ # 选择一个更快的镜像 http://slackware.mirrors.tds.net/pub/slackware/slackware64-15.0/ 

7.3 批量操作

你可以使用slackpkg进行批量操作,例如安装多个软件包:

# 从文件安装多个软件包 slackpkg install package1 package2 package3 # 或者创建一个包含软件包列表的文件 cat > packages.txt <<EOF package1 package2 package3 EOF # 使用xargs批量安装 xargs slackpkg install < packages.txt 

7.4 故障排除

软件包损坏

如果软件包损坏,你可以尝试重新下载并安装:

# 清除slackpkg缓存 slackpkg clean-system # 重新更新软件包列表 slackpkg update # 重新安装软件包 slackpkg reinstall package-name 

依赖问题

如果遇到依赖问题,可以使用以下方法解决:

# 查找缺失的库 ldd /usr/bin/command-name # 查找提供该库的软件包 slackpkg search library-name # 安装所需的软件包 slackpkg install package-name 

GPG验证错误

如果遇到GPG验证错误,可以更新GPG密钥:

# 更新GPG密钥 slackpkg update gpg 

8. 实战案例

8.1 系统更新案例

假设你刚刚安装了Slackware 15.0,并希望将系统更新到最新状态:

# 更新软件包列表 slackpkg update # 检查可用更新 slackpkg upgrade-all # 查看将要更新的软件包列表,确认后继续 # 系统会提示是否继续,输入y继续 # 更新完成后,检查是否需要重启 ls -l /boot/vmlinuz* # 如果内核已更新,需要重启系统 reboot 

8.2 软件安装与依赖解决案例

假设你需要安装VLC媒体播放器,但官方仓库中没有提供。你可以使用SlackBuilds.org:

# 安装sbopkg slackpkg install sbopkg # 同步SlackBuilds仓库 sbopkg -r # 搜索VLC sbopkg -i vlc # 查看VLC的依赖 sbopkg -d vlc # 创建队列文件以处理依赖 echo "vlc" > vlc.sq sbopkg -p vlc.sq # 检查队列文件,确认所有依赖都已添加 cat vlc.sq # 构建并安装VLC及其依赖 sbopkg -i vlc.sq 

8.3 系统维护案例

假设你的系统运行缓慢,你想检查并清理不需要的软件包:

# 查看所有已安装的软件包 ls /var/log/packages | less # 查找特定软件包 ls /var/log/packages | grep package-name # 查找孤立库(未被任何软件包引用的库) find /usr/lib -type f -name "*.so*" -exec ldd {} ; 2>/dev/null | grep "not found" # 卸载不需要的软件包 slackpkg remove unused-package # 清理slackpkg缓存 slackpkg clean-system 

9. 最佳实践与建议

  1. 完整安装:如果你是Slackware新手,并且有足够的磁盘空间,建议进行完整安装(除了KDEI语言包)。这样可以避免许多依赖问题。

  2. 定期更新:定期运行slackpkg updateslackpkg upgrade-all以保持系统安全和最新。

  3. 使用SlackBuilds:对于非官方软件,优先使用SlackBuilds.org的脚本,而不是直接从源码安装。

  4. 备份重要数据:在进行大规模系统更新前,备份重要数据。

  5. 阅读文档:Slackware有优秀的文档,遇到问题时,首先查看相关文档。

  6. 谨慎处理依赖:在安装或卸载软件包时,始终考虑依赖关系,避免破坏系统稳定性。

  7. 使用测试目录:在安装新软件包前,可以先将其解压到临时目录检查内容。

  8. 保持日志:保留/var/log/packages和/var/log/scripts中的日志,它们对于故障排除非常有用。

10. 总结

Slackware的包管理系统虽然不像其他现代Linux发行版那样自动化,但它提供了简单、直接和透明的软件管理方式。通过掌握slackpkg、pkgtool以及相关工具的使用,你可以有效地管理Slackware系统中的软件安装、卸载和更新。

尽管Slackware不自动处理依赖关系,但通过手动检查和使用第三方工具如sbopkg,你可以有效地解决依赖问题。Slackware的包管理系统教会用户更深入地理解Linux系统的运作方式,这也是Slackware作为学习Linux的优秀平台的原因之一。

希望本教程能帮助你更好地理解和使用Slackware的包管理系统,享受这个经典Linux发行版带来的稳定和灵活性。