Files are stored in a jailed (chrooted) scponly directory on the image server. In this manner, researchers can upload and update their files easily. It has the disadvantage that users must initialize the scponly directory by transfering a file or using an sftp client at least once to the image server, because the directories are created only then (the jail script is invoked by the PAM system, and therefore only when the authentication happens). This applies even if the user only wants to use other upload methods. To save space, multiple copies of the same files (for different users) are handled with hard links.

We had earlier adopted a solution where ReAssure transfered the files to a private directory to guarantee availability of files at experiment time, and minimize the number of duplicate copies (the copy operation would only create a reference in the database), and remove the requirement to use sftp at least once. However, in practice this was annoying because it was inflexible and required many extra operations if a user updated an image after running an experiment on it, or if a user just wanted to copy an image to an experimental pc reserved on-the-fly.

The implementation uses a Files class that handles storing, retrieving and manipulating software image files on the image server. It also stores their meta-data, such as a description and file sharing permissions. Files is a child of class DB_aware_owner (note that Files is not to be confused with File, which is a native class in Ruby).