Currently saving...Error. Not saved.Occam Archive ProjectQmbDRC7BFzyeANfuedASwuc35hMCLRq3p5yRnFKrLJ87pd5dskKz5ezs2hus1YeihSLrgAni9AiZ
Occam is an archival toolchain designed to support digital preservation of computational artifacts.
Using your operating system's package manager, install the following dependencies. Install
python3.4 or above along with
pip. You'll want to have some backend to run objects, so install and setup
docker. Note: that the user that runs Occam needs to be able to run Docker which usually means putting that user in the
Now, with the prerequisites out of the way, get the code:
git clone https://gitlab.com/occam-archive/occam occam
Which will create a directory called
occamwhich we can then go into to set up the rest of the system:
cd occam pip install -r dev-requirements.txt ./bin/occam system initialize
The command "system initialize" will create a database. At this point you can run occam using:
While will show the usage information. And you can use the following (while in this directory) to place occam in your path:
And to add this to your startup (again, while in the occam directory):
echo "export PATH=\$PATH:$PWD/bin" >> ~/.profile
The first thing you'll want to do is to create an account. The first account created on the system is automatically an administrator account. Replace
<username>with the username you wish. It will ask for a password which will be used later to authenticate this account.
occam accounts new <username>
Continue by installing a client, such as the web-client here.
These clients generally use Occam as a daemon and interact through this. To start a daemon:
occam daemon start
It will run in the background and can be closed using:
occam daemon stop
For a listing of command line options, type:
docs - code documentation src - root for all code |- occam.py - main application entrypoint \- occam - application code |- accounts - accounts component (handles account generation) |- backends - backends component (handles VM plugins) |- caches - caches component (manages cache services) |- commands - commands component (organizes cli commands) |- configurations - config component (handles configuration objects) |- daemon - daemon component (daemon service) |- databases - database component (handles db access) |- jobs - jobs component (handles running tasks) |- links - links component (manages links to objects) |- manifests - manifests component (generates tasks) |- network - network component (world network access) |- nodes - nodes component (organizes known nodes) |- notes - notes component (manages metadata) |- objects - objects component (manages objects) |- permissions - permissions component (manages access control) |- resources - resources component (stores/retrieves data) |- storage - storage component (handles data storage) |- system - system component (general system maintenance) \- workflows - workflows component (manages workflows)
We use Sphinx to parse documentation from the code into a set of HTML pages. To generate the code documentation, navigate to the docs directory and run:
This will produce a website in the
docs/htmldirectory. Running a web server here using:
python3 -m http.server 8000
Will make the documentation site available at http://localhost:8000.
The following are accepted and cherished forms of contribution:
- Filing a bug issue. (We like to see feature requests and just normal bugs)
- Fixing a bug. (It's obviously helpful!)
- Adding documentation. (Help us with our docs or send us a link to your blog post!)
- Adding features.
- Adding artwork. (Art is the true visual form of professionalism)
The following are a bit harder to really accept, in spite of the obvious effort that may go into them, so please avoid this:
- Rewriting all of the sass to whatever is newer. (It's happened to me before)
- Porting everything to rails.
- Creating a pull request with a "better" software license.
In general, contributions are easily provided by doing one of the following:
- Fork and clone the project.
- Update the code on your end however you see fit.
- Push that code to a public server.
- Create a pull request from your copy to ours.
The above is the most convenient process. You may create an issue with a link to a repository or tar/zip containing your code or patches as well, if git is not your thing.
All attribution and crediting for contributors is located within occam-web-client or by visiting
/acknowledgementsin any Occam website.
Code of Conduct
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Occam is licensed under the AGPL 3.0. Refer to the LICENSE.txt file in the root of the repository for specific details.
This section provides generated citations that are appropriate for this artifact. Sometimes, the citation is a paper or other artifact hosted elsewhere, but the authors of this artifact requested that be cited instead of the software itself.
Otherwise, the citation reflects this artifact and also has a tag for the revision (which represents this object at this specific point in time) which is enough to return to this, or a similar, page.
Pick a style above to generate the citation in the given format.
Adds ipfs discovery plugin.
adds discover to status command.
Adds ingest component for python libraries.
Author:Luis Oliveira <email@example.com
Changed, documented, and tested the parser for object identifiers
Updates set command to add renaming.
Fixes issue with set command.
Fixes build storage and adds trust/untrust permissions commands. Queries for trust associations upon 'objects status' Adds the trust_associations table.
Ensures metadata is preserved in task manifests and fixes 'file' expansion. The 'file' tag, when converted into an absolute path within its local context, must use the path separator of its local context. This change will ensure that this happens. We may need a 'file' entry under the 'paths' metadata listing for the location of the file (in an absolute path) for each of its contexts. This would be listed much like 'mount' or 'volume' where it is tagged by its environment and architecture. (with the trouble of when those environments are repeated, unfortunately.) The 'metadata' tag in the object info is preserved in tasks since it can provide hints to Provider Objects. In my test case, the hints provide knowledge to DOSBox about the proper default configuration. Some fixes to the storage manager.
Adds Dropbox support and better handling of storage backends. Adds a variety of storage manager commands for managing storage backends. Adds a StorageBackendEntryRecord that keeps track of per Account storage backend information. This per Account storage information is passed along, when available, to the storage interface. Fixes 'file' tag for when object is referred with path. Adds some support for a 'json' type to the database logic. Updates the Log to allow better 'percentage' log output. This was helpful for the Dropbox push action so you can see which file is being uploaded. Need to add support to the daemon for polled actions where the daemon responds immediately with an id to track a spawned process to handle the long-term action (like the publishing of an object) Fixes manifest generation where an input is specified but no input is described in the object. Right now, we will create a dummy input just in case the object can actually handle it, since the input can be described.