Install SoftWoRx 7.0.0 on Debian 9

Softworx (stylised SoftWoRx) is the microscope control software for the DeltaVision microscopes. It is also the image analysis software for DeltaVision and OMX, performing image deconvolution and SIM reconstructions. It is based on Priism/IVE which is also proprietary software.

These are instructions to install Softworx 7.0.0 on Debian 9.

Currently, the last version of Softworx is 7.2.2, and the stable version of Debian is 12. These instructions were written back in 2017 when I managed systems with Softworx. These instructions can be used as the basis to install later Softworx versions (versions earlier than 7.0.0 are not fully x86_64 and will require a Debian i386 install or multiarch properly configured), or to install on other Debian version or on Debian-based distributions such as Ubuntu.

Before you start

License file

Softworx requires a license file. Get one before starting the installation. The license file is a text file named license.dat and lists the MAC address of the required ethernet card and the date the license expires.

Nvidia graphics card and drivers

Softworx supposedly requires a Nvidia card and the official Nvidia drivers. Not the new, fancy, and expensive GPUs for AI. Softworx is software from the late 90s and is distributed with workstations with very old Nvidia graphics cards.

My experience, however, is that since Debian 9 the free and open source nouveau drivers work fine. I've also seen it working on machines without a Nvidia graphics card at all.

Download the installer

Softworx has moved around a lot lately. Originally distributed by API (Applied Precision Inc), it moved to GE HealthCare, then to Cytiva, and last to Leica. Currently it is still available to download from the Cytiva website. The directory for version 7.0.0 is at https://download.cytivalifesciences.com/cellanalysis/download_data/softWoRx/7.0.0/SoftWoRx.htm

wget https://download.cytivalifesciences.com/cellanalysis/download_data/softWoRx/7.0.0/dv700_update_RC6.tar
tar xf dv700_update_RC6.tar
cd dv700_update
cd bin
md5sum --check md5sums
cd ..

There is no directory with an index of all Softworx versions. Previously, I have discovered new versions by experimenting higher version numbers on the directory URL.

Extract the installer and move files in place

Installers are provided as rpm packages. Files on those packages can be extracted with rpm2cpio and then moved to whichever location we want.

cd ../RPMS
sudo apt install rpm2cpio
for RPM_PACKAGE in softWoRx-Base-7.0.0-RC6.x86_64.rpm \
                   softWoRx-DV-Acquire-7.0.0-RC6.x86_64.rpm \
                   softWoRx-DV-Analyze-7.0.0-RC6.x86_64.rpm \
                   softWoRx-OTF-Library-2.0.0-13.x86_64.rpm; do
    rpm2cpio $RPM_PACKAGE | cpio -i --make-directories
done

Softworx expects to be placed on /usr/local/softWoRx but that doesn't conform to the Linux Filesystem Hierarchy Standard (FHS). Softworx's directory structure with all files under a single application directory fit better under /opt.

sudo mv usr/local/softWoRx /opt/
sudo mv usr/sbin/dvqd /opt/softWoRx/bin/x86_64/
sudo mv usr/local/otf/ /opt/softWoRx/
sudo mv usr/lib/X11/app-defaults/softWoRx /etc/X11/app-defaults/
sudo mkdir -p /var/opt/softWoRx

sudo chown root:root /etc/X11/app-defaults/softWoRx
sudo chown -R root:root /opt/softWoRx

## /opt/bin and /opt/sbin for things that should be on the PATH
sudo mkdir -p /opt/bin
for PROGRAM in BasicInfo DVExit runDV DVview ; do
    sudo ln -s /opt/softWoRx/bin/x86_64/$PROGRAM /opt/bin/$PROGRAM
done
sudo mkdir -p /opt/sbin
sudo ln -s /opt/softWoRx/bin/x86_64/dvqd /opt/sbin/dvqd

So that Softworx can be upgraded without losing the configuration, place it on /etc/opt/ and link to /opt/softWoRx/config.

sudo mv /opt/softWoRx/config /etc/opt/softWoRx
sudo ln -s /etc/opt/softWoRx /opt/softWoRx/config

Softworx configuration

Because we have placed Softworx under /opt/softWoRx instead of /usr/local/softWoRx, we need to edit the default configuration:

sudo sed -i 's,^DV_BASE .*,DV_BASE /opt/softWoRx,' \
    /etc/opt/softWoRx/system.swrc

sudo sed -i 's,^DV_DATA .*,DV_DATA ./,' \
    /etc/opt/softWoRx/system.swrc

sudo sed -i 's,^DV_OTF .*,DV_OTF /opt/softWoRx/otf,' \
    /etc/opt/softWoRx/system.swrc

License file

Softworx needs a license file. Place it at /etc/opt/softWoRx/license.dat.

Dependencies

sudo apt install libxm4 csh

building libXp from source

libXp is not packaged on Debian 9 (there are libxp packages for Debian 8 and 10 though) so it needs to be built from source.

sudo apt install xorg-dev make gcc x11proto-print-dev
wget https://www.x.org/releases/individual/lib/libXp-1.0.3.tar.gz
tar xzf libXp-1.0.3.tar.gz
cd libXp-1.0.3/
./configure
make
sudo make install
sudo ldconfig
cd ..
rm libXp-1.0.3.tar.gz
rm -r libXp-1.0.3/

libtiff.so.3

Softworx links against libtiff.so.3 but Debian 9 only has libtiff.so.5. It is possible to build libtiff from source but creating a symlink named libtiff.so.3 is enough for Softworx to start. There may be issues later but if you're using Softworx you will mainly be using dv files and not tiff.

Fix shell scripts

SHELL_SCRIPTS=$(file /opt/softWoRx/bin/x86_64/* | grep shell |cut -f1 -d ':')

## uname -p is not portable
sudo sed -i 's,uname -p,uname -m,g' $SHELL_SCRIPTS

## re-hardcode SW_BASE path
sudo sed -i 's,/usr/local/,/opt/,g' $SHELL_SCRIPTS

## This program just does not work
echo '#!/bin/bash
xdg-open $1 &
sleep 1
exit 1' | sudo tee /opt/softWoRx/bin/x86_64/DVShowDir
sudo chmod a+x /opt/softWoRx/bin/x86_64/DVShowDir

Force ethernet card to be named eth0

Softworx licensing is tied to the Mac address of the network device named eth0. Debian 9 will, by default, use predictable, stable network interface names which are named like ens32. The old-style, upredictable names, like eth0, can be forced with udev rules.

## Get the MAC address from the license file
HWADDR=$(grep -Po -m 1 '(?<=HOST ")[0-9A-F:]{17}(?=")' \
          /etc/opt/softWoRx/license.dat \
       | tr '[:upper:]' '[:lower:]')

echo \
    'SUBSYSTEM=="net",'\
    'ACTION=="add",'\
    'DRIVERS=="?*",'\
    'ATTR{address}=="'$HWADDR'",'\
    'ATTR{type}=="1",'\
    'NAME="eth0"' \
  | sudo tee /etc/udev/rules.d/70-persistent-net.rules > /dev/null

The new name will only be applied after restarting.

Configure dvqd daemon

The DeltaVision processing queue manager (dvqd) is a system service and starts automatically. A SysV init file is provided but Debian 9 has moved to systemd. We have placed Softworx under /opt so need to update the paths for that.

sudo ln -s /opt/softWoRx/bin/x86_64/dvqd /opt/sbin/dvqd
sudo mv /opt/softWoRx/bin/x86_64/dvqd.init_DEBIAN /etc/init.d/dvqd
sudo chmod 755 /etc/init.d/dvqd
sudo sed -i 's,/usr/sbin/,/opt/sbin/,g' /etc/init.d/dvqd
sudo sed -i 's,/var/\(run\|lock\)/,/var/opt/softWoRx/,g' /etc/init.d/dvqd
sudo systemctl daemon-reload
sudo systemctl enable dvqd.service
sudo systemctl start dvqd.service

Desktop shortcuts

sudo mkdir -p /usr/local/share/pixmaps
sudo mkdir -p /usr/local/share/mime
sudo mkdir -p /usr/local/share/mime/packages
sudo mkdir -p /usr/local/share/applications

## Shortcut to start SoftWoRx
echo "\
[Desktop Entry]
Version=1.1
Type=Application
Name=Start softWoRx
Comment=softWoRx
Exec=/opt/softWoRx/bin/x86_64/runDV
Icon=sw_app_icon.xpm
Terminal=false
Categories=Science;ImageProcessing;Motif" \
| sudo tee /usr/local/share/applications/swstart.desktop > /dev/null

## Shortcut to exit SoftWoRx
echo "\
[Desktop Entry]
Version=1.1
Type=Application
Name=Quit softWoRx
Comment=Shut Down and Clean Up softWoRx
Exec=/opt/softWoRx/bin/x86_64/DVExit
Icon=sw_stop_icon.xpm
Terminal=false
Categories=Science;ImageProcessing;Motif;" \
| sudo tee /usr/local/share/applications/swexit.desktop > /dev/null

## Application to view DV files
echo "\
[Desktop Entry]
Version=1.1
Type=Application
Name=DVview
NoDisplay=true
Comment=View dv file in softWoRx
Exec=/opt/softWoRx/bin/x86_64/DVview %f
Icon=sw_app_icon.xpm
Terminal=false
StartupWMClass=softWoRx
MimeType=image/deltavision;" \
| sudo tee /usr/local/share/applications/dvview.desktop > /dev/null

## Register mime type for dv files (so viewer opens when opening them)
echo '<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
  <mime-type type="image/deltavision">
    <icon name="image-deltavision"/>
    <comment>Deltavision Image</comment>
    <glob pattern="*.dv"/>
    <glob pattern="*.mrc"/>
    <glob pattern="*.otf"/>
    <glob pattern="*.psf"/>
    <magic priority="100">
      <match value="0xc0a0" type="big16" offset="96"/>
      <match value="0xa0c0" type="big16" offset="96"/>
    </magic>
  </mime-type>
</mime-info>' \
| sudo tee /usr/local/share/mime/packages/softworx.xml > /dev/null

for FNAME in deltavision-image.png sw_app_icon.xpm sw_stop_icon.xpm ; do
    sudo ln -s /etc/opt/softWoRx/desktop/$FNAME \
        /usr/local/share/pixmaps/$FNAME
done

sudo update-mime-database /usr/local/share/mime
sudo update-desktop-database /usr/local/share/applications