Using CD-R or CD-RW drives on Solaris

This document describes how to use CD-R or CD-RW drives on an Ultra 10 running Solaris 7. The process is not all that simple because of a variety of factors ranging from the lack of SCSI support on the Ultra 10 to various problems relating more specifically to the default configuration of Solaris.

Update 3/5/2002: If you are looking for more generic instructions on converting an IDE-based Sun machine to UltraSCSI, Jonathan P. Voss has expanded on these instructions.

If you wish to incorporate this information into other documentation that is distributed under an Open Source license, feel free to do so. Please give credit where credit is due.

Update 11/1/2000: Solaris 8 10/00 comes with a supplement CD that contains the command cdrw(1). That may make the rest of this document obsolete.

This document was written using the following configuration:

Hardware

Choosing a SCSI Card

Presumably you bought an Ultra 10 because of it's low price. Buying a Sun SCSI card could cause you to lose quite a bit of the price advantage, as the dual-channel single-ended UltraSCSI host adapter (Sun Part # X6540A) has a list price of over $500 (US, August 1999 price). According to prtdiag(1M) (/usr/platform/sun4u/sbin/prtdiag), the dual-channel UltraSCSI PCI card and the SunSwift PCI card both use the Symbios 53C875 chip.

Experience tells me that third party SCSI host adapters that use the same Symbios chip will work. In my Ultra 10, I have installed a Koutech Systems, Inc. Kouwell Ultra-Wide SCSI Card model KW-801V75, which cost about $80 from Aberdeen, Inc. My CD-RW works fine with it, although I do have a slight problem booting my IBM UltraSCSI disk with it. (I can boot from the drive, but whenever a full reset of the system occurs (reboot from Solaris, power cycle, or reset from openboot) I get a "Trap 3E" error. I suspect that this is related to the lack of a terminator jumper on the drive. I from the openboot ok prompt I can boot.) Update 6/29/2000: This problem with the IBM drive seems to have been fixed by a suggestion made by ssimpson@Sequoia.seattleschools.org. The suggestion was to disable sync negotiation by setting the appropriate jumper.

Other companies may create SCSI cards that work on an Ultra 10 under Solaris as well. See Sun's compatibility list for details. At the time that I wrote this, Adaptec [23]94[04]UW/OF cards were listed. In early 1999 I found that Apaptec's cards did not work reliably under load on Solaris 7 using Solaris 2.6 drivers. Furthermore a conversation with the product manager for Adaptec's OF (open firmware) cards revealed that they were being discontinued.

If you really need a dual-channel UltraSCSI card or you plan on going with external hard drives, you may want to consider buying the SCSI card from Sun. While it is rather pricey, it does come with high quality cables for connecting external devices. High quality SCSI cables are quite expensive, thus there is some extra value in the card from Sun. Additionally, if I had bought my SCSI card from Sun and it gave me the "Trap 3E" error, I would be able to call up tech support and talk to someone that knows what OpenBoot and Solaris are.

Update 11/3/1999 Sun just announced a single-channel, single-ended, UltraSCSI host adapter priced at $199 (part no X5010A). The target audience for this card are those that need to use SCSI devices on Ultra 5's and Ultra 10's. Note that this card comes without cables, unlike the dual-channel card mentioned above.

Choosing a CD-R or CD-RW drive

I chose a Yamaha CRW4416S because it was sitting in a box in the office across the hall from my office. You should choose one that is on the compatibility list inside the cdrecord README file.

On the Yamaha drive, there is a "block" jumper that should be set as well. This makes it so that the drive will accept transfers in the size that Solaris likes to send and receive.

Software

cdrecord

Install cdrecord.

scg kernel module

Update 3/14/2001 Previously only a 32-bit kernel module was available. I think that these instructions should now be correct for use with the 64-bit module.

You will also need to install the scg device driver. I installed it by getting SCHILYscg.sparc.tar.Z and scg-sparcv9-sol2.7. I then did the following:

   % compress -dc SCHILYscg.sparc.tar.Z | tar xvf - 
   # pkgadd -d . SCHILYscg
   # cp scg-sparcv9-sol2.7 /kernel/drv/scg/sparcv9

Dealing with vold(1M)

Because of a bad interaction with vold(1M) and unformatted media, it is necessary to make vold either go away or be nicer.

Making vold(1M) go away

To make vold not run anymore, you can simply get rid of the init(1M) script.

   # rm /etc/rc2.d/S92volmgt
This will have the effect of requiring root intervention to mount floppies and CD's. Some people prefer to rename the script to start with a lower-case 's' (that is, mv S92volmgt s92volmgt) in case it is needed in the future. Note that by removing S92volmgt, you really are not deleting the file, as it is a hard link to /etc/init.d/volmgt. In any case, I think that the following section offers a better solution.

Making vold(1M) nicer

To make vold(1M) only pay attention to your IDE CD-ROM drive, change vold.conf(4) (/etc/vold.conf) to

# @(#)vold.conf 1.21     96/05/10 SMI
#
# Volume Daemon Configuration file
#

# Database to use (must be first)
db db_mem.so

# Labels supported
label dos label_dos.so floppy rmscsi pcmem
label cdrom label_cdrom.so cdrom
label sun label_sun.so floppy rmscsi pcmem

# Devices to use
use cdrom drive /dev/rdsk/c0*s2 dev_cdrom.so cdrom%d
use floppy drive /dev/rdiskette[0-9] dev_floppy.so floppy%d
use pcmem drive /dev/rdsk/c0*s2 dev_pcmem.so pcmem%d forceload=true
# use rmscsi drive /dev/rdsk/c*s2 dev_rmscsi.so rmscsi%d

# Actions
insert dev/diskette[0-9]/* user=root /usr/sbin/rmmount
insert dev/dsk/c0* user=root /usr/sbin/rmmount
eject dev/diskette[0-9]/* user=root /usr/sbin/rmmount
eject dev/dsk/c0* user=root /usr/sbin/rmmount
notify rdsk/* group=tty user=root /usr/lib/vold/volmissing -p

# List of file system types unsafe to eject
unsafe ufs hsfs pcfs
The key difference here is that /dev/dsk/c* and /dev/rdsk/c* have been changed to /dev/dsk/c0* and /dev/rdsk/c0* to make it only pay attention to the IDE buses.

Make the changes take effect

   # reboot -- -r

Test it out

Verify that you are running a 32-bit kernel

Solaris 7 introduced isainfo(1). The output should resemble the following:
   % isainfo -b
   32

Verify devices were created

The -r flag to boot(1M) (passed by reboot -- -r) should have caused /dev/scg0 to be created:
   % ls -l /dev/scg0
   lrwxrwxrwx   1 root     other         41 Sep 21 10:38 /dev/scg0 -> ../devices/pci@1f,0/pci@1/scsi@1/scg@0,0:

Try out cdrecord

This should cause the door to open.
   # /opt/schily/bin/cdrecord -dev=0,4,0 -eject
You can also create an image and write it to the disk.
   # mkisofs -J -r -L -V My_Test_Image -o /var/tmp/myimage.iso /some/directory
   # /opt/schily/bin/cdrecord -dev=0,4,0 /var/tmp/myimage.iso
Note that I did this as root and that the -dev argument reflects that I have the CD-RW drive on SCSI bus 0, ID 4, LUN 0. It is important to also note that the corresponding device files are /dev/dsk/c1*, as the IDE buses use /dev/dsk/c0t[0-3].

In order for regular users to run cdrecord, consider the advice given in the cdrecord man page.

     If you don't want to allow users to become root on your sys-
     tem, cdrecord may safely be installed suid root. This allows
     all users or a group of users with no root privileges to use
     cdrecord.  Cdrecord  in  this  case checks, if the real user
     would have been able to read the specified files.   To  give
     all user access to use cdrecord, enter:

          chmod 4711 /usr/local/bin/cdrecord

     To give a restricted  group  of  users  access  to  cdrecord
     enter:

          chmod 4710 /usr/local/bin/cdrecord
          chgrp cdburners /usr/local/bin/cdrecord

     and add a group cdburners on your system.

     Never give write permissions  for  non  root  users  to  the
     /dev/scg?   devices   unless  you  would  allow  anybody  to
     read/write/format all your disks.

GUI Front Ends

There are several graphical front ends to mkisofs and cdrecord. Most of them have roots in Linux, and as such Freshmeat is a good source of information. Try the following searches through their application index for a current list:

I have tried gcombust and ECLiPt Roaster. I was able to get both of them to write a CD. I think that I prefer gcombust, but I have not used either of them enough to give a really fair comparison.

Both of gcombust and ECLiPt Roaster require portions of GNOME, which itself requires quite a bit of work to install. See the summary of what I did to build gnome on Solaris for some pointers.

---------------------------------------------------------------------

Mike Gerdts gerdts@cae.wisc.edu
Hey! Did you see my resume?
Search my pages
---------------------------------------------------------------------