Commit 8dd841b4 authored by Ludovic Courtès's avatar Ludovic Courtès
Browse files

Initial commit.

[_Storage Tradeoffs in a Collaborative Backup Service for Mobile Devices_]( redone
This repository contains code to deploy and run the software and file
sets used to perform the evaluations that appear in [_Storage Tradeoffs
in a Collaborative Backup Service for Mobile
Devices_](, published at the
[European Dependable Computing Conference
[2006](, as part of the
[“Ten Year Reproducibility
To build and run the evaluation, install
[GNU Guix]( and type:
guix time-machine -C channels.scm -- build -f guix.scm
This is work in progress!
;; This file lists channels that GNU Guix should pull in order to be able to
;; deploy all the software 'guix.scm' refers to.
(list (channel
(name 'guix-past)
(url "")
(commit "e8cd40fbfc096fdd6d2068442ab91d80894e19d3"))
(name 'guix)
(url "")
(commit "6e27d1088da07380872f0df9f308b674536cefc8")))
;;; Copyright © 2020 Ludovic Courtès <>
;;; This program is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;; This program is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; GNU General Public License for more details.
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <>.
;; This file contains code to deploy and run the libchop algorithm
;; evaluation. Run with:
;; guix build -f guix.scm
(use-modules (guix) (gnu)
(guix git-download)
(gnu packages guile)
(past packages backup)
(srfi srfi-1)
(ice-9 match))
;;; File sets.
(define file-set/gnu-manuals
;; The "gnu-manuals" file set.
(let ((commit "9572cc2870e597f6323cc544d85929b3f14fb4bb"))
(method git-fetch)
(uri (git-reference
(url "")
(commit commit)))
(file-name (string-append "file-sets-" (string-take commit 7)))
(define file-set-cache
;; Cache for use as ~/.chop-eval/cache/web.
(computed-file "file-set-cache"
(with-imported-modules '((guix build utils))
(use-modules (guix build utils))
(for-each (lambda (file)
(install-file file #$output))
(find-files #$file-set/gnu-manuals
;;; Evaluation.
(define chop-eval
;; Scripts to perform the evaluation shown in the paper.
(let ((commit "b8aac089e164c39bcc5b8cd97b96c5aaabf597ba")) ;13 Apr. 2006
(method git-fetch)
(uri (git-reference
(url "")
(commit commit)))
(file-name (string-append "chop-eval-" (string-take commit 7)))
(define libchop&co
;; Libchop and its propagated inputs
(append-map (lambda (package)
(cons package
(match (package-transitive-propagated-inputs package)
(((labels packages) ...)
(list libchop/guile-1.8)))
(define evaluation
;; The actual evaluation.
(let ()
(define build
(with-imported-modules '((guix build utils))
(use-modules (guix build utils))
(string-join '(#$@libchop&co) "/share/guile/site:"
(setenv "PATH"
(string-join (list #$guile-1.8
#$(specification->package "coreutils")
#$(specification->package "bash")
#$(specification->package "gzip"))
"/bin:" 'suffix))
;; Provide a valid shebang for the scripts.
(copy-recursively #$chop-eval ".")
(for-each patch-shebang
'("" "chop-eval.scm"))
;; Allow the local Guile modules to be found.
(string-append (getcwd) "/module:"
(getenv "GUILE_LOAD_PATH")))
(mkdir #$output)
;; Make the file sets available in the local "cache". It must be
;; copied because (chop utils cache) attempts to link(2) to it.
(setenv "HOME" (getcwd))
(copy-recursively #$file-set-cache
;; FIXME: For now, limit to that one file set.
(substitute* ""
(invoke "./"))))
(computed-file "evaluation" build)))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment