How to create self-contained Solaris 10 x86 Jumpstart kit
I was required to create a self-contained, single DVD to automate the installation of Solaris 10 on x86_64. I could not find any up-to-date straight forward guide which can explain how to do it, so I do it here. This is not an explanation for dummies, so you must know (to some degree, of course) what you’re doing.
I will describe the procedure in whole, and will explain in greater details below, if I see fit. A section which will be explained later will be marked with (*) at the end of the line.
- Install Solaris 10 x86 on a machine. Many actions will happen on this little server…
- Setup your Solaris installation according to your likings. Make sure you have your beloved users, your passwords, your configurations. Don’t mind much about networking configurations (IP, Netmask, etc) – as they will be unconfigured for the image.
- Create a Flash Image (flar) of the system (*)
- Copy the contents of the installation DVD to a directory inside your system. Let’s call it /tmp/dvd
- Remove /tmp/dvd/Solaris_10/Product directory. You will not need it.
- Extract the contents of /tmp/dvd/x86.miniroot to /tmp/miniroot (*)
- Perform several actions with the extracted miniroot (*)
- Re-archive the contents of the x86.miniroot and place them instead of /tmp/dvd/boot/x86.miniroot
- Place the flar file inside /tmp/dvd/flash
- Edit your jumpstart files inside /tmp/dvd/.install_config (*)
- Edit /tmp/dvd/boot/grub/menu.lst boot loader to add an entry for your installation (*)
- Create an ISO from the DVD directory (*)
- Burn the DVD and try to use it
And now for the drill-down
Creating a flash image
Use the command flarcreate to create your own flash image:
flarcreate -n sol10_automation -c -x /tmp /tmp/sol10_auto.flar
This should do the work. Remember – /tmp will not be persistent across reboots! Make sure your files are not there before you reboot the system!
Extracting/Archiving the x86.miniroot
To do so, you need to run the command /boot/solaris/bin/root_archive
Extracting the image can be done like this:
/boot/solaris/boot/root_archive unpack /tmp/dvd/boot/x86.miniroot /tmp/miniroot
Archiving the image can be done like this:
/boot/solaris/boot/root_archive pack /tmp/dvd/boot/x86.miniroot /tmp/miniroot
Actions to perform on the extracted miniroot
Three actions are to be performed on the extracted miniroot. In our example, it resides on /mnt/miniroot.
First, you need to remove the default sysidcfg (which is a symbolic link)
rm /mnt/miniroot/etc/sysidcfg
Now, you have to place your custom sysidcfg in there, instead.
This is an example of my own sysidcfg file:
name_service=NONE
network_interface=nge0 {primary hostname=sol10
ip_address=10.10.10.10
netmask=255.0.0.0
default_route=NONE
protocol_ipv6=no }
nfs4_domain=dynamic
service_profile=open
root_password=12wR2rF34t
security_policy=NONE
system_locale=en_US.UTF-8
timezone=GMT
timeserver=localhost
keyboard=US-English
terminal=xterm
The root password is encrypted. Take it from your own /etc/shadow file. For more information about sysidcfg file, check out Sun site.
Following that, you need to edit a specific file in the miniroot. Edit /tmp/miniroot/usr/sbin/install.d/profind and search for the cdrom() function. Search the line
if [ -f /tmp/.preinstall ]; then
and hash (remark) it. Don’t forget to remark the closing “fi” below.
Jumpstart contents
This has to be inside /tmp/dvd/.install_config . Edit the file /tmp/dvd/.install_config/rules and make sure it has only one line (in our example. If you know what you’re doing with Jumpstart, go ahead!)
any – x86-begin any_machine x86-end
This line will match any hardware, run x86-begin script (from that same directory) on it prior to running the installation itself, and run x86-end script on it after the installation phase. It allows up further customisation during installs (verify what type of RAID, check memory, whatever). The installation profile itself is the file any_machine.
You will need to run “check” on the file to build the rules.ok file
cd /tmp/dvd/.install_conf
/tmp/dvd/Solaris_10/Misc/jumpstart_sample/check
Lets look at my any_machine file:
install_type flash_install
archive_location local_file /cdrom/flash/sol10_auto.flar
partitioning explicit
filesys any 8196 swap
filesys any 10240 /
filesys any free /storage
Notice that the installation type is “flash_install” and that the location of the file is local, inside /cdrom (where the bootable dvd will be mounted) inside a directory called flash. Partitioning is defined here, explicitly.
For more information about Jumpstart, search in Sun site. They have plenty of information.
Edit Grub
Add the following entry to your /tmp/dvd/boot/grub/menu.lst file
title Solaris10 Jumpstart
kernel /boot/multiboot kernel/unix – install -B
install_media=cdrom
module /boot/x86.miniroot
Make sure it is the default option for grub.
Creating DVD ISO from the directory
We’re almost done. To create a DVD iso file from the directory, perform the following actions:
cd /tmp/dvd
mkisofs -b boot/grub/stage2_eltorito -c .catalog -no-emul-boot -boot-load-size 4 -boot-info-table -relaxed-filenames -l -ldots -r -N -d -D -V SOL_10_1008_X86 -o /tmp/sodvd.iso .
Don’t ignore the “.” at the end!
(This specific line was tested on Linux, but there is no reason for it not to work on any modern Solaris system)
Appendix
You would like to keep your /tmp/dvd directory somewhere else, or you will lose it on your next reboot.
This sums it up. Let me know if the procedure is broken somehow.
To get rid of prompts which may appear on the 1st boot of the new installation, replace all of the zeros in the file /etc/.sysIDtool.state with ones. Add xterms to the end of it and ensure that the line ‘1 #NFSv4 domain configured’ is present in it. Also remove the etc/.UNCONFIGURED file. This can all be done with finish scripts. Note that everything is mounted on /a initially, so you will need to prepend /a to the above paths.
Thanks!
I will test it and add it accordingly.
In my case prompts did not appear after a reboot. The system boots up clean.
Also, I have used my own script (as part of the “pre” stage) to change the IP address of the server so that it would respond to a particular form (text-based) I have used to ask for these details.
Solaris installation asks too many questions if you omit the IP address, even if all other details are already inside the sysidcfg. I could not let, in this case, the customer to show free-will. This should not be an option there…
Still – It’s great to find out about this stuff.
Hello Again,
I am having a problem with the DVD working on all machines. It works like a dream on the machine on which I made it. The flash archive works correctly on only all machines which I have tested it on (X2100 M2 and X2200 M2), when I manually install it. However, when I use the jumpstart DVD I get “Bad PBR Sig” in red when the machine boots. This happens on all other machines (X2100 M2 and X2200 M2). I am really at a loss. Do you know whether it is the Solaris installer which installs the bootloader ? I am pretty much stuck here.
Cheers
I have no idea. On my x86 machines it worked just fine. Could be related to manual settings of the disk partitions. Maybe you attempt to setup a disk which is not there (/dev/dsk/c0t0d0s and not /dev/dsk/c1t0d0s0, for example)? Try doing it as automatic as possible. Might work better. This will probably cause bootloader failures.
Ez
I changed 2 things in my installation which I think fixed it.
A. I was specifying the overlap/backup partition to be the entire size of the disk. The manual says that you can, but I am not convinced that you can on X86.
B. I added fdisk statements which get rid of any existing partitions and make new ones. fdisk all dosprimary delete, fdisk all solaris delete, fdisk all solaris all. Yes, if other non DOS disks exist they will not get removed. I thought that this was worth a try.
I believe that A was my major problem.
Thanks for the update.
B: What about attempting to run ‘dd’ to the first few sectors of the disk in the “pre” stage?
In my case, the Jumpstart is only a part of an entire configure-your-RAID and post-install-your-db (and populate-this-damn-db), so my disks always start empty.
In the rare event they do not, I did not find any need (through my tests) for fdisk on x86 machine. I have no idea as to how it will function on Sparc (the only machine I have has a broken cdrom), so I can’t comment on that.
About A: I think you do not need to specify the overlap partition. It worked for me like a charm, and I never had to specify it.
However, facts are facts. If this has solved your problem, I salute!
Thanks for updating me about it!
Ez
These instructions are awesome, thanks for sharing them here. I went through them and got a working ISO the first go.
I’m happy to hear that.
Thanks!
Ez
I made one for Solaris 10 x86 u6 (10/08) — thanks for the excellent instructions!
Regarding:
“Copy the contents of the installation DVD to a directory inside your system. Let’s call it /tmp/dvd”
I encountered errors until I used the script on my Solaris source DVD to copy the contents locally — it gets all hidden file, permissions and so on that are needed for a install disk to work:
# cd /cdrom/sol_10_1008_x86/Solaris_10/tools
# ./setup_install_server /tmp/dvd
Using that script to copy the source files from DVD to HD before I creating my custom jumpstard DVD made my jumpstart errors go away.
I also encountered a few problems with sysidcfg settings. I ended up with this one which works for my very simple configuration:
keyboard=US-English
system_locale=en_US.UTF-8
timezone=GMT
timeserver=localhost
terminal=xterm
name_service=NONE
nfs4_domain=dynamic
network_interface=NONE {hostname=xxxxxxx}
root_password=xxxxxxxx
security_policy=NONE
Thanks for the feedback.
I needed the networking defined, but hell – I can’t remember what for… 🙂
Has anyone been able to get Solaris 10 x86 to eject DVD at jumpstart completion?
Here’s what I’ve tried:
1. x86-end I included:
# eject cdrom
fails because ‘cdrom’ is not mounted as such, same with: ‘eject -f cdrom’ or ‘eject /cdrom’ or starting and re-starting vold (it hates that!)
# cd /
# eject /dev/dsk/c0t6d0s0
Fails with message: Warning: cannot unmount – file system is (probably) busy.
2. I inserted same stuff into a /etc/rc0.d hoping at shutdown the DVD device would be free and allow eject — didn’t work though.
I’m afraid I might have to resort to a pause in the finish script with a message to the user to eject the DVD during re-boot. I hate not being able to have my way with a system and settle for a ‘second best’ solution!
On the topic of configuring the network interface via sysidcfg, My systems have 6 NIC’s and when trying to get them laid out with sysidcfg was just impossible, it always had something to complain about which aborted the automatic config and kicked it into interactive. As a work-around I made the sysidcfg as simple as possible and just added stuff to the x86-end script to copy over my own hosts, hostname.*, defaultrouter, nsswitch.conf, resolv.con, etc from a directory I added to the DVD — works much better with that approach!
The cdrom is not an easy task. I tend to believe it’s in use because the miniroot uses it, and somehow – mounts /tmp under it as ram disk (writable).
I would consider opening the miniroot and searching for its internal shutdown flow, and try to hack the cdrom there.
An ugly alternative is to make the cdrom’s grub *not* autostart the installation, but to require manually pressing on “enter” or something. This will prevent the system from entering into installations loop and will allow the person to eject the cdrom and reset the computer.
Also “second best”, but I think it beats pause from psychological reasons…
Oh, and from looking at the solution I have used – I used exactly your own “second best” solution…
Whats if I need to do the same for USB flash drive.. I have flash Archive and I have to have 100 servers to be installed X2270-M2 series.
The problem is that we have to install every server after a successful run of an application which requires a clean install and Flash archive is the best solution as this application requires a lot of manual intervention during installation
These Servers don’t have a CDROM/DVD Drives available and the only option is to use the USB flash install.
Any help will be highly appreciated.
Regards,
Nasir
I am in doubt you can perform such an action with Solaris, as it is a limited system. You should, if dealing with many servers, setup a JumpStart server on the network, and serve flash archives to systems getting the PROM command “boot net” or running GRUB (where you can select what you want it to do), or running PXE/BootP/TFTP clients, as the BIOS of x86 systems does. Wouldn’t even try running with a s USB stick all over the place.
@ez-aton
Thanks for your response. Very True, carrying a USB flash with you all over the country. I have some sort of data gathering requirement from all over the country and every single run is different from the other or previous one, so it becomes a real time requirement to have a USB Flash Drive for every manufacturer’s configuration in place.
I would still appreciate if someone can guide me to use a USB flash Drive for a FLASH Archive installation.
Best Regards,
Nasir