前一阵子,使用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命令安装编译好的安装包。
就是把五个步骤用脚本来自动完成,就是这些,也传到我的资源里面了,留作备份,以后可能用到。
脚本有一些地方需要改进。