Transfer SCO Acucobol to Linux

    February 1, 2005

I doubt I’ll see too many more of these, but I had a call from someone with a crashed SCO 3.2v4.2 system.

This was an old DEC MP433 system with half a dozen small SCSI drives, and a 1 GB Tandberg tape drive, which had probably been running for 15 years or more. The root hard drive had apparently died. They had a backup of that, and emergency boot/root floppies, but no backups of the other drives. Fortunately all application data was on the other drives, so we had reasonable hope of recovering the system.

The customer also told me that everything was written in Acucobol, and that he had source code too, and he had already bought Acucobol run-time for Linux but hadn’t been able to get it working. We decided to first get the SCO system back up and then look at the Linux.

A fresh root drive had already been installed, stolen from a DOS box of the same vintage that had been sitting around as a transplant source. They had the SCSI ID set wrong, but I reset it to 0 and booted from the emergency boot floppy. It asked for the root floppy as it should, and dumped me at a prompt. I confirmed that the tape was working with a “cpio -itv < /dev/rStp0 | head" and we were ready to begin. First step was to run "fdisk -f /dev/hd0root" and create a Unix partition, followed by a "divvy -i /dev/hd0root" to create filesystems. Then, "mount /dev/hd0root /mnt" and we were ready to go. I did cd /mnt
cpio -ickvABdu < /dev/rStp0

The files began to restore. I’d need to restore boot file before this would be fully ready to run again, but we were on our way.

(Restoring boot files)

dd if=/etc/hdboot0 of=/dev/hd0a
dd if=/etc/hdboot1 of=/dev/hd0a bs=1k seek=1
dparam -w

Unfortunately the happiness was short lived. I started looking at the Acucobol, and actually had it installed and working on the Linux box, when the DEC machine started spewing disk write errors. I had forgotten to run /etc/badtrk, so I started that while continuing to work with Acucobol on Linux.


We had no current backups, but there were some older sets. Although these were SCO cpio tapes, which would normally use the “c” option, that didn’t work. I knew that Linux has a different idea about the c flag, but the only way I could restore was to leave all that out:

cpio -ivdu < /dev/st0

The programs actually ran, with some screen issues - no line draw characters, screen clears inconsistent, some positioning off. Acucobol uses /etc/a_termcap, so the client felt certain he could clean that up with some experimentation.

Unfortunately, the SCO box wasn't doing as well. The badtrk ran with no problems, but another attempt to restore files crashed again at a different point. Trying cpio with leaving off "u" let it go farther, so it seemed plain that this was not a hard drive problem, but it did keep crashing.

As the Linux box obviously was working, and the client wanted to transition to that anyway, we decided to extract tapes from the SCO boxes other drives and restore them to Linux. Enough of the root file system had been restored to make this very easy: I checked /mnt/etc/default/filesys to see what devices had been mounted, and looked in /mnt/dev to get the right major/minor numbers. I then used "mknod" to create entries in /dev on the root floppy. The procedure would then be:

umount /mnt
fsck -y /dev/data1
mount /dev/data1 /mnt
tar cvf /dev/rStp0 /mnt/data1

This would be repeated for each disk, and the tapes then restored to the Linux box.

*Originally published at

A.P. Lawrence provides SCO Unix and Linux consulting services