原文出自 http://www.daemonology.net/blog/2008-01-29-depenguinator-2.0.html ,有修改。
有时候,出于某种需要,我们可能想把自己的主机重装成FreeBSD,但是,亲自去一趟机房可能会相当麻烦,更糟糕的是机房可能没人懂安装FreeBSD的,这种情况下,只能我们自己想办法了。
原理,我们把FreeBSD启动盘写入硬盘某一个区里面,然后通过grub启动,让FreeBSD直接在内存里面启动,这样我们就可以对硬盘进行分区等操作了。
目前depenguinator支持大部分Linux发行版(仅i386版本,不支持x86_64),支持安装FreeBSD6、7系列,下面马上开始。
1.安装依赖的软件包.
depenguinator制作FreeBSD硬盘镜像文件时需要编译makefs,下列软件包是必须的.
curl
gcc
zlib
zlib-devel
glibc-devel
bsdtar ( http://people.freebsd.org/~kientzle/libarchive/ )
自己逐个安装吧,这些应该没什么困难的,只有bsdtar需要编译安装,其他的直接使用yum安装就可以了
2.下载daemonology最新版本
wget http://www.daemonology.net/depenguinator/depenguin-2.0.tar.gz
3.编辑配置文件
tar -xzf depenguin-2.0.tar.gz
cd depenguin-2.0
4.创建depenguinator.conf并且根据自己的实际情况修改,(注意:这部分内容不能有错误,否则FreeBSD启动也无法安装连接网络)
depenguinator.conf.dist depenguinator.conf
hostname="服务器机器名"
defaultrouter="服务器网关"
depenguinator_mac_external="网卡mac地址"
depenguinator_ip_external="服务器IP地址"
depenguinator_netmask_external="子网掩码"
保存退出
5.下载FreeBSD disc1 ISO image,并且改名为disc1.iso
curl ftp://ftp.freebsdchina.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.0/7.0-RELEASE-i386-disc1.iso > disc1.iso
6.上传你的ssh authorized key到/root/.ssh,执行makeimage.sh创建硬盘镜像文件(ssh authorized key用来验证ssh登录,没有的话无法连接sshd)
sh -e makeimage.sh disc1.iso 7.0-RELEASE ~/.ssh/authorized_keys
7.这一步,作者的做法是关闭swap,然后把镜像文件写入swap,通过grub启动,不过我在测试的时候grub无法启动swap分区,提示filesystem unknow,可能是我的CentOS版本太低了吧(CentOS3.8),所以我稍微做了修改:先关闭swap,然后把swap转换成FreeBSD文件系统,再把disk.img写入swap分区,这样grub就可以正常启动了。(我的swap是/dev/sda2,如果你的swap是其他分区,要做相应修改)
swapoff /dev/sda2
fdisk /dev/sda2
选择t修改分区类型
输入sda2分区号码2
分区类型输入a5 (这是FreeBSD文件系统标号)
按w保存退出
8.把disk.img写入硬盘
dd if=disk.img of=/dev/sda2
9.更新gurb启动,增加FreeBSD选择并且设置为默认
vi /boot/grub/menu.lst
在最后增加下面部分:
title FreeBSD
root (hd0,1)
makeactive
chainloader +1
修改default=0 为default=2
10.重启系统
shutdown -r now
11.系统启动,这时FreeBSD完全是在内存里面运行着.enjoy yourself and god bless you
后记:系统启动后安装也比较困难的,因为FreeBSD安装过程的分区有点问题,反正大家在没熟悉操作之前,千万不要拿服务器开刀,否则丢数据请不要找本人麻烦.
现在就继续讨论一下如何安装FreeBSD
由于这样安装系统跟光盘安装有不同,所以我写一下我的经验给大家吧.
安装过程最大的问题是分区,有这样一个问题,系统启动后md0和md1分别挂载在 / 根分区和/usr分区,一旦你sysinstall过程中对硬盘分区格式化然后挂载到/ 和/usr,那么这两个分区就变成空白分区了,sysinstall可能无法继续,所以这里不得不耍点小手段才行。
我的解决方法:
先对硬盘分区格式化,然后mount 到 /1 和 /2 ,再把/根分区和/usr分区里面的文件分别拷贝到这两个分区里面,然后重新挂载到根分区和/usr分区,sysisntall过程就不需要再分区了。
至于如何分区格式化,参考FreeBSD使用手册里面的说明:
http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/disks-adding.html
dd if=/dev/zero of=/dev/da0 bs=1k count=1
fdisk -BI da0 #初始化新磁盘
bsdlabel -B -w da0s1 auto #加上标签
mkdir /1
mkdir /2
进入sysinstall
选择Configure
选择lable
删掉原来的da0s1a,然后对da0s1分区。通常来说,下面分区是必须的
swap
/1 (用来挂载根分区,不要使用softupdate)
/2 (用来挂载/usr分区)
一般还会分/tmp和/var
根据自己需要划分分区大小,然后按w保存,退出sysinstall ,按照我的实际情况,得到/1和/2分别是/dev/da0s1a和/dev/da0s1e
把根目录的东西都拷贝到/1里面去(会提示有错误,不用管)
cp -Rp .cshrc boot lib mnt sbin usr .profile COPYRIGHT dev libexec proc sys usr.tgz bin etc media root tmp var 1/
把/usr目录的东西都拷贝到/2里面去
cd /usr
cp -Rp * /2/
umount /1 和/2
umount /1
umount /2
mount /dev/da0s1e /usr
mount /dev/da0s1a /
好了,重新进入sysinstall
开始安装过程,直接跳过fdisk,lable这步只需要指定你分好的分区挂载到哪里就行了,不要重新格式化分区,按w保存修改,然后就是安装系统了,这里不再重复,只说明一下系统安装好之后的步骤。
1.检查内核是否安装好,如果 /boot/kernel下面没有内核文件,把/boot/GENERIC/下面的所有文件全部拷贝到/boot/kernel里面
cp -Rp /boot/GENERIC/* /boot/kernel/
2.更新/etc/fstab
按照自己的实际分区状况来写,例如我的
# Device Mountpoint FStype Options Dump Pass#
/dev/da0s1a / ufs rw 1 1
/dev/da0s1d /tmp ufs rw 2 2
/dev/da0s1b none swap sw 0 0
/dev/da0s1e /usr ufs rw 2 2
3.更新/etc/rc.conf
mv /etc/rc.conf /etc/rc.conf.sysinstall
vi /etc/rc.conf (根据自己的实际情况修改)
defaultrouter="192.168.1.1"
hostname="host.youdoman.com"
ifconfig_em0="inet 192.168.1.8 netmask 255.255.255.0"
sshd_enable="YES"
重启,OK,系统安装完成,如果有时间,不防重新编译源码和内核吧。