Anaconda Enterprise 4 Repository backup and restore procedure#

This guide is for backing up and restoring an Anaconda Enterprise 4 Repository instance that uses local file system storage. If your instance uses Amazon S3 or any other storage provider, please consult their specific documentation on backup and restore procedures.

Before you start#

These instructions are for a Repository that is:

  • Installed in the directory /home/anaconda-server/repo as suggested by the installation guide.

  • Owned by the anaconda-server user.

  • Using the storage directory /opt/anaconda-server/package-storage.

  • Storing the configuration file in /etc/anaconda-server.

If any of these items are different for your instance, modify these instructions accordingly.

  • Unless noted, run all shell commands while logged in as the anaconda-server user. Using sudo privileges, log in as the anaconda-server user with this command:

    sudo su - anaconda-server
    
  • Execute all commands in the working directory /home/anaconda-server:

    $ pwd
    /home/anaconda-server
    

Backup#

Before starting the backup process, shut the service down using supervisorctl:

$ supervisorctl stop all
anaconda-server: stopped
$ supervisorctl status
anaconda-server                   STOPPED    Jul  6 05:05 PM

Make a $VERSION environment variable and set it to the version of the currently installed Anaconda Enterprise 4 Repository:

$ VERSION=`conda list anaconda-server --json | python -c 'import sys, json; print json.load(sys.stdin)[0]["version"]'`
$ echo $VERSION
2.33.27

This version string will be used in all backup file names.

It’s also useful to add a timestamp to the files, so generate one now:

$ TIMESTAMP=`date +%Y-%m-%d`
$ echo $TIMESTAMP
2018-07-30

Code/Binaries#

Generate a tarfile archive with the installed code, binaries and any dependencies:

$ tar -cpsf anaconda-server-repo-$VERSION-$TIMESTAMP.tar --exclude var/run -C /home/anaconda-server repo/
$ sha1sum anaconda-server-repo-$VERSION-$TIMESTAMP.tar > anaconda-server-repo-$VERSION-$TIMESTAMP.tar.sha1

Notice that this also generated a SHA1 checksum. This checksum will be used to verify when you restore the archive.

Configuration#

This step is necessary only if you stored Anaconda Enterprise 4 Repository’s configuration in a custom location outside of the instance installation folder (usually /home/anaconda-server/etc/).

These commands show how to generate the tarfile if the configuration is stored in /etc/anaconda-server.

Generate the tarfile with its SHA1 checksum:

$ tar -cpsf anaconda-server-etc-$VERSION-$TIMESTAMP.tar /etc/anaconda-server
$ sha1sum anaconda-server-etc-$VERSION-$TIMESTAMP.tar > anaconda-server-etc-$VERSION-$TIMESTAMP.tar.sha1

Storage#

As before, create a tarfile archive and its checksum with the contents of the package storage location:

$ tar -cpsf anaconda-server-package-storage-$VERSION-$TIMESTAMP.tar -C /opt/anaconda-server/ package-storage
$ sha1sum anaconda-server-package-storage-$VERSION-$TIMESTAMP.tar > anaconda-server-package-storage-$VERSION-$TIMESTAMP.tar.sha1

Database#

Generate a dump of Anaconda Enterprise 4 Repository’s MongoDB database. Anaconda recommends you follow MongoDB’s guidelines for backup and restore. This guide uses MongoDB tools:

$ mongodump --host=127.0.0.1 --port=27017 --archive=anaconda-server-mongodb-$VERSION-$TIMESTAMP.archive
$ sha1sum anaconda-server-mongodb-$VERSION-$TIMESTAMP.archive > anaconda-server-mongodb-$VERSION-$TIMESTAMP.archive.sha1

.bashrc#

If you chose to let the Anaconda Enterprise 4 Repository installer update the .bashrc file of the user anaconda-server, back it up:

$ cp /home/anaconda-server/.bashrc anaconda-server-bashrc-$VERSION-$TIMESTAMP.sh
$ sha1sum anaconda-server-bashrc-$VERSION-$TIMESTAMP.sh > anaconda-server-bashrc-$VERSION-$TIMESTAMP.sh.sha1

Restore#

Before you start#

  • Verify that the restore environment meets the requirements listed in the Installation Guide for Anaconda Enterprise 4 Repository. You will need:

    • MongoDB (any supported version) installed

    • A user account (usually anaconda-server)

    • A storage directory (usually /opt/anaconda-server/package-storage) owned by the Anaconda Enterprise 4 Repository user account. This is only needed if you’re using a local filesystem as a storage backend.

  • Run all shell commands while logged in as the anaconda-server user, as you did when backing up Anaconda Enterprise 4 Repository. Using sudo privileges, log in as the anaconda-server user with this command:

    sudo su - anaconda-server
    
  • Execute all commands in the working directory /home/anaconda-server.

Verify checksums#

Verify the integrity of the backup files:

$ sha1sum --check *.sha1
anaconda-server-bashrc-2.33.27-2018-07-30.sh: OK
anaconda-server-mongodb-2.33.27-2018-07-30.archive: OK
anaconda-server-package-storage-2.33.27-2018-07-30.tar: OK
anaconda-server-repo-2.33.27-2018-07-30.tar: OK

.bashrc#

If you backed up the .bashrc file of the user anaconda-server, restore it:

cp anaconda-server-bashrc-$VERSION-$TIMESTAMP.sh /home/anaconda-server/.bashrc

After restoring this file, log out and log in as anaconda-server again for the changes to take effect.

Database#

If you followed the Anaconda Enterprise 4 Repository Installation Guide, MongoDB is up and running and you can use mongorestore to restore the database archive:

mongorestore --host=127.0.0.1 --port=27017 --db=binstar --archive=anaconda-server-mongodb-$VERSION-$TIMESTAMP.archive

Storage#

Assuming that the storage directory is /opt/anaconda-server/package-storage, restore it with:

tar -xpsf anaconda-server-package-storage-$VERSION-$TIMESTAMP.tar -C /opt/anaconda-server/

Code/Binaries#

Restore the code and binaries:

tar -xpsf anaconda-server-repo-$VERSION-$TIMESTAMP.tar -C /home/anaconda-server

Restore the supervisord configuration:

repo/bin/anaconda-server-install-supervisord-config.sh

The server should now be up and running. Check the status with supervisorctl:

$ repo/bin/supervisorctl status
anaconda-server                   RUNNING    pid 8446, uptime 0:03:18