Vincent.Chan‘s Blog

常用链接

统计

积分与排名

网站

最新评论

OpenBSD的定制安装脚本

作者:Wwashington AT smth bbs

前言:欢迎转载,但是您必须保留原文的所有信息,包括作者和时间。

一、其实几年前我就用过 OpenBSD 3.3了,当时觉得界面确实很粗糙。
正因为花哨的东西少了,所以开发出来的系统缺陷相对少一些。所谓
做多错多,做少错少,我觉得 OpenBSD 体现了简约美,而 FreeBSD
则比较适合那些喜欢装好系统就用的人。当时考虑到 OpenBSD 上还要
自己去编译 KDE、Gnome 之类的窗口管理器太麻烦,所以用的不多。

二、ChinaUnix 论坛上提供了 MichaelBibby 朋友所制作的 OpenBSD
3.8 版 ISO 文件。我装过后发现缺少 packages 的安装说明,手工
安装比较辛苦,而且该版的 KDE 3.4.2 桌面三个图标点击后无法正确
运行, 这三个默认的图标分别链接到 trash:/ , system:/ , /root。

此外该版对 xmms 的汉化支持不好,按照 FreeBSD 简单汉化终结篇
的方法可以完成 FreeBSD 系统以及 xmms 的汉化,但是 zh_Cn.eucCN
语言和 -sony-...-gbk-0 字体对 OpenBSD 不起作用。除了各种小毛
病外,总体来说这个 ISO 还是比较全的,包含很多编译好的软件包。
如果大家想装好就用,装一下这个 ISO 并不断完善是很好的办法。

http://bbs.chinaunix.net/viewthread.php?tid=691951&extra=&page=1
[下载]MichaelBibby 朋友的 OpenBSD 3.8

三、后来我自己写了个安装脚本,大大提高了安装的便利性。不过我
发现里面有两个以 redhat 开头的软件包会干扰系统正常运行,它们
是 Linux 仿真包,或许应该装到别的目录下,为了省事我的安装脚本
干脆就跳过它们了。下面简单介绍一下安装步骤以及基本原理,将来
任何人自己定制了更好的 ISO 版后,都可以利用这个安装脚本。

四、安装步骤:

a) 首先,你要下载附件里的 init.tar.gz,最好是把本机的 C 盘做
成 150M 左右的 FAT16 分区,Windows系统放 D 盘,那么 C 盘就单
纯做启动盘并跟 Unix 交换数据了。如果不这样,将来必须另找机器
把 init.tar.gz 用 ftp 或 ssh 传到你需要使用的 OpenBSD 机器上。

多系统共存的文章请大家上网去搜索,我以前写过 OS Loader 的用法。
我把 init 压缩包解压后放到 C:\Boot\Unix\init 目录里,所以后面

b) 解压后大家可以看到 init 目录下有 csh 和 ksh 两个目录,其中
ksh 是针对 OpenBSD 默认 Shell,csh 则针对 FreeBSD 默认 Shell。

这里顺带说一下,FreeBSD 4.x 的 SSHD 不能设置禁止 DNS,所以一
旦机器不能访问外网的 DNS 服务器,那么任何机器都不能用 SSH 来
登陆这台机器,所以我在 csh 目录下的 alias 里设置了 exit 为自
动关闭 DNS,这样默认就不使用 DNS 了,需要的时候再开。大家运行
al 就可以看到所有的 alias 了。其中以 dn 开头的那些是修改 dns
开或关的,以 zh 开头的那些是准备汉化时调整系统语言类型的。

装 csh 包需要把这个目录下的文件都拷贝到 $HOME,然后再改名如下:
cat login.csh > .login
cat cshrc.csh >> .cshrc
cp /usr/bin/make /usr/bin/bmake    {这是为了将来可以切换make}

下面列出允许和关闭 DNS 的 alias 定义,贴出来与大家共同研究。

alias exit 'dndis; logout'
alias dncat 'cd /etc; cat resolv.conf'
alias dndis 'cd /etc; mv resolv.conf resolv.temp; cat resolv.temp | sed
"s/^nameserver/#nameserver/g" > resolv.conf; rm resolv.temp'
alias dnena 'cd /etc; mv resolv.conf resolv.temp; cat resolv.temp | sed
"s/^#nameserver/nameserver/g" > resolv.conf; rm resolv.temp'

c) 现在回到正题,安装 OpenBSD 的 ksh 包也是把文件拷贝到 $HOME。
alias.ksh 是系统别名 alias 的集合,cat profile.ksh > .profile
则可以让你登陆系统后立刻加载 alias.ksh,sk-38.ini 是需要跳过的
安装名单。前面说了,如果不跳过这两包,可能导致系统无法使用。

当 OpenBSD 的 alias.ksh 加载后,你就可以使用它来安装 ChinaUnix
上的 ISO 所提供的那些 packages 了。安装完毕后你可以设置 CU_CDR
为 0,这样系统用的 alias 就会大大减少。

首先启动 OpenBSD,插入安装盘,输入 mcd,它会 mount 你的安装盘
到 /mnt 目录,然后输入 culist 看有哪些包可以装,它会显示以下的
选项:cupack, cukde3, cufc4, cuacr7, cuacf7, 你可以按需要安装。
装完后输入 ucd,它会 umount 光盘,然后把盘取出就算完成了。使用
KDE 的时候编辑 ~/.xinitrc,内容写 startkde 就可以了。

五、基本原理:

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.rar

posted on 2006-02-23 00:39 Vincent.Chen 阅读(313) 评论(0)  编辑  收藏 所属分类: Linux


只有注册用户登录后才能发表评论。


网站导航: