Repository: VIDA-NYU/reprozip Branch: 1.x Commit: 44687ce73efe Files: 178 Total size: 1004.6 KB Directory structure: gitextract_q6urh6ag/ ├── .github/ │ └── workflows/ │ └── test.yml ├── .gitignore ├── .readthedocs.yaml ├── CHANGELOG.md ├── CITATION.cff ├── CITATION.txt ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── Vagrantfile ├── allsetups.sh ├── docs/ │ ├── Makefile │ ├── conf.py │ ├── developerguide.rst │ ├── faq.rst │ ├── glossary.rst │ ├── graph.rst │ ├── gui.rst │ ├── index.rst │ ├── install.rst │ ├── jupyter.rst │ ├── make.bat │ ├── man/ │ │ ├── reprounzip-docker.1 │ │ ├── reprounzip-vagrant.1 │ │ ├── reprounzip.1 │ │ └── reprozip.1 │ ├── packing.rst │ ├── reprozip.rst │ ├── traceschema.rst │ ├── troubleshooting.rst │ ├── unpacked-format.rst │ ├── unpacking.rst │ └── vistrails.rst ├── file-format.md ├── reprounzip/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── reprounzip/ │ │ ├── __init__.py │ │ ├── common.py │ │ ├── main.py │ │ ├── orderedset.py │ │ ├── pack_info.py │ │ ├── parameters.py │ │ ├── plugins/ │ │ │ └── __init__.py │ │ ├── signals.py │ │ ├── unpackers/ │ │ │ ├── __init__.py │ │ │ ├── common/ │ │ │ │ ├── __init__.py │ │ │ │ ├── misc.py │ │ │ │ ├── packages.py │ │ │ │ └── x11.py │ │ │ ├── default.py │ │ │ ├── graph.py │ │ │ └── provviewer.py │ │ └── utils.py │ ├── setup.cfg │ └── setup.py ├── reprounzip-docker/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── reprounzip/ │ │ ├── __init__.py │ │ └── unpackers/ │ │ ├── __init__.py │ │ └── docker.py │ ├── setup.cfg │ └── setup.py ├── reprounzip-qt/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── reprounzip_qt/ │ │ ├── __init__.py │ │ ├── gui/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── run.py │ │ │ └── unpack.py │ │ ├── main.py │ │ ├── qt_terminal.py │ │ ├── reprounzip_interface.py │ │ └── usage.py │ ├── setup.cfg │ └── setup.py ├── reprounzip-vagrant/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── reprounzip/ │ │ ├── __init__.py │ │ └── unpackers/ │ │ ├── __init__.py │ │ └── vagrant/ │ │ ├── __init__.py │ │ ├── interaction.py │ │ └── run_command.py │ ├── setup.cfg │ └── setup.py ├── reprounzip-vistrails/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── reprounzip/ │ │ ├── __init__.py │ │ └── plugins/ │ │ ├── __init__.py │ │ └── vistrails.py │ ├── setup.cfg │ └── setup.py ├── reprozip/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── native/ │ │ ├── config.h │ │ ├── database.c │ │ ├── database.h │ │ ├── log.h │ │ ├── ptrace_utils.c │ │ ├── ptrace_utils.h │ │ ├── pylog.c │ │ ├── pytracer.c │ │ ├── syscalls.c │ │ ├── syscalls.h │ │ ├── tracer.c │ │ ├── tracer.h │ │ ├── utils.c │ │ └── utils.h │ ├── reprozip/ │ │ ├── __init__.py │ │ ├── common.py │ │ ├── filters.py │ │ ├── main.py │ │ ├── pack.py │ │ ├── tracer/ │ │ │ ├── __init__.py │ │ │ ├── linux_pkgs.py │ │ │ └── trace.py │ │ ├── traceutils.py │ │ └── utils.py │ └── setup.py ├── reprozip-jupyter/ │ ├── LICENSE.txt │ ├── MANIFEST.in │ ├── README.rst │ ├── reprozip_jupyter/ │ │ ├── __init__.py │ │ ├── main.py │ │ ├── notebook-extension.js │ │ ├── run.py │ │ ├── server_extension.py │ │ └── trace.py │ ├── setup.cfg │ └── setup.py ├── scripts/ │ ├── RELEASE │ ├── linux-wheels.sh │ ├── macos/ │ │ ├── README.txt │ │ ├── ReproUnzip.pkgproj │ │ ├── app-shim/ │ │ │ ├── ReproUnzip_app/ │ │ │ │ └── Contents/ │ │ │ │ ├── Info.plist │ │ │ │ └── Resources/ │ │ │ │ └── icon.icns │ │ │ ├── reprounzip-qt.c │ │ │ └── reprounzip-qt.debug.c │ │ ├── instructions.txt │ │ ├── reprounzip │ │ ├── reprounzip-qt │ │ └── reprozip-jupyter │ ├── register-linux.sh │ ├── test_bug_13676.py │ ├── test_bug_23058.py │ └── windows/ │ ├── input/ │ │ ├── reprounzip-qt.bat │ │ ├── reprounzip.bat │ │ └── reprozip-jupyter.bat │ └── reprounzip.iss ├── syscalls.txt └── tests/ ├── __init__.py ├── __main__.py ├── check_images.py ├── common.py ├── connect.c ├── exec_echo.c ├── functional.py ├── readwrite.c ├── rename.c ├── segv.c ├── simple.c ├── simple_input.txt ├── simple_input2.txt ├── test_graph.py ├── test_parameters.py ├── test_rails_filter.py ├── test_reprounzip.py ├── test_reprozip.py ├── test_unpackers_common.py ├── test_utils.py ├── threads.c ├── threads2.c └── vfork.c ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/test.yml ================================================ name: Test on: - push - pull_request jobs: test: strategy: fail-fast: false matrix: os: [ubuntu-latest] mode: [tests] python: - "3.11" include: - os: ubuntu-latest mode: coverage python: "3.8" - os: ubuntu-latest mode: checks python: "3.8" - os: ubuntu-latest mode: check-images python: "3.8" runs-on: ${{ matrix.os }} env: TEST_MODE: ${{ matrix.mode }} REPROZIP_USAGE_STATS: "off" REPROZIP_PARAMETERS: https://stats.reprozip.org/parameters/travis/ steps: - uses: actions/checkout@v4 with: fetch-depth: 20 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | if [ -z "${XDG_CACHE_HOME-}" ]; then mkdir -p ~/.cache/reprozip else mkdir -p "$XDG_CACHE_HOME/reprozip" fi case "$TEST_MODE" in tests|coverage|check-images) if [ "$TEST_MODE" = "coverage" ]; then export CFLAGS="-fprofile-arcs -ftest-coverage" fi PKGS="libc6-dev-i386 gcc-multilib libsqlite3-dev" if [ "$TEST_MODE" = "coverage" ]; then PKGS="$PKGS lcov"; fi sudo apt-get update -qq sudo apt-get install -qq $PKGS if [ $TEST_MODE = "coverage" ]; then pip install 'coverage<5' # `--config-settings editable_mode=compat` works around https://github.com/pypa/setuptools/issues/3557 pip install -e ./reprozip -e ./reprounzip -e ./reprounzip-docker -e ./reprounzip-vagrant -e ./reprounzip-vistrails -e ./reprounzip-qt -e ./reprozip-jupyter --config-settings editable_mode=compat else pip install ./reprozip ./reprounzip ./reprounzip-docker ./reprounzip-vagrant ./reprounzip-vistrails ./reprounzip-qt ./reprozip-jupyter fi ;; checks) pip install flake8 readme_renderer ;; *) exit 1 ;; esac - name: Test run: | export LANG=C export LC_ALL=C export REPROZIP_TEST_PYTHON="$(which python) -Wd" case "$TEST_MODE" in coverage) export PYTHONUNBUFFERED=1 export COVER="coverage run --append --source=$PWD/reprozip/reprozip,$PWD/reprounzip/reprounzip,$PWD/reprounzip-docker/reprounzip,$PWD/reprounzip-vagrant/reprounzip,$PWD/reprounzip-vistrails/reprounzip,$PWD/tests --branch" python -Wd -m $COVER -m tests --run-docker ;; tests) export PYTHONUNBUFFERED=1 python -Wd tests --run-docker ;; check-images) python -Wd tests --check-vagrant-images --check-docker-images ;; checks) flake8 --ignore=E731,W503,W504 diff -q reprozip/reprozip/common.py reprounzip/reprounzip/common.py diff -q reprozip/reprozip/utils.py reprounzip/reprounzip/utils.py find reprozip reprounzip reprozip-* reprounzip-* -name '*.py' -or -name '*.sh' -or -name '*.h' -or -name '*.c' | (set +x; while read i; do T=$(file -b --mime "$i") if ! ( echo "$T" | grep -q ascii || echo "$T" | grep -q empty ) ; then echo "$i is not ASCII" exit 1 fi done) find reprozip reprounzip reprozip-* reprounzip-* -name '*.py' -exec sh -c "grep 'logging\\.\\(debug\\|warning\\|critical\\|error\\|info\\)' \"\$@\" && exit 1; exit 0" {} + for pkg in reprozip reprounzip reprozip-* reprounzip-*; do (cd $pkg && python setup.py check -r -s) done ;; *) exit 1 ;; esac - name: Upload coverage if: matrix.mode == 'coverage' run: | # Python if [ -f .coverage ]; then mv .coverage .coverage.orig; fi # FIXME: useless? coverage combine # C # Find the coverage file (in distutils's build directory) OBJDIR=$(dirname "$(find . -name pytracer.gcno | head -n 1)") (cd reprozip/native && lcov --directory ../../$OBJDIR -c -o reprozip.lcov) curl -s -o - https://codecov.io/bash | bash -s - -X gcov test-container: strategy: fail-fast: false matrix: image: - python:2.7 install-python: - false python-cmd: - python include: - image: ubuntu:20.04 install-python: true python-cmd: python3 runs-on: ubuntu-latest container: image: ${{ matrix.image }} options: "--privileged" env: TEST_MODE: tests REPROZIP_USAGE_STATS: "off" REPROZIP_PARAMETERS: https://stats.reprozip.org/parameters/travis/ steps: - uses: actions/checkout@v4 with: fetch-depth: 20 - name: Install Docker client run: | apt-get update apt-get install -yy curl curl -Lo /tmp/docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-23.0.6.tgz tar -xf /tmp/docker.tgz -C /usr/local/bin --strip-components=1 rm /tmp/docker.tgz - name: Install Python if: matrix.install-python == true run: | apt-get install -yy python3 python3-pip - name: Install dependencies run: | if [ -z "${XDG_CACHE_HOME-}" ]; then mkdir -p ~/.cache/reprozip else mkdir -p "$XDG_CACHE_HOME/reprozip" fi apt-get update -qq apt-get install -qq libc6-dev-i386 gcc-multilib libsqlite3-dev cat > pip.constraints.txt <<'EOF' pyelftools<0.30 EOF pip install -c pip.constraints.txt ./reprozip ./reprounzip ./reprounzip-docker ./reprounzip-vagrant ./reprounzip-vistrails ./reprounzip-qt ./reprozip-jupyter - name: Test run: | export LANG=C export LC_ALL=C export REPROZIP_TEST_PYTHON="$(which ${{ matrix.python-cmd }}) -Wd" export PYTHONUNBUFFERED=1 ${{ matrix.python-cmd }} -Wd tests --run-docker ================================================ FILE: .gitignore ================================================ *.py[co] .DS_Store # Packages *.egg *.egg-info dist build eggs parts bin var sdist develop-eggs .installed.cfg lib lib64 # Installer logs pip-log.txt # Unit test / coverage reports .coverage .tox nosetests.xml # Object files *.o *.ko *.obj *.elf # Libraries *.lib *.a # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.i*86 *.x86_64 *.hex # Eclipse PyDev .project .pydevproject # PyCharm .idea # Qt Creator *.config *.creator *.creator.user *.files *.includes # Vagrant .vagrant /tests/vagrant /docs/_build ================================================ FILE: .readthedocs.yaml ================================================ version: 2 build: os: ubuntu-22.04 tools: python: "3.11" sphinx: configuration: docs/conf.py ================================================ FILE: CHANGELOG.md ================================================ Changelog ========= 1.3.2 (2026-01-18) ------------------ (reprozip and reprounzip only) Enhancement: * Don't depend on deprecated Python `pkg_resources` package. Might fix installation errors on some systems, mainly done for downstream packagers 1.3.1 (2025-12-08) ------------------ (reprozip only) Bugfixes: * Fix build on GCC 14 * Remove fixed-size buffer for reaading paths from `/proc` 1.3 (2023-12-07) ---------------- (reprozip and reprounzip only) Enhancements: * Store used UNIX sockets in the trace * Display a warning if the process connect to the systemd socket (https://docs.reprozip.org/s/systemd.html) * Print trace warnings in red (files read then written, systemd socket) * Improve message on interrupt, making clearer what happens if pressing twice * Change "(d)elete" option to "(o)verwrite" in prompt when a trace exists 1.2.1 (2023-02-06) ------------------ (reprounzip and reprounzip-qt only) Bugfixes: * Fix typo in reprounzip, reprounzip-qt: import from reprounzip, not reprozip 1.2 (2023-02-06) ---------------- Bugfixes: * Don't mark symlinks as input files * Fix reprounzip-vagrant not terminating after it says that it can't install packages * Add defense for CVE-2007-4559 * Fix OrderedSet for Python 3.10+ compatibility Enhancements: * Recognize Ruby gems and apps and gather the whole environment * Don't mark Python .pth files as input files * Accept ZIP files in addition to TAR for RPZ files (reprozip doesn't currently create ZIP files) * Handle more Linux system calls: faccessat2, statx, execveat, clone3, openat2, fchownat, fchmodat, accept4, renameat2 1.1 (2021-07-06) ---------------- (reprounzip-vistrails didn't change) Bugfixes: * Fix possible crash reading `docker inspect` output * Fix reprozip-jupyter on more recent Tornado * Fix failure in reprounzip-docker upload if `/bin/sh` is missing * Have `reprounzip directory` execute with the correct interpreter (e.g. packed `ld-linux.so`) * Fix "invalid cross-device link" errors in vagrant download if the destination is not on the same device as the unpacked directory Enhancements: * Add PyQt5 compatibility to reprounzip-qt * reprounzip-docker: Keep ownership of uploaded files * Add a new certificate to download parameters, valid through 2121 (previous expires 2024) * Always show full path of executed files in `reprozip testrun` * Improved merging of pack on top of base image in reprounzip-docker * Made sure the root is a mountpoint in reprounzip-vagrant, as some applications expect it (e.g. Elasticsearch) * Disable unpacker options that won't work in reprounzip-qt (e.g. 'directory' and 'chroot' on non-Linux) 1.0.16 (2019-02-06) ------------------- (reprozip-jupyter and reprounzip-vagrant didn't change) Bugfixes: * Fixed input/output file filter on Python 3 (to omit `.so`, `.pyc` etc files) * Fixed fetching updated parameters on Python 3 (to get the correct Docker and Vagrant base images, a small JSON file is downloaded from reprozip.org) * Fixed `--port` option of reprounzip-docker Enhancements: * Use the [distro](https://distro.readthedocs.io/) module instead of the deprecated `platform.linux_distribution()` function to detect the distribution (the latter will be removed in Python 3.8). * Use dpkg-query to identify Linux packages instead of reading `dpkg/info/*.list` 1.0.15 (2018-07-31) ------------------- (reprounzip-qt only) Bugfixes: * Fixed running command from reprounzip-qt on Windows * Fixed using Jupyter from reprounzip-qt 1.0.14 (2018-07-30) ------------------- (reprozip, reprounzip-qt and reprozip-jupyter only) Bugfixes: * Fixed reprounzip-qt refusing to close when an experiment is still unpacked, even after the user provided confirmation * Fixed reprozip-jupyter on Python 3 * Fixed running gnome-terminal from reprounzip-qt, made it preferred over xterm * Don't duplicate the latest run in the config file when the trace didn't add a run (for example because the command does not exist) Enhancements: * Uniformized logos and icons * Native terminal opened by reprounzip-qt waits for a key after success before closing * Officially support reprounzip-qt and reprozip-jupyter on Python 3 1.0.13 (2018-05-15) ------------------- Bugfixes: * Fix uninitialized return value making some xxx_at() calls abort the trace * Fix some other warnings via static analysis Enhancements: * Show a warning when executing a file that has the set-uid or set-gid bit set, since Linux will not give it its privileges, making it confusing for users why their run failed * Make reprounzip-docker run even without a TTY * Correctly handle experiment returning non-0 in Docker * The C extension now logs through Python's logging facilities ('reprozip' logger) * Collect usage information from reprounzip-qt as well 1.0.12 (2018-03-30) ------------------- (reprozip, reprounzip-qt and reprozip-jupyter only) Bugfixes: * Fix some kernel/libc issuing unrecognized `openat()` calls, resulting in files missing in the trace * Fix `openat()` calls recording read-write as simply write * Fix double-click on .RPZ file 1.0.11 (2017-11-05) ------------------- Bugfixes: * Write timestamp in config with timezone offset * Always fix up PATH on MacOS (to pick up Docker) * Don't have reprounzip-qt choke on MacOS's `-psn_x_xxxx` arguments * Fix "Couldn't find reprounzip command" in the GUI on Windows if installed from the installer and opened a package by double-click Enhancements: * Improve DOT graph layout * Don't silently overwrite output with `reprounzip graph` * Add `--regex-include` to `reprounzip graph` * `reprozip trace` now returns 125 for tracing errors (previously 1), and returns the traced program's exit code otherwise (previously always 0) * Manpages are available 1.0.10 (2017-07-10) ------------------- Bugfixes: * Correctly escape shell commands containing backticks * Overwrite tty prompt works correctly on Python 3 * Fix /proc in vagrant-chroot and chroot having outside mounts * Fix ANSI escapes showing in Qt terminal dialog * Fix reprozip combine crash on Python 3.6 (patch from James Clarke) * Using `graph --packages drop` together with `--json` no longer crashes Enhancements: * New reprozip-jupyter tool to trace and reproduce Jupyter notebooks * reprozip_jupyter can be registered as a Jupyter extension to trace notebooks from the Jupyter web interface * The Qt GUI knows to run packages with reprozip-jupyter if they are notebook environments (kernels) unpacked with Docker (and reprozip-jupyter is installed) * Add `--docker-cmd` to reprounzip-docker to select the Docker command (for example `--docker-cmd="sudo docker"`) * Implement `--expose-port` option for Vagrant and Docker (no need for `--docker-option=-p...`) * Add docker-machine support to GUI (select which machine to use) * Better binaries for MacOS * Automatically register reprounzip-qt to open .RPZ files on Linux * Register ReproUnzip with Windows from installer * Add icon from @heng2j 1.0.9 (2017-01-10) ------------------ Bugfixes: * Fix CentOS Docker image versions * Remove Fedora Docker images, they don't have tar * Do include .pyc files in packages, so reproduction take same code path * Don't use the experiment's resolv.conf file * Fix handling of files opened in read-write mode 1.0.8 (2016-10-07) ------------------ Behavior changes: * No longer default to overwriting trace directories. ReproZip will ask what to do or exit with an error if one of --continue/--overwrite is not provided Bugfixes: * Fix an issue identifying Debian packages when a file's in two packages * Fix Python error `Mixing iteration and read methods would lose data` * Fix reprounzip info showing some numbers as 0 instead of hiding them in non-verbose mode * Another fix to X server IP determination for Docker Enhancements: * New GUI for reprounzip, allowing one to unpack without using the command-line * Add filters to remove some common files types from packed files (.pyc) or detected input files (.py, .so, ...) * Add JSON output format to `reprounzip info` * Allow using the Virtualbox display to reproduce X11-enabled experiments 1.0.7 (2016-08-22) ------------------ Bugfixes: * Correctly show an error message if ptrace is unavailable * Make Docker & Vagrant setup much faster Enhancements: * Add support for RPM-based distributions, in addition to Debian-based 1.0.6 (2016-06-25) ------------------ (reprounzip-vistrails didn't change) Bugfixes: * Fixes error using Docker with `--enable-x11` on Python 3 Enhancements: * `docker run` gets a `--detach` command, to keep the container running (useful for starting servers on remote machines) * Restrictions on upload and download commands have been relaxed, in particular it is possible to download input files as well as output files * Don't compress outer tar (data is still compressed); this should make some operations (like `reprounzip info`) faster * Add `reprozip combine`, useful to combine multiple traces into one (as different runs). Handy if running distributed experiments on shared filesystem (MPI) 1.0.5 (2016-04-07) ------------------ (reprounzip-vagrant didn't change) Bugfixes: * Correctly download parameters from server * More reliable way of determining X server IP without using /bin/ip 1.0.4 (2016-03-10) ------------------ Behavior changes: * reprounzip will no longer run on Python 2.6 Bugfixes: * Fixes file download not using cache if URL is HTTPS * Fixes unpacking with directory or chroot for some multi-step packages Features: * Add `--docker-option` to pass raw options to Docker * You can use `run` or `run -` to run every run, regardless of their number * Allow `download `, shortcut for `download :./` (downloads to current directory, keep name) * Allow `download --all` * Add `--input` and `--output` to showfiles * Implement `vagrant suspend` command * Do file downloads with [requests](http://python-requests.org/) * Download a parameter file to update URLs and image names without waiting for the next ReproZip version 1.0.3 (2015-12-02) ------------------ Bugfixes: * You could get a traceback with some unpackers (not Vagrant) on some packages that explicitely pack the / directory * Some environment variables prevented running, such as bash exported functions. Features: * Remove setup directory if setup fails, so you can run setup again without gettin `target directory exists` * Add `--set-env` and `--pass-env` to run 1.0.2 (2015-10-26) ------------------ Bugfixes: * You can now use X11 forwarding even with a remote Docker daemon * reprounzip-vagrant now works in paths containing spaces 1.0.1 (2015-10-12) ------------------ Bugfixes: * Files opened through a shebang were stored with a wrong process number * Running with Docker on non-Linux machine didn't work (e.g. docker-machine); now only X11 doesn't work. * Some fixes to the graph command Features: * `--memory` option for `reprounzip vagrant setup`, to set the VM's RAM. 1.0.0 (2015-09-30) ------------------ Behavior change: * .rpz pack format changed (version 1 -> 2). Pack is now uncompressed, data is in a nested TGZ archive; allows faster retrieval of metadata (config & trace). * reprozip trace warnings are now info messages; won't show up without -v Bugfixes: * After restarting a Vagrant machine, /dev and /proc wouldn't be mounted anymore * Files or links referenced in a shebang could be missed by the tracer Features: * Runs in the configuration file now have an 'id' field, that will be shown by 'reprounzip info' and can be selected when running * Reworked `reprounzip graph`: level of details, regex filters & replace, JSON output * Added *run* argument to `reprounzip showfiles`, to show inputs & outputs of a single run 0.7.2 (2015-08-24) ------------------ Behavior change: * reprounzip-docker will now re-use the resulting image from the previous run when running again, instead of starting from scratch; a 'reset' command has been added to undo runs and uploads. Bugfixes: * Couldn't reset an input file to the original (packed) file on Python 3 * Don't show a warning about network connections when they didn't succeed * Hide traceback when failing because Vagrant is not installed * Fix input/output file detection assigning files to the same run * Fix selecting multiple runs in 'docker run' Features: * Display the relative portion of the path when unhandled xxx_at() syscalls are used, to give an idea of what's been missed * Add --dont-find-inputs-outputs to reprozip trace and reset, so you can clear that out if too many files would be selected (or if you don't use the feature) * Rewrote reprounzip-vistrails plugin; uses a proper VisTrails package that now lives in the VisTrails distribution. * Check pack format in unpackers; won't try to unpack version 2 * It is now possible to select multiple runs with `unpackername run 1-4` 0.7.1 (2015-07-14) ------------------ (reprozip only) Bugfixes: * Files (or links) created with rename, link or symlink then read will no longer be packed. * A buffer overflow could happen in the log module, for instance when the experiment passes a very long argument to execve (over 4kB in a single argument) and running in debug mode (-v -v) 0.7 (2015-07-07) ---------------- Behavior change: * No longer accept passing `-v` after the subcommand; use `reprozip -v testrun ...`, not `reprozip testrun -v`. * Rely on `PTHREAD_EVENT_EXEC` to handle `execve()`. Makes tracing more reliable, and enable it to behave correctly on weird kernels (like UML). * Rely on `PTRACE_EVENT_FORK` to handle `fork`/`vfork`/`clone`. Fixes vfork() deadlocking under trace. * Completely changed the structure of input and output files (old packs will still be loaded, but new packs are not retro-compatible). * Using one of the `run` commands without specifying a number will no longer default to running all of them; it will error out if there are multiple runs. Bugfixes: * Fix insertion speed in SQLite3 database Features: * Makes VMs (Vagrant or Docker) more resilient to massive breakage of system libraries (obliterating /lib or /usr, when using very different operating systems) by putting busybox in / and using [rpzsudo](https://github.com/remram44/static-sudo). * No longer use `dpkg -S` to identify packages, do a single pass over internal dpkg database (this is considerably faster). 0.6.4 (2015-06-07) ------------------ (reprounzip-vistrails didn't change) Bugfixes: * Tracer: correctly handle `chdir()` in multi-threaded processes * Fix leaked file descriptors, eventually making SQLite3 fail * No longer exceed cmdline length in Dockerfile in big .RPZ pack * Fixes `check_output` call when running Docker (not available in Python 2.6) * Fixes installation of `sudo` failing if original machine wasn't Debian * Don't make TAR error status fatal in Dockerfile (might not run; this is needed because Docker mount some files in the container that can't be overwritten) 0.6.3 (2015-05-06) ------------------ (reprounzip and plugins only) Bugfixes: * Fixes reprounzip-vistrails failing because of reporting * Fixes reprounzip-vistrails not escaping correctly in XML in some conditions * Fixes docker run failing to read Docker's JSON output on Python 3 * Fixes reprounzip chroot mounting too many filesystems * Fixes typo stopping reprounzip from running on unsupported distribs Features: * Adds Debian 8 'Jessie' to Vagrant boxes & Docker images * Adds Ubuntu 15.04 'Vivid' to Vagrant boxes & Docker images 0.6.2 (2015-03-16) ------------------ (reprozip only) Bugfixes: * Fixes installation on Python 3 with 7-bit locale * Fixes reprozip not showing traceback on exception * Fixes bug with multiple runs (`trace --continue`) 0.6.1 (2015-02-17) ------------------ (reprozip only) Bugfixes: * Fixes an overflow in _pytracer for some syscalls. 0.6 (2015-02-11) ---------------- (reprounzip-vistrails didn't change) Bugfixes: * Fixes `debug` log messages not being printed * Pressing Ctrl+C wouldn't stop package identification with KeyboardInterrupt * Fixes an error message while destroying a docker experiment * Fixes docker not installing packages if they were packed * Fixes docker always reporting exit status 0 Features: * Adds `--install-pkgs` options to `docker setup`, to prefer installing from package manager over unpacking the packed files * With vagrant or docker, original machine hostname is restored * X11 support for chroot, vagrant and docker unpackers 0.5.1 (2014-12-18) ------------------ (reprounzip-vistrails didn't change) Bugfixes: * Goes back to pack format 0.4: generates `.rpz` files readable by older reprounzip versions * Fixes experiment not having a PTY in some conditions * Rewrite absolute paths on command-line for directory unpacker Features: * Python 2.6 support for reprounzip (except 'graph') * Makes error messages more readable * Default trace directory renamed from `.reprozip` to `.reprozip-trace` * Adds a log file under $HOME/.reprozip/log * reprounzip-vagrant will use 'ssh' executable if it's available; should be more reliable, especially on Windows * Automatically collects usage information. Nothing will be sent before you opt-in, and we made sure to only collect general details 0.5 (2014-11-24) ---------------- Features: * All reprounzip plugins can be installed with `pip install reprounzip[all]` * Various improvements to interactive vagrant console * Adds support for generic plugins (alongside unpackers) * Adds reprounzip-vistrails plugin * Pressing Ctrl+C while tracing won't abort anymore; press it twice for SIGKILL 0.4.1 (2014-10-06) ------------------ Bugfixes: * reprounzip showed duplicated logging messages * Makes 'run' commands not fail if the command returns an error code * Unicode issues with Vagrant on Windows Python 3 * Warning for files read then written didn't show the filenames * Fixes resetted input files breaking 'showfiles' Features: * 'docker upload' command * Adds signals (currently unused, needed for future plugins) 0.4 (2014-09-15) ---------------- Bugfixes: * Copying files from host to chroot when some packages where not packed * Don't use the full command path in directory's script * Fixes socketcall() handling Features: * Displays a warning for READ_THEN_WRITTEN files * chroot restores files' owner/group * Adds 'reprounzip info' command * Better error messages when trying to unpack on incompatible system * Identifies input files, which can be replaced ('upload' operation) * Identifies output files, which can be retrieved ('download' operation) * New command-line interface for unpackers, with setup/run/destroy; you can now do everything through reprounzip * Vagrant now defaults to --use-chroot`, added --no-use-chroot * Adds --summary and --missing to installpkgs * Adds Docker unpacker (no uploading support yet) 0.3.2 (2014-08-28) ------------------ (reprounzip only) Bugfixes: * Once busybox was in the local cache, setting it up could crash * 'script.sh' files were not set as executable 0.3.1 (2014-08-26) ------------------ (reprozip only) Bugfixes: * Don't crash when packing an experiment that wrote in temporary directories 0.3 (2014-07-28) ---------------- Bugfixes: * Handles Linux changing thread id to thread leader's on `execve()` * Correctly handles processes dying from signals (e.g. SEGV) * Fixes case of rt_sigreturn Features: * Database stores `is_directory` field * Handles `mkdir()`, `symlink()` * Forces pack to have a `.rpz` extension * Displays a warning when the process uses `connect()` or `accept()` * Improved logging * Handles i386 compatibility mode on x86_64 * Handles *at() variants of system calls with AT_FDCWD 0.2.1 (2014-07-11) ------------------ Bugfixes: * 'pack' no longer stop if a file is missing * Do not attempt to pack files from /proc or /dev * Stops vagrant without --use-chroot from overwriting files * Downloads busybox instead of using the host's /bin/sh * Correctly packs the dynamic linkers from the original machine * The tracer no longer considers `execve()` to always happen before other accesses * Fixes pytracer forking the Python process if the executable cannot be found * Improves signal handling (but bugs might still exist with `SIGSTOP`) * Fixes a bug if a process resumed before its creator (race condition) Features: * -v flag also controls C tracer's verbosity * Detects (but doesn't handle yet) i386 compatibility and x32 mode on x86_64 * Stores working directories and exit codes of all processes in database * Added `reprozip reset [-d dir]` to reset the configuration file from the database 0.2 (2014-06-18) ---------------- First version of the rewritten ReproZip, that uses ptrace. Basic functionality. 0.1 (2013-06-25) ---------------- SystemTap-based version of ReproZip. ================================================ FILE: CITATION.cff ================================================ cff-version: 1.2.0 message: If you use this software, please cite it as below. authors: - family-names: Rampin given-names: Remi affiliation: New York University orcid: https://orcid.org/0000-0002-0524-2282 website: https://remi.rampin.org/ - family-names: Freire given-names: Juliana affiliation: New York University orcid: https://orcid.org/0000-0003-3915-7075 website: https://vgc.poly.edu/~juliana/ - family-names: Chirigati given-names: Fernando affiliation: New York University orcid: https://orcid.org/0000-0002-9566-5835 website: http://fchirigati.com/ - family-names: Shasha given-names: Dennis affiliation: New York University orcid: https://orcid.org/0000-0002-7036-3312 website: http://cs.nyu.edu/shasha/ - family-names: Rampin given-names: Vicky affiliation: New York University orcid: https://orcid.org/0000-0003-4298-168X website: https://vicky.rampin.org/ license: BSD-3-Clause url: https://www.reprozip.org/ repository-code: https://github.com/VIDA-NYU/reprozip title: ReproZip abstract: | ReproZip is a tool aimed at simplifying the process of creating reproducible experiments from command-line executions, a frequently-used common denominator in computational science. It tracks operating system calls and creates a package that contains all the binaries, files and dependencies required to run a given command on the author's computational environment (packing step). keywords: [python, linux, docker, reproducibility, provenance, reproducible-research, reproducible-science] references: - type: proceedings doi: 10.1145/2882903.2899401 conference: name: "SIGMOD '16" website: https://www.sigmod2016.org/ city: San Francisco country: US authors: - family-names: Rampin given-names: Remi affiliation: New York University orcid: https://orcid.org/0000-0002-0524-2282 website: https://remi.rampin.org/ - family-names: Freire given-names: Juliana affiliation: New York University orcid: https://orcid.org/0000-0003-3915-7075 website: https://vgc.poly.edu/~juliana/ - family-names: Chirigati given-names: Fernando affiliation: New York University orcid: https://orcid.org/0000-0002-9566-5835 website: http://fchirigati.com/ - family-names: Shasha given-names: Dennis affiliation: New York University orcid: https://orcid.org/0000-0002-7036-3312 website: http://cs.nyu.edu/shasha/ date-published: 2016-06-26 year: 2016 month: 6 title: "ReproZip: Computational Reproducibility With Ease" abstract: | We present ReproZip, the recommended packaging tool for the SIGMOD Reproducibility Review. ReproZip was designed to simplify the process of making an existing computational experiment reproducible across platforms, even when the experiment was put together without reproducibility in mind. The tool creates a self-contained package for an experiment by automatically tracking and identifying all its required dependencies. The researcher can share the package with others, who can then use ReproZip to unpack the experiment, reproduce the findings on their favorite operating system, as well as modify the original experiment for reuse in new research, all with little effort. The demo will consist of examples of non-trivial experiments, showing how these can be packed in a Linux machine and reproduced on different machines and operating systems. Demo visitors will also be able to pack and reproduce their own experiments. - type: proceedings doi: 10.21105/joss.00107 journal: Journal of Open Source Software authors: - family-names: Rampin given-names: Remi affiliation: New York University orcid: https://orcid.org/0000-0002-0524-2282 website: https://remi.rampin.org/ - family-names: Freire given-names: Juliana affiliation: New York University orcid: https://orcid.org/0000-0003-3915-7075 website: https://vgc.poly.edu/~juliana/ - family-names: Chirigati given-names: Fernando affiliation: New York University orcid: https://orcid.org/0000-0002-9566-5835 website: http://fchirigati.com/ - family-names: Shasha given-names: Dennis affiliation: New York University orcid: https://orcid.org/0000-0002-7036-3312 website: http://cs.nyu.edu/shasha/ - family-names: Rampin given-names: Vicky affiliation: New York University orcid: https://orcid.org/0000-0003-4298-168X website: https://vicky.rampin.org/ date-published: 2016-12-01 year: 2016 month: 12 title: "ReproZip: The Reproducibility Packer" preferred-citation: type: proceedings doi: 10.1145/2882903.2899401 conference: name: "SIGMOD '16" website: https://www.sigmod2016.org/ city: San Francisco country: US authors: - family-names: Rampin given-names: Remi affiliation: New York University orcid: https://orcid.org/0000-0002-0524-2282 website: https://remi.rampin.org/ - family-names: Freire given-names: Juliana affiliation: New York University orcid: https://orcid.org/0000-0003-3915-7075 website: https://vgc.poly.edu/~juliana/ - family-names: Chirigati given-names: Fernando affiliation: New York University orcid: https://orcid.org/0000-0002-9566-5835 website: http://fchirigati.com/ - family-names: Shasha given-names: Dennis affiliation: New York University orcid: https://orcid.org/0000-0002-7036-3312 website: http://cs.nyu.edu/shasha/ date-published: 2016-06-26 year: 2016 month: 6 title: "ReproZip: Computational Reproducibility With Ease" abstract: | We present ReproZip, the recommended packaging tool for the SIGMOD Reproducibility Review. ReproZip was designed to simplify the process of making an existing computational experiment reproducible across platforms, even when the experiment was put together without reproducibility in mind. The tool creates a self-contained package for an experiment by automatically tracking and identifying all its required dependencies. The researcher can share the package with others, who can then use ReproZip to unpack the experiment, reproduce the findings on their favorite operating system, as well as modify the original experiment for reuse in new research, all with little effort. The demo will consist of examples of non-trivial experiments, showing how these can be packed in a Linux machine and reproduced on different machines and operating systems. Demo visitors will also be able to pack and reproduce their own experiments. version: "1.1" date-released: 2021-07-06 doi: 10.5281/zenodo.5081097 ================================================ FILE: CITATION.txt ================================================ To reference ReproZip in publications, please cite the following: ReproZip: Computational Reproducibility With Ease, F. Chirigati, R. Rampin, D. Shasha, and J. Freire. In Proceedings of the 2016 ACM SIGMOD International Conference on Management of Data (SIGMOD), pp. 2085-2088, 2016 BibTeX: @inproceedings{ChirigatiRSF16, title = {ReproZip: Computational Reproducibility With Ease}, author = {Chirigati, Fernando and Rampin, R{\'e}mi and Shasha, Dennis and Freire, Juliana}, year = {2016}, isbn = {978-1-4503-3531-7}, location = {San Francisco, California, USA}, doi = {10.1145/2882903.2899401}, booktitle = {Proceedings of the 2016 International Conference on Management of Data}, series = {SIGMOD '16}, pages = {2085--2088}, numpages = {4}, publisher = {ACM}, keywords = {computational reproducibility, provenance, reprozip}, } ================================================ FILE: CONTRIBUTING.md ================================================ # Contents * [Notes](#notes) * [Contributing](#contributing) * [Resolving Merge Conflicts](#resolving-merge-conflicts) * [Best Practices for Contributing](#best-practices-for-contributing) * [Attribution](#attribution) # Notes Any contributions received are assumed to be covered by the BSD 3-Clause license. We might ask you to sign a Contributor License Agreement before accepting a larger contribution. To learn more about ReproZip, see: * [ReproZip Examples](https://examples.reprozip.org/) * [ReproZip Documentation](https://docs.reprozip.org/) * [ReproZip Demo Video](https://www.youtube.com/watch?v=-zLPuwCHXo0) # Contributing Please follow the [GitHub Community Guidelines](https://docs.github.com/en/github/site-policy/github-community-guidelines) in all your interactions with the project. If you would like to contribute to this project by modifying/adding to the code, please read the [Best Practices for Contributing](#best-practices-for-contributing) below and feel free to follow the standard GitHub workflow: 1. Fork the project. 2. Clone your fork to your computer. * From the command line: `git clone https://github.com//reprozip.git` 3. Change into your new project folder. * From the command line: `cd reprozip` 4. [optional] Add the upstream repository to your list of remotes. * From the command line: `git remote add upstream https://github.com/ViDA-NYU/reprozip.git` 5. Create a branch for your new feature. * From the command line: `git checkout -b my-feature-branch-name` 6. Make your changes. * Avoid making changes to more files than necessary for your feature (i.e. refrain from combining your "real" pull request with incidental bug fixes). This will simplify the merging process and make your changes clearer. 7. Commit your changes. From the command line: * `git add ` * `git commit -m "A descriptive commit message"` 8. While you were working some other changes might have gone in and break your stuff or vice versa. This can be a *merge conflict* but also conflicting behavior or code. Before you test, merge with upstream. * `git fetch upstream` * `git merge upstream/1.x` 9. Test. Run the program and do something related to your feature/fix. 10. Push the branch, uploading it to GitHub. * `git push origin my-feature-branch-name` 11. Make a "Pull Request" from your branch here on GitHub. # Resolving Merge Conflicts Depending on the order that Pull Requests get processed, your PR may result in a conflict and become un-mergable. To correct this, do the following from the command line: Switch to your branch: `git checkout my-feature-branch-name` Pull in the latest upstream changes: `git pull upstream 1.x` Find out what files have a conflict: `git status` Edit the conflicting file(s) and look for a block that looks like this: ``` <<<<<<< HEAD my awesome change ======= some other person's less awesome change >>>>>>> some-branch ``` Replace all five (or more) lines with the correct version (yours, theirs, or a combination of the two). ONLY the correct content should remain (none of that `<<<<< HEAD` stuff.) Then re-commit and re-push the file. ``` git add the-changed-file.cs git commit -m "Resolved conflict between this and PR #123" git push origin my-feature-branch-name ``` The pull request should automatically update to reflect your changes. ## Best Practices for Contributing * Before you start coding, open an issue so that the community can discuss your change to ensure it is in line with the goals of the project and not being worked on by someone else. This allows for discussion and fine tuning of your feature and results in a more succent and focused additions. * If you are fixing a small glitch or bug, you may make a PR without opening an issue. * If you are adding a large feature, create an issue so that we may give you feedback and agree on what makes the most sense for the project before making your change and submitting a PR (this will make sure you don't have to do major changes down the line). * Pull Requests are eventually merged into the codebase. Please ensure they are: * Well tested by the author. It is the author's job to ensure their code works as expected. * Free of unnecessary log calls. Logging important for debugging, but when a PR is made, log calls should only be present when there is an actual error or to record some important piece of information or progress. * If your code is untested, log heavy, or incomplete, prefix your PR with "[WIP]", so others know it is still being tested and shouldn't be considered for merging yet. This way we can still give you feedback or help finalize the feature even if it's not ready for prime time. That's it! Following these guidelines will ensure that your additions are approved quickly and integrated into the project. Thanks for your contribution! # Attribution This CONTRIBUTING.md was adapted from [ProjectPorcupine's](https://github.com/TeamPorcupine/ProjectPorcupine)'s [CONTRIBUTING.md](https://github.com/TeamPorcupine/ProjectPorcupine/blob/master/CONTRIBUTING.md) # Contact info You are welcome to [subscribe to](https://groups.google.com/a/nyu.edu/g/reprozip) or contact our user mailing list [reprozip@nyu.edu](mailto:reprozip@nyu.edu) for questions, suggestions and discussions about using ReproZip. ================================================ FILE: LICENSE.txt ================================================ Copyright (C) 2014, New York University All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================ [![Build Status](https://github.com/VIDA-NYU/reprozip/workflows/Test/badge.svg)](https://github.com/VIDA-NYU/reprozip/actions) [![Coverage Status](https://codecov.io/github/VIDA-NYU/reprozip/coverage.svg?branch=1.x)](https://codecov.io/github/VIDA-NYU/reprozip?branch=1.x) [![Documentation Status](https://readthedocs.org/projects/reprozip/badge/?version=1.x)](https://docs.reprozip.org/en/1.x/) [![Matrix](https://img.shields.io/badge/chat-matrix.org-blue.svg)](https://riot.im/app/#/room/#reprozip:matrix.org) [![paper](https://img.shields.io/badge/JOSS-10.21105%2Fjoss.00107-green.svg)](http://joss.theoj.org/papers/b578b171263c73f64dfb9d040ca80fe0) [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.10291844-green.svg)](https://doi.org/10.5281/zenodo.10291844) ReproZip ======== [ReproZip][web] is a tool aimed at simplifying the process of creating reproducible experiments from command-line executions, a frequently-used common denominator in computational science. It tracks operating system calls and creates a package that contains all the binaries, files and dependencies required to run a given command on the author's computational environment (packing step). A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step). Quickstart ---------- We have an [example repository](https://github.com/VIDA-NYU/reprozip-examples) with a variety of different software. Don't hesitate to check it out, and contribute your own example if use ReproZip for something new! ### Packing Packing experiments is only available for Linux distributions. In the environment where the experiment is originally executed, first install reprozip: $ pip install reprozip Then, run your experiment with reprozip. Suppose you execute your experiment by originally running the following command: $ ./myexperiment -my --options inputs/somefile.csv other_file_here.bin To run it with reprozip, you just need to use the prefix *reprozip trace*: $ reprozip trace ./myexperiment -my --options inputs/somefile.csv other_file_here.bin This command creates a *.reprozip-trace* directory, in which you'll find the configuration file, named *config.yml*. You can edit the command line and environment variables, and choose which files to pack. If you are using Debian or Ubuntu, most of these files (library dependencies) are organized by package. You can add or remove files, or choose not to include a package by changing option *packfiles* from true to false. In this way, smaller packs can be created with reprozip (if space is an issue), and reprounzip can download these files from the package manager; however, note this is only available for Debian and Ubuntu for now, and also be aware that package versions might differ. Choosing which files to pack is also important to remove sensitive information and third-party software that is not open source and should not be distributed. Once done editing the configuration file (or even if you did not change anything), run the following command to create a ReproZip package named *my_experiment*: $ reprozip pack my_experiment.rpz Voilà! Now your experiment has been packed, and you can send it to your collaborators, reviewers, and researchers around the world! Note that you can open the help message for any reprozip command by using the flag *-h*. ### Unpacking Do you need to unpack an experiment in a Linux machine? Easy! First, install reprounzip: $ pip install reprounzip Then, if you want to unpack everything in a single directory named *mydirectory* and execute the experiment from there, use the prefix *reprounzip directory*: $ reprounzip directory setup my_experiment.rpz mydirectory $ reprounzip directory run mydirectory In case you prefer to build a chroot environment under *mychroot*, use the prefix *reprounzip chroot*: $ reprounzip chroot setup my_experiment.rpz mychroot $ reprounzip chroot run mychroot Note that the previous options do not interfere with the original configuration of the environment, so don't worry! If you are using Debian or Ubuntu, reprounzip also has an option to install all the library dependencies directly on the machine using package managers (rather than just copying the files from the .rpz package). Be aware that this will interfere in your environment and it may update your library packages, so use it at your own risk! For this option, just use the prefix *reprounzip installpkgs*: $ reprounzip installpkgs my_experiment.rpz What if you want to reproduce the experiment in Windows or Mac OS X? You can build a virtual machine with the experiment! Easy as well! First, install the plugin reprounzip-vagrant: $ pip install reprounzip-vagrant Note that (i) you must install reprounzip first, and (ii) the plugin requires having [Vagrant][vagrant] installed. Then, use the prefix *reprounzip vagrant* to create and start a virtual machine under directory *mytemplate*: $ reprounzip vagrant setup my_experiment.rpz mytemplate To execute the experiment, simply run: $ reprounzip vagrant run mytemplate Alternatively, you may use [Docker][docker] containers to reproduce the experiment, which also works under Linux, Mac OS X, and Windows! First, install the plugin reprounzip-docker: $ pip install reprounzip-docker Then, assuming that you want to create the container under directory *mytemplate*, simply use the prefix *reprounzip docker*: $ reprounzip docker setup my_experiment.rpz mytemplate $ reprounzip docker run mytemplate Remember that you can open the help message and learn more about other available flags and options by using the flag *-h* for any reprounzip command. Citing ReproZip --------------- Please use the following when citing ReproZip ([BibTeX](CITATION.txt)): ReproZip: Computational Reproducibility With Ease F. Chirigati, R. Rampin, D. Shasha, and J. Freire. In Proceedings of the 2016 ACM SIGMOD International Conference on Management of Data (SIGMOD), pp. 2085-2088, 2016 Contribute ---------- Please subscribe to and contact the [reprozip@nyu.edu](https://groups.google.com/a/nyu.edu/g/reprozip) mailing list for questions, suggestions and discussions about using reprozip. Bugs and feature plannings are tracked in the [GitHub issues](https://github.com/VIDA-NYU/reprozip/issues). Feel free to add an issue! To suggest changes to this source code, feel free to raise a [GitHub pull request](https://github.com/VIDA-NYU/reprozip/pulls). Any contributions received are assumed to be covered by the [BSD 3-Clause license](LICENSE.txt). We might ask you to sign a _Contributor License Agreement_ before accepting a larger contribution. License ------- * Copyright (C) 2014, New York University Licensed under a **BSD 3-Clause license**. See the file [LICENSE.txt](LICENSE.txt) for details. Links and References -------------------- For more detailed information, please refer to our [website][web], as well as to our [documentation][docs]. ReproZip is currently being developed at [NYU][nyu]. The team includes: * [Fernando Chirigati][fc] * [Juliana Freire][jf] * [Rémi Rampin][rr] * [Dennis Shasha][ds] * [Vicky Rampin][vr] [vagrant]: https://www.vagrantup.com/ [docker]: https://www.docker.com/ [docs]: https://docs.reprozip.org/ [web]: https://www.reprozip.org/ [pz]: https://pypi.python.org/pypi/reprozip [puz]: https://pypi.python.org/pypi/reprounzip [puzd]: https://pypi.python.org/pypi/reprounzip-docker [puzv]: https://pypi.python.org/pypi/reprounzip-vagrant [fc]: http://fchirigati.com/ [jf]: https://vgc.poly.edu/~juliana/ [rr]: https://remi.rampin.org/ [ds]: http://cs.nyu.edu/shasha/ [vr]: https://vicky.rampin.org/ [nyu]: http://engineering.nyu.edu/ ================================================ FILE: Vagrantfile ================================================ # -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provision "shell", inline: <