Slackware从网络安装第三方软件

前一阵子,使用Archlinux时,在usr目录下用root误操作,把/user/bin目录都删了,系统起不来了,惨痛教训。


无奈,重新安装了个Slackware,与Archlinux类似,都是保持传说中KISS(keep it simple and stupid)原则的发行版。


Slackware软件包管理,稍显原始,当然这是人家的理念。它不解决依赖,也不直接从网络上安装,如果要自己安装软件,可以在网上下载txz或tgz格式的二进制安装包,然后root用户用installpkg命令安装,它也提供了一种从源代码安装的方式,即用Slackbuild脚本编译安装,也需要下载源代码包和Slackbuild脚本。总体来说,与Archlinux是比较类似的,Archlinux用pacman从网络安装二进制包,也可以用AUR从源代码安装,Archlinux的包管理相较Slackware很好的几点是:1.自动解决依赖,2.自动从网络安装,3.网络软件包非常齐全,也非常新。相较而言,可以认为Archlinux是非常适合我这种菜鸟级别的人用的,事实上我也确实很喜欢Archlinux,之前一直都是使用的它。Slackware也有几个第三方的包管理工具,像slack-apt等,试了下,感觉不是特别好用。


但是在网上流传的关于Slackware的传说:When you know slackware you know Linux. When you know Redhat, all you know is Redhat.

这个很吸引我,从大学就装了很多发行版用过,现在工作几年了,但感觉对linux的认知还是停留在表面,在不同的发行版间用来用去,学不到什么东西; 在不同的桌面环境,窗口管理器间纠结,也只是浪费时间,想稍微深入些。于是重装linux系统时,选择了Slackware。


Slackware自带的包已经很齐全了,想搭个自己喜欢的桌面,安装的包不多。我还是跟之前用Archlinux时的桌面差不多,登录管理器用slim,窗口管理器用openbox,文件管理器用thunar,桌面背景显示用feh,输入法用fcitx(当然scim也不错,随意),但panel由tint2改用xfce4-panel了,终端也由urxvt改为xfce4的Terminal。tint2没有找到设置快捷方式,音量控制,显示桌面等常用功能,感觉有些不方便,xfce4-panel还有个比较好的功能就是集成了截屏功能; urxvt快速小巧,很不错,但复制粘贴感觉有些不方便。于是把这两个换了。经过了这么多,感觉自己觉得用着方便最好,不必要刻意去追求什么。


上面说了这么多,有些罗嗦了,其实是想说:我写了个简单的脚本,配合下载到本地的http://slackbuilds.org/网站的Slackbuilds仓库,能够简单的实现在Slackware上从网络安装第三方软件,当然依然没有去解决依赖。只想说用linux一个很大的乐趣就是自动动手去做一些事情。


两步可以完成:

第一步:把http://slackbuilds.org网站的仓库下载到本地,可以用git,ftp,http,rsync等几种方式下载,这里用git下载

git clone git://slackbuilds.org/slackbuilds ~/Slackbuilds

下载会很快,因为这都是些Slackbuild脚本和包信息文件,并不包含源码包,300M的样子,常用的软件包都是能找到的。事实上我之前一直都是去这个网站上下载Slackbuild脚本和源码包来安装软件的,因为在Google上搜索Slackbuild,排在第一位的就是这个网站。


第二步:用脚本安装软件

写的这个脚本叫slackbuilds.sh,把它链接为clyinstall了,直接clyinstall 包名就好了,如clyinstall openbox。以下是脚本内容:

#!/bin/bash

#author:cly 
#mail:[email protected]

if [ ! "$(id -u)" = "0" ]
then
echo -e "\nYou should run this script with root."
exit
fi

SLACKBUILDS_ROOT="/home/cly/Slackbuilds"

#cd to Slackbuilds dir
cd ${SLACKBUILDS_ROOT}

#find package name
PKG_NAME=$1
FIND_RESULT=$(find ./ -iname ${PKG_NAME} -type d)
if [ X"" = X${FIND_RESULT} ]
then
echo -e "\nNo packages match ${PKG_NAME}." #can not find matched packages
echo -e "\nPossible matches are:\n$(find ./ -iname *${PKG_NAME}* -type d)"
exit 1
else #find something
echo -e "\nFind package in directory: ${FIND_RESULT}"
fi

#cd to this dir
cd ${FIND_RESULT}

#resolve download link
DOWNLOAD_LINK=$(grep -w "DOWNLOAD" ${PKG_NAME}.info | cut -d '"' -f 2)
echo -e "\nDownload link: ${DOWNLOAD_LINK}."

#download source package
wget -t 4 ${DOWNLOAD_LINK}
if [ ! $? -eq 0 ]
then
echo -e "\nDownload source package faild."
exit 2
fi

#run Slackbuild script
chmod +x ${PKG_NAME}.SlackBuild
./${PKG_NAME}.SlackBuild

#copy build result
if [ ! $? -eq 0 ]
then
echo -e "\nRun slackbuild faild."
exit 3
fi

SLACKBUILD_RESULT=$(ls /tmp/${PKG_NAME}*_SBo.t[xg]z)
if [ X${SLACKBUILD_RESULT} = X"" ]
then
echo -e "\nGenerate package faild."
exit 4
fi

cp ${SLACKBUILD_RESULT} ./
installpkg ./$(basename ${SLACKBUILD_RESULT})
if [ ! $? -eq 0 ]
then
echo -e "\ninstall package faild."
exit 5
fi

#install success
echo -e "\nInstall package ${PKG_NAME} successfully!"

unset SLACKBUILDS_ROOT PKG_NAME FIND_RESULT DOWNLOAD_LINK SLACKBUILD_RESULT

很简单的脚本,简述一下其工作步骤:

1.在下载好的Slackbuilds仓库中查找符合参数的目录,Slackbuilds仓库中最末一级目录名称跟其包名是相同的。如果没有找到完全符合的,会查找包含的列出来。

2.查找到了,就进入到该包所在的目录,从info文件中解析出下载链接,下载源码包下来。

3.下载完成后,就运行Slackbuild脚本,如果成功会在/tmp目录中生成txz或tgz的安装包。

4.如果slackbuild脚本运行成功,那么从/tmp目录复制编译好的安装包到包目录。

5.调用installpkg命令安装编译好的安装包。


就是把五个步骤用脚本来自动完成,就是这些,也传到我的资源里面了,留作备份,以后可能用到。

脚本有一些地方需要改进。


你可能感兴趣的:(Slackware从网络安装第三方软件)