引言

Slackware Linux是由Patrick Volkerding于1993年创建的Linux发行版,它是现存最古老的Linux发行版之一,被誉为”最像UNIX的Linux发行版”。Slackware以其简洁、稳定和高度可定制的特点而闻名,它遵循KISS(Keep It Simple, Stupid)原则,为用户提供了一个纯净、无过多自动配置的操作系统环境。

与其他现代Linux发行版不同,Slackware不采用复杂的依赖关系解析系统,而是采用更为直接的方式管理软件包。这种设计使得Slackware系统更加透明和可控,但同时也要求用户对系统有更深入的了解。本指南将带领读者从基础到高级,全面掌握在Slackware系统上安装、配置和管理应用软件的技巧与最佳实践。

Slackware基础

Slackware的包管理系统

Slackware使用自己的包管理系统,主要包括以下工具:

  • pkgtool:Slackware的包管理工具,提供文本界面用于安装、删除和查看软件包。
  • installpkg:用于安装软件包。
  • removepkg:用于删除软件包。
  • upgradepkg:用于升级已安装的软件包。
  • explodepkg:用于解压软件包但不安装。
  • makepkg:用于创建软件包。

Slackware的软件包通常是.tgz.tbz.txz格式的压缩文件,其中包含了软件的所有文件和安装脚本。

基本系统工具

在开始管理软件之前,需要熟悉一些基本系统工具:

  • ls:列出目录内容。
  • find:查找文件。
  • grep:文本搜索工具。
  • which:查找可执行文件的位置。
  • whereis:查找二进制文件、源代码和手册页的位置。
  • locate:快速查找文件(需要先运行updatedb)。
  • ldd:列出程序所需的共享库。
  • file:确定文件类型。

这些工具将帮助您在系统中导航、查找文件和诊断问题。

软件安装方法

使用pkgtools安装官方软件包

pkgtool是Slackware的主要包管理工具,它提供了一个简单的文本界面来管理软件包。

安装软件包

要使用installpkg命令安装软件包,可以按照以下步骤操作:

# 安装单个软件包 installpkg package-name.txz # 安装多个软件包 installpkg package1.txz package2.txz package3.txz # 安装目录中的所有软件包 installpkg /path/to/packages/*.txz 

例如,安装一个名为vim-8.2.1234-x86_64-1.txz的Vim编辑器软件包:

installpkg vim-8.2.1234-x86_64-1.txz 

删除软件包

使用removepkg命令可以删除已安装的软件包:

# 删除单个软件包 removepkg package-name # 删除多个软件包 removepkg package1 package2 package3 # 删除软件包但不删除配置文件 removepkg -preserve package-name # 删除软件包及其配置文件 removepkg -warn package-name 

例如,删除之前安装的Vim编辑器:

removepkg vim 

升级软件包

使用upgradepkg命令可以升级已安装的软件包:

# 升级单个软件包 upgradepkg package-name-new-version.txz # 升级多个软件包 upgradepkg package1-new.txz package2-new.txz # 升级时保留旧配置文件 upgradepkg --install-new package-name-new-version.txz 

例如,升级Vim编辑器到新版本:

upgradepkg vim-8.2.2345-x86_64-1.txz 

查看软件包信息

使用pkgtool可以查看已安装的软件包信息:

# 启动pkgtool界面 pkgtool # 或者使用以下命令查看已安装的软件包列表 ls /var/log/packages 

使用slackpkg管理软件包

slackpkg是一个基于官方软件仓库的命令行工具,它简化了软件包的安装、升级和删除过程。

安装slackpkg

首先,确保您的系统已连接到互联网,然后安装slackpkg

# 从Slackware安装介质安装slackpkg installpkg /path/to/slackware/slackpkg*.txz 

配置slackpkg

配置slackpkg以使用官方镜像:

# 编辑slackpkg配置文件 nano /etc/slackpkg/mirrors 

在配置文件中,取消注释(删除行首的#)一个离您最近的镜像服务器。例如:

http://slackware.osuosl.org/slackware64-15.0/ 

更新软件包列表

运行以下命令更新可用的软件包列表:

slackpkg update 

安装软件包

使用slackpkg install命令安装软件包:

# 安装单个软件包 slackpkg install package-name # 安装多个软件包 slackpkg install package1 package2 package3 

例如,安装Firefox浏览器:

slackpkg install firefox 

升级系统

使用slackpkg upgrade-all命令升级系统中的所有软件包:

slackpkg upgrade-all 

搜索软件包

使用slackpkg search命令搜索软件包:

slackpkg search package-name 

例如,搜索与”python”相关的软件包:

slackpkg search python 

删除软件包

使用slackpkg remove命令删除软件包:

slackpkg remove package-name 

例如,删除Firefox浏览器:

slackpkg remove firefox 

从源码编译安装

有时候,您可能需要从源码编译安装软件,特别是当没有可用的Slackware软件包时。

准备编译环境

首先,确保系统已安装必要的编译工具:

# 安装基本编译工具 slackpkg install kernel-headers glibc gcc binutils make # 安装开发库(根据需要) slackpkg install devel 

下载源码

从软件官方网站或GitHub等代码托管平台下载源码:

# 使用wget下载源码 wget https://example.com/software-1.0.0.tar.gz # 或者使用git克隆代码仓库 git clone https://github.com/user/software.git 

解压源码

如果下载的是压缩包,需要先解压:

# 解压.tar.gz文件 tar -xzf software-1.0.0.tar.gz # 解压.tar.bz2文件 tar -xjf software-1.0.0.tar.bz2 # 解压.tar.xz文件 tar -xJf software-1.0.0.tar.xz 

编译和安装

进入解压后的目录,按照软件的README或INSTALL文件中的说明进行编译和安装:

# 进入源码目录 cd software-1.0.0 # 配置编译选项 ./configure --prefix=/usr/local --sysconfdir=/etc # 编译 make # 安装(需要root权限) sudo make install 

创建Slackware软件包

为了更好地管理从源码编译安装的软件,可以使用checkinstall工具创建Slackware软件包:

# 安装checkinstall slackpkg install checkinstall # 编译软件 ./configure make # 使用checkinstall创建软件包 checkinstall 

checkinstall会提示您输入软件包信息,然后创建一个Slackware软件包并安装它。这样,您就可以使用removepkg命令来卸载软件了。

使用第三方工具(如sbopkg)

SlackBuilds.org是一个为Slackware提供构建脚本的项目,这些脚本可以帮助用户从源码编译和创建软件包。sbopkg是一个简化使用SlackBuilds.org脚本的工具。

安装sbopkg

首先,从官方网站下载sbopkg软件包:

wget https://github.com/sbopkg/sbopkg/releases/download/0.38.1/sbopkg-0.38.1-noarch-1_wsr.tgz # 安装sbopkg installpkg sbopkg-0.38.1-noarch-1_wsr.tgz 

配置sbopkg

运行sbopkg进行初始配置:

sbopkg 

sbopkg界面中,选择”Options”然后选择”Sync repository with the SlackBuilds.org mirror”以同步SlackBuilds.org的仓库。

使用sbopkg安装软件

使用sbopkg安装软件的基本步骤如下:

# 启动sbopkg sbopkg # 浏览或搜索软件包 # 选择要安装的软件包 # 选择"Build"选项 # 确认构建选项 # 等待构建完成 

或者,可以使用命令行方式:

# 搜索软件包 sbopkg -i "package-name" # 安装软件包(包括依赖) sbopkg -i "package-name" 

例如,安装VLC媒体播放器:

sbopkg -i "vlc" 

处理依赖关系

SlackBuilds.org提供了一个名为”sqg”(SBo Queue Generator)的工具,可以自动生成依赖队列:

# 生成依赖队列 sqg -p "package-name" # 使用生成的队列安装软件 sbopkg -k -i "package-name" 

软件配置技巧

基本配置文件管理

Slackware遵循传统的UNIX配置方式,大多数配置文件位于/etc目录下。

配置文件备份

在修改配置文件之前,建议先备份原始文件:

# 备份配置文件 sudo cp /etc/file.conf /etc/file.conf.bak # 或者使用带时间戳的备份 sudo cp /etc/file.conf /etc/file.conf.$(date +%Y%m%d%H%M%S).bak 

配置文件编辑

使用文本编辑器编辑配置文件:

# 使用nano编辑器 sudo nano /etc/file.conf # 使用vim编辑器 sudo vim /etc/file.conf 

配置文件语法检查

某些软件提供了配置文件语法检查工具:

# 检查Apache配置文件语法 sudo apachectl configtest # 检查Nginx配置文件语法 sudo nginx -t # 检查SSH配置文件语法 sudo sshd -t 

服务配置

Slackware使用SysVinit系统初始化,服务脚本位于/etc/rc.d/目录下。

启用和禁用服务

在Slackware中,通过给服务脚本添加或删除执行权限来启用或禁用服务:

# 启用服务 sudo chmod +x /etc/rc.d/rc.service # 禁用服务 sudo chmod -x /etc/rc.d/rc.service 

例如,启用SSH服务:

sudo chmod +x /etc/rc.d/rc.sshd 

手动启动和停止服务

手动启动、停止或重启服务:

# 启动服务 sudo /etc/rc.d/rc.service start # 停止服务 sudo /etc/rc.d/rc.service stop # 重启服务 sudo /etc/rc.d/rc.service restart # 查看服务状态 sudo /etc/rc.d/rc.service status 

例如,启动SSH服务:

sudo /etc/rc.d/rc.sshd start 

服务配置文件

大多数服务的配置文件位于/etc/目录下,以服务名命名:

# SSH服务配置文件 /etc/ssh/sshd_config # Apache服务配置文件 /etc/httpd/httpd.conf # Nginx服务配置文件 /etc/nginx/nginx.conf 

系统优化

内核参数调整

通过修改/etc/sysctl.conf文件调整内核参数:

# 编辑sysctl.conf文件 sudo nano /etc/sysctl.conf 

例如,增加文件描述符限制:

# 增加文件描述符限制 fs.file-max = 100000 

应用更改:

sudo sysctl -p 

系统启动服务管理

编辑/etc/rc.d/rc.local文件添加自定义启动命令:

# 编辑rc.local文件 sudo nano /etc/rc.d/rc.local 

例如,添加自定义启动脚本:

#!/bin/sh # 自定义启动命令 /usr/local/bin/custom-script start 

确保rc.local有执行权限:

sudo chmod +x /etc/rc.d/rc.local 

资源限制设置

通过修改/etc/security/limits.conf文件设置用户资源限制:

# 编辑limits.conf文件 sudo nano /etc/security/limits.conf 

例如,增加用户进程数限制:

# 增加用户进程数限制 username soft nproc 4096 username hard nproc 8192 

软件管理最佳实践

依赖关系处理

Slackware不自动处理软件依赖关系,因此需要手动管理依赖。

查找依赖关系

使用ldd命令查看程序所需的共享库:

ldd /usr/bin/program 

使用requiredby脚本(需要安装)查找哪些软件包依赖于某个库:

requiredby library-name 

安装依赖

使用slackpkgsbopkg安装依赖:

# 使用slackpkg安装 slackpkg install dependency-package # 使用sbopkg安装 sbopkg -i "dependency-package" 

使用队列文件

sbopkg支持使用队列文件一次性安装多个软件包及其依赖:

# 创建队列文件 echo "package1" > myqueue.sqf echo "package2" >> myqueue.sqf echo "package3" >> myqueue.sqf # 使用队列文件安装软件 sbopkg -k myqueue.sqf 

系统更新与维护

定期更新系统

定期使用slackpkg更新系统:

# 更新软件包列表 slackpkg update # 检查可用更新 slackpkg upgrade-all # 应用更新 slackpkg install-new slackpkg clean-system 

清理系统

定期清理不需要的软件包和临时文件:

# 清理旧的软件包 slackpkg clean-system # 清理临时文件 sudo rm -rf /tmp/* sudo rm -rf /var/tmp/* # 清理日志文件 sudo find /var/log -type f -name "*.gz" -delete sudo find /var/log -type f -name "*.old" -delete 

系统备份

定期备份重要系统文件和配置:

# 创建备份目录 sudo mkdir /backup # 备份/etc目录 sudo tar -czf /backup/etc-$(date +%Y%m%d).tar.gz /etc # 备份已安装软件包列表 ls /var/log/packages > /backup/pkglist-$(date +%Y%m%d).txt # 备份/home目录 sudo tar -czf /backup/home-$(date +%Y%m%d).tar.gz /home 

安全性考虑

软件包验证

验证软件包的完整性和真实性:

# 验证软件包的MD5校验和 md5sum package.txz # 验证软件包的GPG签名 gpg --verify package.txz.asc package.txz 

最小化安装原则

只安装必要的软件包,减少系统攻击面:

# 列出已安装的软件包 ls /var/log/packages # 删除不需要的软件包 removepkg unnecessary-package 

定期安全更新

关注安全公告,及时应用安全更新:

# 检查安全更新 slackpkg update slackpkg upgrade-all # 安装安全更新 slackpkg install-new 

常见问题解决

软件包依赖问题

缺少共享库错误

当运行程序时出现”error while loading shared libraries”错误:

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

软件包冲突

当安装软件包时出现文件冲突:

# 查找冲突文件属于哪个软件包 grep -r "conflicting-file" /var/log/packages/ # 删除冲突的软件包或使用--reinstall选项重新安装 upgradepkg --reinstall new-package.txz 

编译错误

缺少头文件

当编译软件时出现”fatal error: xxx.h: No such file or directory”错误:

# 查找提供头文件的软件包 slackpkg search "xxx.h" # 安装开发包 slackpkg install package-name-dev 

缺少库文件

当编译软件时出现”cannot find -lxxx”错误:

# 查找提供库文件的软件包 slackpkg search "libxxx" # 安装开发包 slackpkg install package-name-dev 

服务启动问题

服务无法启动

当服务无法启动时,检查日志文件:

# 查看系统日志 tail -f /var/log/syslog # 查看服务特定日志 tail -f /var/log/service.log 

端口冲突

当服务无法启动因为端口被占用:

# 查找占用端口的进程 netstat -tulpn | grep :port-number # 终止占用端口的进程 sudo kill -9 process-id 

高级技巧与专家建议

创建自定义软件包

使用SlackBuild脚本

创建自定义SlackBuild脚本:

#!/bin/sh # SlackBuild script for <package-name> PRGNAM=<package-name> VERSION=${VERSION:-1.0.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$VERSION tar xvf $CWD/$PRGNAM-$VERSION.tar.gz cd $PRGNAM-$VERSION chown -R root:root . find -L . ( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 ) -exec chmod 755 {} ; -o ( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 ) -exec chmod 644 {} ; CFLAGS="$SLKCFLAGS" CXXFLAGS="$SLKCFLAGS" ./configure --prefix=/usr --libdir=/usr/lib${LIBDIRSUFFIX} --sysconfdir=/etc --localstatedir=/var --mandir=/usr/man --docdir=/usr/doc/$PRGNAM-$VERSION --build=$ARCH-slackware-linux make make install DESTDIR=$PKG find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a README COPYING INSTALL $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} 

使用src2pkg创建软件包

src2pkg是一个自动化创建Slackware软件包的工具:

# 安装src2pkg slackpkg install src2pkg # 使用src2pkg创建软件包 src2pkg source-package.tar.gz 

系统性能优化

内核编译优化

编译自定义内核以提高系统性能:

# 安装内核源码 slackpkg install kernel-source # 配置内核 cd /usr/src/linux make menuconfig # 编译内核 make -j$(nproc) make modules_install cp arch/x86/boot/bzImage /boot/vmlinuz-custom cp System.map /boot/System.map-custom cp .config /boot/config-custom # 更新引导加载程序 lilo 

文件系统优化

优化文件系统以提高性能:

# 检查文件系统 sudo fsck -f /dev/sda1 # 调整文件系统参数 sudo tune2fs -o journal_data_writeback /dev/sda1 sudo tune2fs -O ^has_journal /dev/sda1 sudo tune2fs -J size=400 /dev/sda1 

内存管理优化

调整内存管理参数:

# 编辑sysctl.conf sudo nano /etc/sysctl.conf 

添加以下参数:

# 虚拟内存管理 vm.swappiness=10 vm.vfs_cache_pressure=50 # 网络参数 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 

应用更改:

sudo sysctl -p 

自动化脚本

自动安装脚本

创建自动安装多个软件包的脚本:

#!/bin/bash # 自动安装脚本 # 定义要安装的软件包列表 PACKAGES="vim git curl wget htop" # 更新软件包列表 slackpkg update # 安装软件包 for package in $PACKAGES; do echo "Installing $package..." slackpkg install $package done echo "All packages installed successfully." 

自动备份脚本

创建自动备份系统配置和数据的脚本:

#!/bin/bash # 自动备份脚本 # 定义备份目录 BACKUP_DIR="/backup" # 创建备份目录 mkdir -p $BACKUP_DIR # 获取当前日期 DATE=$(date +%Y%m%d) # 备份/etc目录 tar -czf $BACKUP_DIR/etc-$DATE.tar.gz /etc # 备份已安装软件包列表 ls /var/log/packages > $BACKUP_DIR/pkglist-$DATE.txt # 备份/home目录 tar -czf $BACKUP_DIR/home-$DATE.tar.gz /home # 删除30天前的备份 find $BACKUP_DIR -type f -mtime +30 -delete echo "Backup completed successfully." 

系统监控脚本

创建系统监控脚本:

#!/bin/bash # 系统监控脚本 # 获取系统信息 HOSTNAME=$(hostname) UPTIME=$(uptime) LOAD_AVG=$(uptime | awk -F'load average:' '{ print $2 }') CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *([0-9.]*)%* id.*/1/" | awk '{print 100 - $1}') MEM_USAGE=$(free -m | awk '/Mem/{printf("%.2f"), $3/$2*100}') DISK_USAGE=$(df -h | awk '$NF=="/"{printf "%s", $5}') # 发送系统状态报告 echo "System Report for $HOSTNAME" echo "------------------------" echo "Uptime: $UPTIME" echo "Load Average:$LOAD_AVG" echo "CPU Usage: $CPU_USAGE%" echo "Memory Usage: $MEM_USAGE%" echo "Disk Usage: $DISK_USAGE" # 检查CPU使用率是否超过阈值 if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then echo "WARNING: High CPU usage detected!" fi # 检查内存使用率是否超过阈值 if (( $(echo "$MEM_USAGE > 80" | bc -l) )); then echo "WARNING: High memory usage detected!" fi # 检查磁盘使用率是否超过阈值 if [ ${DISK_USAGE%?} -gt 80 ]; then echo "WARNING: High disk usage detected!" fi 

总结

Slackware Linux作为一个经典而稳定的Linux发行版,为用户提供了一个简洁、透明和高度可定制的操作系统环境。通过本指南,我们详细介绍了在Slackware系统上安装、配置和管理应用软件的各种方法和技巧。

从基础的pkgtools使用,到更高级的slackpkgsbopkg工具,再到从源码编译安装软件,我们涵盖了Slackware软件管理的各个方面。我们还探讨了软件配置的最佳实践、系统优化技巧、常见问题解决方法以及一些高级技巧和专家建议。

掌握这些技能,您将能够充分利用Slackware的强大功能,构建一个稳定、高效且符合个人需求的Linux系统。无论您是Slackware的新手还是有经验的用户,希望本指南都能为您提供有价值的参考和帮助。

Slackware的KISS哲学和UNIX传统使其成为学习Linux系统内部工作原理的理想平台。通过手动管理软件包和依赖关系,您将更深入地理解Linux系统的工作方式,这对于任何Linux系统管理员或开发者来说都是宝贵的经验。

最后,记住Slackware社区是一个友好和乐于助人的社区,如果您在学习和使用过程中遇到问题,不要犹豫,向社区寻求帮助。祝您在Slackware的旅程中取得成功!