免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4803 | 回复: 1

利用DHCP(ISC)和JumpStart实现solaris(X86)自动化安装 [复制链接]

论坛徽章:
0
发表于 2009-10-17 10:25 |显示全部楼层
一、需求:
        因公司新上一个项目,需要用到很多台机器(X86的),而操作系统统一是Solaris10 U5(X86),如果一台一台的手工安装,工作量可想而知。虽然我没那金刚钻,但还得揽这个瓷器活(其它对solaris比较熟悉的同事都有其它项目)。而solaris提供了一套自定义安装程序JumpStart(类似于redhat的KickStart),所以小弟就针对目前公司状况稍微研究了一下。
        此项目上的一个主程序在solaris10U5版本上经过认证.但U6版本(新加上perc6i的驱动了)上有问题,而U5版本本身不带PERC6i的驱动,所以工作之一就需要手工塞驱动(后面会提到).
        Clientell PE2950,RAID卡为PERC 6i,bdcrom 5706/5708的集成网卡(认出的模块为bnx,支持PXE)
        Client要求被安装的OS版本:solaris10 U5(05/0:fd: X86
        其它要求:双网卡做冗余(active-standby)
二、概要:
        因为管理成本原因,我们把JumpStart文件服务器、引导服务器、配置文件服务器和NFS服务器都放在一台Dell PE2950的solaris 10 U5(X86)服务器上,而公司已经有了DHCP服务器,为了避免冲突,所以就把dhcp功能给布署到原有的一台dhcp服务器上了(后面会提到向dhcpd.conf里面添加的内容)。
        JumpStart服务器OS:Solaris10 U5(X86)
        IP:172.16.134.83
        Hostname:jserver
        整个过程大概如下:
        通过让client从网络引导,系统会启动pxe功能,Bootprom发出BOOTP/DHCP请求得到IP,GateWay,及开机引导初始化文件。因为在三层交换机上让这个vlan的dhcp请求relay到指定的dhcp server.于是dhcp server响应请求给出了相关的网络参数也指明引导服务器为jserver和引导初始文件为pxegrub.I86PC.Solaris_10-1,然后client从jserver上通过tftp找到pxegrub并执行,然后根据menu.lst里的相关参数,执行x86.miniroot(同linux下的initrd)及multiboot(同linux下的image文件),根据sysidcfg里设置的参数来执行非交互式安装,在postinstall的时候,会根据post的脚本(end),把perc6i的驱动灌到安装好的系统里。


三、配置JumpStart文件服务器
PERC 6i的驱动是dell网站有下载,solaris10 u5在sun上有下载.我们把他download到一台已装好的solaris10上的/opt目录

mega_sas-v00.00.01.25-2_001.tgz sol-10-u5-ga-x86-dvd.iso to /opt

jserver# cd /opt;mkdir temp
jserver# mv mega_sas-v00.00.01.25-2_001.tgz temp/
jserver# lofiadm -a /opt/sol-10-u5-ga-x86-dvd.iso
/dev/lofi/1
jserver# mount -F hsfs /dev/lofi/1 /mnt

jserver# mkdir -p /jumpstart/{x86,config}


jserver# /mnt/Solaris_10/Tools/setup_install_server /jumpstart/x86

解开miniroot(Solaris 安装介质中所包含的最小可引导根 (/) 文件系统。miniroot 包含安装和升级系统所需的 Solaris 软件。在基于 x86 的系统上,miniroot 被复制到系统中,用作故障安全引导归档文件,类似于kickstart里的pxelinux.0)
jserver# /boot/solaris/bin/root_archive unpack /jumpstart/x86/boot/x86.miniroot /opt/u5_minirootunpack

以下是把dell提供solaris10(X86)的驱动塞到miniroot引导系统里,否则在系统安装时找不到硬盘(不认perc 6i的raid卡),而系统装完后,还需要再安装一下驱动(安装方法请看一下end脚本),否则系统在引导自己安装好的时候还是不认识硬盘。
jserver# cd /opt/temp
jserver# gunzip mega_sas-v00.00.01.25-2_001.tgz
jserver# tar -xf mega_sas-v00.00.01.25-2_001.tar
jserver# uncompress mega_sas.Z
jserver# unzip mega_sas

jserver# cp /opt/temp/megasas/reloc/kernel/drv/{mega_sas,mega_sas.conf} /opt/u5_minirootunpack/kernel/drv/

jserver# mkdir /opt/u5_minirootunpack/kernel/drv/amd64
jserver# cp /opt/temp/megasas/reloc/kernel/drv/amd64/mega_sas /opt/u5_minirootunpack/kernel/drv/amd64/

把驱动以下add_drv参数可从/opt/temp/megasas/install/postinstall和add_drv的man手册中得到.下列中的-i参数后面接的是perc 6i的pci id号
jserver# add_drv -b /opt/u5_minirootunpack -n -v -m \'* 0600 root sys\' -i \'\"pci1028,15.1028.1f01\"  \"pci1028,15.1028.1f02\"  \"pci1028,15.1028.1f03\"  \"pci1000,60.1028.1f0a\"  \"pci1000,60.1028.1f0b\"  \"pci1000,60.1028.1f0c\"  \"pci1000,60.1028.1f0d\"  \"pci1000,60.1028.1f11\"  \"pci1000,411.1000.1001\" \"pci1000,411.1000.1002\" \"pci1000,411.1000.1003\" \"pci1000,411.1000.1004\" \"pci1000,411.1000.2004\" \"pci1000,411.1000.2005\" \"pci1000,411.1000.100c\" \"pci1000,411.1000.100d\" \"pci1000,411.1000.1008\" \"pci1000,413.1000.1005\" \"pci1000,409.1000.1009\" \"pci1000,60.1000.1006\"  \"pci1000,60.1000.100a\"  \"pci1000,60.1000.100e\"  \"pci1000,60.1000.100f\"  \"pci1000,60.1000.1010\"  \"pci1000,60.1000.1011\"  \"pci1000,60.1000.1012\"  \"pci1000,60.1000.1013\"  \"pci1000,60.1000.1014\"  \"pci1000,60.1000.1015\"  \"pci1000,60.1000.1016\"  \"pci1000,60.1000.1017\"  \"pci1000,60.1000.1018\"  \"pci1000,60.1000.1019\"  \"pci1000,60.1000.101a\"  \"pci1000,60.1000.101b\"  \"pci1000,60.1014.363\"   \"pci1000,60.1014.364\"   \"pci1000,60.1014.365\"   \"pci1000,60.1014.379\"   \"pci1000,60.1170.2f\"    \"pci1000,60.1170.36\"    \"pci1000,60.1043.824d\"  \"pci1000,411.1734.1081\" \"pci1000,411.1734.10a3\" \"pci1000,411.1033.8287\" \"pci1000,60.1033.835a\"  \"pci1000,60.1734.10f9\"  \"pci1000,60.1734.1102\"  \"pci1000,411.8086.1001\" \"pci1000,411.8086.1003\" \"pci1000,411.8086.3500\" \"pci1000,411.8086.3501\" \"pci1000,411.8086.3504\" \"pci1000,411.8086.3490\" \"pci1000,60.8086.34cc\"  \"pci1000,60.8086.34cd\"  \"pci1000,411.8086.3507\" \"pci1000,411.1054.3016\" \"pci1000,60.1054.3019\"  \"pci1000,60.8086.1006\"  \"pci1000,60.8086.100a\"  \"pci1000,60.8086.1010\"  \"pci1000,60.17aa.6b7c\"  \"pci1000,60.15d9.c080\"  \"pci1000,60.1000.1458\"  \"pci1000,7c.1000.101c\"  \"pci1000,7c.1014.395\"\' -c scsi mega_sas

jserver# cd /jumpstart/x86/boot
jserver# mv x86.miniroot x86.miniroot_orig
加载驱动后,再打开miniroot,以便系统在引导安装时能认到硬盘.
jserver# /boot/solaris/bin/root_archive pack /jumpstart/x86/boot/x86.miniroot /opt/u5_minirootunpack


四、配置引导服务器:
将下列grep出来的注释去掉(去掉#号)。
jserver# grep in.tftpd /etc/inetd.conf
# tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot

转换inetd服务器为SMF
jserver# inetconv
jserver# svcs tftp/udp6
STATE          STIME    FMRI
online         Dec_18   svc:/network/tftp/udp6:default
生成pxegrub、menu.lst及指明引导服务器
jserver# cd /jumpstart/x86/Solaris_10/Tools/
jserver# ./add_install_client -d SUNW.i86pc i86pc
五、配置NFS服务器:
以只读权限share本服务器的/jumpstart目录给client
jserver# echo \"share -F nfs -o ro,anon=0 /jumpstart\" >> /etc/dfs/dfstab
jserver# svcadm enable nfs/server
jserver# svcs nfs/server
STATE STIME FMRI online 14:52:25 svc:/network/nfs/server:default
jserver# share
- /jumpstart ro,anon=0 \"\"


六、配置文件服务器:

jserver# cd /jumpstart/conf
jserver# ls
begin      check      end        rules      rules.ok   sysidcfg   x86-class
现先大概介绍一下以上几个文件的作用
rules.ok:在自定义JumpStart 安装过程中,JumpStart 程序尝试将要安装的系统与rules.ok 文件中的规则进行匹配。JumpStart 程序从第一条规则到最后一条规则通读这些规则。当安装的系统与规则中定义的所有系统属性一致时发生匹配。一旦系统匹配规则,JumpStart 程序即停止读取rules.ok 文件,然后根据匹配规则的配置文件开始安装系
统。必须使用 check(solaris提供:一般在ISO里的Solaris_10/Misc/jumpstart_sample目录下)脚本。

rules:它可以根据机器的机器的网段,系统架构类型(sparc,i86pc)来定义preinstall,postinstall和class等脚本。文件内容里的begin,x86-class以及end等文件名都无固定语法,但这些文件内容里有很多语法。

x86-class:是rules里定义系统的安装参数(分区,安装语言等等)

begin:是我在rules里指定的安装前做的一些工作,相当于kickstart里的preinstall.

end:是我在rules里指定的安装后(软件安装完及还没reboot这段时间)做的一些工作,相当于kickstart里的preinstall.

下面将把我的配置文件发出来
jserver# cat rules
any     -   begin   x86-class  end

jserver# cat begin
#!/bin/sh

sleep 1
echo \"\\n\\033[0;32;40mWelcome To JumpStart\\033[0m\\n\"
echo
sleep 1
echo \"lease enter your server IP ADDRESS:\"
read IP
echo \"lease enter your server HOSTNAME:\"
read HOSTNAME
echo \"$IP\"  >/tmp/IP
echo \"$HOSTNAME\">/tmp/HOSTNAME

jserver# cat x86-class
install_type initial_install
system_type standalone
partitioning    explicit
filesys c0t0d0s0 20000 /
filesys c0t0d0s1 16000 swap
filesys c0t0d0s7 free /export/home
cluster SUNWCXall
geo Asia
locale en_US
locale zh_CN



end脚本需说明一下,因Solaris在系统安装过程中,把/目录指定到/a目录下。所以脚本里涉及到的系统文件操作,都需要在文件或文件夹的path前加上/a
jserver# cat end
#!/bin/sh
# Author: Jackylau <squidipt@yahoo.com.cn>
# WebSite: www.opensolution.org.cn
# Desc: Postinstall
# Date: 2008.12.13

# permit root ssh
echo \"wq\"|ex -c \"%s/PermitRootLogin no/PermitRootLogin yes/\" /a/etc/ssh/sshd_config
touch /a/.NFS4inst_state.domain

# Add driver for PERC 6i
touch /a/kernel/drv/mega_sas.conf
cp /kernel/drv/mega_sas /a/kernel/drv/mega_sas
cp /kernel/drv/amd64/mega_sas /a/kernel/drv/amd64/mega_sas
add_drv -b /a -n -v -m \'* 0600 root sys\' -i \'\"pci1028,15.1028.1f01\"  \"pci1028,15.1028.1f02\"  \"pci1028,15.1028.1f03\"  \"pci1000,60.1028.1f0a\"  \"pci1000,60.1028.1f0b\"  \"pci1000,60.1028.1f0c\"  \"pci1000,60.1028.1f0d\"  \"pci1000,60.1028.1f11\"  \"pci1000,411.1000.1001\" \"pci1000,411.1000.1002\" \"pci1000,411.1000.1003\" \"pci1000,411.1000.1004\" \"pci1000,411.1000.2004\" \"pci1000,411.1000.2005\" \"pci1000,411.1000.100c\" \"pci1000,411.1000.100d\" \"pci1000,411.1000.1008\" \"pci1000,413.1000.1005\" \"pci1000,409.1000.1009\" \"pci1000,60.1000.1006\"  \"pci1000,60.1000.100a\"  \"pci1000,60.1000.100e\"  \"pci1000,60.1000.100f\"  \"pci1000,60.1000.1010\"  \"pci1000,60.1000.1011\"  \"pci1000,60.1000.1012\"  \"pci1000,60.1000.1013\"  \"pci1000,60.1000.1014\"  \"pci1000,60.1000.1015\"  \"pci1000,60.1000.1016\"  \"pci1000,60.1000.1017\"  \"pci1000,60.1000.1018\"  \"pci1000,60.1000.1019\"  \"pci1000,60.1000.101a\"  \"pci1000,60.1000.101b\"  \"pci1000,60.1014.363\"   \"pci1000,60.1014.364\"   \"pci1000,60.1014.365\"   \"pci1000,60.1014.379\"   \"pci1000,60.1170.2f\"    \"pci1000,60.1170.36\"    \"pci1000,60.1043.824d\"  \"pci1000,411.1734.1081\" \"pci1000,411.1734.10a3\" \"pci1000,411.1033.8287\" \"pci1000,60.1033.835a\"  \"pci1000,60.1734.10f9\"  \"pci1000,60.1734.1102\"  \"pci1000,411.8086.1001\" \"pci1000,411.8086.1003\" \"pci1000,411.8086.3500\" \"pci1000,411.8086.3501\" \"pci1000,411.8086.3504\" \"pci1000,411.8086.3490\" \"pci1000,60.8086.34cc\"  \"pci1000,60.8086.34cd\"  \"pci1000,411.8086.3507\" \"pci1000,411.1054.3016\" \"pci1000,60.1054.3019\"  \"pci1000,60.8086.1006\"  \"pci1000,60.8086.100a\"  \"pci1000,60.8086.1010\"  \"pci1000,60.17aa.6b7c\"  \"pci1000,60.15d9.c080\"  \"pci1000,60.1000.1458\"  \"pci1000,7c.1000.101c\"  \"pci1000,7c.1014.395\"\' -c scsi mega_sas

# Modify network spec

IP=`cat /tmp/IP`
HOSTNAME=`cat /tmp/HOSTNAME `
GATEWAY=`cat /tmp/IP|awk -F. \'{print $1\".\"$2\".\"$3\".254\"}\'`
echo \"::1             localhost\" >/a/etc/inet/hosts
echo \"$IP       $HOSTNAME       loghost\" >>/a/etc/inet/hosts
echo \"$HOSTNAME\" >/a/etc/nodename
echo \"$HOSTNAME netmask + broadcast + group bond0 up\">/a/etc/hostname.bnx0
echo \"group bond0 up\" >/a/etc/hostname.bnx1
echo \"$GATEWAY\">/etc/defaultrouter

# modify bonding
cat << EOF > /a/etc/default/mpathd
FAILURE_DETECTION_TIME=100
FAILBACK=no
TRACK_INTERFACES_ONLY_WITH_GROUPS=yes
EOF

cat << EOF > /a/etc/resolv.conf
nameserver 10.0.1.218
EOF
cat /a/etc/nsswitch.conf |sed \'s/hosts:      files/hosts:      files       dns/g\'>/tmp/nsswitch.conf_$$
cat /tmp/nsswitch.conf_$$ >/a/etc/nsswitch.conf
rm -f /tmp/nsswitch.conf_$$

# modify system spec
cat << EOF >> /a/etc/system
set rlim_fd_max=262144
set rlim_fd_cur=65536
set shmsys:shminfo_shmmax=0x2000000
set semsys:seminfo_semmni=1024
EOF
cat << EOF >/a/etc/rc2.d/S12gpdb_ndd
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 4096
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q0 4096
/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65535
/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 4096
/usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 1000
sh /opt/dw_post_install.sh
EOF
chmod 755 /a/etc/rc2.d/S12gpdb_ndd

# modify root shell to bash
echo \"wq\"|ex -c \"%s#/sbin/sh#/usr/bin/bash#\" /a/etc/passwd

# setting ENV
cat << EOF >>/a/etc/profile
EOFTH=$PATH:/usr/sfw/bin:/opt/SUNWspro/bin:/opt/csw/bin:/usr/local/bin
export PATH
alias ll=\"ls -al\"
export PS1=\'[\\u@\\h $PWD]#\'
EOF

# disable service
cat << EOF >>/a/opt/dw_post_install.sh
#!/bin/sh
svcadm disable telnet
svcadm disable cde-login
svcadm disable cde-printinfo
svcadm disable webconsole   
svcadm disable finger   
svcadm disable ftp   
svcadm disable rlogin
echo \"wq\"|ex -c \"/dw_post_install.sh/d\" /etc/rc2.d/S12gpdb_ndd
EOF

jserver# cat sysidcfg
network_interface=PRIMARY
        {protocol_ipv6=no
        hostname=localhost
        netmask=255.255.255.0
        default_route=172.22.18.254}
security_policy=NONE
name_service=NONE
timezone=Asia/Shanghai
system_locale=en_US
terminal=vt100
pointer=MS-S
timeserver=localhost
nfs4_domain=dynamic
root_password=67jCNlUfrldoI2



jserver# cat /tftpboot/boot/grub/menu.lst
default=0
timeout=3
title Solaris_10 JumpStart
#下面一行是声明系统在引导时的参数。请注意- install dhcp要加上的,
        kernel /I86PC.Solaris_10-1/multiboot kernel/unix - nowin - install dhcp -B install_config=172.16.134.83:/jumpstart/config,sysid_config=172.16.134.83:/jumpstart/config,install_media=172.16.134.83:/jumpstart/x86,install_boot=172.16.134.83:/jumpstart/x86/boot
        module /I86PC.Solaris_10-1/x86.miniroot

七、配置DHCP服务器:

在dhcpd.conf最后面添加了一条
allow booting;
allow bootp;
include \"/opt/chroot/etc/jumpstart_dhcpd.conf\";

jserver# cat /opt/chroot/etc/jumpstart_dhcpd.conf
group {
next-server 172.16.134.83;                  #声明客户端引导初始化文件的服务器IP(因为我的引导服务器为jserver)
filename \"/pxegrub.I86PC.Solaris_10-1\";   #声明客户端加载的引导初始化文件(其值类似于kickstart里的pxelinux.0)
use-host-decl-names on;
option vendor-encapsulated-options 09:0f:80:00:0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:0a:07:00:50:72:6f:6d:70:74:06:01:02:08:03:80:00:00:47:04:80:00:00:00:ff;   #如果不加这个,可能会出现tftp miniroot出错。

subnet 172.22.18.0 netmask 255.255.255.0{
range 172.22.18.220 172.22.18.239;
option routers 172.22.18.254;
option broadcast-address 172.22.18.255;
option domain-name-servers 172.16.20.220;
}
}

八、Tips:

为了实现操作系统安装完毕后不自动重启,可以在postinstall脚本里加上
touch /a/noautoshutdown(仅适合sparc平台)

论坛徽章:
0
发表于 2010-04-16 18:24 |显示全部楼层
我经历过web安装的方式,
但是ftp的没有用国。
solaris很多安装方式的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP