Skip navigation

Monthly Archives: January 2010

I have my reasons for this…

Now that sun have killed SXCE and in doing so probably the future of the Solaris platform, I’m undoubtedly going to need a opensolaris box to play with..

So … As perverse as it sounds, we’re going to poke and prod opensolaris in some hopefully not too unfamiliar ways, and try to get it to live alongside S10, inside the S10 created, ZFS v15 zpool …

At the moment I have a S10U8 workstation with two zpools which looks like this:

root@insomnia:/var/tmp > uname -a
SunOS insomnia 5.10 Generic_142901-03 i86pc i386 i86pc
root@insomnia:/var/tmp > zpool status
pool: data
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
c1d0p2 ONLINE 0 0 0

errors: No known data errors

pool: rpool
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c1d0s0 ONLINE 0 0 0

errors: No known data errors

I have two S10 BE’s set up on here:

root@insomnia:/var/tmp > lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
————————– ——– —— ——— —— ———-
s10u8_1 yes yes yes no –
s10u8_2 yes no no yes –

First thing to do, is create another BE for OpenSolaris:

root@insomnia:~ > lucreate -c s10u8_1 -n snv_130
Checking GRUB menu…
Analyzing system configuration.
Comparing source boot environment file systems with the file
system(s) you specified for the new boot environment. Determining which
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Updating system configuration files.
Creating configuration for boot environment .
Source boot environment is .
Creating boot environment .
Cloning file systems from boot environment to create boot environment .
Creating snapshot for on .
Creating clone for on .
Setting canmount=noauto for in zone on .
Creating snapshot for on .
Creating clone for on .
Creating snapshot for on .
Creating clone for on .
Creating snapshot for on .
Creating clone for on .
Saving existing file in top level dataset for BE as //boot/grub/menu.lst.prev.
Saving existing file in top level dataset for BE as //boot/grub/menu.lst.prev.
File propagation successful
Copied GRUB menu from PBE to ABE
No entry for BE in GRUB menu
Population of boot environment successful.
Creation of boot environment successful.
root@insomnia:~ >

Next, check everything is there. Mount it, and rm everything from it.
(You should probably be a careful here and take a snapshot of your root zvol…)

root@insomnia:~ > lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
————————– ——– —— ——— —— ———-
s10u8_1 yes yes yes no –
s10u8_2 yes no no yes –
snv_130 yes no no yes –
root@insomnia:~ > zfs set mountpoint=/a rpool/ROOT/snv_130
root@insomnia:~ > zfs mount rpool/ROOT/snv_130
root@insomnia:~ > cd /a
root@insomnia:/a > ls
bin devices lib proc system
boot etc mnt reconfigure tmp
core export net rmdisk usr
Desktop home opt rpool var
dev kernel platform sbin vol
root@insomnia:/a > rm -rf /a/*
root@insomnia:/a >

Finally, lets share this out over NFS.

root@insomnia:~ > share -F nfs -o rw,anon=0 /a
root@insomnia:~ > share
– /a rw,anon=0 “”

Now for the Opensolaris install.

Download and install the latest opensolaris (at the time of writing, build 130) and get it inside VirtualBox.

I did nothing particularly unusual here, standard 64 bit VirtualBox vm with 768mb of memory.

Booted into the installer looks like this:

Once the installer completes, we don’t want to reboot..

Select ‘quit’ instead of reboot, and open a term.

Mount our NFS shared area, and the opensolaris install, and copy everything over:

jack@opensolaris:~$ pfexec su –
Sun Microsystems Inc. SunOS 5.11 snv_130 November 2008
root@opensolaris:~# zfs set mountpoint=legacy rpool/ROOT/opensolaris
root@opensolaris:~# mount -F zfs rpool/ROOT/opensolaris /a
root@opensolaris:~# mkdir /b
root@opensolaris:~# mount -F nfs 10.0.0.2:/a /b
root@opensolaris:~# cd /a
root@opensolaris:/a# find . | ptime cpio -pvdum /b

7313440 blocks

real 3:37:17.419601197
user 29.642283189
sys 15:36.499440337
root@opensolaris:/a#

YMM (hopefully) V on the amount of time this takes to complete… Well over three hours. Ehehem….

So, once this finally completes, we can shutdown the vm and leave it alone..

Next up is a bit of fixup:

root@insomnia:/a > cd etc
root@insomnia:/a/etc > mkdir vbox_files
root@insomnia:/a/etc > mv path_to_inst path_to_inst.old zfs/zpool.cache driver_* vbox_files/
root@insomnia:/a/etc > cp /etc/path_to_inst /etc/zfs/zpool.cache /etc/driver_* .
root@insomnia:/a/etc > touch /a/reconfigure

I hit an issue here, where, as the username I had created for my user account in the installer was not the same as the one I used in the old BE so as such there was no home directory for the user.

You probably want to fix this before you reboot, as thanks to whichever bright spark decided to remove the ‘console login’ option from GDM and worse still, disable the ctrl+alt+backspace hotkey, means you’ll need to boot back to your S10 BE to fix..

Next, unmount:

root@insomnia:/a/etc > cd /
root@insomnia:/ > umount /a

Add an entry to /rpool/boot/grub/menu.lst for the new BE:

title OpenSolaris snv_130
findroot (pool_rpool,0,a)
bootfs rpool/ROOT/snv_130
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/boot_archive

Reboot and be sure to choose our new BE from the grub menu.

A short reboot later, and we’re in the OpenSolaris snv_130 BE!

bash-4.0$ uname -a
SunOS insomnia 5.11 snv_130 i86pc i386 i86pc
bash-4.0$ pfexec /usr/sbin/beadm list
BE Active Mountpoint Space Policy Created
— —— ———- —– —— ——-
s10u8_2 – – 281.5K static 2010-01-17 22:16
s10u8_1 R – 9.29G static 2009-12-02 12:43
snv_130 N / 1.69G static 2010-01-17 22:43

Notice how beadm plays with my S10 BEs.

The final result:

Any of you actually patient enough to try this, have fun! 🙂

~h

Advertisements

After a bit of irc inspired digging, I’ve built a newer rev of LSOF and fortunately, it appears that the upcoming 4.83 release restores functionality on Solaris which has been broken for a while!

Will kick out some packages once it’s released.

(And yep, it supports ZFS)

If you juuuuuuust can’t wait, here are some simple instructions on building it:

Download and extract the 4.83K tar.bz2:

houston@charon:~/lsof > wget ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/NEW/lsof_4.83K.sun.tar.bz2
–2010-01-03 20:33:41– ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/NEW/lsof_4.83K.sun.tar.bz2
=> `lsof_4.83K.sun.tar.bz2′
Resolving lsof.itap.purdue.edu… 128.210.7.20
Connecting to lsof.itap.purdue.edu|128.210.7.20|:21… connected.
Logging in as anonymous … Logged in!
==> SYST … done. ==> PWD … done.
==> TYPE I … done. ==> CWD /pub/tools/unix/lsof/NEW … done.
==> SIZE lsof_4.83K.sun.tar.bz2 … 560608
==> PASV … done. ==> RETR lsof_4.83K.sun.tar.bz2 … done.
Length: 560608 (547K)

100%[======================================>] 560,608 367K/s in 1.5s

2010-01-03 20:33:43 (367 KB/s) – `lsof_4.83K.sun.tar.bz2′ saved [560608]

houston@charon:~/lsof > bzcat lsof_4.83K.sun.tar.bz2 | gtar -xf –
houston@charon:~/lsof >

Be slightly baffled by the confgure script, but continue on as follows:

houston@charon:~/lsof/lsof_4.83K.sun > ./Configure solaris
Testing prdata.h for PR_GWINDOWS, using gcc
Testing prdata.h for PR_LDT, using gcc
Testing gcc for 64 bit support

*********************************
* Configuring for 64 bit kernel *
*********************************

Testing vnode.h for VSOCK, using gcc

This configuration step (the Inventory script) takes inventory of
the lsof distribution. The script runs for a minute or two while
it checks that all the subdirectories, information files, scripts,
header files and source files that should be present really are.

It’s not absolutely necessary that you take inventory, but it’s a
good idea to do it right after the lsof distribution has been
unpacked. Once the inventory has been taken, this script creates
the file ./.ck00MAN as a signal that the inventory step has been
done.

You can call the Inventory script directly at any time to take
inventory. You can inhibit the inventory step permanently by
creating the file ./.neverInv, and you can tell the Configure script
to skip the inventory and customization steps with the -n option.

Do you want to take inventory (y|n) [y]? n
rm -f ddev.c dfile.c dlsof.h dmnt.c dnode*.c dproc.c dproto.h dsock.c dstore.c dzfs.h kernelbase.h machine.h machine.h.old new_machine.h __lseek.s Makefile Makefile.zfs ./tests/config.cflags
rm -f ./tests/config.cc ./tests/config.xobj ./tests/config.ldflags
Testing C library for localtime() and strftime(), using gcc … present
ln -s dialects/sun/ddev.c ddev.c
ln -s dialects/sun/dfile.c dfile.c
ln -s dialects/sun/dlsof.h dlsof.h
ln -s dialects/sun/dmnt.c dmnt.c
ln -s dialects/sun/dnode.c dnode.c
ln -s dialects/sun/dnode1.c dnode1.c
ln -s dialects/sun/dnode2.c dnode2.c
ln -s dialects/sun/dproc.c dproc.c
ln -s dialects/sun/dproto.h dproto.h
ln -s dialects/sun/dsock.c dsock.c
ln -s dialects/sun/dstore.c dstore.c
ln -s dialects/sun/machine.h machine.h
kernelbase.h assembled.
Makefile and lib/Makefile created.
./tests/config.cc created
./tests/config.cflags created
./tests/config.ldflags created
./tests/config.xobj created

You may now customize the machine.h header file for this UNIX
dialect. The customizations will take effect when you compile
lsof. You may also choose to skip customization and proceed to
the compilation of lsof.

If you don’t know if you need to customize or want to know more
about what you can customize, consult the 00DCACHE, 00FAQ, 00PORTING,
and 00README files of the lsof distribution. You might also find
it helpful to examine the machine.h header file for the dialect
you’re customizing.

You don’t need to use this procedure to customize lsof; you can
edit the machine.h header file directly. If you later decide you
want to use this procedure to customize machine.h, execute the
./Customize script.

Do you want to customize (y|n) [y]? n

houston@charon:~/lsof/lsof_4.83K.sun > gcc -v
Using built-in specs.
Target: sparc-sun-solaris2.8
Configured with: ../gcc-4.3.4/configure –with-gnu-as –with-as=/opt/csw/bin/gas –without-gnu-ld –with-ld=/usr/ccs/bin/ld –with-cpu=v7 –enable-threads=posix –enable-nls –prefix=/opt/csw/gcc4 –with-local-prefix=/opt/csw –enable-shared –enable-multilib –with-included-gettext –with-libiconv-prefix=/opt/csw –with-system-zlib –with-gmp=/opt/csw –with-mpfr=/opt/csw –enable-languages=c,c++,fortran,java,objc,ada –enable-bootstrap
Thread model: posix
gcc version 4.3.4 (GCC)

run gmake (output snipped):

houston@charon:~/lsof/lsof_4.83K.sun > gmake
houston@charon:~/lsof/lsof_4.83K.sun >

Appears to have linked OK:

houston@charon:~/lsof/lsof_4.83K.sun > ldd lsof
libctf.so.1 => /lib/64/libctf.so.1
libkvm.so.1 => /usr/lib/64/libkvm.so.1
libelf.so.1 => /lib/64/libelf.so.1
libsocket.so.1 => /lib/64/libsocket.so.1
libnsl.so.1 => /lib/64/libnsl.so.1
libc.so.1 => /lib/64/libc.so.1
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
libscf.so.1 => /lib/64/libscf.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libgen.so.1 => /lib/64/libgen.so.1
libm.so.2 => /lib/64/libm.so.2
/platform/SUNW,Sun-Blade-2500/lib/sparcv9/libc_psr.so.1
/platform/SUNW,Sun-Blade-2500/lib/sparcv9/libmd_psr.so.1

Finally, we’ll copy it to a global zone and test it out:

root@snappy:~ > ./lsof_sparc -p 12151
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 12151 root cwd VDIR 136,8 1024 2 /
sshd 12151 root txt VREG 136,8 359244 228943 /usr/lib/ssh/sshd
sshd 12151 root txt VREG 136,8 392036 22431 /usr/lib/security/pkcs11_softtoken_extra.so.1
sshd 12151 root txt VREG 136,8 41124 3067 /platform/sun4u/lib/libmd_psr.so.1
sshd 12151 root txt VREG 136,8 149428 2659 /usr/lib/security/pkcs11_kernel.so.1
sshd 12151 root txt VREG 136,8 20572 4091 /lib/libdoor.so.1
sshd 12151 root txt VREG 136,8 55312 2586 /usr/lib/libcryptoutil.so.1
sshd 12151 root txt VREG 136,8 155092 2612 /usr/lib/libpkcs11.so.1
sshd 12151 root txt VREG 136,8 135100 22434 /usr/sfw/lib/libcrypto_extra.so.0.9.7
sshd 12151 root txt VREG 136,8 42084 4110 /lib/libnvpair.so.1
sshd 12151 root txt VREG 136,8 100972 4105 /lib/libmd.so.1
sshd 12151 root txt VREG 136,8 1639032 4412 /lib/libc.so.1
sshd 12151 root txt VREG 136,8 37400 4123 /lib/libsecdb.so.1
sshd 12151 root txt VREG 136,8 33348 4080 /lib/libcontract.so.1
sshd 12151 root txt VREG 136,8 1444348 5037 /usr/sfw/lib/libcrypto.so.0.9.7
sshd 12151 root txt VREG 136,8 27100 4078 /lib/libcmd.so.1
sshd 12151 root txt VREG 136,8 77228 6346 /usr/lib/libgss.so.1
sshd 12151 root txt VREG 136,8 62504 2740 /usr/sfw/lib/libwrap.so.1.0
sshd 12151 root txt VREG 136,8 229232 4075 /lib/libbsm.so.1
sshd 12151 root txt VREG 136,8 52920 3101 /lib/libpam.so.1
sshd 12151 root txt VREG 136,8 870128 45032 /lib/libnsl.so.1
sshd 12151 root txt VREG 136,8 80200 3850 /usr/lib/libz.so.1
sshd 12151 root txt VREG 136,8 93924 4125 /lib/libsocket.so.1
sshd 12151 root txt VREG 136,8 16856 3066 /platform/sun4u/lib/libc_psr.so.1
sshd 12151 root txt VREG 136,8 280840 4071 /lib/ld.so.1
sshd 12151 root 0u VCHR 13,2 6815752 /devices/pseudo/mm@0:null
sshd 12151 root 1u VCHR 13,2 6815752 /devices/pseudo/mm@0:null
sshd 12151 root 2u VCHR 13,2 6815752 /devices/pseudo/mm@0:null
sshd 12151 root 3u IPv6 0x30005e8c980 0t47908 TCP snappy:ssh->insomnia.lan:43612 (ESTABLISHED)
sshd 12151 root 4r DOOR 0t0 58 /var/run/name_service_door (door to nscd[133]) (FA:->0x3000236f580)
sshd 12151 root 5u FIFO 0x300016ca900 0t16 7062 (fifofs) PIPE->0x300016ca990
sshd 12151 root 6u FIFO 0x300016ca180 0t0 7067 (fifofs) PIPE->0x300016ca210
sshd 12151 root 7u FIFO 0x300016ca900 0t16 7062 (fifofs) PIPE->0x300016ca990
sshd 12151 root 8u FIFO 0x300016ca210 0t0 7067 (fifofs) PIPE->0x300016ca180

Enjoy 🙂