Ключевые слова:linux, solaris, install, jumpstart, nfs, dhcp, boot, pxe, (найти похожие документы)
From: Alex Charrett
Date: Wed, 12 Apr 2006 18:21:07 +0000 (UTC)
Subject: Подговтовка Linux сервера для автоматической установки Solaris (eng)
Оригинал: http://www.transposed.org/techstuff/linux-jumpstart.html
Linux Jumpstart
A guide to setting up a jumpstart server on a linux machine. This
enables you to jumpstart solaris onto a machine without an existing
solaris installation.
Thanks
Thanks to both Jon Still and Tim Gibbons for helping me improve this
document.
Any feedback is welcome, problems hints or a simple "that works,
hurrah" are helpful. Drop me a line at alex at transposed dot org.
Update: I hear this is only likley to work with Solaris 8 or newer.
Something to do with the ip fragementation in the inetboot kernels for
7 and earlier being broken. Possibly.
What you will need....
* A Linux system
* A set of Solaris install media for the system you want to install
* rarpd
* bootparamd
* tftpd
* pdksh (if you want to install both CDs)
* tcpdump
* A Kernel with NFSv3 support
All of these bar the Solaris media came with my linux distribution, so
they shouldn't be too hard to come by.
Copying the install media to the server
I have heard that you can jumpstart direct by exporting the cd's, but
this is faster for the installs.
Pick a location to put the cd images, /home/jumpstart in my case. Then
create it and an install and config subdirectory. The config dir is
only necessary if you intend to want to do non-interactive jumpstarts.
mkdir -p /home/jumpstart/install
mkdir /home/jumpstart/config
Mount Solaris cd 1 (or the solaris cd if you are using earlier
releases), and use the setup_install_server script. In order for it to
work, you will need to create a symlink from /bin/bar to /bin/tar as
the script uses some random tar implementation (called bar) to do the
copy. GNU tar seems to work fine as a replacement. Then run the
setup_install_server script.
ln -s /bin/tar /bin/bar
mount /mnt/cdrom
cd /mnt/cdrom/Solaris_8/Tools
./setup_install_server /home/jumpstart/install
cd /
umount /mnt/cdrom
Replace the cd with cd 2 (if you don't have a cd 2, dont worry about
it). Even in Solaris 8 you can get away with just using cd1 if youre
not going for one of the bigger installs. The add_to_install_server is
written in ksh, so this is what you need pdksh for. Its odd that these
scripts are completley different, and it seems this one uses cpio to
copy the data. Weird eh? Anyway, most of it works ok apart from the
disk space checking thing, so set and export $NOSPACECHK before you
run it. I'm sure you can cope with checking how much space you have
free.
mount /mnt/cdrom
cd /mnt/cdrom/Solaris_8/Tools
NOSPACECHK="yes"; export NOSPACECHK
./add_to_install_server /home/jumpstart/install
Set up the NFS server
If you've not already done so, install rarpd, bootparamd and tftpd.
I'm assuming you're using the kernel nfsd here.
Set up the NFS export. Put the follwing in /etc/exports, but use
appropriate values for your site. The config export is optional,
depending on wether you want to use non-interactive jumpstart or not.
/home/jumpstart/install 192.168.1.*(ro,no_root_squash)
/home/jumpstart/config 192.168.1.*(ro,no_root_squash)
Set up the server for the client
This is where it gets a little fiddly, for each install client you
need an entry in /etc/hosts, /etc/ethers and /etc/bootparams and a
symlink to the appropriate kernel in /tftpboot
/etc/hosts
This one is easy, you need the hostname and its IP address. Put it in
/etc/hosts in the following format:
192.168.1.4 helios
Also, ensure that your server's hostname is *not* listed against
127.0.0.1. If it is, remove it from that line and give it its own
line, so your hosts file looks like this (where gilbert is your
server).
127.0.0.1 localhost.localdomain localhost
192.168.1.1 gilbert
192.168.1.4 helios
/etc/ethers
This is so that rarpd can respond to the client's request for an IP
address. It does this by resolving it's MAC address to a hostname, and
uses /etc/hosts to turn that in to an IP. In /etc/ethers:
8:0:20:7a:a3:f2 helios
/etc/bootparams
This is the config so the client knows where to access the install
image and configurations. In /etc/bootparams, where gilbert is my
jumpstart server:
helios root=gilbert:/home/jumpstart/install/Solaris_8/Tools/Boot \
install=gilbert:/home/jumpstart/install \
boottype=:in sysid_config=gilbert:/home/jumpstart/install/Solaris_8/Too
ls/Boot/etc \
install_config=gilbert:/home/jumpstart/config \
rootopts=:rsize=8192,wsize=8192
/tftpboot
This is the really fiddly bit. Either you calculate the client's IP
address in hex format, or you use tcpdump to determine what it's
requesting.
This is becase the client will request an inetboot file from the tftp
server. It will be named in the format HEXIPADDR.ARCH (apparantly some
machines do not request the .ARCH part of the filename). In my case,
it is C0A80104.SUN4M. So if, like me you don't fancy calculating this
name, start the bootparamd and the rarpd (you may need to start the
rarpd with -e as some versions will not respond to rarp queries if
there is not a corresponding image in /tftpboot to serve.
According to Jon,
perl -e 'printf "%02x"x4 ."\n",192,168,1,4;'|tr a-z A-Z
will give you the hex address (where the IP is 192.168.1.4).
Similarly, you can do it in shell like this:
printf %02x 192 168 1 4|tr [:lower:] [:upper:]
Once your services are started, get tcpdump on the go (this is best
done on a quiet or switched network, and boot net - install your
client. tcpdump should produce a line like this:
08:59:24.640821 helios.40337 > gilbert.beau.net.tftp: 23 RRQ "C0A80104.SUN4M"
Alternativley, running bootparamd with -d and -s flags should write
the filename being requested to the syslog
Once you have this filename, you can copy the appropriate inetboot
image from your /home/jumpstart/install hierachy. The example below is
appropriate for a sun4m architecture machine, modify it for other
systems
cp /home/jumpstart/install/Solaris_8/Tools/Boot/usr/platform/sun4m/lib/fs/nfs/i
netboot /tftpboot/inetboot.sun4m
cd /tftpboot
ln -s inetboot.sun4m C0A80104.SUN4M
Aside: I've been told that some newer Suns (such as the Sun Blade 100)
have specific inetboot kernels. The Sun Blade 100 one is at
/home/jumpstart/install/Solaris_8/Tools/Boot/usr/platform/SUNW,Sun-Bla
de-100/lib/fs/nfs/inetboot
Enable your tftpd and you should be ready to go!
Jumpstart the client
Stop-A the client and get it to the openboot prompt. From there type
boot net - install and off it should go!
IMPORTANT. One problem I have had with this is that when it boots,
after it configured the network interface (a message like "Configured
interface le0" is displayed), the client just sits there. Sending the
client a ping should wake it up and it will continue fine. Weird eh?