[原创]用FreeBSD的启动U盘实现订制安装_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2872 | 回复: 0   主题: [原创]用FreeBSD的启动U盘实现订制安装        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2014-8-28 18:11:25 | [全部帖] [楼主帖] 楼主

    FreeBSD的U盘版本,也就是各镜像网站的的img文件,其实就是一个运行于U盘之上的FreeBSD系统,并且还是一个基本上完整的系统,甚至连man都可以,跟安装在硬盘上的系统基本上一致。比较大的区别就是/var和/tmp都使用的内存盘md。

    FreeBSD10.0的U盘版自动启动后,会进入一个选择界面,让你选择“Install”、“Shell”、“Live CD”,其实后两个差不不大,第一个会进入安装向导。

    我们要实现自动安装,不需要这个界面,那么这个启动界面是怎么来的呢?

    在/etc/rc.local中,会看到一段shell代码,这段代码最后,就有Install、Shell和Live CD的字样,这个选项菜单就是这段shell运行后的结果。

    /etc/rc.local,就相当于windows中的autoexec.bat,每次启动都会执行,这个rc.local本身就是一个脚本,语法跟普通的脚本一样,区别是这个脚本是在系统启动的时候自动执行的,在进入shell提示符之前就执行,并且是以root身份执行!所以如果这个文件被篡改的话,后果就非常严重了。

    知道了系统自动执行的地方,那么不可以自己写脚本了,当然可以直接写在rc.local里面,也可以用rc.local再调用。

    我写了个简单的自动安装脚本,自从学了PHP,基本上没写过shell,写的有点青涩,就凑合着看吧,当然欢迎提出修改意见!其实就是自动恢复一个系统的镜像:

% cat rc.local
#!/bin/sh
# 测试函数,测试程序运行结果,并显示错误提示
testresult(){
      if [ $1 -gt 0 ] ; then
      echo " Error Found : --- $2 --- "
      exit 2;
      fi
}
# 检测有没有第一块硬盘,这是普通的sata硬盘,其他硬盘如实修改
ls /dev/ada0
testresult $? 'disk1 is not Found! Maybe the Raid is existed!'
# 用gpt方式分区,并写入启动代码
echo 'Delete the disk1 and Partionning!'
/sbin/gpart destroy -F ada0
/sbin/gpart create -s gpt ada0
testresult $? 'Error in Partting ...... '
/sbin/gpart add -t freebsd-boot -b 40 -s 512K ada0
testresult $? 'Error in Partting ...... '
/sbin/gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
# 1G的根分区
/sbin/gpart add -t freebsd-ufs -b 1M -s 1G ada0
testresult $? 'Error in Partting ...... '
# 添加4G的交换分区
/sbin/gpart add -t freebsd-swap -s 4G ada0
# 15G的/usr
/sbin/gpart add -t freebsd-ufs -s 15G ada0
testresult $? 'Error in Partting ...... '
# 30G的/var,1G的/tmp,因为日志可能会大一些
/sbin/gpart add -t freebsd-ufs -s 30G ada0
/sbin/gpart add -t freebsd-ufs -s 1G ada0
testresult $? 'Error in Partting ...... '
# 20G的/home,自已用
/sbin/gpart add -t freebsd-ufs -s 20G ada0
# 其他的,给业务用,我一般取名为/www
/sbin/gpart add -t freebsd-ufs ada0
testresult $? 'Error in Partting ...... '
echo "Complete!"
echo "Starting formatting the partion!"
# 格式化,在运行的时候,这段需要的时间最长
/sbin/newfs -U /dev/ada0p2
testresult $? 'Error in formatting ...... '
/sbin/newfs -U /dev/ada0p4
testresult $? 'Error in formatting ...... '
/sbin/newfs -U /dev/ada0p5
testresult $? 'Error in formatting ...... '
/sbin/newfs -U /dev/ada0p6
testresult $? 'Error in formatting ...... '
/sbin/newfs -U /dev/ada0p7
testresult $? 'Error in formatting ...... '
/sbin/newfs -U /dev/ada0p8
testresult $? 'Error in formatting ...... '
# 挂载硬盘根分区
/sbin/mount /dev/ada0p2 /mnt
testresult $? 'Error Mount Filesystem '
mkdir /mnt/usr
mkdir /mnt/var
mkdir /mnt/tmp
mkdir /mnt/home
mkdir /mnt/web
/sbin/mount /dev/ada0p4 /mnt/usr
testresult $? 'Error Mount Filesystem '
/sbin/mount /dev/ada0p5 /mnt/var
testresult $? 'Error Mount Filesystem '
/sbin/mount /dev/ada0p6 /mnt/tmp
testresult $? 'Error Mount Filesystem '
/sbin/mount /dev/ada0p7 /mnt/home
testresult $? 'Error Mount Filesystem '
/sbin/mount /dev/ada0p8 /mnt/www
testresult $? 'Error Mount Filesystem '
echo "Disk partioning is Complete ! "
# 解压系统镜像,sysbak.tar.gz需要提前做好,详细见前一篇“FreeBSD的克隆”,如果磁盘没有空间,可以把/usr里面的base、ports和src都删除掉,可以节省近700兆的空间。
echo "Now, Extracting the file to disk!"
echo " ...... "
read -t 2
tar -xzvpf /sysbak.tar.gz -C /mnt
testresult $? 'Extract base file Error! '
echo " Complete!"
echo " ..."
# 写入订制的启动配置
cat /rc.conf >> /mnt/etc/rc.conf
# 写入订制的crontab
echo "*/5 * * * * root /usr/bin/fetch http://10.72.6.193:444/a.txt" >> /mnt/etc/crontab
# 一切完成,重新启动
read -p "Setup is Done! Press Any Key to reboot!" strtmp
reboot


总结:

其实就两句话:用tar制作系统镜像;在rc.local里面写脚本。

该贴被wulcan编辑于2014-8-28 18:13:18

该贴由hui.chen转至本版2014-11-5 17:04:55




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论