服务器 频道

经验分享:OpenBSD完美定制安装脚本

基本原理:

    a) 大家用 al | grep cu 就可以看到所有跟安装有关的 alias 用法。其中 cubase 是我最早使用的 cuinst,后来发现 3.8 ISO 里有两个包影响系统使用,逐步扩充为以 cubase 为基础,cushow 查看出错的原因,cubash 研究 if 在 alias 里的用法,cutest 为测试安装,而cuskip 则是正式安装,使用 $HOME/sk-38.ini。如果用户想自己动手查看以上脚本的结果,只要把 cuinst 改为对应的功能块就可以了。

    b) 核心原理是通过定义系统变量 CUPACK,然后用脚本进行批量解压。里面主要是用到了 for 的技巧,以及用 grep 查找忽略列表,用 if来判断结果。需要注意的是它们在 ksh 下测试通过,如果你换到别的Shell 下用,必须根据具体语法特点进行修改。

    alias cubase=''for i in /mnt/3.8/i386$CUPACK; do gzip -dc $i | tar -xvf -; done''
    alias cubash=''for i in /mnt/3.8/i386$CUPACK; do echo $i; if [ "`gzip -dc $i | tar -tvf - |grep bash`" != "" ]; then echo *{_bash_}; sleep 5; fi; done''
    alias cushow=''for i in /mnt/3.8/i386$CUPACK; do echo $i; gzip -dc $i | tar -tvf - | grep bash; done''

    alias cuskip=''for i in /mnt/3.8/i386$CUPACK; do echo $i; if [ "`grep $i $HOME/sk-38.ini`" = "" ]; then gzip -dc $i | tar -xvf - > /dev/null; else echo *{_skip_}; sleep 5; fi; done''
    alias cutest=''for i in /mnt/3.8/i386$CUPACK; do echo $i; if [ "`grep $i $HOME/sk-38.ini`" = "" ]; then gzip -dc $i | tar -tvf - > /dev/null; else echo *{_skip_}; sleep 5; fi; done''
    alias cuinst=''cuskip''
    alias culist=''alias | grep cuinst''

    alias cupack=''export CUPACK=/packages/*gz; cd /usr/local; cuinst''
    alias cukde3=''export CUPACK=/packages/kde-3.4.3/*gz; cd /usr/local; cuinst''

    c) 从上面的清单可以看出,cupack 和 cukde3 都是建立在 cuinst 的基础上的,先定义好 CUPACK 的值再调用安装脚本。cuinst 是指定使用哪一个脚本。culist 是显示所有可用安装包以及当前的 cuinst 类型。

    上面的脚本里,cubase 是单纯的解压,不考虑任何意外情况。cushow里显示在什么地方装了 bash,因为按照 cubase 的做法最后 bash 是不能用的。cubash 利用 if 精简了显示,让我们找到有问题的软件包,其实就是以 redhat 开头的包。没时间研究如何使用,直接忽略算了。

    我们把要忽略的包写到 sk-38.ini,然后放到 $HOME 目录下,这样将来就可以随时定制安装哪些软件包了。cuskip 和 cutest 本质上是一样的,不同的是 cutest 用了 tar -tvf - 来显示文件清单,而不是真正解压。

    最后,希望大家如果做出了更好的 OpenBSD ISO,请使用这个安装脚本,如果改进了上面的安装脚本或者有更好的方案,请发一份给我,谢谢。

    附件: init.tar.gz (1668 字节)

   注:本文已经原作者wwashington授权,感谢wwashington对IT168服务器频道的鼎力支持。

     原文链接:http://bbs.boletips.com/blbbs/viewthread.php?tid=173&extra=page%3D1

0
相关文章