« January 2007 »
SunMonTueWedThuFriSat
 
1
2
3
6
7
16
20
27
30
31
   
       
Today
XML

Neat blogs

Navigation

Editing

Powered by Roller Weblogger.

statcounter.com

clustrmaps.com

Locations of visitors to this page

technorati.com

20070118 Thursday January 18, 2007
Adding a new package to an Install DVD

I want to add SUNWonbld to the install DVD and have it automatically installed when I bring up a new machine. I've found that when looking for information on how packages are maintained on the install media, it is best to search on jumpstart and not install.

The first part appears easy, just copy the SUNonbld (get the correct one for your build) to the Solaris_11/Product directory:

# pwd
/kanigix/b55b/Solaris_11/Product
# ls -la SUNWonbld
SUNWonbld: No such file or directory
# cp -r /export/zfs/tdh/b55/packages/i386/SUNWonbld .
# ls -la SUNWonbld
total 106
drwxr-xr-x   4 root     root         512 Jan 18 12:46 .
dr-xr-xr-x 1819 root     root       41984 Jan 18 12:46 ..
drwxr-xr-x   2 root     root         512 Jan 18 12:46 install
-rw-r--r--   1 root     root         392 Jan 18 12:46 pkginfo
-rw-r--r--   1 root     root        7583 Jan 18 12:46 pkgmap
drwxr-xr-x   3 root     root         512 Jan 18 12:46 reloc

Note, it is also easy to determine the packages already in the directory are not in stream format - the fact that they are directories themselves tells us that.

The next part is harder - how does the installation know what to do? Where does the installer live such that we can read the code? You know what, I don't know yet. And I looked.

The trick lies in realizing that a jumpstart server is basically an extraction of the contents of the ISO onto local storage. The site admin is then able to add or delete packages before they are installed by the jumpstart server. So how does a jumpstart server mangle this process?

A clue can be found in [Summary] packages at sunmanagers.org:

   One place to find which clusters exist is to look in your jumpstart 
   tree: view .../Solaris_9/Product/.clustertoc which contains all the 
   cluster and packages. With suitable add/delete statements for clusters   
   or individual packages you can fine-tune what gets installed.

If we look on the DVD:

# ls -la | grep toc
lrwxrwxrwx   1 root     root          30 Jan 16 15:42 .clustertoc -> ./locale/C/.clustertoc.default
lrwxrwxrwx   1 root     root          22 Jan 16 15:42 .packagetoc -> ./locale/C/.packagetoc
-r--r--r--   1 root     root      171060 Jan 12 17:44 .virtual_packagetoc_2
-r--r--r--   1 root     root      142606 Jan 12 17:44 .virtual_packagetoc_3
-r--r--r--   1 root     root       26907 Jan 12 17:44 .virtual_packagetoc_4
-r--r--r--   1 root     root      174452 Jan 12 17:44 .virtual_packagetoc_5
-r--r--r--   1 root     root        8492 Jan 12 17:44 .virtual_packagetoc_6
-r--r--r--   1 root     root      265533 Jan 12 17:44 .virtual_packagetoc_lang1

At first this looks overwhelming, but then when you realize that the DVD image is basically a cat(1) of the CD images, it becomes easier to deal with. .packagetoc is from the first CD image. Then the .virtual_packagetoc_* are from the remaining CDs.

Okay, we need to figure out which of these files we need to touch.

# grep SUNWhea .c* .p* .v*
.clustertoc:SUNW_CSRMEMBER=SUNWhea
.clustertoc:SUNW_CSRMEMBER=SUNWhea
.clustertoc:SUNW_CSRMEMBER=SUNWhea
.packagetoc:PKG=SUNWhea
.packagetoc:PKGDIR=SUNWhea
.packagetoc:SUNW_PKGLIST=SUNWhea
.packagetoc:SUNW_PDEPEND=SUNWhea
.packagetoc:SUNW_PKGLIST=SUNWhea
.packagetoc:SUNW_PDEPEND=SUNWhea
.pkghistory:PKG=SUNWhea
.pkghistory:REPLACED_BY=SUNWhea SUNWpsh
.pkghistory:REPLACED_BY=SUNWftpu SUNWftpr SUNWkrbu SUNWcsu SUNWcsr SUNWhea
.pkghistory:REPLACED_BY=SUNWpsh SUNWhea
.virtual_packagetoc_5:PKG=SUNWhea
.virtual_packagetoc_5:PKGDIR=SUNWhea
.virtual_packagetoc_5:SUNW_PKGLIST=SUNWhea
.virtual_packagetoc_5:SUNW_PDEPEND=SUNWhea
.virtual_packagetoc_lang1:SUNW_PKGLIST=SUNWhea
.virtual_packagetoc_lang1:SUNW_PDEPEND=SUNWhea

I picked SUNWhea because it isn't needed as much for the install as for when doing compiles. And then we start to do some exploration:

# vi `grep -l SUNWhea .c* .p* .v*`

Looks like we need to add an entry of the form:

SUNW_PDEPEND=SUNWhea

to all METACLUSTER sections in .clustertoc:

METACLUSTER=SUNWCXall
NAME=Entire Distribution plus OEM support
DESC=A pre-defined software configuration consisting of all software included in the operating system rel
ease, plus OEM platform support.
VENDOR=Sun Microsystems, Inc.
VERSION=2.2

We also need to add PKG sections to the remaining files which have corresponding PKG sections for SUNWhea. We can get the required information out of the following files:

# ls -la SUNWonbld/pkginfo SUNWonbld/install/depend 
-rw-r--r--   1 root     root        1907 Jan 18 12:46 SUNWonbld/install/depend
-rw-r--r--   1 root     root         392 Jan 18 12:46 SUNWonbld/pkginfo

And we can find out even more by reading packagetoc(4) and clustertoc(4).

I want to put SUNWonbld at the end of everything to be installed. I know that normally we add it after a reboot. The hardest thing to determine are the sizes:

ROOTSIZE=17500000
VARSIZE=0
OPTSIZE=17500000
EXPORTSIZE=0
USRSIZE=0
USROWNSIZE=0
SPOOLEDSIZE=17500000

I got the size via a 'du -s' of the relloc directory. I have no clue if ROOTSIZE applies if /opt is part of the root filesystem. But, I typically install on really large disks. The minimum root I have is 10G. So, while not accurate, this should work.Finally, we need to add an entry to the end of .order. Here is a diff of the changes I am going to make:

[tdh@warlock Product]> diff /kanigix/b55b/Solaris_11/Product/.clustertoc .clustertoc
2002a2003
> SUNW_CSRMEMBER=SUNWonbld
2355a2357
> SUNW_CSRMEMBER=SUNWonbld
2691a2694
> SUNW_CSRMEMBER=SUNWonbld
[tdh@warlock Product]> diff /kanigix/b55b/Solaris_11/Product/.order .order 
1718a1719
> SUNWonbld
[tdh@warlock Product]> diff /kanigix/b55b/Solaris_11/Product/.packagetoc .packagetoc 
44091a44092,44121
> PKG=SUNWonbld
> PKGDIR=SUNWonbld
> DESC=tools used to build the OS-Net consolidation
> NAME=OS-Net Build Tools
> VENDOR=Sun Microsystems, Inc.
> VERSION=11.11,REV=2007.01.08.23.45
> PRODNAME=SunOS
> PRODVERS=5.11/tools:2007-01-08
> BASEDIR=/
> CATEGORY=system
> SUNW_PKGTYPE=root
> ARCH=i386
> SUNW_PDEPEND=SUNWcar
> SUNW_PDEPEND=SUNWkvm
> SUNW_PDEPEND=SUNWcsr
> SUNW_PDEPEND=SUNWcsu
> SUNW_PDEPEND=SUNWcsd
> SUNW_PDEPEND=SUNWcsl
> SUNW_PDEPEND=SUNWbzip
> SUNW_PDEPEND=SUNWgzip
> SUNW_PDEPEND=SUNWzlib
> SUNW_PDEPEND=SUNWperl584core
> SUNW_PDEPEND=SUNWperl584usr
> ROOTSIZE=17500000
> VARSIZE=0
> OPTSIZE=17500000
> EXPORTSIZE=0
> USRSIZE=0
> USROWNSIZE=0
> SPOOLEDSIZE=17500000
[tdh@warlock Product]> diff /kanigix/b55b/Solaris_11/Product/.virtual_packagetoc_6 .virtual_packagetoc_6
409a410,439
> PKG=SUNWonbld
> PKGDIR=SUNWonbld
> DESC=tools used to build the OS-Net consolidation
> NAME=OS-Net Build Tools
> VENDOR=Sun Microsystems, Inc.
> VERSION=11.11,REV=2007.01.08.23.45
> PRODNAME=SunOS
> PRODVERS=5.11/tools:2007-01-08
> BASEDIR=/
> CATEGORY=system
> SUNW_PKGTYPE=root
> ARCH=i386
> SUNW_PDEPEND=SUNWcar
> SUNW_PDEPEND=SUNWkvm
> SUNW_PDEPEND=SUNWcsr
> SUNW_PDEPEND=SUNWcsu
> SUNW_PDEPEND=SUNWcsd
> SUNW_PDEPEND=SUNWcsl
> SUNW_PDEPEND=SUNWbzip
> SUNW_PDEPEND=SUNWgzip
> SUNW_PDEPEND=SUNWzlib
> SUNW_PDEPEND=SUNWperl584core
> SUNW_PDEPEND=SUNWperl584usr
> ROOTSIZE=17500000
> VARSIZE=0
> OPTSIZE=17500000
> EXPORTSIZE=0
> USRSIZE=0
> USROWNSIZE=0
> SPOOLEDSIZE=17500000
[tdh@warlock Product]> 

I can make the changes by copying these files back. Make sure to get to the file referenced by the symlinks and do not blow them away.

# cp /export/zfs/tdh/tmp/Product/.order .
# cp /export/zfs/tdh/tmp/Product/.virtual_packagetoc_6 .
# ls -la .clustertoc 
lrwxrwxrwx   1 root     root          30 Jan 16 15:42 .clustertoc -> ./locale/C/.clustertoc.default
# cp /export/zfs/tdh/tmp/Product/.clustertoc .clustertoc
.clustertoc.default  .clustertoc.dynamic  .clustertoc@         
# cp /export/zfs/tdh/tmp/Product/.clustertoc .clustertoc.default 
# cp /export/zfs/tdh/tmp/Product/.packagetoc .packagetoc 
# diff .clustertoc.dynamic .clustertoc.default 
2002a2003
> SUNW_CSRMEMBER=SUNWonbld
2355a2357
> SUNW_CSRMEMBER=SUNWonbld
2691a2694
> SUNW_CSRMEMBER=SUNWonbld
# cp .clustertoc.default .clustertoc.dynamic 

We also want to get the diffs into .clustertoc.dynamic.

Okay, let's recap the changes which have gone into this DVD:

  1. Unless a response is given in 60s, the install will be to the console.
  2. A custom splash screen for frub will be used.
  3. SUNWonbld will be installed.

The first two came about from the first burn of the DVD and my desire to be able to install on headless boxes. I took out the change which made grub work headless and made the default be headless. If I have a head available, I can manually change this.

Burn the DVD and let's have some fun!

# mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -R -L -r -D -U -boot-info-table -o /isos/kanigix.iso /kanigix/b55b
# ls -la k* x86/b55b/solarisdvd.iso 
-rw-r--r--   1 root     root     3893268480 Jan 18 15:31 kanigix.iso
-rw-r--r--   1 root     root     3947546624 Jan 16 22:17 kanigix.iso.1
-rw-r--r--   1 tdh      staff    3857448960 Jan 16 15:32 x86/b55b/solarisdvd.iso
So, it looks like the growth in my first image was do to adding the following to the mkisofs command line:

-joliet-long 
-max-iso9660-filenames

Now does it boot and most importantly install? Time to use my old desktop.

Okay, several observations:

I've got a mix of DVD drives out there - some which can do double sided and some which can not. Evidently the w2100z and the new one can do double sided. I also burned a stock Nevada 55b and it would not boot either. I had just bought a new pack of DVDs and I must have picked up double sided ones. And I only have one drive in the house which will not handle them.

I don't think my splash screen is working. And I can't tell if this DVD is working or not. Big Grin. Hmm, I think adding the SUNWonbld kicked up the requirements for the RAM drive and my 1G notebook is barfing on it. I'll try the new machine - I wonder if I messed up on my size for SPOOLEDSIZE? kanigix - the new machine is hung. I'm going to need to rethink how I do this.

Things don't always work. Those results are just as valuable as something working like a charm. Reverse engineering is trial and error. Ask anyone who tries to implement a CIFS client/server.


Orginally posted on Kool Aid Served Daily
Copyright (C) 2007, Kool Aid Served Daily