Build FreeBSD Installation CDs To One DVD

本文分别以 Windows 平台和 Linux 平台描述了如何把 FreeBSD 的多张安装 CD 合并为一张 DVD。

Windows Platform

Windows 平台

通常需要CD2、CD3的情况是在安装CD1上的package时需要安装CD2上的某些package才会被用到,并且安装期间很容易出现频繁的置换两张CD。

所以得出一个简单的、为了实现方便安装package的、制作单张FreeBSD DVD的方法:

制作平台是Windows + UltraISO => Freebsd 7.0。

其实可以用任何编辑ISO的软件,如果配合一个虚拟光驱来测试镜像,制作起来会更方便些。

步骤:

1、将CD2、CD3中的packages文件夹完整的复制到计算机硬盘的一个临时位置;

2、编辑刚复制到硬盘的packages文件夹中的INDEX文件,CD1和CD2、CD3的是同样的内容,编辑一个就可以了,这个是关 键,它记录了一个FreeBSD发行版所有package的光盘位置的信息,安装package判断在CD1还是CD2、CD3就是靠这个文件来判断的;

3、现在我们找一个文本编辑器将他打开,搜索并将”|2″和”|3″替换为”|1″,从字面上看就能明白,就是将指向到CD2、CD3的package修改为指向CD1,因为我们只有一张DVD;

4、用UlrtaISO(或其他编辑镜像的软件)打开CD1,将刚才复制到硬盘上的CD2、CD3的packages文件夹追加到CD1 中,确保CD1的packages包含了发行版CD1和CD2、CD3所有packages的文件,并且INDEX文件是刚才我们编辑过的文件;

5、忽略CD2、CD3下的cdrom.inf,它已被遗弃;

6、还可以把docs盘的内容也相应的追加过来;

7、保存镜像 -> [测试镜像] -> 刻录光盘 -> 完成。

Linux Platform

详情请见 LeakonWiki

http://wiki.leakon.com/BuildFreeBSDInstallationCDsToDVD

FreeBSD /etc 文件简介

FreeBSD中/etc下的文件可以说是纷繁复杂,对熟悉它的人来讲不算什么,但对于一个新手来说就。。。太乱了,下面是一些经常用到的配置文件的作用和配置方法,但愿能给你一点帮助。

1. aliases
2. crontab
3. csh.cshrc
4. csh.login
5. csh.logout
6. daily
7. defaultdomain
8. exports
9. fbtab
10.fstab
11.ftpusers
12.group
13.host.conf
14.hosts
15.inetd.conf
16.localtime
17.login.conf
18.make.conf
19.monthly
20.motd
21.netstart—-新版已改名为/etc/rc.network
22.passwd
23.printcap
24.profile
25.rc
26.rc.conf—-代替原来的/etc/sysconfig
27.rc.conf.local—-代替原来的/etc/rc.local
28.rc.i386
29.rc.local—-新版改名为/etc/rc.conf.local
30.rc.network—-代替原来的/etc/netstart
31.resolv.conf
32.services
33.shells
34.sysconfig—-新版已改名为/etc/rc.conf
35.syslog.conf
36.termcap
37.ttys
38.weekly

1. aliases

这个档案主要是告诉 sendmail 要将信转寄给哪些使用者, 或是交由哪个程式处理.

如. root: user1,name2,user3
usenet: “|/usr/local/bin/mail-post.pl”

如上范例, sendmail 会将原先寄给的 root 的信分送给 user1 和 name2 和 user3, 而把寄给 usenet 的信交由 mail-post.pl 处理.

在你修改完之後, 要记得执行 “newaliases” 来更新 /etc/aliases.db

关於 aliases 之详细说明, 请 man aliases 查询.

2. crontab

这是给 root 用的 crontab file, 你也可以杀掉这个档案以 “crontab -e” 来替代.
格式如下…

#分 小时 天 月 礼拜几 用谁的身份 命令
*/5 * * * * root /usr/libexec/atrun

minute: 分钟/小时, 范围自 0 至 59
hour: 小时/天, 范围自 0 至 23
mday: 天/月, 范围自 0 至 31
month: 月/年, 范围自 0 至 12
wday: 天/周, 范围自 0 至 7 (0, 7 表示星期天)
who: 表是以谁的身份执行这个 command
(这只对 /etc/crontab 有用, crontab -e 无此栏位)
command: 命令或是 shell script

*/N: 表示每 N 一算, 像小时而言, */3 指的是 0,3,6,9,12

请 man 5 crontab 去看详细说明.

3. csh.cshrc

# 系统内定给 csh shell 用的 .cshrc 档

## 确定 HOME 目录
setenv HOME $HOME
set home=$HOME
cd $HOME

## 档案权限设定
umask 022

## 就是 Aliases 嘛
alias pftp ‘/usr/local/bin/pftp’
alias free ‘pstat -s|grep -v not’
alias talk ytalk
alias ruptime ‘/usr/bin/ruptime|grep -v down’
alias ftp ncftp
alias rwho ‘/usr/bin/rwho -a|grep -v LOGIN’
alias more less
alias zmore zless
alias m less
alias pss ‘ps auxw|sort -k 2|grep $USER’
alias psm ‘ps auxw|sort -k 1,2|more’
alias psl psm
alias psv ‘ps auxw|grep -v $USER|sort -k 2|more’
alias d ‘/usr/local/bin/colorls -G -alFgk \!* | more’
alias dir ‘/usr/local/bin/colorls -G -alFgk \!*’
alias rd rmdir
alias md mkdir
alias cls clear
alias cd.. ‘cd ..’
alias del ‘/bin/rm -i’
alias xdel ‘/bin/rm -rf’
alias mv ‘mv -i’
alias dir/w ‘/bin/ls -aFgk’
alias dw ‘/bin/ls -aFgk’
#alias x ‘(startx &)>&/dev/console;sleep 300;lo’
#alias lpr ‘lpr -m’
alias cp ‘cp -i’
alias rm ‘rm -i’
alias lo ‘clear;exit’
alias bye ‘clear;exit’
#alias vi cvi
alias unlo ‘unset autologout;unsetenv autologout’
alias q joe
alias .. ‘cd ..’
alias … ‘cd ../..’
#alias ku ‘ku -W’
alias tin rtin
#alias s ‘exec screen’

## 环境设定
set path = (/sbin /usr/sbin /bin /usr/bin /usr/local/sbin /usr/local/bin)
set path = ($path /etc /usr/etc /usr/local/etc)
set path = ($path /usr/X11R6/bin /usr/games)
set path = ($path ~ ~/bin .)
set mail = (10 /var/mail/$USER)
set recexact
set autolist
set matchbeep = ambiguous
set autoexpand
set autocorrect
set ignoreeof
set noclobber
set notify
set correct = all
if ( ! $?WINDOW ) then
# set prompt = “%B%m [%/] [%?] -%n- ”
set prompt = “%B%m [%/] -%n- ”
else
set prompt = “%B%m [%/] -%n- [W$WINDOW] ”
endif
set prompt2 = “(%t %m)%~ #%% ”
set prompt3 = “%SDo you mean [%R] (y/n/e) ? ”
set history = 500
set savehist = 500
set time=100
#set watch=(1 any any)
set symlinks = ignore
set listlinks
set listjobs
set rmstar
set showdots
#set tperiod = 30
# set autologout = (60 2)
#setenv MANPATH /usr/man:/usr/local/man:/usr/man/preformat:/usr/X11/man:/usr/openwin/man
setenv EDITOR /usr/local/bin/joe
setenv VISUAL /usr/local/bin/joe
setenv EXINIT ’set ai’
setenv LESS “-EsPm-LESS-”
setenv LESSCHARDEF “8bcccbcc18b95..”
setenv PAGER “less -Em”
#setenv PAGER more
setenv LC_CTYPE lt_LN.ISO_8859-1
setenv LANG C
setenv BLOCKSIZE 1k
setenv MACHINE_ARCH i386
setenv MACHINE i386
setenv ORGANIZATION “交大资工 ADONIS”

## X 相关设定
setenv XWINHOME ‘/usr/X11R6′
setenv X11HOME ‘/usr/X11R6′
setenv OPENWINHOME ‘/usr/X11R6′
setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB
setenv XNLSPATH /usr/X11R6/lib/X11/nls
#setenv LD_LIBRARY_PATH /usr/lib:/usr/X11R6/lib:/usr/local/lib
stty erase ‘^?’

if ( $?TERM ) then
if ($TERM == “xterm” || $TERM == “xterms”) then
stty erase ‘^H’
endif
endif

## 杂七杂八设定
#set term = vt100
#set TERM = vt100
#setenv term vt100
#setenv TERM vt100
#stty extb
stty 38400
stty crt
stty -tabs
stty -istrip
stty pass8
unlo
#bindkey “[HOME]” beginning-of-line
#bindkey “[ESC]” keyboard-quit
limit coredumpsize 0

# 给 FSP Client 用
setenv FSP_PORT 21
setenv FSP_HOST nctuccca.edu.tw
setenv FSP_DIR /
setenv FSP_TRACE
setenv FSP_DELAY 3000

# Aii.. 就是 fsp aliases :)
alias fcat ‘(set noglob; exec fcatcmd \!*)’
alias fcd ’setenv FSP_DIR `(set noglob; exec fcdcmd \!*)`;fpwd’
alias fdu \(set noglob\; exec fducmd \!\*\)
alias ffind \(set noglob\; exec ffindcmd \!\*\)
alias fget ‘(set noglob; exec fgetcmd \!*)’
alias fgrab ‘(set noglob; exec fgrabcmd \!*)’
alias fls ‘(set noglob; exec flscmd -F \!*)’
alias fll ‘(set noglob; exec flscmd -l \!*)’
alias fdir ‘(set noglob; exec flscmd -l \!*)’
alias fmore \(set noglob\; exec fcatcmd \!\* \| more\)
alias fpro ‘(set noglob; exec fprocmd \!*)’
alias fpwd ‘echo “$FSP_HOST ($FSP_PORT): $FSP_DIR”‘
alias frm ‘(set noglob; exec frmcmd \!*)’
alias frmdir ‘(set noglob; exec frmdircmd \!*)’
alias fhost ’setenv FSP_HOST \!*;setenv FSP_DIR /’

4. csh.login

# 系统内定的 .login 档.

#stty extb
stty 38400
#stty crt
#stty -tabs
stty -istrip
stty pass8

# Mesg y if not console
mesg y
if ( `tty | cut -c 6-` == console ) then
mesg n
endif

msgs -fp

5. csh.logout

# 系统内定的 .logout
clear
.

6. daily

cron 会依照 /etc/crontab 去做每日例行的工作. 注意一下有些 commands 对你的硬盘造成很大的负荷, 像是最後一行的 “sh /etc/security”, 他会从你的根目录开始查询. 你可以加些每天你想要执行的commands, 像是 “quotacheck -a”, “bin/rm/-f /tmp*junk*.

7. defaultdomain

这个档案记载你的 domainname, 你有跑 yp (nis) 时才有用. 当然闲闲填一填也没差啦.

8. exports

这个档案定义哪些目录可经由 NFS 给别人使用.
例如 /cdrom -ro host1,host2
/home -maproot=root host3

Notice: 若你没加 “-ro” 表示可以写入, 所以你应当小心点.

做完修正後, “kill -1 $mountd_pid”, 然後用 “showmount -e” 去看看 NFS 是否做的正确. 如果有错, 用 “tail /var/log/messages” 来看错误讯息.

你应该要将 /etc/rc.conf 中的 nfs_client_enable, nfs_server_enable 设为 YES.

详细说明请 man 5 exports.

9. fbtab

/dev/ttyv0 0600 /dev/console
/dev/ttyv1 0600 /dev/console
/dev/ttyv2 0600 /dev/console
/dev/ttyv3 0600 /dev/console
#/dev/ttyv0 0600 /dev/pcaudio:/dev/pcaudioctl

10.fstab

这个档案定义当你开机时, 你想 mount 哪些 partition.
例如.

/dev/sd0a / ufs rw 1 1
/dev/sd0e /dos msdos ro,-gmsdos,-m750 1 1
/dev/sd0g /usr/local ufs rw,userquota 1 1
/dev/sd0h /home ufs rw,userquota,groupquota 1 1
/dev/sd0b none swap sw 0 0
proc /proc procfs rw 0 0
kern /kern kernfs rw 0 0

详情请 man fstab.

如果你的 /usr 没有跟 / 放在一起,要特别注意,/usr 不可以放在使用 LKM 载入的 filesystem 後面。例如,你的 MSDOSFS 是利用 LKM 载入的(也就是说,你没有把 MSDOSFS 编译在 kernel 中),你的 /dos
一定要放在 /usr 後面,不然开机会失败,例如:

modload:exec(/usr/bin/ld):NO such file or directiory
msdos:vfsload(msdos):Operation not permitted
Filessystem mount failed,startup aborted
Enter pathname of shell or RETURN for sh

11.ftpusers

这个档注明的 users 将无法 ftp 这台机器. 只要写 username 即可. 算是禁止 ftp 进来的黑名单吧.

12.group

这个档案主要记载著 group 名称, group id 以及隶属於该 group 的使用者.

要记得在 FreeBSD 中, 只有属於 wheel group 的使用者才能 su 成 root.

在升级时特别注意 /usr/src/etc/group 中是否有新增系统 group, 如 network 这个 group 就是最近新增的 group.

其他详细请用 man group.

13.host.conf

这个档案决定 DNS-name-lookup 的先後顺序. 你最好先 “hosts”, 其次 “bind”, 最後用 “nis”.

hosts: 自 /etc/hosts 查询.
bind: 自 nameserver (参考 /etc/resolv.conf 设定) 查询.
nis: 自 nis server 查询.

14.hosts

这个档案记载了你所需要的 ip 和 hostname, 最少要包括 localhost 和你自己的 hostname, 通常是提供优先於 nameserver 的查询, 或是没有 nameserver 时的查询.

格式如下:
IP-addr full-hostname alias
如. 123.456.789.123 heaven.net.com heaven

请 man hosts 去看详细说明.

15.inetd.conf

这个档案定义由 inetd 所提供的服务, 应该要和 /etc/services 保持一致性.

当你修改这个档案的时候, 记得要 kill -1 $inetd_pid 去知会 inetd 要重新更新资料.

你可以安装 tcp-wrapper (tcpd) 以增加安全性.

16.localtime

这个档记载你所在的时区资料, 你可以从 /usr/share/zoneinfo 中选一个适合的来用.

就台湾而言, 你应该用 /usr/share/zoneinfo/Asia/Taipei, 正常来说, 在 install 时会自动将此档案 copy 到 /etc/localtime.

17.login.conf

此档案可控制系统资源与帐号各方面的限制,亦可设定内定之环境变数。

“man login.conf” for detail.

18.make.conf

当你用 make 时, 这个定义档将被参考.

如果不是以 BSD 格式撰写的 Makefiles, 你应该安装 gmake (GNU)

19.monthly

每月例行的 jobs.

20.motd

Message Of Today, 顾名思义, 就是当你 login 时所出现的画面.

假如你要有自己的 motd, 你必须把 /etc/rc.local 前面几行在开机时会更改 motd 的命令拿掉, 否则你每次开机 motd 会被乱改.

21.netstart—-新版已改名为/etc/rc.network

目前此档已由 /etc/rc.network 取代 目前此档只作为 root 在 single user mode 要手动启动网路服务
时使用。 这个档案不要做更动, 应该去修改 /etc/rc.conf

22.passwd

/etc/passwd /etc/master.passwd /etc/spwd.db /etc/pwd.db 都是 由 vipw 所产生的. 关於怎样去建一个帐号, 请参考 HOW-TO-adduser.

你可以 man passwd, vipw, chpass, chfn 查询详细说明.

23.printcap

这个档案定义印表机的设定, 在修改後, 试著用 lpr 去列印一些东西, 假如你觉得很慢, 试著用 lptcontrol -p 去改变 /dev/lpt0 到 poll 模式, 当然, 你可以将 lptcontrol -p 加到 /etc/rc.local 里 以使每次开机都有效.

man lptcontrol 查询详细说明.

24.profile

这是 /bin/sh 的 default 设定.

25.rc

当系统开机时, kernel 会先去载入 /sbin/init, 然後 /sbin/init 会去执行 /etc/rc, 所以 /etc/rc 相对於 DOS 而言就好像 AUTOEXEC.BAT. 这个档案不要去更改, 假如你不希望每次开机时 /tmp 会被清乾净, 那你可以将跟 /tmp 相关的几行给砍掉. (个人偏好)

26.rc.conf—-代替原来的/etc/sysconfig

这主要用来做系统开机时的环境设定. /etc/rc, /etc/rc.i386, /etc/rc.conf.local, /etc/rc.network, /etc/[bla bla] 都会参考这个档案. 所以这个档案可以说非常重要.

大多都有注解, 以下列举一些你该注意的地方…
1) hostname : 你的完整 hostname (FQDN: 像是 freebsd.csie.nctu.edu.tw)
2) network_interfaces : 网路卡的 device name, 像是 “ed0 lnc0″.
3) ifconfig_xxx : 定义网路卡及其 ip address.
像是 ifconfig_ed0=”inet 140.113.145.1 netmask 0xffffff00″
ifconfig_ed1=”inet 140.113.190.1 netmask 0xffffff00″
方法如下…
ifconfig_$device-name=”inet $IP netmask $netmask”,
netmask 0xffffff00 就是 255.255.255.0 表 Class C 网路.
4) defaultrouter: 内定的 router IP.(比如: 140.113.122.254)
5) routdflags : 通常 NO. 但是假如你想要跑 routed, 则用 “-s” 或 “-q”.
详细说明请 man routed.
6) rwhod : YES 执行 rwho daemon. rwho 跟 ruptime 须此 daemon.
7) sendmail_flags : 执行 sendmail daemon, 通常设为 “-db -q30m”
8) nfs_* : 执行 nfs client 或 server
9) check_quotas : enable 档案系统 quotas
10) accountint : enable command accounting, “lastcomm” 须要.
11) firewall_enable : enable firewall 的功能
firewall_type : 指定 firewall 的形态

你应该设定完後再重新开机以测试是否每个改变都合乎你的要求.

27.rc.conf.local—-代替原来的/etc/rc.local

在这个档案加入你个人的设定, 你可以将开机时想要执行的动作放在这里. 像 gopherd, lptcontrol, swap-on-file 等.

28.rc.i386

这个档案不要更动.

29.rc.local—-新版改名为/etc/rc.conf.local

新版已由/etc/rc.conf.local所取代。

30.rc.network—-代替原来的/etc/netstart

有关网路方面各项设定请由 /etc/rc.conf 设定,原则上此档不需更动

31.resolv.conf

这定义 DNS 查询 nameserver 的先後顺序.

1. domain : 将你的 domainname 放这儿.
2. nameserver : 将你的 nameservers 放这儿, 最前面的会被当成主要的nameserver.
3. search : 将 domainnames 放这儿, 当你没有输入完整的 hostname 时, 他会将 domainnames 附加上去. 例如: search csie.NCTU.edu.tw NCTU.edu.tw edu.tw tw

详情请 man resolver.

32.services

定义 service 名字以及 port. 不需要更动。

33.shells

所有的 shell 都应该放在这个档案里, 像是 /bin/sh, /bin/tcsh, /home/bbs/bin/bbsrf 等等.

假如说有某个使用者的 shell 没有列在这个档案中, 有些程式如 ftpd 会拒绝该使用者 ftp, 如 adduser 将会拒绝执行.

man shells 查询详细说明.

34.sysconfig—-新版已改名为/etc/rc.conf

参考 rc.conf。

35.syslog.conf

这个档案指出系统的 log 应该储存在哪儿.

36.termcap

这个应该 link 到 /usr/share/misc/termcap.

37.ttys

定义 tty 的形式及某些 tty 允不允许 root login. 假如某些 ttys 後面加有 “secure”, 表示 root 可以 login. 你应当多加些, 如 /dev/tty[pqrs][0-9a-v]

详情请 man ttys。

38.weekly

每周例行的工作。

FreeBSD 彩色 目录 LS gnuls

我的FreeBSD,登录的时候,用ls列表目录,是彩色的。

可执行文件是绿色,目录是蓝色,链接是青色,看起来很舒服,也更容易辨认系统。

要做到这样,很容易,只要系统装了gnuls就可以。

这个软件的porst安装在/usr/ports/misc/gnuls。

到这个目录下面,执行make install就可以了。

等安装完毕,在你的home目录下,编辑.cshrc,加入下面折行代码:

alias ls 'gnuls --color=auto --show-control-chars'

保存,关闭,然后重新登录系统。

这个时候再用ls看看,都是彩色了吧。

如果不行,记得检查一下SecureCRT的设置,选择仿真终端的时候,我这边设置的是Linux ANSI颜色。

有问题来找我~~

Linux FreeBSD date 函数 昨天日期 yesterday

写 shell 脚本的时候,需要用到昨天的日期(yesterday, lastday),Linux 和 FreeBSD 虽说都是 *nix 系统,但一个简单的 date 函数居然用法都不一样。

例如,今天是 2007-9-14

FreeBSD:

输入:date -v -1d +%Y%m%d
输出:20070913

Linux:

输入:date --date='yesterday' +%Y%m%d
输出:20070913

看到这里,会发现,Linux 的局限性,他只能输出昨天的,但前天和大前天的之类的日期就没办法了。

我还是比较喜欢 FreeBSD

xampp xdebug configure phpize php-config

看标题,不太会理解这篇文章的主题,只不过是有着微妙关联的几个软件,按照时间顺序发生在了我的身上。

xampp,是一个集成的 apache + php + mysql + … 的开发环境,如果你是做 web 开发,对各种服务器软件的安装比较头疼,尤其是在 unix 下编译和配置各种软件没有经验的时候,这个软件就能帮大忙了。只要下载回去,解压到 /opt 目录下,然后

#/opt/lampp/lampp start 即可!

/opt/lampp/htdocs 就是你的 web 根目录,所有的环境都默认配好了。

通常,我都是在 vmware 里安装一个 FreeBSD 6,然后装这个 xampp,就立刻有了一个开发环境。

后来, 需要用 xdebug 调试 php 程序,Windows 版的超级简单,下载一个 DLL 文件即可,但 Unix 版的必须得在本机环境中编译才行。

以前编译过 apache 和 php 等软件,第一步都是在安装目录执行 ./configure ,但解压完 xdebug 发现根本没有这个文件,上网站查文档,发现需要执行 phpize。

百度了一把,大概了解到,phpize 是根据源码包中的好像是 config.m4 这个文件,生成 configure 脚本的,目前来说,我也就能领悟到这个层次了。还好,我查了 /opt/lampp 目录下面,有这个 phpize 文件,可以执行。执行完了,目录下面果然出现了 configure 文件,这个 configure 文件会调用 php-config。

php-config 可能就是获得当前 php 的各种环境设置变量的,在编译 xdebug 这种 php 扩展的时候会用到。

用 phpize 和 php-config 做好 configure 后,就要用 make 编译 xdebug 了。

这个时候,问题来了,屏幕刷刷地显示了几屏错误信息后,停在一个严重错误的提示信息下面 。

说是 xdebug 的语法错误。

我想,不会吧,这么出名的开源软件,都是经过很多测试的,不至于编译都过不去。然后自己检查前面的每一项错误信息,都是提示一些  .h  文件找不到,关键的几行是 php/include 目录,编译程序要在这个目录下面找文件,但是这个目录不存在!

这个提醒了我,由于我的  apache 和 php 环境是 xampp 打包的,目录结构和默认的不一样,而且很多文件也没有在系统中注册,是无法自动找到的。

我到朋友的服务器上测试了一下,他的软件都是一项一项安装的,基本都是默认目录。果然不出所料,在那里配置和编译都没有问题。

大概找到了问题的根源,然后在自己的虚拟机上重新安装了 apache 和 php,都是默认安装,然后,重新编译  xdebug,这回可以顺利通过了!

解决 Failed to enable the ‘httpready’ Accept Filter

在 FreeBSD 下安装 apache22 会出现类似的 warming:
No such file or directory: Failed to enable the ‘httpready’ Accept Filter

解决方法是:
#kldload accf_http并在 /boot/defaults/loader.conf 中加入下面 2 行,以便下次启动自动装载模块
accf_data_load=”YES”
accf_http_load=”YES”

Google

Google
LAMP-Linux-redhat LAMP-Apache LAMP-MySQL LAMP-Php Leakon-Wiki Leakon-BBS XueBaoBao Xyoyou