A distributed repository system would seem to be an ideal solution to this problem. The DRS is intended to be a scalable distributed system that allows clients to gain access to a generic repository of objects (such as documents and source code). These objects are stored on a number of repository servers that are interconnected. Though the objects are split between these servers, this fact is transparent to users of the system. Java RMI is used to provide open access to the repository for any client platform. The repository also provides a locking service that allows users to claim temporary ownership of a version of an object so that it is not modified by other users.
For a detailed paper addressing Distributed Operating System issues, click here.
Note that this system is not intended to be a production-quality system, and it is not bug-free. For educational purposes only, I've decided to make the source code publicly available.
Reset will clear out the repository and create a new user called Administrator with administrator access. The initial password for the administrator will be "password" which can be changed using the user manager utility.
To run successively:
Where <num> is the number of the server being run (start at 1).
To Exit the server, press ^C. Then, put the registry process in the foreground by typing "fg" and then press ^C to stop it before logging off workstation.
Ports starting at 4000 will be used by default. The scripts need to be modified to change this.
Where <num> is the corresponding server number, and <host> is the name of the machine containing that server.
To exit the client, type exit at the prompt.
|lcd <pathname>||Change directory on local filesystem. Must specify full pathname including root/.|
|ls||List the contents of the current directory. Directories will appear with a trailing /.|
|md <dirname>||Create a directory from this directory. The <dirname> cannot specify anything other than a name. For example "md ../hi" would create a directory literally called "../hi", not a directory called "hi".|
|cd <dirname>||Change current directory. In this case, <dirname> can either be "/" to change to root, ".." to go up one level, or the name of a directory that exists in the current directory. Again, something like "cd ../hi" is invalid.|
|rm <object>||Removes the object. If the object is a directory, all objects in that directory are lost, including subdirectories and all versions of files. Does not prompt for confirmation. USE WITH CARE.|
|mv <object> <path>||Move the object with the given name to the given absolte path. <object> must specify the name of an object in the current directory, and <path> must specify the name of an absolute path, starting with the root /.|
|ci <name> <ver> <par>||Checks in a file to the repository. A file named <name> must exist in your current working directory. Specify a string with no spaces to name the version for the <ver> parameter. The <par> parameter is the name of the parent version to check this file in under. If this is an initial checkin, the character '/' should be used for <par>. Otherwise, you must have the parent version locked to check in a new version. You cannot checkin over an old version.|
|versions <name>||Lists version information and lock information for all versions of the file with the given name. The <name> parameter must specify the name of a valid file.|
|co <name> <ver>||Checks out the file with the given name into the current working directory. Overwrites any files in your cwd by the same name. <name> must specify the name of a valid file, and <ver> must specify a valid version number for that file.|
|lock <name> <ver>||Requests that current user lock the given version of the given file. <name> must specify the name of a valid file in the current directory, and <ver> must specify a valid version number for that file that has not already been locked by anyone else.|
|release <name> <ver>||Releases a lock for the given version of the given file. <name> must specify the name of a valid file in the current directory, and <ver> must specify a valid version number for that file that has been locked by someone.|
|exit||Exits and logs off this client from the server.|
|Administrator Commands: These commands can only be accessed by a user with administrator access (e.g. the Administrator account):|
|accept <port>||Instructs the server to start accepting connections on the given port.|
|link <host> <port>||Links this server with the server on the given host and port. <host> is the hostname of tha machine running the server.|
To run the user manager, type:
<repository-name> is the name of the repository to modify the User Database for.
Note that changes will not go into effect until the server is restarted.
Rochester Institute of Technology