Slackware Linux系统从源码编译安装软件的详细步骤与常见问题解决方案
引言
Slackware Linux是历史最悠久的Linux发行版之一,以其简洁、稳定和接近Unix的设计哲学而闻名。与其他现代Linux发行版不同,Slackware更倾向于使用传统的源码编译方式来安装软件,而不是依赖预编译的二进制包。这种方法虽然复杂,但提供了更高的灵活性和性能优化空间。
在Slackware中从源码编译安装软件可以让你:
- 获得针对你特定硬件优化的软件
- 使用最新的软件版本,而不等待官方更新
- 自定义软件功能和选项
- 深入了解软件的构建过程和依赖关系
准备工作
在开始从源码编译软件之前,你需要确保系统已经安装了必要的开发工具和库。Slackware默认安装可能不包含所有开发工具,所以你需要手动安装它们。
基本开发工具
首先,安装基本的开发工具包:
# 安装基本开发工具 slackpkg install development 这将安装编译软件所需的基本工具,如GCC(GNU Compiler Collection)、GNU Make、binutils等。
依赖库和头文件
大多数软件依赖于特定的库和开发文件。你需要安装这些依赖项才能成功编译软件。在Slackware中,你可以使用slackpkg来安装这些依赖:
# 安装常用的开发库 slackpkg install kernel-headers glibc zlib openssl readline ncurses 获取源码
你需要从软件的官方网站或代码仓库获取源码。通常,源码以压缩包的形式提供,如.tar.gz、.tar.bz2或.tar.xz。
# 使用wget下载源码 wget https://example.com/software-1.0.0.tar.gz 基本编译安装步骤
从源码编译安装软件通常遵循以下五个基本步骤:下载、解压、配置、编译和安装。
1. 下载源码
首先,从官方网站或可信的源获取软件的源码压缩包。
wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz 2. 解压源码
使用适当的命令解压下载的源码包:
# 对于.tar.gz文件 tar -xzvf gcc-11.2.0.tar.gz # 对于.tar.bz2文件 tar -xjvf package.tar.bz2 # 对于.tar.xz文件 tar -xJvf package.tar.xz 3. 配置
进入解压后的目录,运行configure脚本。这个脚本会检查系统环境,并准备Makefile文件。
cd gcc-11.2.0 ./configure --prefix=/usr/local --prefix选项指定安装路径。在Slackware中,/usr/local是自编译软件的常见安装位置。
配置选项因软件而异,可以使用以下命令查看所有可用选项:
./configure --help 一些常用的配置选项包括:
./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var --enable-feature --with-library 4. 编译
配置完成后,使用make命令编译软件:
make 对于多核处理器,可以使用-j选项加速编译:
make -j$(nproc) 5. 安装
编译成功后,使用以下命令安装软件:
make install 如果要将软件安装到系统目录(如/usr或/usr/local),需要root权限:
su - make install exit Slackware特有的构建方法:使用SlackBuild脚本
Slackware有一个独特的系统叫做SlackBuild,它是一组脚本,用于从源码构建软件包。这些脚本自动化了编译过程,并创建可以由pkgtools管理的Slackware包。
获取SlackBuild脚本
SlackBuild脚本可以从SlackBuilds.org(SBo)获取,这是Slackware社区的官方软件仓库。
# 克隆SlackBuilds仓库 git clone git://git.slackbuilds.org/slackbuilds.git 或者,你可以直接从网站下载特定的SlackBuild脚本。
使用SlackBuild脚本
每个SlackBuild脚本通常包含以下文件:
- SlackBuild脚本本身(.SlackBuild)
- 源码下载链接(.info文件)
- 可能的补丁文件(.patch)
- README文件(包含构建说明)
使用SlackBuild脚本的步骤:
- 下载SlackBuild脚本和源码:
# 创建工作目录 mkdir ~/slackbuilds cd ~/slackbuilds # 下载SlackBuild脚本和源码 wget http://slackbuilds.org/slackbuilds/14.2/development/git.SlackBuild wget http://slackbuilds.org/slackbuilds/14.2/development/git.info - 检查.info文件中的源码链接和MD5校验和:
cat git.info - 下载源码:
# 从.info文件中提取源码URL并下载 source $(grep DOWNLOAD git.info | cut -d'"' -f2) - 运行SlackBuild脚本:
# 确保脚本可执行 chmod +x git.SlackBuild # 运行脚本(可能需要root权限) sudo ./git.SlackBuild - 安装生成的包:
# 生成的包通常位于/tmp目录 sudo installpkg /tmp/git-*.txz 自定义SlackBuild脚本
你可以编辑.SlackBuild脚本来自定义构建过程,例如添加额外的编译选项或修改安装路径。
# 编辑SlackBuild脚本 nano git.SlackBuild 在脚本中,你可以修改以下部分:
# 修改编译选项 make $NUMJOBS CFLAGS="$SLKCFLAGS" CXXFLAGS="$SLKCFLAGS" prefix=/usr gitexecdir=/usr/libexec/git-core INSTALLDIRS=vendor mandir=/usr/man HTMLDIR=/usr/doc/git-$VERSION/html install # 修改安装选项 mkdir -p $PKG/usr/doc/git-$VERSION cp -a README.md COPYING INSTALL $PKG/usr/doc/git-$VERSION 管理自编译软件
在Slackware中,管理自编译软件需要一些额外的步骤,特别是当你想要跟踪、更新或卸载这些软件时。
使用pkgtools管理软件包
如果你使用SlackBuild脚本构建了软件包,可以使用pkgtools来管理它:
# 安装包 installpkg package.txz # 升级包 upgradepkg package.txz # 删除包 removepkg package # 查看已安装的包 ls /var/log/packages 使用checkinstall创建包
对于没有SlackBuild脚本的软件,你可以使用checkinstall工具创建一个Slackware包:
# 安装checkinstall slackpkg install checkinstall # 编译软件 ./configure make # 使用checkinstall安装 checkinstall checkinstall会跟踪make install安装的文件,并创建一个Slackware包,然后你可以使用pkgtools管理它。
手动跟踪安装的文件
如果你直接使用make install安装软件,可以使用以下方法跟踪安装的文件:
# 创建一个文件列表 find /usr/local -newer /path/to/source/configure -type f -print > ~/installed-files.txt 或者,你可以使用工具如stow来管理/usr/local中的软件:
# 安装stow slackpkg install stow # 将软件安装到/usr/local/stow/package目录 ./configure --prefix=/usr/local/stow/package make make install # 创建符号链接 cd /usr/local stow package 要卸载软件,只需删除符号链接:
cd /usr/local stow -D package 常见问题及解决方案
在从源码编译安装软件时,你可能会遇到各种问题。以下是一些常见问题及其解决方案:
1. 缺少依赖库
错误信息:
configure: error: Package requirements (glib-2.0 >= 2.40.0) were not met: No package 'glib-2.0' found 解决方案: 安装缺少的开发包。在Slackware中,开发包通常以”-dev”结尾:
slackpkg install glib2-devel 2. 编译器错误
错误信息:
error: 'for' loop initial declarations are only allowed in C99 mode 解决方案: 设置C标准为C99:
export CFLAGS="-std=c99" ./configure make 3. 链接器错误
错误信息:
/usr/bin/ld: cannot find -lssl 解决方案: 安装缺少的库:
slackpkg install openssl 4. 权限错误
错误信息:
make: *** [install] Error 13 解决方案: 使用root权限运行make install:
su - make install 5. 配置脚本找不到工具
错误信息:
configure: error: no acceptable C compiler found in $PATH 解决方案: 安装编译工具:
slackpkg install development 6. 软件版本不兼容
错误信息:
configure: error: Python 3.5 or later is required 解决方案: 安装所需的软件版本:
slackpkg install python3 7. 并行编译失败
错误信息:
make: *** [all] Error 2 解决方案: 禁用并行编译:
make -j1 8. 安装路径冲突
问题:自编译软件与系统包冲突。
解决方案: 使用–prefix选项指定不同的安装路径:
./configure --prefix=/opt/software 最佳实践和技巧
为了使从源码编译安装软件的过程更加顺利,以下是一些最佳实践和技巧:
1. 保持系统更新
在编译新软件之前,确保系统已更新:
slackpkg update slackpkg upgrade-all 2. 使用chroot环境
为了不影响主系统,可以在chroot环境中编译软件:
# 创建chroot目录 mkdir ~/slackbuild-chroot # 安装基本系统到chroot sbopkg -i sbopkg sbopkg -r 3. 使用ccache加速编译
ccache可以缓存编译结果,加速重复编译:
# 安装ccache slackpkg install ccache # 设置环境变量 export CC="ccache gcc" export CXX="ccache g++" 4. 维护源码目录
保留编译过的源码目录,以便将来可以重新编译或卸载:
# 将源码移动到标准位置 sudo mv /path/to/source /usr/src/ 5. 编写自定义SlackBuild脚本
对于经常编译的软件,编写自定义SlackBuild脚本:
#!/bin/sh # Slackware build script for <软件名称> PRGNAM=<软件名称> VERSION=<版本号> BUILD=${BUILD:-1} TAG=${TAG:-_SBo} # 其他变量设置... 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 -mtune=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 $NUMJOBS # 安装 make install DESTDIR=$PKG # 其他安装步骤... # 创建包 mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} 6. 使用日志记录编译过程
记录编译过程以便调试:
# 使用tee命令记录输出 ./configure 2>&1 | tee configure.log make 2>&1 | tee make.log make install 2>&1 | tee install.log 7. 利用多核处理器加速编译
使用所有可用的CPU核心加速编译:
make -j$(nproc) 结论
在Slackware Linux系统上从源码编译安装软件是一项重要技能,它允许你获得最新版本的软件,并根据你的特定需求进行优化。虽然这种方法比使用预编译包更复杂,但它提供了更大的灵活性和控制权。
通过遵循本文中介绍的步骤和最佳实践,你可以有效地在Slackware系统上编译和管理自编译软件。无论是使用传统的五步编译法,还是利用Slackware特有的SlackBuild脚本,你都可以确保软件的安装过程顺利进行,并能够有效地管理这些软件。
记住,从源码编译软件不仅是一种技术活动,也是一种学习体验,它可以帮助你更深入地了解Linux系统的工作原理和软件的构建过程。
支付宝扫一扫
微信扫一扫