[ARVADOS] created: 95a519e20d1900f6f60a66b2e34afa08de1dd335

Git user git at public.curoverse.com
Tue Mar 8 16:40:44 EST 2016


        at  95a519e20d1900f6f60a66b2e34afa08de1dd335 (commit)


commit 95a519e20d1900f6f60a66b2e34afa08de1dd335
Author: Tom Clegg <tom at curoverse.com>
Date:   Tue Mar 8 16:40:22 2016 -0500

    8345: Pin llfuse to <1.0

diff --git a/services/fuse/setup.py b/services/fuse/setup.py
index 0c2a4cc..8eed573 100644
--- a/services/fuse/setup.py
+++ b/services/fuse/setup.py
@@ -33,7 +33,7 @@ setup(name='arvados_fuse',
       ],
       install_requires=[
         'arvados-python-client >= 0.1.20151118035730',
-        'llfuse>=0.42.1',
+        'llfuse >= 0.42.1, < 1.0',
         'python-daemon',
         'ciso8601'
         ],

commit cb2b22b2f7ae63a6c1c53d70b0830c25283126c7
Author: Tom Clegg <tom at curoverse.com>
Date:   Tue Mar 8 16:39:59 2016 -0500

    8491: Avoid installing an activesupport gem that is too new for our ruby.

diff --git a/build/run-tests.sh b/build/run-tests.sh
index a17d610..fd64fe3 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -464,6 +464,12 @@ then
     gem install --user-install bundler || fatal 'Could not install bundler'
 fi
 
+# activesupport>=5.0.0 requires ruby 2.2.2.  This ensures we test with
+# a version that will actually work with the ruby we're using to run
+# tests, without pinning the ruby sdk package itself to older
+# versions.
+gem install --user-install activesupport -v '<5.0.0' || fatal 'activesupport'
+
 checkexit() {
     if [[ "$1" != "0" ]]; then
         title "!!!!!! $2 FAILED !!!!!!"

commit 9309fbb402407af5250bbf6df7fdbece8d16ed5d
Author: Tom Clegg <tom at curoverse.com>
Date:   Tue Mar 8 16:37:42 2016 -0500

    8491: move files from arvados-dev into their new places

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..c92213f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+export WORKSPACE?=$(shell pwd)
+test:
+	build/run-tests.sh
+packages:
+	build/run-build-packages-all-targets.sh
+test-packages:
+	build/run-build-packages-all-targets.sh --test-packages
diff --git a/build/COPYING b/build/COPYING
deleted file mode 100644
index af63e41..0000000
--- a/build/COPYING
+++ /dev/null
@@ -1,2 +0,0 @@
-This code is licenced under the GNU Affero General Public License version 3
-(see agpl-3.0.txt)
diff --git a/build/README b/build/README
deleted file mode 100644
index b076f0b..0000000
--- a/build/README
+++ /dev/null
@@ -1,30 +0,0 @@
-Welcome to Arvados!
-
-This is the arvados-dev source tree. It contains scripts that can be useful
-if you want to hack on Arvados itself.
-
-If you are interested in using Arvados or setting up your own Arvados
-installation, you most likely do not need this source tree.
-
-For the Arvados source code, check out the git repository at
-  https://github.com/curoverse/arvados
-
-The main Arvados web site is 
-  https://arvados.org
-
-The Arvados public wiki is located at 
-  https://arvados.org/projects/arvados/wiki
-
-The Arvados public bug tracker is located at 
-  https://arvados.org/projects/arvados/issues
-
-For support see 
-  http://doc.arvados.org/user/getting_started/community.html
-
-Installation documentation is located at 
-  http://doc.arvados.org/install
-
-If you wish to build the documentation yourself, follow the instructions in
-doc/README to build the documentation, then consult the "Install Guide".
-
-See COPYING for information about Arvados Free Software licenses.
diff --git a/build/agpl-3.0.txt b/build/agpl-3.0.txt
deleted file mode 100644
index dba13ed..0000000
--- a/build/agpl-3.0.txt
+++ /dev/null
@@ -1,661 +0,0 @@
-                    GNU AFFERO GENERAL PUBLIC LICENSE
-                       Version 3, 19 November 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-our General Public Licenses are intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
-  A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate.  Many developers of free software are heartened and
-encouraged by the resulting cooperation.  However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
-  The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community.  It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server.  Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
-  An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals.  This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU Affero General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Remote Network Interaction; Use with the GNU General Public License.
-
-  Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software.  This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero General Public License from time to time.  Such new versions
-will be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU Affero General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Affero 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
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Affero General Public License for more details.
-
-    You should have received a copy of the GNU Affero General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source.  For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code.  There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU AGPL, see
-<http://www.gnu.org/licenses/>.
diff --git a/build/jenkins/create-plot-data-from-log.sh b/build/create-plot-data-from-log.sh
similarity index 100%
rename from build/jenkins/create-plot-data-from-log.sh
rename to build/create-plot-data-from-log.sh
diff --git a/build/git/hooks/coding-standards.sh b/build/git/hooks/coding-standards.sh
deleted file mode 100755
index d4e4c71..0000000
--- a/build/git/hooks/coding-standards.sh
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env ruby
-
-# This script can be installed as a git update hook.
-
-# It can also be installed as a gitolite 'hooklet' in the
-# hooks/common/update.secondary.d/ directory.
-
-# NOTE: this script runs under the same assumptions as the 'update' hook, so
-# the starting directory must be maintained and arguments must be passed on.
-
-$refname = ARGV[0]
-$oldrev  = ARGV[1]
-$newrev  = ARGV[2]
-$user    = ENV['USER']
-
-def blacklist bl
-  all_revs = `git rev-list #{$oldrev}..#{$newrev}`.split("\n")
-  all_revs.each do |rev|
-    bl.each do |b|
-      if rev == b
-        puts "Revision #{b} is blacklisted, you must remove it from your branch (possibly using git rebase) before you can push."
-        exit 1
-      end
-    end
-  end
-end
-
-blacklist ['26d74dc0524c87c5dcc0c76040ce413a4848b57a']
-
-# Only enforce policy on the master branch
-exit 0 if $refname != 'refs/heads/master'
-
-puts "Enforcing Policies... \n(#{$refname}) (#{$oldrev[0,6]}) (#{$newrev[0,6]})"
-
-$regex = /\[ref: (\d+)\]/
-
-$broken_commit_message = /Please enter a commit message to explain why this merge is necessary/
-$wrong_way_merge_master = /Merge( remote-tracking)? branch '([^\/]+\/)?master' into/
-$merge_master = /Merge branch '[^']+'((?! into)| into master)/
-$pull_merge = /Merge branch 'master' of /
-$refs_or_closes_or_no_issue = /(refs #|closes #|fixes #|no issue #)/i
-
-# enforced custom commit message format
-def check_message_format
-  all_revs    = `git rev-list --first-parent #{$oldrev}..#{$newrev}`.split("\n")
-  merge_revs  = `git rev-list --first-parent --min-parents=2 #{$oldrev}..#{$newrev}`.split("\n")
-  # single_revs = `git rev-list --first-parent --max-parents=1 #{$oldrev}..#{$newrev}`.split("\n")
-  broken = false
-  no_ff = false
-
-  merge_revs.each do |rev|
-    message = `git cat-file commit #{rev} | sed '1,/^$/d'`
-    if $wrong_way_merge_master.match(message)
-      puts "\n[POLICY] Only non-fast-forward merges into master are allowed. Please"
-      puts "reset your master branch:"
-      puts "  git reset --hard origin/master"
-      puts "and then merge your branch with the --no-ff option:"
-      puts "  git merge your-branch --no-ff\n"
-      puts "Remember to add a reference to an issue number in the merge commit!\n"
-      puts "\n******************************************************************\n"
-      puts "\nOffending commit: #{rev}\n"
-      puts "\nOffending commit message:\n"
-      puts message
-      puts "\n******************************************************************\n"
-      puts "\n\n"
-      broken = true
-      no_ff = true
-    elsif $pull_merge.match(message)
-      puts "\n[POLICY] This appears to be a git pull merge of remote master into local"
-      puts "master.  In order to maintain a linear first-parent history of master,"
-      puts "please reset your branch and remerge or rebase using the latest master.\n"
-      puts "\n******************************************************************\n"
-      puts "\nOffending commit: #{rev}\n"
-      puts "\nOffending commit message:\n\n"
-      puts message
-      puts "\n******************************************************************\n"
-      puts "\n\n"
-      broken = true
-    elsif not $merge_master.match(message) and not
-      puts "\n[POLICY] This does not appear to be a merge of a feature"
-      puts "branch into master.  Merges must follow the format"
-      puts "\"Merge branch 'feature-branch'\".\n"
-      puts "\n******************************************************************\n"
-      puts "\nOffending commit: #{rev}\n"
-      puts "\nOffending commit message:\n\n"
-      puts message
-      puts "\n******************************************************************\n"
-      puts "\n\n"
-      broken = true
-    end
-  end
-
-  all_revs.each do |rev|
-    message = `git cat-file commit #{rev} | sed '1,/^$/d'`
-    if $broken_commit_message.match(message)
-      puts "\n[POLICY] Rejected broken commit message for including boilerplate"
-      puts "instruction text.\n"
-      puts "\n******************************************************************\n"
-      puts "\nOffending commit: #{rev}\n"
-      puts "\nOffending commit message:\n\n"
-      puts message
-      puts "\n******************************************************************\n"
-      puts "\n\n"
-      broken = true
-    end
-
-    # Do not test when the commit is a no_ff merge (which will be rejected), because
-    # this test will complain about *every* commit in the merge otherwise, obscuring
-    # the real reason for the rejection (the no_ff merge)
-    if not no_ff and not $refs_or_closes_or_no_issue.match(message)
-      puts "\n[POLICY] All commits to master must include an issue using \"refs #\" or"
-      puts "\"closes #\", or specify \"no issue #\"\n"
-      puts "\n******************************************************************\n"
-      puts "\nOffending commit: #{rev}\n"
-      puts "\nOffending commit message:\n\n"
-      puts message
-      puts "\n******************************************************************\n"
-      puts "\n\n"
-      broken = true
-    end
-  end
-
-  if broken
-    exit 1
-  end
-end
-
-check_message_format
diff --git a/build/install/easy-docker-install.sh b/build/install/easy-docker-install.sh
deleted file mode 100755
index fe6e186..0000000
--- a/build/install/easy-docker-install.sh
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env bash
-
-# This script is intended to make Arvados installation easy. It will download the
-# latest copy of the Arvados docker images as well as the arvdock command. It
-# then uses arvdock to spin up Arvados on this computer.
-#
-# The latest version of this script is available at http://get.arvados.org, so that this
-# command does the right thing:
-#
-#  $ \curl -sSL http://get.arvados.org | bash
-#
-# Prerequisites: working docker installation. Run this script as a user who is a member 
-# of the docker group.
-
-COLUMNS=80
-
-fail () {
-    title "$*"
-    exit 1
-}
-
-title () {
-  printf "\n%*s\n\n" $(((${#title}+$COLUMNS)/2)) "********** $1 **********"
-}
-
-docker_pull () {
-  $DOCKER pull $*
-
-  ECODE=$?
-
-  if [[ "$ECODE" != "0" ]]; then
-    title "$DOCKER pull $* failed"
-    exit $ECODE
-  fi
-}
-
-main () {
-
-  \which which >/dev/null 2>&1 || fail "Error: could not find 'which' command."
-
-  # find the docker binary
-  DOCKER=`which docker.io`
-  
-  if [[ "$DOCKER" == "" ]]; then
-    DOCKER=`which docker`
-  fi
-
-  if [[ "$DOCKER" == "" ]]; then
-    fail "Error: you need to have docker installed. Could not find the docker executable."
-  fi
-
-  echo
-  echo "If necessary, this command will download the latest Arvados docker images."
-  echo "The download can take a long time, depending on the speed of your internet connection."
-  echo "When the images are downloaded, it will then start an Arvados environment on this computer."
-  echo
-  docker_pull arvados/workbench
-  docker_pull arvados/doc
-  docker_pull arvados/keep
-  docker_pull arvados/shell
-  docker_pull arvados/sso
-  docker_pull arvados/compute
-  docker_pull arvados/keep
-  docker_pull arvados/keepproxy
-  docker_pull arvados/api
-  docker_pull crosbymichael/skydns
-  docker_pull crosbymichael/skydock
-
-  # Now download arvdock and start the containers
-  echo
-  echo Downloading arvdock
-  echo
-  \curl -sSL https://raw.githubusercontent.com/curoverse/arvados/master/docker/arvdock -o arvdock
-  chmod 755 arvdock
-
-  echo
-  echo Starting the docker containers
-  echo
-  ./arvdock start
-
-  echo To stop the containers, run
-  echo
-  echo ./arvdock stop
-  echo 
-}
-
-main
diff --git a/build/jenkins/run-cwl-tests.sh b/build/jenkins/run-cwl-tests.sh
deleted file mode 100755
index 53c0538..0000000
--- a/build/jenkins/run-cwl-tests.sh
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/bin/bash
-
-read -rd "\000" helpmessage <<EOF
-$(basename $0): Test cwl tool and (optionally) upload to PyPi and Docker Hub.
-
-Syntax:
-        WORKSPACE=/path/to/common-workflow-language $(basename $0) [options]
-
-Options:
-
---upload-pypi          Upload package to pypi (default: false)
---upload-docker        Upload packages to docker hub (default: false)
---debug                Output debug information (default: false)
-
-WORKSPACE=path         Path to the common-workflow-language source tree
-
-EOF
-
-EXITCODE=0
-CALL_FREIGHT=0
-
-DEBUG=0
-UPLOAD_PYPI=0
-UPLOAD_DOCKER=0
-
-VENVDIR=
-
-leave_temp=
-
-declare -A leave_temp
-
-set -e
-
-clear_temp() {
-    leaving=""
-    for var in VENVDIR
-    do
-        if [[ -z "${leave_temp[$var]}" ]]
-        then
-            if [[ -n "${!var}" ]]
-            then
-                rm -rf "${!var}"
-            fi
-        else
-            leaving+=" $var=\"${!var}\""
-        fi
-    done
-    if [[ -n "$leaving" ]]; then
-        echo "Leaving behind temp dirs: $leaving"
-    fi
-}
-
-fatal() {
-    clear_temp
-    echo >&2 "Fatal: $* (encountered in ${FUNCNAME[1]} at ${BASH_SOURCE[1]} line ${BASH_LINENO[0]})"
-    exit 1
-}
-
-trap clear_temp INT EXIT
-
-# Set up temporary install dirs (unless existing dirs were supplied)
-for tmpdir in VENVDIR
-do
-    if [[ -n "${!tmpdir}" ]]; then
-        leave_temp[$tmpdir]=1
-    else
-        eval $tmpdir=$(mktemp -d)
-    fi
-done
-
-
-while [[ -n "$1" ]]
-do
-    arg="$1"; shift
-    case "$arg" in
-        --help)
-            echo >&2 "$helpmessage"
-            echo >&2
-            exit 1
-            ;;
-        --debug)
-            DEBUG=1
-            ;;
-        --upload-pypi)
-            UPLOAD_PYPI=1
-            ;;
-        --upload-docker)
-            UPLOAD_DOCKER=1
-            ;;
-        --leave-temp)
-            leave_temp[VENVDIR]=1
-            ;;
-        *=*)
-            eval export $(echo $arg | cut -d= -f1)=\"$(echo $arg | cut -d= -f2-)\"
-            ;;
-        *)
-            echo >&2 "$0: Unrecognized option: '$arg'. Try: $0 --help"
-            exit 1
-            ;;
-    esac
-done
-
-# Sanity check
-if ! [[ -n "$WORKSPACE" ]]; then
-  echo >&2 "$helpmessage"
-  echo >&2
-  echo >&2 "Error: WORKSPACE environment variable not set"
-  echo >&2
-  exit 1
-fi
-
-if [[ "$DEBUG" != 0 ]]; then
-  echo "Workspace is $WORKSPACE"
-fi
-
-virtualenv --setuptools "$VENVDIR" || fatal "virtualenv $VENVDIR failed"
-. "$VENVDIR/bin/activate"
-
-handle_python_package () {
-  # This function assumes the current working directory is the python package directory
-  if [[ "$UPLOAD_PYPI" != 0 ]]; then
-    # Make sure only to use sdist - that's the only format pip can deal with (sigh)
-    if [[ "$DEBUG" != 0 ]]; then
-      python setup.py sdist upload
-    else
-      python setup.py -q sdist upload
-    fi
-  else
-    # Make sure only to use sdist - that's the only format pip can deal with (sigh)
-    if [[ "$DEBUG" != 0 ]]; then
-      python setup.py sdist
-    else
-      python setup.py -q sdist
-    fi
-  fi
-}
-
-# Make all files world-readable -- jenkins runs with umask 027, and has checked
-# out our git tree here
-chmod o+r "$WORKSPACE" -R
-
-# Now fix our umask to something better suited to building and publishing
-# gems and packages
-umask 0022
-
-if [[ "$DEBUG" != 0 ]]; then
-  echo "umask is" `umask`
-fi
-
-# Python packages
-if [[ "$DEBUG" != 0 ]]; then
-  echo
-  echo "Python packages"
-  echo
-fi
-
-cd "$WORKSPACE"
-
-if test -d cwltool ; then
-    (cd cwltool
-     git fetch
-     git reset --hard origin/master
-    )
-else
-    git clone git at github.com:common-workflow-language/cwltool.git
-    (cd cwltool
-     git config user.email "sysadmin at curoverse.com"
-     git config user.name "Curoverse build bot"
-    )
-fi
-
-(cd cwltool
- python setup.py install
- python setup.py test
- ./build-node-docker.sh
-)
-
-./run_test.sh RUNNER=cwltool/cwltool/main.py DRAFT=draft-2
-./run_test.sh RUNNER=cwltool/cwltool/main.py DRAFT=draft-3
-
-(cd cwltool
- handle_python_package
-)
-
-(cd cwltool/cwl-runner
- handle_python_package
-)
-
-(cd cwltool
- ./build-cwl-docker.sh
-)
-
-if [[ "$UPLOAD_DOCKER" != 0 ]]; then
-    docker push commonworkflowlanguage/cwltool_module
-    docker push commonworkflowlanguage/cwltool
-    docker push commonworkflowlanguage/nodejs-engine
-fi
-
-if test -d common-workflow-language.github.io ; then
-    (cd common-workflow-language.github.io
-     git fetch
-     git reset --hard origin/master
-    )
-else
-    git clone git at github.com:common-workflow-language/common-workflow-language.github.io.git
-    (cd common-workflow-language.github.io
-     git config user.email "sysadmin at curoverse.com"
-     git config user.name "Curoverse build bot"
-    )
-fi
-
-python -mcwltool --outdir=$PWD/common-workflow-language.github.io site/cwlsite.cwl site/cwlsite-job.json
-
-(cd common-workflow-language.github.io
- git add --all
- git diff-index --quiet HEAD || git commit -m"Build bot"
- git push
-)
diff --git a/build/jenkins/run-deploy.sh b/build/jenkins/run-deploy.sh
deleted file mode 100755
index 1b06c65..0000000
--- a/build/jenkins/run-deploy.sh
+++ /dev/null
@@ -1,266 +0,0 @@
-#!/bin/bash
-
-DEBUG=0
-SSH_PORT=22
-
-function usage {
-    echo >&2
-    echo >&2 "usage: $0 [options] <identifier>"
-    echo >&2
-    echo >&2 "   <identifier>                 Arvados cluster name"
-    echo >&2
-    echo >&2 "$0 options:"
-    echo >&2 "  -p, --port <ssh port>         SSH port to use (default 22)"
-    echo >&2 "  -d, --debug                   Enable debug output"
-    echo >&2 "  -h, --help                    Display this help and exit"
-    echo >&2
-    echo >&2 "Note: this script requires an arvados token created with these permissions:"
-    echo >&2 '  arv api_client_authorization create_system_auth \'
-    echo >&2 '    --scopes "[\"GET /arvados/v1/virtual_machines\",'
-    echo >&2 '               \"GET /arvados/v1/keep_services\",'
-    echo >&2 '               \"GET /arvados/v1/keep_services/\",'
-    echo >&2 '               \"GET /arvados/v1/groups\",'
-    echo >&2 '               \"GET /arvados/v1/groups/\",'
-    echo >&2 '               \"GET /arvados/v1/links\",'
-    echo >&2 '               \"GET /arvados/v1/collections\",'
-    echo >&2 '               \"POST /arvados/v1/collections\",'
-    echo >&2 '               \"POST /arvados/v1/links\"]"'
-    echo >&2
-}
-
-# NOTE: This requires GNU getopt (part of the util-linux package on Debian-based distros).
-TEMP=`getopt -o hdp: \
-    --long help,debug,port: \
-    -n "$0" -- "$@"`
-
-if [ $? != 0 ] ; then echo "Use -h for help"; exit 1 ; fi
-# Note the quotes around `$TEMP': they are essential!
-eval set -- "$TEMP"
-
-while [ $# -ge 1 ]
-do
-    case $1 in
-        -p | --port)
-            SSH_PORT="$2"; shift 2
-            ;;
-        -d | --debug)
-            DEBUG=1
-            shift
-            ;;
-        --)
-            shift
-            break
-            ;;
-        *)
-            usage
-            exit 1
-            ;;
-    esac
-done
-
-IDENTIFIER=$1
-
-if [[ "$IDENTIFIER" == '' ]]; then
-  usage
-  exit 1
-fi
-
-EXITCODE=0
-
-COLUMNS=80
-
-PUPPET_AGENT='
-now() { date +%s; }
-let endtime="$(now) + 600"
-while [ "$endtime" -gt "$(now)" ]; do
-    puppet agent --test --detailed-exitcodes
-    agent_exitcode=$?
-    if [ 0 = "$agent_exitcode" ] || [ 2 = "$agent_exitcode" ]; then
-        break
-    else
-        sleep 10s
-    fi
-done
-exit ${agent_exitcode:-99}
-'
-
-title () {
-  date=`date +'%Y-%m-%d %H:%M:%S'`
-  printf "$date $1\n"
-}
-
-function run_puppet() {
-  node=$1
-  return_var=$2
-
-  title "Running puppet on $node"
-  TMP_FILE=`mktemp`
-  if [[ "$DEBUG" != "0" ]]; then
-    ssh -t -p$SSH_PORT -o "StrictHostKeyChecking no" -o "ConnectTimeout 5" root@$node -C bash -c "'$PUPPET_AGENT'" | tee $TMP_FILE
-  else
-    ssh -t -p$SSH_PORT -o "StrictHostKeyChecking no" -o "ConnectTimeout 5" root@$node -C bash -c "'$PUPPET_AGENT'" > $TMP_FILE 2>&1
-  fi
-
-  ECODE=${PIPESTATUS[0]}
-  RESULT=$(cat $TMP_FILE)
-
-  if [[ "$ECODE" != "255" && ! ("$RESULT" =~ 'already in progress') && "$ECODE" != "2" && "$ECODE" != "0"  ]]; then
-    # Ssh exits 255 if the connection timed out. Just ignore that.
-    # Puppet exits 2 if there are changes. For real!
-    # Puppet prints 'Notice: Run of Puppet configuration client already in progress' if another puppet process
-    #   was already running
-    echo "ERROR running puppet on $node: exit code $ECODE"
-    if [[ "$DEBUG" == "0" ]]; then
-      title "Command output follows:"
-      echo $RESULT
-    fi
-  fi
-  if [[ "$ECODE" == "255" ]]; then
-    title "Connection timed out"
-    ECODE=0
-  fi
-  if [[ "$ECODE" == "2" ]]; then
-    ECODE=0
-  fi
-  rm -f $TMP_FILE
-  eval "$return_var=$ECODE"
-}
-
-function run_command() {
-  node=$1
-  return_var=$2
-  command=$3
-
-  title "Running '$command' on $node"
-  TMP_FILE=`mktemp`
-  if [[ "$DEBUG" != "0" ]]; then
-    ssh -t -p$SSH_PORT -o "StrictHostKeyChecking no" -o "ConnectTimeout 5" root@$node -C "$command" | tee $TMP_FILE
-  else
-    ssh -t -p$SSH_PORT -o "StrictHostKeyChecking no" -o "ConnectTimeout 5" root@$node -C "$command" > $TMP_FILE 2>&1
-  fi
-
-  ECODE=$?
-  RESULT=$(cat $TMP_FILE)
-
-  if [[ "$ECODE" != "255" && "$ECODE" != "0"  ]]; then
-    # Ssh exists 255 if the connection timed out. Just ignore that, it's possible that this node is
-    #   a shell node that is down.
-    title "ERROR running command on $node: exit code $ECODE"
-    if [[ "$DEBUG" == "0" ]]; then
-      title "Command output follows:"
-      echo $RESULT
-    fi
-  fi
-  if [[ "$ECODE" == "255" ]]; then
-    title "Connection timed out"
-    ECODE=0
-  fi
-  rm -f $TMP_FILE
-  eval "$return_var=$ECODE"
-}
-
-title "Updating API server"
-SUM_ECODE=0
-run_puppet $IDENTIFIER.arvadosapi.com ECODE
-SUM_ECODE=$(($SUM_ECODE + $ECODE))
-if [ ! "$IDENTIFIER" = "c97qk" ]
-then
-  run_command $IDENTIFIER.arvadosapi.com ECODE "dpkg -L arvados-mailchimp-plugin 2>/dev/null && apt-get install arvados-mailchimp-plugin --reinstall || echo"
-  SUM_ECODE=$(($SUM_ECODE + $ECODE))
-fi
-
-if [[ "$SUM_ECODE" != "0" ]]; then
-  title "ERROR: Updating API server FAILED"
-  EXITCODE=$(($EXITCODE + $SUM_ECODE))
-  exit $EXITCODE
-fi
-
-title "Loading ARVADOS_API_HOST and ARVADOS_API_TOKEN"
-if [[ -f "$HOME/.config/arvados/$IDENTIFIER.arvadosapi.com.conf" ]]; then
-  . $HOME/.config/arvados/$IDENTIFIER.arvadosapi.com.conf
-else
-  title "WARNING: $HOME/.config/arvados/$IDENTIFIER.arvadosapi.com.conf not found."
-fi
-if [[ "$ARVADOS_API_HOST" == "" ]] || [[ "$ARVADOS_API_TOKEN" == "" ]]; then
-  title "ERROR: ARVADOS_API_HOST and/or ARVADOS_API_TOKEN environment variables are not set."
-  exit 1
-fi
-
-title "Locating Arvados Standard Docker images project"
-
-JSON_FILTER="[[\"name\", \"=\", \"Arvados Standard Docker Images\"], [\"owner_uuid\", \"=\", \"$IDENTIFIER-tpzed-000000000000000\"]]"
-DOCKER_IMAGES_PROJECT=`ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN arv --format=uuid group list --filters="$JSON_FILTER"`
-
-if [[ "$DOCKER_IMAGES_PROJECT" == "" ]]; then
-  title "Warning: Arvados Standard Docker Images project not found. Creating it."
-
-  DOCKER_IMAGES_PROJECT=`ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN arv --format=uuid group create --group "{\"owner_uuid\":\"$IDENTIFIER-tpzed-000000000000000\", \"name\":\"Arvados Standard Docker Images\", \"group_class\":\"project\"}"`
-  ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN arv link create --link "{\"tail_uuid\":\"$IDENTIFIER-j7d0g-fffffffffffffff\", \"head_uuid\":\"$DOCKER_IMAGES_PROJECT\", \"link_class\":\"permission\", \"name\":\"can_read\" }"
-  if [[ "$?" != "0" ]]; then
-    title "ERROR: could not create standard Docker images project Please create it, cf. http://doc.arvados.org/install/create-standard-objects.html"
-    exit 1
-  fi
-fi
-
-title "Found Arvados Standard Docker Images project with uuid $DOCKER_IMAGES_PROJECT"
-GIT_COMMIT=`ssh -o "StrictHostKeyChecking no" $IDENTIFIER cat /usr/local/arvados/src/git-commit.version`
-
-if [[ "$?" != "0" ]] || [[ "$GIT_COMMIT" == "" ]]; then
-  title "ERROR: unable to get arvados/jobs Docker image git revision"
-  exit 1
-else
-  title "Found git commit for arvados/jobs Docker image: $GIT_COMMIT"
-fi
-
-run_command shell.$IDENTIFIER ECODE "ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN /usr/local/rvm/bin/rvm-exec default arv keep docker" |grep -q $GIT_COMMIT
-
-if [[ "$?" == "0" ]]; then
-  title "Found latest arvados/jobs Docker image, nothing to upload"
-else
-  title "Installing latest arvados/jobs Docker image"
-  ssh -o "StrictHostKeyChecking no" shell.$IDENTIFIER "ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN /usr/local/rvm/bin/rvm-exec default arv keep docker --pull --project-uuid=$DOCKER_IMAGES_PROJECT arvados/jobs $GIT_COMMIT"
-  if [[ "$?" -ne 0 ]]; then
-    title "'git pull' failed exiting..."
-    exit 1
-  fi
-fi
-
-title "Gathering list of shell and Keep nodes"
-SHELL_NODES=`ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN arv virtual_machine list |jq .items[].hostname -r`
-KEEP_NODES=`ARVADOS_API_HOST=$ARVADOS_API_HOST ARVADOS_API_TOKEN=$ARVADOS_API_TOKEN arv keep_service list |jq .items[].service_host -r`
-
-title "Updating workbench"
-SUM_ECODE=0
-if [[ `host workbench.$ARVADOS_API_HOST |cut -f4 -d' '` != `host $ARVADOS_API_HOST |cut -f4 -d' '` ]]; then
-  # Workbench runs on a separate host. We need to run puppet there too.
-  run_puppet workbench.$IDENTIFIER ECODE
-  SUM_ECODE=$(($SUM_ECODE + $ECODE))
-fi
-
-if [[ "$SUM_ECODE" != "0" ]]; then
-  title "ERROR: Updating workbench FAILED"
-  EXITCODE=$(($EXITCODE + $SUM_ECODE))
-  exit $EXITCODE
-fi
-
-for n in manage switchyard $SHELL_NODES $KEEP_NODES; do
-  ECODE=0
-  if [[ $n =~ $ARVADOS_API_HOST$ ]]; then
-    # e.g. keep.qr1hi.arvadosapi.com
-    node=$n
-  else
-    # e.g. shell
-    node=$n.$ARVADOS_API_HOST
-  fi
-
-  # e.g. keep.qr1hi
-  node=${node%.arvadosapi.com}
-
-  title "Updating $node"
-  run_puppet $node ECODE
-  if [[ "$ECODE" != "0" ]]; then
-    title "ERROR: Updating $node node FAILED: exit code $ECODE"
-    EXITCODE=$(($EXITCODE + $ECODE))
-    exit $EXITCODE
-  fi
-done
diff --git a/build/jenkins/run-diagnostics-suite.sh b/build/jenkins/run-diagnostics-suite.sh
deleted file mode 100755
index 015a053..0000000
--- a/build/jenkins/run-diagnostics-suite.sh
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/bash
-
-EXITCODE=0
-
-INSTANCE=$1
-REVISION=$2
-
-if [[ "$INSTANCE" == '' ]]; then
-  echo "Syntax: $0 <instance> [revision]"
-  exit 1
-fi
-
-if [[ "$REVISION" == '' ]]; then
-  # See if there's a configuration file with the revision?
-  CONFIG_PATH=/home/jenkins/configuration/$INSTANCE.arvadosapi.com-versions.conf
-  if [[ -f $CONFIG_PATH ]]; then
-    echo "Loading git revision from $CONFIG_PATH"
-    . $CONFIG_PATH
-    REVISION=$ARVADOS_GIT_REVISION
-  fi
-fi
-
-if [[ "$REVISION" != '' ]]; then
-  echo "Git revision is $REVISION"
-else
-  echo "No valid git revision found, proceeding with what is in place."
-fi
-
-# Sanity check
-if ! [[ -n "$WORKSPACE" ]]; then
-  echo "WORKSPACE environment variable not set"
-  exit 1
-fi
-
-title () {
-    txt="********** $1 **********"
-    printf "\n%*s%s\n\n" $((($COLUMNS-${#txt})/2)) "" "$txt"
-}
-
-timer_reset() {
-    t0=$SECONDS
-}
-
-timer() {
-    echo -n "$(($SECONDS - $t0))s"
-}
-
-source /etc/profile.d/rvm.sh
-echo $WORKSPACE
-
-title "Starting diagnostics"
-timer_reset
-
-cd $WORKSPACE
-
-if [[ "$REVISION" != '' ]]; then
-  git checkout $REVISION
-fi
-
-cp -f /home/jenkins/diagnostics/arvados-workbench/$INSTANCE-application.yml $WORKSPACE/apps/workbench/config/application.yml
-
-cd $WORKSPACE/apps/workbench
-
-HOME="$GEMHOME" bundle install --no-deployment
-
-if [[ ! -d tmp ]]; then
-  mkdir tmp
-fi
-
-RAILS_ENV=diagnostics bundle exec rake TEST=test/diagnostics/pipeline_test.rb
-
-ECODE=$?
-
-if [[ "$REVISION" != '' ]]; then
-  git checkout master
-fi
-
-if [[ "$ECODE" != "0" ]]; then
-  title "!!!!!! DIAGNOSTICS FAILED (`timer`) !!!!!!"
-  EXITCODE=$(($EXITCODE + $ECODE))
-  exit $EXITCODE
-fi
-
-title "Diagnostics complete (`timer`)"
-
-exit $EXITCODE
diff --git a/build/jenkins/run-performance-suite.sh b/build/jenkins/run-performance-suite.sh
deleted file mode 100755
index 2944bda..0000000
--- a/build/jenkins/run-performance-suite.sh
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/bash
-
-EXITCODE=0
-
-INSTANCE=$1
-REVISION=$2
-
-if [[ "$INSTANCE" == '' ]]; then
-  echo "Syntax: $0 <instance> [revision]"
-  exit 1
-fi
-
-if [[ "$REVISION" == '' ]]; then
-  # See if there's a configuration file with the revision?
-  CONFIG_PATH=/home/jenkins/configuration/$INSTANCE.arvadosapi.com-versions.conf
-  if [[ -f $CONFIG_PATH ]]; then
-    echo "Loading git revision from $CONFIG_PATH"
-    . $CONFIG_PATH
-    REVISION=$ARVADOS_GIT_REVISION
-  fi
-fi
-
-if [[ "$REVISION" != '' ]]; then
-  echo "Git revision is $REVISION"
-else
-  echo "No valid git revision found, proceeding with what is in place."
-fi
-
-# Sanity check
-if ! [[ -n "$WORKSPACE" ]]; then
-  echo "WORKSPACE environment variable not set"
-  exit 1
-fi
-
-title () {
-    txt="********** $1 **********"
-    printf "\n%*s%s\n\n" $((($COLUMNS-${#txt})/2)) "" "$txt"
-}
-
-timer_reset() {
-    t0=$SECONDS
-}
-
-timer() {
-    echo -n "$(($SECONDS - $t0))s"
-}
-
-source /etc/profile.d/rvm.sh
-echo $WORKSPACE
-
-title "Starting performance test"
-timer_reset
-
-cd $WORKSPACE
-
-if [[ "$REVISION" != '' ]]; then
-  git checkout $REVISION
-fi
-
-cp -f /home/jenkins/diagnostics/arvados-workbench/$INSTANCE-application.yml $WORKSPACE/apps/workbench/config/application.yml
-
-cd $WORKSPACE/apps/workbench
-
-HOME="$GEMHOME" bundle install --no-deployment
-
-if [[ ! -d tmp ]]; then
-  mkdir tmp
-fi
-
-mkdir -p tmp/cache
-
-RAILS_ENV=performance bundle exec rake test:benchmark
-
-ECODE=$?
-
-if [[ "$REVISION" != '' ]]; then
-  git checkout master
-fi
-
-if [[ "$ECODE" != "0" ]]; then
-  title "!!!!!! PERFORMANCE TESTS FAILED (`timer`) !!!!!!"
-  EXITCODE=$(($EXITCODE + $ECODE))
-  exit $EXITCODE
-fi
-
-title "Performance tests complete (`timer`)"
-
-exit $EXITCODE
diff --git a/build/jenkins/run-tapestry-tests.sh b/build/jenkins/run-tapestry-tests.sh
deleted file mode 100755
index 851a81d..0000000
--- a/build/jenkins/run-tapestry-tests.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-
-EXITCODE=0
-
-COLUMNS=80
-
-title () {
-  printf "\n%*s\n\n" $(((${#title}+$COLUMNS)/2)) "********** $1 **********"
-}
-
-source /etc/profile.d/rvm.sh
-
-# This shouldn't really be necessary... but the jenkins/rvm integration seems a
-# bit wonky occasionally.
-rvm use ree
-
-echo $WORKSPACE
-
-# Tapestry
-title "Starting tapestry tests"
-cd "$WORKSPACE"
-
-# There are a few submodules
-git submodule init && git submodule update
-
-# Use sqlite for testing
-sed -i'' -e "s:mysql:sqlite3:" Gemfile
-
-# Tapestry is not set up yet to use --deployment
-#bundle install --deployment
-bundle install
-
-rm -f config/database.yml
-rm -f config/environments/test.rb
-cp $HOME/tapestry/test.rb config/environments/
-cp $HOME/tapestry/database.yml config/
-
-export RAILS_ENV=test
-
-bundle exec rake db:drop
-bundle exec rake db:create
-bundle exec rake db:setup
-bundle exec rake test
-
-ECODE=$?
-
-if [[ "$ECODE" != "0" ]]; then
-  title "!!!!!! TAPESTRY TESTS FAILED !!!!!!"
-  EXITCODE=$(($EXITCODE + $ECODE))
-fi
-
-title "Tapestry tests complete"
-
-exit $EXITCODE
diff --git a/build/jenkins/libcloud-pin b/build/libcloud-pin
similarity index 100%
rename from build/jenkins/libcloud-pin
rename to build/libcloud-pin
diff --git a/build/jenkins/package-build-dockerfiles/.gitignore b/build/package-build-dockerfiles/.gitignore
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/.gitignore
rename to build/package-build-dockerfiles/.gitignore
diff --git a/build/jenkins/package-build-dockerfiles/Makefile b/build/package-build-dockerfiles/Makefile
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/Makefile
rename to build/package-build-dockerfiles/Makefile
diff --git a/build/jenkins/package-build-dockerfiles/README b/build/package-build-dockerfiles/README
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/README
rename to build/package-build-dockerfiles/README
diff --git a/build/jenkins/package-build-dockerfiles/build-all-build-containers.sh b/build/package-build-dockerfiles/build-all-build-containers.sh
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/build-all-build-containers.sh
rename to build/package-build-dockerfiles/build-all-build-containers.sh
diff --git a/build/jenkins/package-build-dockerfiles/centos6/Dockerfile b/build/package-build-dockerfiles/centos6/Dockerfile
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/centos6/Dockerfile
rename to build/package-build-dockerfiles/centos6/Dockerfile
diff --git a/build/jenkins/package-build-dockerfiles/debian7/Dockerfile b/build/package-build-dockerfiles/debian7/Dockerfile
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/debian7/Dockerfile
rename to build/package-build-dockerfiles/debian7/Dockerfile
diff --git a/build/jenkins/package-build-dockerfiles/debian8/Dockerfile b/build/package-build-dockerfiles/debian8/Dockerfile
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/debian8/Dockerfile
rename to build/package-build-dockerfiles/debian8/Dockerfile
diff --git a/build/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile b/build/package-build-dockerfiles/ubuntu1204/Dockerfile
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
rename to build/package-build-dockerfiles/ubuntu1204/Dockerfile
diff --git a/build/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile b/build/package-build-dockerfiles/ubuntu1404/Dockerfile
similarity index 100%
rename from build/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
rename to build/package-build-dockerfiles/ubuntu1404/Dockerfile
diff --git a/build/jenkins/package-test-dockerfiles/centos6/Dockerfile b/build/package-test-dockerfiles/centos6/Dockerfile
similarity index 100%
rename from build/jenkins/package-test-dockerfiles/centos6/Dockerfile
rename to build/package-test-dockerfiles/centos6/Dockerfile
diff --git a/build/jenkins/package-test-dockerfiles/centos6/localrepo.repo b/build/package-test-dockerfiles/centos6/localrepo.repo
similarity index 100%
rename from build/jenkins/package-test-dockerfiles/centos6/localrepo.repo
rename to build/package-test-dockerfiles/centos6/localrepo.repo
diff --git a/build/jenkins/package-test-dockerfiles/debian7/Dockerfile b/build/package-test-dockerfiles/debian7/Dockerfile
similarity index 100%
rename from build/jenkins/package-test-dockerfiles/debian7/Dockerfile
rename to build/package-test-dockerfiles/debian7/Dockerfile
diff --git a/build/jenkins/package-test-dockerfiles/debian8/Dockerfile b/build/package-test-dockerfiles/debian8/Dockerfile
similarity index 100%
rename from build/jenkins/package-test-dockerfiles/debian8/Dockerfile
rename to build/package-test-dockerfiles/debian8/Dockerfile
diff --git a/build/jenkins/package-test-dockerfiles/ubuntu1204/Dockerfile b/build/package-test-dockerfiles/ubuntu1204/Dockerfile
similarity index 100%
rename from build/jenkins/package-test-dockerfiles/ubuntu1204/Dockerfile
rename to build/package-test-dockerfiles/ubuntu1204/Dockerfile
diff --git a/build/jenkins/package-test-dockerfiles/ubuntu1404/Dockerfile b/build/package-test-dockerfiles/ubuntu1404/Dockerfile
similarity index 100%
rename from build/jenkins/package-test-dockerfiles/ubuntu1404/Dockerfile
rename to build/package-test-dockerfiles/ubuntu1404/Dockerfile
diff --git a/build/jenkins/package-testing/common-test-packages.sh b/build/package-testing/common-test-packages.sh
similarity index 100%
rename from build/jenkins/package-testing/common-test-packages.sh
rename to build/package-testing/common-test-packages.sh
diff --git a/build/jenkins/package-testing/deb-common-test-packages.sh b/build/package-testing/deb-common-test-packages.sh
similarity index 100%
rename from build/jenkins/package-testing/deb-common-test-packages.sh
rename to build/package-testing/deb-common-test-packages.sh
diff --git a/build/jenkins/package-testing/test-package-arvados-api-server.sh b/build/package-testing/test-package-arvados-api-server.sh
similarity index 100%
rename from build/jenkins/package-testing/test-package-arvados-api-server.sh
rename to build/package-testing/test-package-arvados-api-server.sh
diff --git a/build/jenkins/package-testing/test-package-arvados-node-manager.sh b/build/package-testing/test-package-arvados-node-manager.sh
similarity index 100%
rename from build/jenkins/package-testing/test-package-arvados-node-manager.sh
rename to build/package-testing/test-package-arvados-node-manager.sh
diff --git a/build/jenkins/package-testing/test-package-arvados-sso-server.sh b/build/package-testing/test-package-arvados-sso-server.sh
similarity index 100%
rename from build/jenkins/package-testing/test-package-arvados-sso-server.sh
rename to build/package-testing/test-package-arvados-sso-server.sh
diff --git a/build/jenkins/package-testing/test-package-arvados-workbench.sh b/build/package-testing/test-package-arvados-workbench.sh
similarity index 100%
rename from build/jenkins/package-testing/test-package-arvados-workbench.sh
rename to build/package-testing/test-package-arvados-workbench.sh
diff --git a/build/jenkins/package-testing/test-package-python27-python-arvados-fuse.sh b/build/package-testing/test-package-python27-python-arvados-fuse.sh
similarity index 100%
rename from build/jenkins/package-testing/test-package-python27-python-arvados-fuse.sh
rename to build/package-testing/test-package-python27-python-arvados-fuse.sh
diff --git a/build/jenkins/package-testing/test-package-python27-python-arvados-python-client.sh b/build/package-testing/test-package-python27-python-arvados-python-client.sh
similarity index 100%
rename from build/jenkins/package-testing/test-package-python27-python-arvados-python-client.sh
rename to build/package-testing/test-package-python27-python-arvados-python-client.sh
diff --git a/build/jenkins/package-testing/test-packages-centos6.sh b/build/package-testing/test-packages-centos6.sh
similarity index 100%
rename from build/jenkins/package-testing/test-packages-centos6.sh
rename to build/package-testing/test-packages-centos6.sh
diff --git a/build/jenkins/package-testing/test-packages-debian7.sh b/build/package-testing/test-packages-debian7.sh
similarity index 100%
rename from build/jenkins/package-testing/test-packages-debian7.sh
rename to build/package-testing/test-packages-debian7.sh
diff --git a/build/jenkins/package-testing/test-packages-debian8.sh b/build/package-testing/test-packages-debian8.sh
similarity index 100%
rename from build/jenkins/package-testing/test-packages-debian8.sh
rename to build/package-testing/test-packages-debian8.sh
diff --git a/build/jenkins/package-testing/test-packages-ubuntu1204.sh b/build/package-testing/test-packages-ubuntu1204.sh
similarity index 100%
rename from build/jenkins/package-testing/test-packages-ubuntu1204.sh
rename to build/package-testing/test-packages-ubuntu1204.sh
diff --git a/build/jenkins/package-testing/test-packages-ubuntu1404.sh b/build/package-testing/test-packages-ubuntu1404.sh
similarity index 100%
rename from build/jenkins/package-testing/test-packages-ubuntu1404.sh
rename to build/package-testing/test-packages-ubuntu1404.sh
diff --git a/build/jenkins/rails-package-scripts/README.md b/build/rails-package-scripts/README.md
similarity index 100%
rename from build/jenkins/rails-package-scripts/README.md
rename to build/rails-package-scripts/README.md
diff --git a/build/jenkins/rails-package-scripts/arvados-api-server.sh b/build/rails-package-scripts/arvados-api-server.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/arvados-api-server.sh
rename to build/rails-package-scripts/arvados-api-server.sh
diff --git a/build/jenkins/rails-package-scripts/arvados-sso-server.sh b/build/rails-package-scripts/arvados-sso-server.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/arvados-sso-server.sh
rename to build/rails-package-scripts/arvados-sso-server.sh
diff --git a/build/jenkins/rails-package-scripts/arvados-workbench.sh b/build/rails-package-scripts/arvados-workbench.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/arvados-workbench.sh
rename to build/rails-package-scripts/arvados-workbench.sh
diff --git a/build/jenkins/rails-package-scripts/postinst.sh b/build/rails-package-scripts/postinst.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/postinst.sh
rename to build/rails-package-scripts/postinst.sh
diff --git a/build/jenkins/rails-package-scripts/postrm.sh b/build/rails-package-scripts/postrm.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/postrm.sh
rename to build/rails-package-scripts/postrm.sh
diff --git a/build/jenkins/rails-package-scripts/prerm.sh b/build/rails-package-scripts/prerm.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/prerm.sh
rename to build/rails-package-scripts/prerm.sh
diff --git a/build/jenkins/rails-package-scripts/step2.sh b/build/rails-package-scripts/step2.sh
similarity index 100%
rename from build/jenkins/rails-package-scripts/step2.sh
rename to build/rails-package-scripts/step2.sh
diff --git a/build/jenkins/run-build-docker-images.sh b/build/run-build-docker-images.sh
similarity index 100%
rename from build/jenkins/run-build-docker-images.sh
rename to build/run-build-docker-images.sh
diff --git a/build/jenkins/run-build-docker-jobs-image.sh b/build/run-build-docker-jobs-image.sh
similarity index 100%
rename from build/jenkins/run-build-docker-jobs-image.sh
rename to build/run-build-docker-jobs-image.sh
diff --git a/build/jenkins/run-build-packages-all-targets.sh b/build/run-build-packages-all-targets.sh
similarity index 100%
rename from build/jenkins/run-build-packages-all-targets.sh
rename to build/run-build-packages-all-targets.sh
diff --git a/build/jenkins/run-build-packages-one-target.sh b/build/run-build-packages-one-target.sh
similarity index 100%
rename from build/jenkins/run-build-packages-one-target.sh
rename to build/run-build-packages-one-target.sh
diff --git a/build/jenkins/run-build-packages-sso.sh b/build/run-build-packages-sso.sh
similarity index 100%
rename from build/jenkins/run-build-packages-sso.sh
rename to build/run-build-packages-sso.sh
diff --git a/build/jenkins/run-build-packages.sh b/build/run-build-packages.sh
similarity index 100%
rename from build/jenkins/run-build-packages.sh
rename to build/run-build-packages.sh
diff --git a/build/jenkins/run-library.sh b/build/run-library.sh
similarity index 100%
rename from build/jenkins/run-library.sh
rename to build/run-library.sh
diff --git a/build/jenkins/run-tests.sh b/build/run-tests.sh
similarity index 100%
rename from build/jenkins/run-tests.sh
rename to build/run-tests.sh
diff --git a/build/jenkins/run_upload_packages.py b/build/run_upload_packages.py
similarity index 100%
rename from build/jenkins/run_upload_packages.py
rename to build/run_upload_packages.py

commit f171464e53dffb5b5f06239d21e7cf2426274cd1
Merge: 0a0011c 2b9b751
Author: Tom Clegg <tom at curoverse.com>
Date:   Tue Mar 8 13:31:22 2016 -0500

    Add 'build/' from commit '2b9b7518a60a71315a1504bf96b3182122bec702'
    
    git-subtree-dir: build
    git-subtree-mainline: 0a0011c987cbec72c7e13762dbc99b8e19db47c1
    git-subtree-split: 2b9b7518a60a71315a1504bf96b3182122bec702

diff --cc build/COPYING
index 0000000,af63e41..af63e41
mode 000000,100644..100644
--- a/build/COPYING
+++ b/build/COPYING
diff --cc build/README
index 0000000,b076f0b..b076f0b
mode 000000,100644..100644
--- a/build/README
+++ b/build/README
diff --cc build/agpl-3.0.txt
index 0000000,0000000..dba13ed
new file mode 100644
--- /dev/null
+++ b/build/agpl-3.0.txt
@@@ -1,0 -1,0 +1,661 @@@
++                    GNU AFFERO GENERAL PUBLIC LICENSE
++                       Version 3, 19 November 2007
++
++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++                            Preamble
++
++  The GNU Affero General Public License is a free, copyleft license for
++software and other kinds of works, specifically designed to ensure
++cooperation with the community in the case of network server software.
++
++  The licenses for most software and other practical works are designed
++to take away your freedom to share and change the works.  By contrast,
++our General Public Licenses are intended to guarantee your freedom to
++share and change all versions of a program--to make sure it remains free
++software for all its users.
++
++  When we speak of free software, we are referring to freedom, not
++price.  Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++them if you wish), that you receive source code or can get it if you
++want it, that you can change the software or use pieces of it in new
++free programs, and that you know you can do these things.
++
++  Developers that use our General Public Licenses protect your rights
++with two steps: (1) assert copyright on the software, and (2) offer
++you this License which gives you legal permission to copy, distribute
++and/or modify the software.
++
++  A secondary benefit of defending all users' freedom is that
++improvements made in alternate versions of the program, if they
++receive widespread use, become available for other developers to
++incorporate.  Many developers of free software are heartened and
++encouraged by the resulting cooperation.  However, in the case of
++software used on network servers, this result may fail to come about.
++The GNU General Public License permits making a modified version and
++letting the public access it on a server without ever releasing its
++source code to the public.
++
++  The GNU Affero General Public License is designed specifically to
++ensure that, in such cases, the modified source code becomes available
++to the community.  It requires the operator of a network server to
++provide the source code of the modified version running there to the
++users of that server.  Therefore, public use of a modified version, on
++a publicly accessible server, gives the public access to the source
++code of the modified version.
++
++  An older license, called the Affero General Public License and
++published by Affero, was designed to accomplish similar goals.  This is
++a different license, not a version of the Affero GPL, but Affero has
++released a new version of the Affero GPL which permits relicensing under
++this license.
++
++  The precise terms and conditions for copying, distribution and
++modification follow.
++
++                       TERMS AND CONDITIONS
++
++  0. Definitions.
++
++  "This License" refers to version 3 of the GNU Affero General Public License.
++
++  "Copyright" also means copyright-like laws that apply to other kinds of
++works, such as semiconductor masks.
++
++  "The Program" refers to any copyrightable work licensed under this
++License.  Each licensee is addressed as "you".  "Licensees" and
++"recipients" may be individuals or organizations.
++
++  To "modify" a work means to copy from or adapt all or part of the work
++in a fashion requiring copyright permission, other than the making of an
++exact copy.  The resulting work is called a "modified version" of the
++earlier work or a work "based on" the earlier work.
++
++  A "covered work" means either the unmodified Program or a work based
++on the Program.
++
++  To "propagate" a work means to do anything with it that, without
++permission, would make you directly or secondarily liable for
++infringement under applicable copyright law, except executing it on a
++computer or modifying a private copy.  Propagation includes copying,
++distribution (with or without modification), making available to the
++public, and in some countries other activities as well.
++
++  To "convey" a work means any kind of propagation that enables other
++parties to make or receive copies.  Mere interaction with a user through
++a computer network, with no transfer of a copy, is not conveying.
++
++  An interactive user interface displays "Appropriate Legal Notices"
++to the extent that it includes a convenient and prominently visible
++feature that (1) displays an appropriate copyright notice, and (2)
++tells the user that there is no warranty for the work (except to the
++extent that warranties are provided), that licensees may convey the
++work under this License, and how to view a copy of this License.  If
++the interface presents a list of user commands or options, such as a
++menu, a prominent item in the list meets this criterion.
++
++  1. Source Code.
++
++  The "source code" for a work means the preferred form of the work
++for making modifications to it.  "Object code" means any non-source
++form of a work.
++
++  A "Standard Interface" means an interface that either is an official
++standard defined by a recognized standards body, or, in the case of
++interfaces specified for a particular programming language, one that
++is widely used among developers working in that language.
++
++  The "System Libraries" of an executable work include anything, other
++than the work as a whole, that (a) is included in the normal form of
++packaging a Major Component, but which is not part of that Major
++Component, and (b) serves only to enable use of the work with that
++Major Component, or to implement a Standard Interface for which an
++implementation is available to the public in source code form.  A
++"Major Component", in this context, means a major essential component
++(kernel, window system, and so on) of the specific operating system
++(if any) on which the executable work runs, or a compiler used to
++produce the work, or an object code interpreter used to run it.
++
++  The "Corresponding Source" for a work in object code form means all
++the source code needed to generate, install, and (for an executable
++work) run the object code and to modify the work, including scripts to
++control those activities.  However, it does not include the work's
++System Libraries, or general-purpose tools or generally available free
++programs which are used unmodified in performing those activities but
++which are not part of the work.  For example, Corresponding Source
++includes interface definition files associated with source files for
++the work, and the source code for shared libraries and dynamically
++linked subprograms that the work is specifically designed to require,
++such as by intimate data communication or control flow between those
++subprograms and other parts of the work.
++
++  The Corresponding Source need not include anything that users
++can regenerate automatically from other parts of the Corresponding
++Source.
++
++  The Corresponding Source for a work in source code form is that
++same work.
++
++  2. Basic Permissions.
++
++  All rights granted under this License are granted for the term of
++copyright on the Program, and are irrevocable provided the stated
++conditions are met.  This License explicitly affirms your unlimited
++permission to run the unmodified Program.  The output from running a
++covered work is covered by this License only if the output, given its
++content, constitutes a covered work.  This License acknowledges your
++rights of fair use or other equivalent, as provided by copyright law.
++
++  You may make, run and propagate covered works that you do not
++convey, without conditions so long as your license otherwise remains
++in force.  You may convey covered works to others for the sole purpose
++of having them make modifications exclusively for you, or provide you
++with facilities for running those works, provided that you comply with
++the terms of this License in conveying all material for which you do
++not control copyright.  Those thus making or running the covered works
++for you must do so exclusively on your behalf, under your direction
++and control, on terms that prohibit them from making any copies of
++your copyrighted material outside their relationship with you.
++
++  Conveying under any other circumstances is permitted solely under
++the conditions stated below.  Sublicensing is not allowed; section 10
++makes it unnecessary.
++
++  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
++
++  No covered work shall be deemed part of an effective technological
++measure under any applicable law fulfilling obligations under article
++11 of the WIPO copyright treaty adopted on 20 December 1996, or
++similar laws prohibiting or restricting circumvention of such
++measures.
++
++  When you convey a covered work, you waive any legal power to forbid
++circumvention of technological measures to the extent such circumvention
++is effected by exercising rights under this License with respect to
++the covered work, and you disclaim any intention to limit operation or
++modification of the work as a means of enforcing, against the work's
++users, your or third parties' legal rights to forbid circumvention of
++technological measures.
++
++  4. Conveying Verbatim Copies.
++
++  You may convey verbatim copies of the Program's source code as you
++receive it, in any medium, provided that you conspicuously and
++appropriately publish on each copy an appropriate copyright notice;
++keep intact all notices stating that this License and any
++non-permissive terms added in accord with section 7 apply to the code;
++keep intact all notices of the absence of any warranty; and give all
++recipients a copy of this License along with the Program.
++
++  You may charge any price or no price for each copy that you convey,
++and you may offer support or warranty protection for a fee.
++
++  5. Conveying Modified Source Versions.
++
++  You may convey a work based on the Program, or the modifications to
++produce it from the Program, in the form of source code under the
++terms of section 4, provided that you also meet all of these conditions:
++
++    a) The work must carry prominent notices stating that you modified
++    it, and giving a relevant date.
++
++    b) The work must carry prominent notices stating that it is
++    released under this License and any conditions added under section
++    7.  This requirement modifies the requirement in section 4 to
++    "keep intact all notices".
++
++    c) You must license the entire work, as a whole, under this
++    License to anyone who comes into possession of a copy.  This
++    License will therefore apply, along with any applicable section 7
++    additional terms, to the whole of the work, and all its parts,
++    regardless of how they are packaged.  This License gives no
++    permission to license the work in any other way, but it does not
++    invalidate such permission if you have separately received it.
++
++    d) If the work has interactive user interfaces, each must display
++    Appropriate Legal Notices; however, if the Program has interactive
++    interfaces that do not display Appropriate Legal Notices, your
++    work need not make them do so.
++
++  A compilation of a covered work with other separate and independent
++works, which are not by their nature extensions of the covered work,
++and which are not combined with it such as to form a larger program,
++in or on a volume of a storage or distribution medium, is called an
++"aggregate" if the compilation and its resulting copyright are not
++used to limit the access or legal rights of the compilation's users
++beyond what the individual works permit.  Inclusion of a covered work
++in an aggregate does not cause this License to apply to the other
++parts of the aggregate.
++
++  6. Conveying Non-Source Forms.
++
++  You may convey a covered work in object code form under the terms
++of sections 4 and 5, provided that you also convey the
++machine-readable Corresponding Source under the terms of this License,
++in one of these ways:
++
++    a) Convey the object code in, or embodied in, a physical product
++    (including a physical distribution medium), accompanied by the
++    Corresponding Source fixed on a durable physical medium
++    customarily used for software interchange.
++
++    b) Convey the object code in, or embodied in, a physical product
++    (including a physical distribution medium), accompanied by a
++    written offer, valid for at least three years and valid for as
++    long as you offer spare parts or customer support for that product
++    model, to give anyone who possesses the object code either (1) a
++    copy of the Corresponding Source for all the software in the
++    product that is covered by this License, on a durable physical
++    medium customarily used for software interchange, for a price no
++    more than your reasonable cost of physically performing this
++    conveying of source, or (2) access to copy the
++    Corresponding Source from a network server at no charge.
++
++    c) Convey individual copies of the object code with a copy of the
++    written offer to provide the Corresponding Source.  This
++    alternative is allowed only occasionally and noncommercially, and
++    only if you received the object code with such an offer, in accord
++    with subsection 6b.
++
++    d) Convey the object code by offering access from a designated
++    place (gratis or for a charge), and offer equivalent access to the
++    Corresponding Source in the same way through the same place at no
++    further charge.  You need not require recipients to copy the
++    Corresponding Source along with the object code.  If the place to
++    copy the object code is a network server, the Corresponding Source
++    may be on a different server (operated by you or a third party)
++    that supports equivalent copying facilities, provided you maintain
++    clear directions next to the object code saying where to find the
++    Corresponding Source.  Regardless of what server hosts the
++    Corresponding Source, you remain obligated to ensure that it is
++    available for as long as needed to satisfy these requirements.
++
++    e) Convey the object code using peer-to-peer transmission, provided
++    you inform other peers where the object code and Corresponding
++    Source of the work are being offered to the general public at no
++    charge under subsection 6d.
++
++  A separable portion of the object code, whose source code is excluded
++from the Corresponding Source as a System Library, need not be
++included in conveying the object code work.
++
++  A "User Product" is either (1) a "consumer product", which means any
++tangible personal property which is normally used for personal, family,
++or household purposes, or (2) anything designed or sold for incorporation
++into a dwelling.  In determining whether a product is a consumer product,
++doubtful cases shall be resolved in favor of coverage.  For a particular
++product received by a particular user, "normally used" refers to a
++typical or common use of that class of product, regardless of the status
++of the particular user or of the way in which the particular user
++actually uses, or expects or is expected to use, the product.  A product
++is a consumer product regardless of whether the product has substantial
++commercial, industrial or non-consumer uses, unless such uses represent
++the only significant mode of use of the product.
++
++  "Installation Information" for a User Product means any methods,
++procedures, authorization keys, or other information required to install
++and execute modified versions of a covered work in that User Product from
++a modified version of its Corresponding Source.  The information must
++suffice to ensure that the continued functioning of the modified object
++code is in no case prevented or interfered with solely because
++modification has been made.
++
++  If you convey an object code work under this section in, or with, or
++specifically for use in, a User Product, and the conveying occurs as
++part of a transaction in which the right of possession and use of the
++User Product is transferred to the recipient in perpetuity or for a
++fixed term (regardless of how the transaction is characterized), the
++Corresponding Source conveyed under this section must be accompanied
++by the Installation Information.  But this requirement does not apply
++if neither you nor any third party retains the ability to install
++modified object code on the User Product (for example, the work has
++been installed in ROM).
++
++  The requirement to provide Installation Information does not include a
++requirement to continue to provide support service, warranty, or updates
++for a work that has been modified or installed by the recipient, or for
++the User Product in which it has been modified or installed.  Access to a
++network may be denied when the modification itself materially and
++adversely affects the operation of the network or violates the rules and
++protocols for communication across the network.
++
++  Corresponding Source conveyed, and Installation Information provided,
++in accord with this section must be in a format that is publicly
++documented (and with an implementation available to the public in
++source code form), and must require no special password or key for
++unpacking, reading or copying.
++
++  7. Additional Terms.
++
++  "Additional permissions" are terms that supplement the terms of this
++License by making exceptions from one or more of its conditions.
++Additional permissions that are applicable to the entire Program shall
++be treated as though they were included in this License, to the extent
++that they are valid under applicable law.  If additional permissions
++apply only to part of the Program, that part may be used separately
++under those permissions, but the entire Program remains governed by
++this License without regard to the additional permissions.
++
++  When you convey a copy of a covered work, you may at your option
++remove any additional permissions from that copy, or from any part of
++it.  (Additional permissions may be written to require their own
++removal in certain cases when you modify the work.)  You may place
++additional permissions on material, added by you to a covered work,
++for which you have or can give appropriate copyright permission.
++
++  Notwithstanding any other provision of this License, for material you
++add to a covered work, you may (if authorized by the copyright holders of
++that material) supplement the terms of this License with terms:
++
++    a) Disclaiming warranty or limiting liability differently from the
++    terms of sections 15 and 16 of this License; or
++
++    b) Requiring preservation of specified reasonable legal notices or
++    author attributions in that material or in the Appropriate Legal
++    Notices displayed by works containing it; or
++
++    c) Prohibiting misrepresentation of the origin of that material, or
++    requiring that modified versions of such material be marked in
++    reasonable ways as different from the original version; or
++
++    d) Limiting the use for publicity purposes of names of licensors or
++    authors of the material; or
++
++    e) Declining to grant rights under trademark law for use of some
++    trade names, trademarks, or service marks; or
++
++    f) Requiring indemnification of licensors and authors of that
++    material by anyone who conveys the material (or modified versions of
++    it) with contractual assumptions of liability to the recipient, for
++    any liability that these contractual assumptions directly impose on
++    those licensors and authors.
++
++  All other non-permissive additional terms are considered "further
++restrictions" within the meaning of section 10.  If the Program as you
++received it, or any part of it, contains a notice stating that it is
++governed by this License along with a term that is a further
++restriction, you may remove that term.  If a license document contains
++a further restriction but permits relicensing or conveying under this
++License, you may add to a covered work material governed by the terms
++of that license document, provided that the further restriction does
++not survive such relicensing or conveying.
++
++  If you add terms to a covered work in accord with this section, you
++must place, in the relevant source files, a statement of the
++additional terms that apply to those files, or a notice indicating
++where to find the applicable terms.
++
++  Additional terms, permissive or non-permissive, may be stated in the
++form of a separately written license, or stated as exceptions;
++the above requirements apply either way.
++
++  8. Termination.
++
++  You may not propagate or modify a covered work except as expressly
++provided under this License.  Any attempt otherwise to propagate or
++modify it is void, and will automatically terminate your rights under
++this License (including any patent licenses granted under the third
++paragraph of section 11).
++
++  However, if you cease all violation of this License, then your
++license from a particular copyright holder is reinstated (a)
++provisionally, unless and until the copyright holder explicitly and
++finally terminates your license, and (b) permanently, if the copyright
++holder fails to notify you of the violation by some reasonable means
++prior to 60 days after the cessation.
++
++  Moreover, your license from a particular copyright holder is
++reinstated permanently if the copyright holder notifies you of the
++violation by some reasonable means, this is the first time you have
++received notice of violation of this License (for any work) from that
++copyright holder, and you cure the violation prior to 30 days after
++your receipt of the notice.
++
++  Termination of your rights under this section does not terminate the
++licenses of parties who have received copies or rights from you under
++this License.  If your rights have been terminated and not permanently
++reinstated, you do not qualify to receive new licenses for the same
++material under section 10.
++
++  9. Acceptance Not Required for Having Copies.
++
++  You are not required to accept this License in order to receive or
++run a copy of the Program.  Ancillary propagation of a covered work
++occurring solely as a consequence of using peer-to-peer transmission
++to receive a copy likewise does not require acceptance.  However,
++nothing other than this License grants you permission to propagate or
++modify any covered work.  These actions infringe copyright if you do
++not accept this License.  Therefore, by modifying or propagating a
++covered work, you indicate your acceptance of this License to do so.
++
++  10. Automatic Licensing of Downstream Recipients.
++
++  Each time you convey a covered work, the recipient automatically
++receives a license from the original licensors, to run, modify and
++propagate that work, subject to this License.  You are not responsible
++for enforcing compliance by third parties with this License.
++
++  An "entity transaction" is a transaction transferring control of an
++organization, or substantially all assets of one, or subdividing an
++organization, or merging organizations.  If propagation of a covered
++work results from an entity transaction, each party to that
++transaction who receives a copy of the work also receives whatever
++licenses to the work the party's predecessor in interest had or could
++give under the previous paragraph, plus a right to possession of the
++Corresponding Source of the work from the predecessor in interest, if
++the predecessor has it or can get it with reasonable efforts.
++
++  You may not impose any further restrictions on the exercise of the
++rights granted or affirmed under this License.  For example, you may
++not impose a license fee, royalty, or other charge for exercise of
++rights granted under this License, and you may not initiate litigation
++(including a cross-claim or counterclaim in a lawsuit) alleging that
++any patent claim is infringed by making, using, selling, offering for
++sale, or importing the Program or any portion of it.
++
++  11. Patents.
++
++  A "contributor" is a copyright holder who authorizes use under this
++License of the Program or a work on which the Program is based.  The
++work thus licensed is called the contributor's "contributor version".
++
++  A contributor's "essential patent claims" are all patent claims
++owned or controlled by the contributor, whether already acquired or
++hereafter acquired, that would be infringed by some manner, permitted
++by this License, of making, using, or selling its contributor version,
++but do not include claims that would be infringed only as a
++consequence of further modification of the contributor version.  For
++purposes of this definition, "control" includes the right to grant
++patent sublicenses in a manner consistent with the requirements of
++this License.
++
++  Each contributor grants you a non-exclusive, worldwide, royalty-free
++patent license under the contributor's essential patent claims, to
++make, use, sell, offer for sale, import and otherwise run, modify and
++propagate the contents of its contributor version.
++
++  In the following three paragraphs, a "patent license" is any express
++agreement or commitment, however denominated, not to enforce a patent
++(such as an express permission to practice a patent or covenant not to
++sue for patent infringement).  To "grant" such a patent license to a
++party means to make such an agreement or commitment not to enforce a
++patent against the party.
++
++  If you convey a covered work, knowingly relying on a patent license,
++and the Corresponding Source of the work is not available for anyone
++to copy, free of charge and under the terms of this License, through a
++publicly available network server or other readily accessible means,
++then you must either (1) cause the Corresponding Source to be so
++available, or (2) arrange to deprive yourself of the benefit of the
++patent license for this particular work, or (3) arrange, in a manner
++consistent with the requirements of this License, to extend the patent
++license to downstream recipients.  "Knowingly relying" means you have
++actual knowledge that, but for the patent license, your conveying the
++covered work in a country, or your recipient's use of the covered work
++in a country, would infringe one or more identifiable patents in that
++country that you have reason to believe are valid.
++
++  If, pursuant to or in connection with a single transaction or
++arrangement, you convey, or propagate by procuring conveyance of, a
++covered work, and grant a patent license to some of the parties
++receiving the covered work authorizing them to use, propagate, modify
++or convey a specific copy of the covered work, then the patent license
++you grant is automatically extended to all recipients of the covered
++work and works based on it.
++
++  A patent license is "discriminatory" if it does not include within
++the scope of its coverage, prohibits the exercise of, or is
++conditioned on the non-exercise of one or more of the rights that are
++specifically granted under this License.  You may not convey a covered
++work if you are a party to an arrangement with a third party that is
++in the business of distributing software, under which you make payment
++to the third party based on the extent of your activity of conveying
++the work, and under which the third party grants, to any of the
++parties who would receive the covered work from you, a discriminatory
++patent license (a) in connection with copies of the covered work
++conveyed by you (or copies made from those copies), or (b) primarily
++for and in connection with specific products or compilations that
++contain the covered work, unless you entered into that arrangement,
++or that patent license was granted, prior to 28 March 2007.
++
++  Nothing in this License shall be construed as excluding or limiting
++any implied license or other defenses to infringement that may
++otherwise be available to you under applicable patent law.
++
++  12. No Surrender of Others' Freedom.
++
++  If conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License.  If you cannot convey a
++covered work so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you may
++not convey it at all.  For example, if you agree to terms that obligate you
++to collect a royalty for further conveying from those to whom you convey
++the Program, the only way you could satisfy both those terms and this
++License would be to refrain entirely from conveying the Program.
++
++  13. Remote Network Interaction; Use with the GNU General Public License.
++
++  Notwithstanding any other provision of this License, if you modify the
++Program, your modified version must prominently offer all users
++interacting with it remotely through a computer network (if your version
++supports such interaction) an opportunity to receive the Corresponding
++Source of your version by providing access to the Corresponding Source
++from a network server at no charge, through some standard or customary
++means of facilitating copying of software.  This Corresponding Source
++shall include the Corresponding Source for any work covered by version 3
++of the GNU General Public License that is incorporated pursuant to the
++following paragraph.
++
++  Notwithstanding any other provision of this License, you have
++permission to link or combine any covered work with a work licensed
++under version 3 of the GNU General Public License into a single
++combined work, and to convey the resulting work.  The terms of this
++License will continue to apply to the part which is the covered work,
++but the work with which it is combined will remain governed by version
++3 of the GNU General Public License.
++
++  14. Revised Versions of this License.
++
++  The Free Software Foundation may publish revised and/or new versions of
++the GNU Affero General Public License from time to time.  Such new versions
++will be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++  Each version is given a distinguishing version number.  If the
++Program specifies that a certain numbered version of the GNU Affero General
++Public License "or any later version" applies to it, you have the
++option of following the terms and conditions either of that numbered
++version or of any later version published by the Free Software
++Foundation.  If the Program does not specify a version number of the
++GNU Affero General Public License, you may choose any version ever published
++by the Free Software Foundation.
++
++  If the Program specifies that a proxy can decide which future
++versions of the GNU Affero General Public License can be used, that proxy's
++public statement of acceptance of a version permanently authorizes you
++to choose that version for the Program.
++
++  Later license versions may give you additional or different
++permissions.  However, no additional obligations are imposed on any
++author or copyright holder as a result of your choosing to follow a
++later version.
++
++  15. Disclaimer of Warranty.
++
++  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
++APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
++HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
++OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
++THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
++IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
++ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
++
++  16. Limitation of Liability.
++
++  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
++THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
++GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
++USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
++DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
++PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
++EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
++SUCH DAMAGES.
++
++  17. Interpretation of Sections 15 and 16.
++
++  If the disclaimer of warranty and limitation of liability provided
++above cannot be given local legal effect according to their terms,
++reviewing courts shall apply local law that most closely approximates
++an absolute waiver of all civil liability in connection with the
++Program, unless a warranty or assumption of liability accompanies a
++copy of the Program in return for a fee.
++
++                     END OF TERMS AND CONDITIONS
++
++            How to Apply These Terms to Your New Programs
++
++  If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++  To do so, attach the following notices to the program.  It is safest
++to attach them to the start of each source file to most effectively
++state the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++    <one line to give the program's name and a brief idea of what it does.>
++    Copyright (C) <year>  <name of author>
++
++    This program is free software: you can redistribute it and/or modify
++    it under the terms of the GNU Affero 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
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++    GNU Affero General Public License for more details.
++
++    You should have received a copy of the GNU Affero General Public License
++    along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++Also add information on how to contact you by electronic and paper mail.
++
++  If your software can interact with users remotely through a computer
++network, you should also make sure that it provides a way for users to
++get its source.  For example, if your program is a web application, its
++interface could display a "Source" link that leads users to an archive
++of the code.  There are many ways you could offer source, and different
++solutions will be better for different programs; see section 13 for the
++specific requirements.
++
++  You should also get your employer (if you work as a programmer) or school,
++if any, to sign a "copyright disclaimer" for the program, if necessary.
++For more information on this, and how to apply and follow the GNU AGPL, see
++<http://www.gnu.org/licenses/>.
diff --cc build/git/hooks/coding-standards.sh
index 0000000,d4e4c71..d4e4c71
mode 000000,100755..100755
--- a/build/git/hooks/coding-standards.sh
+++ b/build/git/hooks/coding-standards.sh
diff --cc build/install/easy-docker-install.sh
index 0000000,fe6e186..fe6e186
mode 000000,100755..100755
--- a/build/install/easy-docker-install.sh
+++ b/build/install/easy-docker-install.sh
diff --cc build/jenkins/create-plot-data-from-log.sh
index 0000000,ce3bfed..ce3bfed
mode 000000,100755..100755
--- a/build/jenkins/create-plot-data-from-log.sh
+++ b/build/jenkins/create-plot-data-from-log.sh
diff --cc build/jenkins/libcloud-pin
index 0000000,3fa07e6..3fa07e6
mode 000000,100644..100644
--- a/build/jenkins/libcloud-pin
+++ b/build/jenkins/libcloud-pin
diff --cc build/jenkins/package-build-dockerfiles/.gitignore
index 0000000,ceee9fa..ceee9fa
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/.gitignore
+++ b/build/jenkins/package-build-dockerfiles/.gitignore
diff --cc build/jenkins/package-build-dockerfiles/Makefile
index 0000000,70fbf28..70fbf28
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/Makefile
+++ b/build/jenkins/package-build-dockerfiles/Makefile
diff --cc build/jenkins/package-build-dockerfiles/README
index 0000000,0dfab94..0dfab94
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/README
+++ b/build/jenkins/package-build-dockerfiles/README
diff --cc build/jenkins/package-build-dockerfiles/build-all-build-containers.sh
index 0000000,34ffcce..34ffcce
mode 000000,100755..100755
--- a/build/jenkins/package-build-dockerfiles/build-all-build-containers.sh
+++ b/build/jenkins/package-build-dockerfiles/build-all-build-containers.sh
diff --cc build/jenkins/package-build-dockerfiles/centos6/Dockerfile
index 0000000,cfd94c8..cfd94c8
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/centos6/Dockerfile
+++ b/build/jenkins/package-build-dockerfiles/centos6/Dockerfile
diff --cc build/jenkins/package-build-dockerfiles/debian7/Dockerfile
index 0000000,0d04590..0d04590
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/debian7/Dockerfile
+++ b/build/jenkins/package-build-dockerfiles/debian7/Dockerfile
diff --cc build/jenkins/package-build-dockerfiles/debian8/Dockerfile
index 0000000,fcd390f..fcd390f
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/debian8/Dockerfile
+++ b/build/jenkins/package-build-dockerfiles/debian8/Dockerfile
diff --cc build/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
index 0000000,158053c..158053c
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
+++ b/build/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
diff --cc build/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
index 0000000,0b8ee7a..0b8ee7a
mode 000000,100644..100644
--- a/build/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
+++ b/build/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
diff --cc build/jenkins/package-test-dockerfiles/centos6/Dockerfile
index 0000000,69927a1..69927a1
mode 000000,100644..100644
--- a/build/jenkins/package-test-dockerfiles/centos6/Dockerfile
+++ b/build/jenkins/package-test-dockerfiles/centos6/Dockerfile
diff --cc build/jenkins/package-test-dockerfiles/centos6/localrepo.repo
index 0000000,ac6b898..ac6b898
mode 000000,100644..100644
--- a/build/jenkins/package-test-dockerfiles/centos6/localrepo.repo
+++ b/build/jenkins/package-test-dockerfiles/centos6/localrepo.repo
diff --cc build/jenkins/package-test-dockerfiles/debian7/Dockerfile
index 0000000,c9a2fdc..c9a2fdc
mode 000000,100644..100644
--- a/build/jenkins/package-test-dockerfiles/debian7/Dockerfile
+++ b/build/jenkins/package-test-dockerfiles/debian7/Dockerfile
diff --cc build/jenkins/package-test-dockerfiles/debian8/Dockerfile
index 0000000,cde1847..cde1847
mode 000000,100644..100644
--- a/build/jenkins/package-test-dockerfiles/debian8/Dockerfile
+++ b/build/jenkins/package-test-dockerfiles/debian8/Dockerfile
diff --cc build/jenkins/package-test-dockerfiles/ubuntu1204/Dockerfile
index 0000000,0cb77c8..0cb77c8
mode 000000,100644..100644
--- a/build/jenkins/package-test-dockerfiles/ubuntu1204/Dockerfile
+++ b/build/jenkins/package-test-dockerfiles/ubuntu1204/Dockerfile
diff --cc build/jenkins/package-test-dockerfiles/ubuntu1404/Dockerfile
index 0000000,6c4d0e9..6c4d0e9
mode 000000,100644..100644
--- a/build/jenkins/package-test-dockerfiles/ubuntu1404/Dockerfile
+++ b/build/jenkins/package-test-dockerfiles/ubuntu1404/Dockerfile
diff --cc build/jenkins/package-testing/common-test-packages.sh
index 0000000,2dc67ab..2dc67ab
mode 000000,100755..100755
--- a/build/jenkins/package-testing/common-test-packages.sh
+++ b/build/jenkins/package-testing/common-test-packages.sh
diff --cc build/jenkins/package-testing/deb-common-test-packages.sh
index 0000000,5f32a60..5f32a60
mode 000000,100755..100755
--- a/build/jenkins/package-testing/deb-common-test-packages.sh
+++ b/build/jenkins/package-testing/deb-common-test-packages.sh
diff --cc build/jenkins/package-testing/test-package-arvados-api-server.sh
index 0000000,e975448..e975448
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-package-arvados-api-server.sh
+++ b/build/jenkins/package-testing/test-package-arvados-api-server.sh
diff --cc build/jenkins/package-testing/test-package-arvados-node-manager.sh
index 0000000,2f416d1..2f416d1
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-package-arvados-node-manager.sh
+++ b/build/jenkins/package-testing/test-package-arvados-node-manager.sh
diff --cc build/jenkins/package-testing/test-package-arvados-sso-server.sh
index 0000000,c1a377e..c1a377e
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-package-arvados-sso-server.sh
+++ b/build/jenkins/package-testing/test-package-arvados-sso-server.sh
diff --cc build/jenkins/package-testing/test-package-arvados-workbench.sh
index 0000000,1be4dea..1be4dea
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-package-arvados-workbench.sh
+++ b/build/jenkins/package-testing/test-package-arvados-workbench.sh
diff --cc build/jenkins/package-testing/test-package-python27-python-arvados-fuse.sh
index 0000000,1654be9..1654be9
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-package-python27-python-arvados-fuse.sh
+++ b/build/jenkins/package-testing/test-package-python27-python-arvados-fuse.sh
diff --cc build/jenkins/package-testing/test-package-python27-python-arvados-python-client.sh
index 0000000,0772fbf..0772fbf
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-package-python27-python-arvados-python-client.sh
+++ b/build/jenkins/package-testing/test-package-python27-python-arvados-python-client.sh
diff --cc build/jenkins/package-testing/test-packages-centos6.sh
index 0000000,4e05364..4e05364
mode 000000,100755..100755
--- a/build/jenkins/package-testing/test-packages-centos6.sh
+++ b/build/jenkins/package-testing/test-packages-centos6.sh
diff --cc build/jenkins/package-testing/test-packages-debian7.sh
index 0000000,54ce94c..54ce94c
mode 000000,120000..120000
--- a/build/jenkins/package-testing/test-packages-debian7.sh
+++ b/build/jenkins/package-testing/test-packages-debian7.sh
diff --cc build/jenkins/package-testing/test-packages-debian8.sh
index 0000000,54ce94c..54ce94c
mode 000000,120000..120000
--- a/build/jenkins/package-testing/test-packages-debian8.sh
+++ b/build/jenkins/package-testing/test-packages-debian8.sh
diff --cc build/jenkins/package-testing/test-packages-ubuntu1204.sh
index 0000000,54ce94c..54ce94c
mode 000000,120000..120000
--- a/build/jenkins/package-testing/test-packages-ubuntu1204.sh
+++ b/build/jenkins/package-testing/test-packages-ubuntu1204.sh
diff --cc build/jenkins/package-testing/test-packages-ubuntu1404.sh
index 0000000,54ce94c..54ce94c
mode 000000,120000..120000
--- a/build/jenkins/package-testing/test-packages-ubuntu1404.sh
+++ b/build/jenkins/package-testing/test-packages-ubuntu1404.sh
diff --cc build/jenkins/rails-package-scripts/README.md
index 0000000,3a93c31..3a93c31
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/README.md
+++ b/build/jenkins/rails-package-scripts/README.md
diff --cc build/jenkins/rails-package-scripts/arvados-api-server.sh
index 0000000,c2b99f0..c2b99f0
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/arvados-api-server.sh
+++ b/build/jenkins/rails-package-scripts/arvados-api-server.sh
diff --cc build/jenkins/rails-package-scripts/arvados-sso-server.sh
index 0000000,10b2ee2..10b2ee2
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/arvados-sso-server.sh
+++ b/build/jenkins/rails-package-scripts/arvados-sso-server.sh
diff --cc build/jenkins/rails-package-scripts/arvados-workbench.sh
index 0000000,f2b8a56..f2b8a56
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/arvados-workbench.sh
+++ b/build/jenkins/rails-package-scripts/arvados-workbench.sh
diff --cc build/jenkins/rails-package-scripts/postinst.sh
index 0000000,6fac26b..6fac26b
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/postinst.sh
+++ b/build/jenkins/rails-package-scripts/postinst.sh
diff --cc build/jenkins/rails-package-scripts/postrm.sh
index 0000000,2d63f0b..2d63f0b
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/postrm.sh
+++ b/build/jenkins/rails-package-scripts/postrm.sh
diff --cc build/jenkins/rails-package-scripts/prerm.sh
index 0000000,4ef5904..4ef5904
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/prerm.sh
+++ b/build/jenkins/rails-package-scripts/prerm.sh
diff --cc build/jenkins/rails-package-scripts/step2.sh
index 0000000,816b906..816b906
mode 000000,100644..100644
--- a/build/jenkins/rails-package-scripts/step2.sh
+++ b/build/jenkins/rails-package-scripts/step2.sh
diff --cc build/jenkins/run-build-docker-images.sh
index 0000000,0a5841d..0a5841d
mode 000000,100755..100755
--- a/build/jenkins/run-build-docker-images.sh
+++ b/build/jenkins/run-build-docker-images.sh
diff --cc build/jenkins/run-build-docker-jobs-image.sh
index 0000000,fcf849b..fcf849b
mode 000000,100755..100755
--- a/build/jenkins/run-build-docker-jobs-image.sh
+++ b/build/jenkins/run-build-docker-jobs-image.sh
diff --cc build/jenkins/run-build-packages-all-targets.sh
index 0000000,f1a1e1c..f1a1e1c
mode 000000,100755..100755
--- a/build/jenkins/run-build-packages-all-targets.sh
+++ b/build/jenkins/run-build-packages-all-targets.sh
diff --cc build/jenkins/run-build-packages-one-target.sh
index 0000000,c5e0a89..c5e0a89
mode 000000,100755..100755
--- a/build/jenkins/run-build-packages-one-target.sh
+++ b/build/jenkins/run-build-packages-one-target.sh
diff --cc build/jenkins/run-build-packages-sso.sh
index 0000000,cc673a6..cc673a6
mode 000000,100755..100755
--- a/build/jenkins/run-build-packages-sso.sh
+++ b/build/jenkins/run-build-packages-sso.sh
diff --cc build/jenkins/run-build-packages.sh
index 0000000,136b73c..136b73c
mode 000000,100755..100755
--- a/build/jenkins/run-build-packages.sh
+++ b/build/jenkins/run-build-packages.sh
diff --cc build/jenkins/run-cwl-tests.sh
index 0000000,53c0538..53c0538
mode 000000,100755..100755
--- a/build/jenkins/run-cwl-tests.sh
+++ b/build/jenkins/run-cwl-tests.sh
diff --cc build/jenkins/run-deploy.sh
index 0000000,1b06c65..1b06c65
mode 000000,100755..100755
--- a/build/jenkins/run-deploy.sh
+++ b/build/jenkins/run-deploy.sh
diff --cc build/jenkins/run-diagnostics-suite.sh
index 0000000,015a053..015a053
mode 000000,100755..100755
--- a/build/jenkins/run-diagnostics-suite.sh
+++ b/build/jenkins/run-diagnostics-suite.sh
diff --cc build/jenkins/run-library.sh
index 0000000,c2e9b40..c2e9b40
mode 000000,100755..100755
--- a/build/jenkins/run-library.sh
+++ b/build/jenkins/run-library.sh
diff --cc build/jenkins/run-performance-suite.sh
index 0000000,2944bda..2944bda
mode 000000,100755..100755
--- a/build/jenkins/run-performance-suite.sh
+++ b/build/jenkins/run-performance-suite.sh
diff --cc build/jenkins/run-tapestry-tests.sh
index 0000000,851a81d..851a81d
mode 000000,100755..100755
--- a/build/jenkins/run-tapestry-tests.sh
+++ b/build/jenkins/run-tapestry-tests.sh
diff --cc build/jenkins/run-tests.sh
index 0000000,a17d610..a17d610
mode 000000,100755..100755
--- a/build/jenkins/run-tests.sh
+++ b/build/jenkins/run-tests.sh
diff --cc build/jenkins/run_upload_packages.py
index 0000000,04e6c80..04e6c80
mode 000000,100755..100755
--- a/build/jenkins/run_upload_packages.py
+++ b/build/jenkins/run_upload_packages.py

commit 2b9b7518a60a71315a1504bf96b3182122bec702
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Mar 7 14:28:10 2016 -0500

    8345: Uninstall old llfuse from reused virtualenv, if necessary.

diff --git a/jenkins/run-tests.sh b/jenkins/run-tests.sh
index 1289095..a17d610 100755
--- a/jenkins/run-tests.sh
+++ b/jenkins/run-tests.sh
@@ -425,6 +425,12 @@ pip freeze 2>/dev/null | egrep ^apache-libcloud==$LIBCLOUD_PIN \
     || pip install --pre --ignore-installed https://github.com/curoverse/libcloud/archive/apache-libcloud-$LIBCLOUD_PIN.zip >/dev/null \
     || fatal "pip install apache-libcloud failed"
 
+# Uninstall old llfuse, because services/fuse "pip install" won't
+# upgrade it by default.
+if pip freeze | egrep '^llfuse==0\.41\.'; then
+    yes | pip uninstall 'llfuse<0.42'
+fi
+
 # Deactivate Python 2 virtualenv
 deactivate
 

commit 8eda2e72fc37cdb9f947c19ad994ac094aa0a507
Merge: 1659fd3 2213311
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Mar 7 00:47:10 2016 -0500

    8345: Merge branch 'master' into 8345-llfuse-unpin


commit 1659fd3eca62ac51e7628af3464dd03787e2d84f
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Mar 7 00:46:08 2016 -0500

    8345: Fix up log messages to show which distro/package is being built/tested.

diff --git a/jenkins/run-build-packages-one-target.sh b/jenkins/run-build-packages-one-target.sh
index 34d8c08..c5e0a89 100755
--- a/jenkins/run-build-packages-one-target.sh
+++ b/jenkins/run-build-packages-one-target.sh
@@ -138,7 +138,7 @@ if test -z "$packages" ; then
         centos6)
             packages="$packages python27-python-arvados-fuse
                   python27-python-arvados-python-client"
-        ;;
+            ;;
         *)
             packages="$packages python-arvados-fuse
                   python-arvados-python-client"
@@ -164,6 +164,8 @@ docker_volume_args=(
 
 if [[ -n "$test_packages" ]]; then
     for p in $packages ; do
+        echo
+        echo "START: $p test on $IMAGE" >&2
         if docker run --rm \
             "${docker_volume_args[@]}" \
             --env ARVADOS_DEBUG=1 \
@@ -171,24 +173,26 @@ if [[ -n "$test_packages" ]]; then
             --env "WORKSPACE=/arvados" \
             "$IMAGE" $COMMAND $p
         then
-            true
+            echo "OK: $p test on $IMAGE succeeded" >&2
         else
             FINAL_EXITCODE=$?
             package_fails="$package_fails $p"
-            echo "ERROR: $tag test failed with exit status $FINAL_EXITCODE." >&2
+            echo "ERROR: $p test on $IMAGE failed with exit status $FINAL_EXITCODE" >&2
         fi
     done
 else
+    echo
+    echo "START: build packages on $IMAGE" >&2
     if docker run --rm \
         "${docker_volume_args[@]}" \
         --env ARVADOS_DEBUG=1 \
         "$IMAGE" $COMMAND
     then
         echo
-        echo "Build packages for $TARGET succeeded." >&2
+        echo "OK: build packages on $IMAGE succeeded" >&2
     else
         FINAL_EXITCODE=$?
-        echo "ERROR: $tag build failed with exit status $FINAL_EXITCODE." >&2
+        echo "ERROR: build packages on $IMAGE failed with exit status $FINAL_EXITCODE" >&2
     fi
 fi
 
diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
index bec5279..c2e9b40 100755
--- a/jenkins/run-library.sh
+++ b/jenkins/run-library.sh
@@ -225,6 +225,10 @@ fpm_build () {
     fi
   fi
 
+  if [[ "${DEBUG:-0}" != "0" ]]; then
+    COMMAND_ARR+=('--verbose' '--log' 'info')
+  fi
+
   if [[ "$PACKAGE_NAME" != "$PACKAGE" ]]; then
     COMMAND_ARR+=('-n' "$PACKAGE_NAME")
   fi

commit 27ac5631c777fefc89839089109d0b06d596019d
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Mar 7 00:44:46 2016 -0500

    8345: Build contextlib2 backport, needed by python-llfuse on debian7.

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 21cc6c6..136b73c 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -93,7 +93,7 @@ case "$TARGET" in
             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
             ciso8601 pycrypto backports.ssl_match_hostname llfuse \
-            'pycurl<7.21.5')
+            'pycurl<7.21.5' contextlib2)
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         ;;
     debian8)

commit a4f8a4e24e7a778194878c200391c4a3dca55961
Author: Tom Clegg <tom at curoverse.com>
Date:   Thu Mar 3 13:02:41 2016 -0500

    8345: Add build-essential to ubuntu1204 package-building image

diff --git a/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile b/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
index 7d480a5..158053c 100644
--- a/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
+++ b/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
@@ -2,7 +2,7 @@ FROM ubuntu:precise
 MAINTAINER Ward Vandewege <ward at curoverse.com>
 
 # Install dependencies and set up system.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python2.7-dev python3 python-setuptools python3-setuptools libcurl4-gnutls-dev curl git libattr1-dev libfuse-dev libpq-dev python-pip
+RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python2.7-dev python3 python-setuptools python3-setuptools libcurl4-gnutls-dev curl git libattr1-dev libfuse-dev libpq-dev python-pip build-essential
 
 # Install RVM
 RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \

commit cdbcd6d4e3af4d99aeec97263ad12774e1ef81e4
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Mar 2 20:05:26 2016 -0500

    8345: Build and install new fuse libs before building llfuse.

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index ccea8a2..21cc6c6 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -288,75 +288,12 @@ handle_python_package
     rm -rf "$SRC_BUILD_DIR"
 )
 
-# Go binaries
-export GOPATH=$(mktemp -d)
-package_go_binary services/keepstore keepstore \
-    "Keep storage daemon, accessible to clients on the LAN"
-package_go_binary services/keepproxy keepproxy \
-    "Make a Keep cluster accessible to clients that are not on the LAN"
-package_go_binary services/keep-web keep-web \
-    "Static web hosting service for user data stored in Arvados Keep"
-package_go_binary services/datamanager arvados-data-manager \
-    "Ensure block replication levels, report disk usage, and determine which blocks should be deleted when space is needed"
-package_go_binary services/arv-git-httpd arvados-git-httpd \
-    "Provide authenticated http access to Arvados-hosted git repositories"
-package_go_binary services/crunchstat crunchstat \
-    "Gather cpu/memory/network statistics of running Crunch jobs"
-package_go_binary tools/keep-rsync keep-rsync \
-    "Copy all data from one set of Keep servers to another"
-
-# The Python SDK
-# Please resist the temptation to add --no-python-fix-name to the fpm call here
-# (which would remove the python- prefix from the package name), because this
-# package is a dependency of arvados-fuse, and fpm can not omit the python-
-# prefix from only one of the dependencies of a package...  Maybe I could
-# whip up a patch and send it upstream, but that will be for another day. Ward,
-# 2014-05-15
+# On older platforms we need to publish a backport of libfuse >=2.9.2,
+# and we need to build and install it here in order to even build an
+# llfuse package.
 cd $WORKSPACE/packages/$TARGET
-rm -rf "$WORKSPACE/sdk/python/build"
-fpm_build $WORKSPACE/sdk/python "${PYTHON2_PKG_PREFIX}-arvados-python-client" 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/python/arvados_python_client.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados Python SDK" --deb-recommends=git
-
-# The PAM module
-if [[ $TARGET =~ debian|ubuntu ]]; then
-    cd $WORKSPACE/packages/$TARGET
-    rm -rf "$WORKSPACE/sdk/pam/build"
-    fpm_build $WORKSPACE/sdk/pam libpam-arvados 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/pam/arvados_pam.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=PAM module for authenticating shell logins using Arvados API tokens" --depends libpam-python
-fi
-
-# The FUSE driver
-# Please see comment about --no-python-fix-name above; we stay consistent and do
-# not omit the python- prefix first.
-cd $WORKSPACE/packages/$TARGET
-rm -rf "$WORKSPACE/services/fuse/build"
-fpm_build $WORKSPACE/services/fuse "${PYTHON2_PKG_PREFIX}-arvados-fuse" 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/fuse/arvados_fuse.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Keep FUSE driver"
-
-# The node manager
-cd $WORKSPACE/packages/$TARGET
-rm -rf "$WORKSPACE/services/nodemanager/build"
-fpm_build $WORKSPACE/services/nodemanager arvados-node-manager 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/nodemanager/arvados_node_manager.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados node manager"
-
-# The Docker image cleaner
-cd $WORKSPACE/packages/$TARGET
-rm -rf "$WORKSPACE/services/dockercleaner/build"
-fpm_build $WORKSPACE/services/dockercleaner arvados-docker-cleaner 'Curoverse, Inc.' 'python3' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/dockercleaner/arvados_docker_cleaner.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados Docker image cleaner"
-
-# Forked libcloud
-LIBCLOUD_DIR=$(mktemp -d)
-(
-    cd $LIBCLOUD_DIR
-    git clone $DASHQ_UNLESS_DEBUG https://github.com/curoverse/libcloud.git .
-    git checkout apache-libcloud-$LIBCLOUD_PIN
-    # libcloud is absurdly noisy without -q, so force -q here
-    OLD_DASHQ_UNLESS_DEBUG=$DASHQ_UNLESS_DEBUG
-    DASHQ_UNLESS_DEBUG=-q
-    handle_python_package
-    DASHQ_UNLESS_DEBUG=$OLD_DASHQ_UNLESS_DEBUG
-)
-fpm_build $LIBCLOUD_DIR "$PYTHON2_PKG_PREFIX"-apache-libcloud
-rm -rf $LIBCLOUD_DIR
-
 if [[ $TARGET =~ ubuntu1204 ]]; then
-    # port libfuse 2.9.2 to Ubuntu 12.04 
+    # port libfuse 2.9.2 to Ubuntu 12.04
     LIBFUSE_DIR=$(mktemp -d)
     (
         cd $LIBFUSE_DIR
@@ -392,6 +329,11 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
     fpm_build "$LIBFUSE_DIR/fuse_2.9.2-5_amd64.deb" fuse "Ubuntu Developers" deb "2.9.2" --iteration 5
     fpm_build "$LIBFUSE_DIR/libfuse2_2.9.2-5_amd64.deb" libfuse2 "Ubuntu Developers" deb "2.9.2" --iteration 5
     fpm_build "$LIBFUSE_DIR/libfuse-dev_2.9.2-5_amd64.deb" libfuse-dev "Ubuntu Developers" deb "2.9.2" --iteration 5
+    dpkg -i \
+        "$WORKSPACE/packages/$TARGET/fuse_2.9.2-5_amd64.deb" \
+        "$WORKSPACE/packages/$TARGET/libfuse2_2.9.2-5_amd64.deb" \
+        "$WORKSPACE/packages/$TARGET/libfuse-dev_2.9.2-5_amd64.deb"
+    apt-get -y --no-install-recommends -f install
     rm -rf $LIBFUSE_DIR
 elif [[ $TARGET =~ centos6 ]]; then
     # port fuse 2.9.2 to centos 6
@@ -421,8 +363,80 @@ elif [[ $TARGET =~ centos6 ]]; then
     fpm_build "$LIBFUSE_DIR/fuse-libs-2.9.2-6.el6.x86_64.rpm" fuse-libs "Centos Developers" rpm "2.9.2" --iteration 5
     fpm_build "$LIBFUSE_DIR/fuse-2.9.2-6.el6.x86_64.rpm" fuse "Centos Developers" rpm "2.9.2" --iteration 5 --no-auto-depends
     fpm_build "$LIBFUSE_DIR/fuse-devel-2.9.2-6.el6.x86_64.rpm" fuse-devel "Centos Developers" rpm "2.9.2" --iteration 5 --no-auto-depends
+    yum install \
+        "$WORKSPACE/packages/$TARGET/fuse-libs-2.9.2-5.x86_64.rpm" \
+        "$WORKSPACE/packages/$TARGET/fuse-2.9.2-5.x86_64.rpm" \
+        "$WORKSPACE/packages/$TARGET/fuse-devel-2.9.2-5.x86_64.rpm"
+fi
+
+# Go binaries
+cd $WORKSPACE/packages/$TARGET
+export GOPATH=$(mktemp -d)
+package_go_binary services/keepstore keepstore \
+    "Keep storage daemon, accessible to clients on the LAN"
+package_go_binary services/keepproxy keepproxy \
+    "Make a Keep cluster accessible to clients that are not on the LAN"
+package_go_binary services/keep-web keep-web \
+    "Static web hosting service for user data stored in Arvados Keep"
+package_go_binary services/datamanager arvados-data-manager \
+    "Ensure block replication levels, report disk usage, and determine which blocks should be deleted when space is needed"
+package_go_binary services/arv-git-httpd arvados-git-httpd \
+    "Provide authenticated http access to Arvados-hosted git repositories"
+package_go_binary services/crunchstat crunchstat \
+    "Gather cpu/memory/network statistics of running Crunch jobs"
+package_go_binary tools/keep-rsync keep-rsync \
+    "Copy all data from one set of Keep servers to another"
+
+# The Python SDK
+# Please resist the temptation to add --no-python-fix-name to the fpm call here
+# (which would remove the python- prefix from the package name), because this
+# package is a dependency of arvados-fuse, and fpm can not omit the python-
+# prefix from only one of the dependencies of a package...  Maybe I could
+# whip up a patch and send it upstream, but that will be for another day. Ward,
+# 2014-05-15
+cd $WORKSPACE/packages/$TARGET
+rm -rf "$WORKSPACE/sdk/python/build"
+fpm_build $WORKSPACE/sdk/python "${PYTHON2_PKG_PREFIX}-arvados-python-client" 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/python/arvados_python_client.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados Python SDK" --deb-recommends=git
+
+# The PAM module
+if [[ $TARGET =~ debian|ubuntu ]]; then
+    cd $WORKSPACE/packages/$TARGET
+    rm -rf "$WORKSPACE/sdk/pam/build"
+    fpm_build $WORKSPACE/sdk/pam libpam-arvados 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/pam/arvados_pam.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=PAM module for authenticating shell logins using Arvados API tokens" --depends libpam-python
 fi
 
+# The FUSE driver
+# Please see comment about --no-python-fix-name above; we stay consistent and do
+# not omit the python- prefix first.
+cd $WORKSPACE/packages/$TARGET
+rm -rf "$WORKSPACE/services/fuse/build"
+fpm_build $WORKSPACE/services/fuse "${PYTHON2_PKG_PREFIX}-arvados-fuse" 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/fuse/arvados_fuse.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Keep FUSE driver"
+
+# The node manager
+cd $WORKSPACE/packages/$TARGET
+rm -rf "$WORKSPACE/services/nodemanager/build"
+fpm_build $WORKSPACE/services/nodemanager arvados-node-manager 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/nodemanager/arvados_node_manager.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados node manager"
+
+# The Docker image cleaner
+cd $WORKSPACE/packages/$TARGET
+rm -rf "$WORKSPACE/services/dockercleaner/build"
+fpm_build $WORKSPACE/services/dockercleaner arvados-docker-cleaner 'Curoverse, Inc.' 'python3' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/dockercleaner/arvados_docker_cleaner.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados Docker image cleaner"
+
+# Forked libcloud
+LIBCLOUD_DIR=$(mktemp -d)
+(
+    cd $LIBCLOUD_DIR
+    git clone $DASHQ_UNLESS_DEBUG https://github.com/curoverse/libcloud.git .
+    git checkout apache-libcloud-$LIBCLOUD_PIN
+    # libcloud is absurdly noisy without -q, so force -q here
+    OLD_DASHQ_UNLESS_DEBUG=$DASHQ_UNLESS_DEBUG
+    DASHQ_UNLESS_DEBUG=-q
+    handle_python_package
+    DASHQ_UNLESS_DEBUG=$OLD_DASHQ_UNLESS_DEBUG
+)
+fpm_build $LIBCLOUD_DIR "$PYTHON2_PKG_PREFIX"-apache-libcloud
+rm -rf $LIBCLOUD_DIR
+
 # Python 2 dependencies
 declare -a PIP_DOWNLOAD_SWITCHES=(--no-deps)
 # Add --no-use-wheel if this pip knows it.

commit 2213311cb8647e41604a94d64ddd02b21ae78411
Author: Ward Vandewege <ward at curoverse.com>
Date:   Wed Mar 2 10:35:55 2016 -0500

    Build arvbox instead of the old docker images.
    
    refs #8231

diff --git a/jenkins/run-build-docker-images.sh b/jenkins/run-build-docker-images.sh
index 71910c2..0a5841d 100755
--- a/jenkins/run-build-docker-images.sh
+++ b/jenkins/run-build-docker-images.sh
@@ -124,15 +124,16 @@ timer_reset
 
 # clean up the docker build environment
 cd "$WORKSPACE"
-cd docker
-./build.sh realclean
 
-rm -f config.yml
+tools/arvbox/bin/arvbox build dev
+ECODE=$?
 
-# Get test config.yml file
-cp $HOME/docker/config.yml .
+if [[ "$ECODE" != "0" ]]; then
+    title "!!!!!! docker BUILD FAILED !!!!!!"
+    EXITCODE=$(($EXITCODE + $ECODE))
+fi
 
-./build.sh
+tools/arvbox/bin/arvbox build localdemo
 
 ECODE=$?
 
@@ -155,14 +156,8 @@ else
         ## even though credentials are already in .dockercfg
         docker login -u arvados
 
-        docker_push arvados/api
-        docker_push arvados/compute
-        docker_push arvados/doc
-        docker_push arvados/workbench
-        docker_push arvados/keep
-        docker_push arvados/keepproxy
-        docker_push arvados/shell
-        docker_push arvados/sso
+        docker_push arvados/arvbox-dev
+        docker_push arvados/arvbox-demo
         title "upload arvados images complete (`timer`)"
     else
         title "upload arvados images SKIPPED because no --upload option set"

commit 659d7361e7a0fc1f6537e6851ffd3d29ce19bb26
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Mar 2 10:34:58 2016 -0500

    8345: Use a separate vendor/cache for each OS target. See dev.arvados.org/issues/8345#note-11

diff --git a/jenkins/run-build-packages-one-target.sh b/jenkins/run-build-packages-one-target.sh
index 9597703..34d8c08 100755
--- a/jenkins/run-build-packages-one-target.sh
+++ b/jenkins/run-build-packages-one-target.sh
@@ -150,13 +150,27 @@ FINAL_EXITCODE=0
 
 package_fails=""
 
+mkdir -p "$WORKSPACE/apps/workbench/vendor/cache-$TARGET"
+mkdir -p "$WORKSPACE/services/api/vendor/cache-$TARGET"
+
+docker_volume_args=(
+    -v "$JENKINS_DIR:/jenkins"
+    -v "$WORKSPACE:/arvados"
+    -v /arvados/services/api/vendor/bundle
+    -v /arvados/apps/workbench/vendor/bundle
+    -v "$WORKSPACE/services/api/vendor/cache-$TARGET:/arvados/services/api/vendor/cache"
+    -v "$WORKSPACE/apps/workbench/vendor/cache-$TARGET:/arvados/apps/workbench/vendor/cache"
+)
+
 if [[ -n "$test_packages" ]]; then
     for p in $packages ; do
-        if docker run --rm -v "$JENKINS_DIR:/jenkins" -v "$WORKSPACE:/arvados" \
-               --env ARVADOS_DEBUG=1 \
-               --env "TARGET=$TARGET" \
-               --env "WORKSPACE=/arvados" \
-               "$IMAGE" $COMMAND $p ; then
+        if docker run --rm \
+            "${docker_volume_args[@]}" \
+            --env ARVADOS_DEBUG=1 \
+            --env "TARGET=$TARGET" \
+            --env "WORKSPACE=/arvados" \
+            "$IMAGE" $COMMAND $p
+        then
             true
         else
             FINAL_EXITCODE=$?
@@ -165,8 +179,11 @@ if [[ -n "$test_packages" ]]; then
         fi
     done
 else
-    if docker run --rm -v "$JENKINS_DIR:/jenkins" -v "$WORKSPACE:/arvados" \
-           --env ARVADOS_DEBUG=1 "$IMAGE" $COMMAND ; then
+    if docker run --rm \
+        "${docker_volume_args[@]}" \
+        --env ARVADOS_DEBUG=1 \
+        "$IMAGE" $COMMAND
+    then
         echo
         echo "Build packages for $TARGET succeeded." >&2
     else

commit 97424aa89b3f279986621ec5f574670dacb5a836
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Wed Mar 2 10:24:08 2016 -0500

    Remove arvbox from arvados-dev (now in arvados/tools) refs #8231

diff --git a/arvbox/README.md b/arvbox/README.md
deleted file mode 100644
index 8098686..0000000
--- a/arvbox/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Arvados-in-a-box
-
-Self-contained development, demonstration and testing environment for Arvados.
-
-## Quick start
-
-```
-$ bin/arvbox reboot localdemo
-```
-
-## Usage
-
-```
-Arvados-in-a-box
-
-arvbox (build|start|run|open|shell|ip|stop|reboot|reset|destroy|log|svrestart)
-
-build <config>      build arvbox Docker image
-start|run <config>  start arvbox container
-open       open arvbox workbench in a web browser
-shell      enter arvbox shell
-ip         print arvbox ip address
-stop       stop arvbox container
-restart <config>  stop, then run again
-reboot  <config>  stop, build arvbox Docker image, run
-reset      delete arvbox arvados data (be careful!)
-destroy    delete all arvbox code and data (be careful!)
-log       <service> tail log of specified service
-svrestart <service> restart specified service inside arvbox
-clone <from> <to>   clone an arvbox
-```
-
-## Requirements
-
-* Linux 3.x+ and Docker 1.9+
-* Minimum of 3 GiB of RAM  + additional memory to run jobs
-* Minimum of 3 GiB of disk + storage for actual data
-
-## Configs
-
-### dev
-Development configuration.  Boots a complete Arvados environment inside the
-container.  The "arvados", "arvado-dev" and "sso-devise-omniauth-provider" code
-directories along data directories "postgres", "var", "passenger" and "gems"
-are bind mounted from the host file system for easy access and persistence
-across container rebuilds.  Services are bound to the Docker container's
-network IP address and can only be accessed on the local host.
-
-In "dev" mode, you can override the default autogenerated settings of Rails
-projects by adding "application.yml.override" to any Rails project (sso, api,
-workbench).  This can be used to test out API server settings or point
-Workbench at an alternate API server.
-
-### localdemo
-Demo configuration.  Boots a complete Arvados environment inside the container.
-Unlike the development configuration, code directories are included in the demo
-image, and data directories are stored in a separate data volume container.
-Services are bound to the Docker container's network IP address and can only be
-accessed on the local host.
-
-### test
-Run the test suite.
-
-### publicdev
-Publicly accessible development configuration.  Similar to 'dev' except that
-service ports are published to the host's IP address and can accessed by anyone
-who can connect to the host system.  WARNING! The public arvbox configuration
-is NOT SECURE and must not be placed on a public IP address or used for
-production work.
-
-### publicdemo
-Publicly accessible development configuration.  Similar to 'localdemo' except
-that service ports are published to the host's IP address and can accessed by
-anyone who can connect to the host system.  WARNING! The public arvbox configuration
-is NOT SECURE and must not be placed on a public IP address or used for
-production work.
-
-## Environment variables
-
-### ARVBOX_DOCKER
-The location of Dockerfile.base and associated files used by "arvbox build".
-default: result of $(readlink -f $(dirname $0)/../lib/arvbox/docker)
-
-### ARVBOX_CONTAINER
-The name of the Docker container to manipulate.
-default: arvbox
-
-### ARVBOX_BASE
-The base directory to store persistent data for arvbox containers.
-default: $HOME/.arvbox
-
-### ARVBOX_DATA
-The base directory to store persistent data for the current container.
-default: $ARVBOX_BASE/$ARVBOX_CONTAINER
-
-### ARVADOS_ROOT
-The root directory of the Arvados source tree
-default: $ARVBOX_DATA/arvados
-
-### ARVADOS_DEV_ROOT
-The root directory of the Arvados-dev source tree
-default: $ARVBOX_DATA/arvados-dev
-
-### SSO_ROOT
-The root directory of the SSO source tree
-default: $ARVBOX_DATA/sso-devise-omniauth-provider
-
-### ARVBOX_PUBLISH_IP
-The IP address on which to publish services when running in public
-configuration.  Overrides default detection of the host's IP address.
-
-## Notes
-
-Services are designed to install and auto-configure on start or restart.  For
-example, the service script for keepstore always compiles keepstore from source
-and registers the daemon with the API server.
-
-Services are run with process supervision, so a service which exits will be
-restarted.  Dependencies between services are handled by repeatedly trying and
-failing the service script until dependencies are fulfilled (by other service
-scripts) enabling the service script to complete.
diff --git a/arvbox/bin/arvbox b/arvbox/bin/arvbox
deleted file mode 100755
index d790cb6..0000000
--- a/arvbox/bin/arvbox
+++ /dev/null
@@ -1,402 +0,0 @@
-#!/bin/sh
-
-set -e
-
-if ! test -d /sys/fs/cgroup ; then
-     echo "Arvbox requires cgroups to be mounted at /sys/fs/cgroup in order to use"
-     echo "Docker-in-Docker.  Older operating systems that put cgroups in other"
-     echo "places (such as /cgroup) are not supported."
-     exit 1
-fi
-
-if ! which docker >/dev/null 2>/dev/null ; then
-  echo "Arvbox requires Docker.  To install, run the following command as root:"
-  echo "curl -sSL https://get.docker.com/ | sh"
-  exit 1
-fi
-
-if test -z "$ARVBOX_DOCKER" ; then
-    if which greadlink >/dev/null 2>/dev/null ; then
-        ARVBOX_DOCKER=$(greadlink -f $(dirname $0)/../lib/arvbox/docker)
-    else
-        ARVBOX_DOCKER=$(readlink -f $(dirname $0)/../lib/arvbox/docker)
-    fi
-fi
-
-if test -z "$ARVBOX_CONTAINER" ; then
-    ARVBOX_CONTAINER=arvbox
-fi
-
-if test -z "$ARVBOX_BASE" ; then
-    ARVBOX_BASE="$HOME/.arvbox"
-fi
-
-if test -z "$ARVBOX_DATA" ; then
-    ARVBOX_DATA="$ARVBOX_BASE/$ARVBOX_CONTAINER"
-fi
-
-if test -z "$ARVADOS_ROOT" ; then
-    ARVADOS_ROOT="$ARVBOX_DATA/arvados"
-fi
-
-if test -z "$ARVADOS_DEV_ROOT" ; then
-    ARVADOS_DEV_ROOT="$ARVBOX_DATA/arvados-dev"
-fi
-
-if test -z "$SSO_ROOT" ; then
-    SSO_ROOT="$ARVBOX_DATA/sso-devise-omniauth-provider"
-fi
-
-PG_DATA="$ARVBOX_DATA/postgres"
-VAR_DATA="$ARVBOX_DATA/var"
-PASSENGER="$ARVBOX_DATA/passenger"
-GEMS="$ARVBOX_DATA/gems"
-
-getip() {
-    docker inspect $ARVBOX_CONTAINER | grep \"IPAddress\" | head -n1 | tr -d ' ":,\n' | cut -c10-
-}
-
-updateconf() {
-    if test -f ~/.config/arvados/$ARVBOX_CONTAINER.conf ; then
-        sed "s/ARVADOS_API_HOST=.*/ARVADOS_API_HOST=$(getip):8000/" <$HOME/.config/arvados/$ARVBOX_CONTAINER.conf >$HOME/.config/arvados/$ARVBOX_CONTAINER.conf.tmp
-        mv ~/.config/arvados/$ARVBOX_CONTAINER.conf.tmp ~/.config/arvados/$ARVBOX_CONTAINER.conf
-    else
-        mkdir -p $HOME/.config/arvados
-        cat >$HOME/.config/arvados/$ARVBOX_CONTAINER.conf <<EOF
-ARVADOS_API_HOST=$(getip):8000
-ARVADOS_API_TOKEN=
-ARVADOS_API_HOST_INSECURE=true
-EOF
-    fi
-}
-
-wait_for_arvbox() {
-    FF=/tmp/arvbox-fifo-$$
-    mkfifo $FF
-    docker logs -f $ARVBOX_CONTAINER > $FF &
-    LOGPID=$!
-    while read line ; do
-        echo $line
-        if echo $line | grep "Workbench is running at" >/dev/null ; then
-            kill $LOGPID
-        fi
-    done < $FF
-    rm $FF
-    echo
-    if test -n "$localip" ; then
-        echo "export ARVADOS_API_HOST=$localip:8000"
-    else
-        echo "export ARVADOS_API_HOST=$(getip):8000"
-    fi
-}
-
-run() {
-    if docker ps -a | grep -E "$ARVBOX_CONTAINER$" -q ; then
-        echo "Container $ARVBOX_CONTAINER is already running, use stop, restart or reboot"
-        exit 0
-    fi
-
-    if echo "$1" | grep '^public' ; then
-        if test -n "$ARVBOX_PUBLISH_IP" ; then
-            localip=$ARVBOX_PUBLISH_IP
-        else
-            defaultdev=$(/sbin/ip route|awk '/default/ { print $5 }')
-            localip=$(ip addr show $defaultdev | grep 'inet ' | sed 's/ *inet \(.*\)\/.*/\1/')
-        fi
-        iptemp=$(tempfile)
-        echo $localip > $iptemp
-        chmod og+r $iptemp
-        PUBLIC="--volume=$iptemp:/var/run/localip_override
-              --publish=80:80
-              --publish=8000:8000
-              --publish=8900:8900
-              --publish=9001:9001
-              --publish=9002:9002
-              --publish=25100:25100
-              --publish=25107:25107
-              --publish=25108:25108
-              --publish=8001:8001"
-    else
-        PUBLIC=""
-    fi
-
-    if echo "$1" | grep 'demo$' ; then
-        if test -d "$ARVBOX_DATA" ; then
-            echo "It looks like you already have a development container named $ARVBOX_CONTAINER."
-            echo "Set ARVBOX_CONTAINER to set a different name for your demo container"
-            exit 1
-        fi
-
-        if ! (docker ps -a | grep -E "$ARVBOX_CONTAINER-data$" -q) ; then
-            docker create -v /var/lib/postgresql -v /var/lib/arvados --name $ARVBOX_CONTAINER-data arvados/arvbox-demo /bin/true
-        fi
-
-        docker run \
-               --detach \
-               --name=$ARVBOX_CONTAINER \
-               --privileged \
-               --volumes-from $ARVBOX_CONTAINER-data \
-               $PUBLIC \
-               arvados/arvbox-demo
-        updateconf
-        wait_for_arvbox
-    else
-        mkdir -p "$PG_DATA" "$VAR_DATA" "$PASSENGER" "$GEMS"
-
-        if ! test -d "$ARVADOS_ROOT" ; then
-            git clone https://github.com/curoverse/arvados.git "$ARVADOS_ROOT"
-        fi
-        if ! test -d "$SSO_ROOT" ; then
-            git clone https://github.com/curoverse/sso-devise-omniauth-provider.git "$SSO_ROOT"
-        fi
-
-        if test "$1" = test ; then
-            shift
-
-            if ! test -d "$ARVADOS_DEV_ROOT" ; then
-                git clone https://github.com/curoverse/arvados-dev.git "$ARVADOS_DEV_ROOT"
-            fi
-
-            mkdir -p $VAR_DATA/test
-
-            docker run \
-                   --detach \
-                   --name=$ARVBOX_CONTAINER \
-                   --privileged \
-                   "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \
-                   "--volume=$ARVADOS_DEV_ROOT:/usr/src/arvados-dev:rw" \
-                   "--volume=$SSO_ROOT:/usr/src/sso:rw" \
-                   "--volume=$PG_DATA:/var/lib/postgresql:rw" \
-                   "--volume=$VAR_DATA:/var/lib/arvados:rw" \
-                   "--volume=$PASSENGER:/var/lib/passenger:rw" \
-                   "--volume=$GEMS:/var/lib/gems:rw" \
-                   arvados/arvbox-dev \
-                   /usr/local/bin/runsvinit -svdir=/etc/test-service
-
-            docker exec -ti \
-                    $ARVBOX_CONTAINER \
-                    /usr/local/lib/arvbox/runsu.sh \
-                    /usr/local/lib/arvbox/waitforpostgres.sh
-
-            docker exec -ti \
-                   $ARVBOX_CONTAINER \
-                   /usr/local/lib/arvbox/runsu.sh \
-                   /var/lib/arvbox/service/sso/run-service --only-setup
-
-            docker exec -ti \
-                   $ARVBOX_CONTAINER \
-                   /usr/local/lib/arvbox/runsu.sh \
-                   /var/lib/arvbox/service/api/run-service --only-setup
-
-            docker exec -ti \
-                   $ARVBOX_CONTAINER \
-                   /usr/local/lib/arvbox/runsu.sh \
-                   /usr/src/arvados-dev/jenkins/run-tests.sh \
-                   --temp /var/lib/arvados/test \
-                   WORKSPACE=/usr/src/arvados \
-                   GEM_HOME=/var/lib/gems \
-                   "$@"
-        elif echo "$1" | grep 'dev$' ; then
-            docker run \
-                   --detach \
-                   --name=$ARVBOX_CONTAINER \
-                   --privileged \
-                   "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \
-                   "--volume=$SSO_ROOT:/usr/src/sso:rw" \
-                   "--volume=$PG_DATA:/var/lib/postgresql:rw" \
-                   "--volume=$VAR_DATA:/var/lib/arvados:rw" \
-                   "--volume=$PASSENGER:/var/lib/passenger:rw" \
-                   "--volume=$GEMS:/var/lib/gems:rw" \
-                   $PUBLIC \
-                   arvados/arvbox-dev
-            updateconf
-            wait_for_arvbox
-            echo "The Arvados source code is checked out at: $ARVADOS_ROOT"
-        else
-            echo "Unknown configuration '$1'"
-        fi
-    fi
-}
-
-stop() {
-    if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then
-        docker stop $ARVBOX_CONTAINER
-    fi
-
-    VOLUMES=--volumes=true
-    if docker ps -a --filter "status=created" | grep -E "$ARVBOX_CONTAINER$" -q ; then
-        docker rm $VOLUMES $ARVBOX_CONTAINER
-    fi
-    if docker ps -a --filter "status=exited" | grep -E "$ARVBOX_CONTAINER$" -q ; then
-        docker rm $VOLUMES $ARVBOX_CONTAINER
-    fi
-}
-
-build() {
-    if ! test -f "$ARVBOX_DOCKER/Dockerfile.base" ;  then
-        echo "Could not find Dockerfile ($ARVBOX_DOCKER/Dockerfile.base)"
-        exit 1
-    fi
-    docker build -t arvados/arvbox-base -f "$ARVBOX_DOCKER/Dockerfile.base" "$ARVBOX_DOCKER"
-    if test "$1" = localdemo -o "$1" = publicdemo ; then
-        docker build -t arvados/arvbox-demo -f "$ARVBOX_DOCKER/Dockerfile.demo" "$ARVBOX_DOCKER"
-    else
-        docker build -t arvados/arvbox-dev -f "$ARVBOX_DOCKER/Dockerfile.dev" "$ARVBOX_DOCKER"
-    fi
-}
-
-check() {
-    case "$1" in
-        localdemo|publicdemo|dev|publicdev|test)
-            true
-            ;;
-        *)
-            echo "Argument to $subcmd must be one of localdemo, publicdemo, dev, publicdev, test"
-            exit 1
-        ;;
-    esac
-}
-
-subcmd="$1"
-if test -n "$subcmd" ; then
-    shift
-fi
-case "$subcmd" in
-    build)
-        check $@
-        build $@
-        ;;
-
-    start|run)
-        check $@
-        run $@
-        ;;
-
-    sh*)
-        docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM GEM_HOME=/var/lib/gems /bin/bash
-        ;;
-
-    stop)
-        stop
-        ;;
-
-    restart)
-        check $@
-        stop
-        run $@
-        ;;
-
-    reboot)
-        check $@
-        stop
-        build $@
-        run $@
-        ;;
-
-    ip|open)
-        if test "$subcmd" = 'ip' ; then
-            echo $(getip)
-        else
-            xdg-open http://$(getip)
-        fi
-        ;;
-
-    status)
-        echo "Selected: $ARVBOX_CONTAINER"
-        if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then
-            echo "Status: running"
-            echo "IP: $(getip)"
-        else
-            echo "Status: not running"
-        fi
-        if test -d "$ARVBOX_DATA" ; then
-            echo "Data: $ARVBOX_DATA"
-        elif docker ps -a | grep -E "$ARVBOX_CONTAINER-data$" -q ; then
-            echo "Data: $ARVBOX_CONTAINER-data"
-        else
-            echo "Data: none"
-        fi
-        ;;
-
-    reset|destroy)
-        stop
-        if test -d "$ARVBOX_DATA" ; then
-            if test "$subcmd" = destroy ; then
-                if test "$1" != -f ; then
-                    echo "WARNING!  This will delete your entire arvbox ($ARVBOX_DATA)."
-                    echo "Use destroy -f if you really mean it."
-                    exit 1
-                fi
-                set -x
-                rm -rf "$ARVBOX_DATA"
-            else
-                if test "$1" != -f ; then
-                    echo "WARNING!  This will delete your arvbox data ($ARVBOX_DATA)."
-                    echo "Code and downloaded packages will be preserved."
-                    echo "Use reset -f if you really mean it."
-                    exit 1
-                fi
-                set -x
-                rm -rf "$ARVBOX_DATA/postgres"
-                rm -rf "$ARVBOX_DATA/var"
-            fi
-        else
-            if test "$1" != -f ; then
-                echo "WARNING!  This will delete your data container $ARVBOX_CONTAINER-data.  Use -f if you really mean it."
-                exit 1
-            fi
-            set -x
-            docker rm "$ARVBOX_CONTAINER-data"
-        fi
-        ;;
-
-    log)
-        if test -n "$1" ; then
-            docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM less --follow-name +GF "/etc/service/$1/log/main/current"
-        else
-            docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM tail $(docker exec -ti $ARVBOX_CONTAINER find -L /etc -path '/etc/service/*/log/main/current' -printf " %p")
-        fi
-        ;;
-
-    sv)
-        if test -n "$1" ; then
-            docker exec -ti $ARVBOX_CONTAINER sv "$1" "$2"
-        else
-            echo "Usage: $0 $subcmd <service>"
-            echo "Available services:"
-            docker exec -ti $ARVBOX_CONTAINER ls /etc/service
-        fi
-        ;;
-
-    clone)
-        if test -n "$2" ; then
-            cp -r "$ARVBOX_BASE/$1" "$ARVBOX_BASE/$2"
-            echo "Created new arvbox $2"
-            echo "export ARVBOX_CONTAINER=$2"
-        else
-            echo "clone <from> <to>   clone an arvbox"
-            echo "available arvboxes: $(ls $ARVBOX_BASE)"
-        fi
-        ;;
-
-    *)
-        echo "Arvados-in-a-box"
-        echo
-        echo "$(basename $0) (build|start|run|open|shell|ip|stop|reboot|reset|destroy|log|svrestart)"
-        echo
-        echo "build <config>      build arvbox Docker image"
-        echo "start|run <config>  start $ARVBOX_CONTAINER container"
-        echo "open       open arvbox workbench in a web browser"
-        echo "shell      enter arvbox shell"
-        echo "ip         print arvbox ip address"
-        echo "status     print some information about current arvbox"
-        echo "stop       stop arvbox container"
-        echo "restart <config>  stop, then run again"
-        echo "reboot  <config>  stop, build arvbox Docker image, run"
-        echo "reset      delete arvbox arvados data (be careful!)"
-        echo "destroy    delete all arvbox code and data (be careful!)"
-        echo "log       <service> tail log of specified service"
-        echo "sv        <start|stop|restart> <service> change state of service inside arvbox"
-        echo "clone <from> <to>   clone an arvbox"
-        ;;
-esac
diff --git a/arvbox/lib/arvbox/docker/Dockerfile.base b/arvbox/lib/arvbox/docker/Dockerfile.base
deleted file mode 100644
index 280ac68..0000000
--- a/arvbox/lib/arvbox/docker/Dockerfile.base
+++ /dev/null
@@ -1,42 +0,0 @@
-FROM debian:8
-
-RUN apt-get update && \
-    DEBIAN_FRONTEND=noninteractive apt-get -yq install \
-    postgresql-9.4 git gcc golang-go runit \
-    ruby rake bundler curl libpq-dev \
-    libcurl4-openssl-dev libssl-dev zlib1g-dev libpcre3-dev \
-    openssh-server python-setuptools netcat-traditional \
-    libpython-dev fuse libfuse-dev python-pip python-yaml \
-    pkg-config libattr1-dev python-llfuse python-pycurl \
-    libwww-perl libio-socket-ssl-perl libcrypt-ssleay-perl \
-    libjson-perl nginx gitolite3 lsof python-epydoc graphviz \
-    apt-transport-https ca-certificates slurm-wlm
-
-VOLUME /var/lib/docker
-VOLUME /var/log/nginx
-VOLUME /etc/ssl/private
-
-RUN apt-key adv --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D || \
-    apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
-
-RUN mkdir -p /etc/apt/sources.list.d && \
-    echo deb https://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list && \
-    apt-get update && \
-    DEBIAN_FRONTEND=noninteractive apt-get -yq install docker-engine=1.9.1-0~jessie
-
-RUN rm -rf /var/lib/postgresql && mkdir -p /var/lib/postgresql
-
-RUN cd /root && \
-    GOPATH=$PWD go get github.com/curoverse/runsvinit && \
-    install bin/runsvinit /usr/local/bin
-
-ADD fuse.conf /etc/
-
-ADD crunch-setup.sh gitolite.rc \
-    keep-setup.sh common.sh createusers.sh \
-    logger runsu.sh waitforpostgres.sh \
-    application_yml_override.py \
-    /usr/local/lib/arvbox/
-
-# Start the supervisor.
-CMD ["/usr/local/bin/runsvinit"]
diff --git a/arvbox/lib/arvbox/docker/Dockerfile.demo b/arvbox/lib/arvbox/docker/Dockerfile.demo
deleted file mode 100644
index 1f13415..0000000
--- a/arvbox/lib/arvbox/docker/Dockerfile.demo
+++ /dev/null
@@ -1,17 +0,0 @@
-FROM arvados/arvbox-base
-
-RUN cd /usr/src && \
-    git clone https://github.com/curoverse/arvados.git && \
-    git clone https://github.com/curoverse/sso-devise-omniauth-provider.git sso
-
-ADD service/ /var/lib/arvbox/service
-RUN rmdir /etc/service && ln -sf /var/lib/arvbox/service /etc
-
-RUN chown -R 1000:1000 /usr/src && /usr/local/lib/arvbox/createusers.sh
-
-RUN sudo -u arvbox /var/lib/arvbox/service/sso/run-service --only-deps
-RUN sudo -u arvbox /var/lib/arvbox/service/api/run-service --only-deps
-RUN sudo -u arvbox /var/lib/arvbox/service/workbench/run-service --only-deps
-RUN sudo -u arvbox /var/lib/arvbox/service/doc/run-service --only-deps
-RUN sudo -u arvbox /var/lib/arvbox/service/vm/run-service --only-deps
-RUN sudo -u arvbox /var/lib/arvbox/service/sdk/run-service
diff --git a/arvbox/lib/arvbox/docker/Dockerfile.dev b/arvbox/lib/arvbox/docker/Dockerfile.dev
deleted file mode 100644
index 051c274..0000000
--- a/arvbox/lib/arvbox/docker/Dockerfile.dev
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM arvados/arvbox-base
-
-RUN apt-get update && \
-    DEBIAN_FRONTEND=noninteractive apt-get -yq install \
-    python-virtualenv python3-virtualenv linkchecker xvfb iceweasel
-
-RUN set -e && \
- PJS=phantomjs-1.9.7-linux-x86_64 && \
- curl -L -o/tmp/$PJS.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/$PJS.tar.bz2 && \
- tar -C /usr/local -xjf /tmp/$PJS.tar.bz2 && \
- ln -s ../$PJS/bin/phantomjs /usr/local/bin/
-
-ADD service/ /var/lib/arvbox/service
-RUN rmdir /etc/service && ln -sf /var/lib/arvbox/service /etc
-
-RUN mkdir /etc/test-service && ln -sf /var/lib/arvbox/service/postgres /etc/test-service
diff --git a/arvbox/lib/arvbox/docker/application_yml_override.py b/arvbox/lib/arvbox/docker/application_yml_override.py
deleted file mode 100755
index 98a8e48..0000000
--- a/arvbox/lib/arvbox/docker/application_yml_override.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-import yaml
-
-try:
-    with open("application.yml.override") as f:
-        b = yaml.load(f)
-except IOError:
-    exit()
-
-with open("application.yml") as f:
-    a = yaml.load(f)
-
-def recursiveMerge(a, b):
-    if isinstance(a, dict) and isinstance(b, dict):
-        for k in b:
-            print k
-            a[k] = recursiveMerge(a.get(k), b[k])
-        return a
-    else:
-        return b
-
-with open("application.yml", "w") as f:
-    yaml.dump(recursiveMerge(a, b), f)
diff --git a/arvbox/lib/arvbox/docker/common.sh b/arvbox/lib/arvbox/docker/common.sh
deleted file mode 100644
index 4c2de47..0000000
--- a/arvbox/lib/arvbox/docker/common.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-
-if test -s /var/run/localip_override ; then
-    localip=$(cat /var/run/localip_override)
-else
-    defaultdev=$(/sbin/ip route|awk '/default/ { print $5 }')
-    localip=$(ip addr show $defaultdev | grep 'inet ' | sed 's/ *inet \(.*\)\/.*/\1/')
-fi
-
-export GEM_HOME=/var/lib/gems
-export GEM_PATH=/var/lib/gems
-
-declare -A services
-services=(
-  [workbench]=80
-  [api]=8000
-  [sso]=8900
-  [arv-git-httpd]=9001
-  [keep-web]=9002
-  [keepproxy]=25100
-  [keepstore0]=25107
-  [keepstore1]=25108
-  [ssh]=22
-  [doc]=8001
-)
-
-if test "$(id arvbox -u 2>/dev/null)" = 0 ; then
-    PGUSER=postgres
-    PGGROUP=postgres
-else
-    PGUSER=arvbox
-    PGGROUP=arvbox
-fi
-
-run_bundler() {
-    if test -f Gemfile.lock ; then
-        frozen=--frozen
-    else
-        frozen=""
-    fi
-    if ! flock /var/lib/arvados/gems.lock bundle install --path $GEM_HOME --local --no-deployment $frozen "$@" ; then
-        flock /var/lib/arvados/gems.lock bundle install --path $GEM_HOME --no-deployment $frozen "$@"
-    fi
-}
-
-pip_install() {
-    pushd /var/lib/arvados/pip
-    for p in $(ls http*.tar.gz) ; do
-        if test -f $p ; then
-            ln -sf $p $(echo $p | sed 's/.*%2F\(.*\)/\1/')
-        fi
-    done
-    for p in $(ls http*.whl) ; do
-        if test -f $p ; then
-            ln -sf $p $(echo $p | sed 's/.*%2F\(.*\)/\1/')
-        fi
-    done
-    popd
-
-    if ! pip install --no-index --find-links /var/lib/arvados/pip $1 ; then
-        pip install $1
-    fi
-}
diff --git a/arvbox/lib/arvbox/docker/createusers.sh b/arvbox/lib/arvbox/docker/createusers.sh
deleted file mode 100755
index b77c9c2..0000000
--- a/arvbox/lib/arvbox/docker/createusers.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-set -e -o pipefail
-
-if ! grep "^arvbox:" /etc/passwd >/dev/null 2>/dev/null ; then
-    HOSTUID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f4)
-    HOSTGID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f5)
-    FUSEGID=$(ls -nd /dev/fuse | sed 's/ */ /' | cut -d' ' -f5)
-
-    mkdir -p /var/lib/arvados/git /var/lib/gems /var/lib/passenger
-
-    groupadd --gid $HOSTGID --non-unique arvbox
-    groupadd --gid $FUSEGID --non-unique fuse
-    groupadd --gid $HOSTGID --non-unique git
-    useradd --home-dir /var/lib/arvados \
-            --uid $HOSTUID --gid $HOSTGID \
-            --non-unique \
-            --groups docker,fuse \
-            arvbox
-    useradd --home-dir /var/lib/arvados/git --uid $HOSTUID --gid $HOSTGID --non-unique git
-    useradd --groups docker,fuse crunch
-
-    chown arvbox:arvbox -R /usr/local /var/lib/arvados /var/lib/gems \
-          /var/lib/passenger /var/lib/postgresql \
-          /var/lib/nginx /var/log/nginx /etc/ssl/private
-
-    mkdir -p /var/lib/gems/ruby/2.1.0
-    chown arvbox:arvbox -R /var/lib/gems/ruby/2.1.0
-
-    mkdir -p /tmp/crunch0 /tmp/crunch1
-    chown crunch:crunch -R /tmp/crunch0 /tmp/crunch1
-
-    echo "arvbox    ALL=(crunch) NOPASSWD: ALL" >> /etc/sudoers
-fi
diff --git a/arvbox/lib/arvbox/docker/crunch-setup.sh b/arvbox/lib/arvbox/docker/crunch-setup.sh
deleted file mode 100755
index 178fec1..0000000
--- a/arvbox/lib/arvbox/docker/crunch-setup.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/gostuff
-cd /var/lib/arvados/gostuff
-
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/crunchstat"
-install bin/crunchstat /usr/local/bin
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /usr/src/arvados/services/api/superuser_token)
-export CRUNCH_JOB_BIN=/usr/src/arvados/sdk/cli/bin/crunch-job
-export PERLLIB=/usr/src/arvados/sdk/perl/lib
-export CRUNCH_TMP=/tmp/$1
-export CRUNCH_DISPATCH_LOCKFILE=/var/lock/$1-dispatch
-export CRUNCH_JOB_DOCKER_BIN=docker
-export HOME=/tmp/$1
-
-cd /usr/src/arvados/services/api
-exec bundle exec ./script/crunch-dispatch.rb development
diff --git a/arvbox/lib/arvbox/docker/fuse.conf b/arvbox/lib/arvbox/docker/fuse.conf
deleted file mode 100644
index a439ab8..0000000
--- a/arvbox/lib/arvbox/docker/fuse.conf
+++ /dev/null
@@ -1 +0,0 @@
-user_allow_other
diff --git a/arvbox/lib/arvbox/docker/gitolite.rc b/arvbox/lib/arvbox/docker/gitolite.rc
deleted file mode 100644
index 03c4b29..0000000
--- a/arvbox/lib/arvbox/docker/gitolite.rc
+++ /dev/null
@@ -1,213 +0,0 @@
-# This is based on the default Gitolite configuration file with the following
-# changes applied as described here:
-# http://doc.arvados.org/install/install-arv-git-httpd.html
-
-# configuration variables for gitolite
-
-# This file is in perl syntax.  But you do NOT need to know perl to edit it --
-# just mind the commas, use single quotes unless you know what you're doing,
-# and make sure the brackets and braces stay matched up!
-
-# (Tip: perl allows a comma after the last item in a list also!)
-
-# HELP for commands can be had by running the command with "-h".
-
-# HELP for all the other FEATURES can be found in the documentation (look for
-# "list of non-core programs shipped with gitolite" in the master index) or
-# directly in the corresponding source file.
-
-my $repo_aliases;
-my $aliases_src = "$ENV{HOME}/.gitolite/arvadosaliases.pl";
-if ($ENV{HOME} && (-e $aliases_src)) {
-    $repo_aliases = do $aliases_src;
-}
-$repo_aliases ||= {};
-
-%RC = (
-
-    REPO_ALIASES => $repo_aliases,
-
-    # ------------------------------------------------------------------
-
-    # default umask gives you perms of '0700'; see the rc file docs for
-    # how/why you might change this
-    UMASK                           =>  0022,
-
-    # look for "git-config" in the documentation
-    GIT_CONFIG_KEYS                 =>  '',
-
-    # comment out if you don't need all the extra detail in the logfile
-    LOG_EXTRA                       =>  1,
-    # logging options
-    # 1. leave this section as is for 'normal' gitolite logging (default)
-    # 2. uncomment this line to log ONLY to syslog:
-    # LOG_DEST                      => 'syslog',
-    # 3. uncomment this line to log to syslog and the normal gitolite log:
-    # LOG_DEST                      => 'syslog,normal',
-    # 4. prefixing "repo-log," to any of the above will **also** log just the
-    #    update records to "gl-log" in the bare repo directory:
-    # LOG_DEST                      => 'repo-log,normal',
-    # LOG_DEST                      => 'repo-log,syslog',
-    # LOG_DEST                      => 'repo-log,syslog,normal',
-
-    # roles.  add more roles (like MANAGER, TESTER, ...) here.
-    #   WARNING: if you make changes to this hash, you MUST run 'gitolite
-    #   compile' afterward, and possibly also 'gitolite trigger POST_COMPILE'
-    ROLES => {
-        READERS                     =>  1,
-        WRITERS                     =>  1,
-    },
-
-    # enable caching (currently only Redis).  PLEASE RTFM BEFORE USING!!!
-    # CACHE                         =>  'Redis',
-
-    # ------------------------------------------------------------------
-
-    # rc variables used by various features
-
-    # the 'info' command prints this as additional info, if it is set
-        # SITE_INFO                 =>  'Please see http://blahblah/gitolite for more help',
-
-    # the CpuTime feature uses these
-        # display user, system, and elapsed times to user after each git operation
-        # DISPLAY_CPU_TIME          =>  1,
-        # display a warning if total CPU times (u, s, cu, cs) crosses this limit
-        # CPU_TIME_WARN_LIMIT       =>  0.1,
-
-    # the Mirroring feature needs this
-        # HOSTNAME                  =>  "foo",
-
-    # TTL for redis cache; PLEASE SEE DOCUMENTATION BEFORE UNCOMMENTING!
-        # CACHE_TTL                 =>  600,
-
-    # ------------------------------------------------------------------
-
-    # suggested locations for site-local gitolite code (see cust.html)
-
-        # this one is managed directly on the server
-        # LOCAL_CODE                =>  "$ENV{HOME}/local",
-
-        # or you can use this, which lets you put everything in a subdirectory
-        # called "local" in your gitolite-admin repo.  For a SECURITY WARNING
-        # on this, see http://gitolite.com/gitolite/non-core.html#pushcode
-        # LOCAL_CODE                =>  "$rc{GL_ADMIN_BASE}/local",
-
-    # ------------------------------------------------------------------
-
-    # List of commands and features to enable
-
-    ENABLE => [
-
-        # COMMANDS
-
-            # These are the commands enabled by default
-            'help',
-            'desc',
-            'info',
-            'perms',
-            'writable',
-
-            # Uncomment or add new commands here.
-            # 'create',
-            # 'fork',
-            # 'mirror',
-            # 'readme',
-            # 'sskm',
-            # 'D',
-
-        # These FEATURES are enabled by default.
-
-            # essential (unless you're using smart-http mode)
-            'ssh-authkeys',
-
-            # creates git-config enties from gitolite.conf file entries like 'config foo.bar = baz'
-            'git-config',
-
-            # creates git-daemon-export-ok files; if you don't use git-daemon, comment this out
-            'daemon',
-
-            # creates projects.list file; if you don't use gitweb, comment this out
-            'gitweb',
-
-        # These FEATURES are disabled by default; uncomment to enable.  If you
-        # need to add new ones, ask on the mailing list :-)
-
-        # user-visible behaviour
-
-            # prevent wild repos auto-create on fetch/clone
-            # 'no-create-on-read',
-            # no auto-create at all (don't forget to enable the 'create' command!)
-            # 'no-auto-create',
-
-            # access a repo by another (possibly legacy) name
-            'Alias',
-
-            # give some users direct shell access.  See documentation in
-            # sts.html for details on the following two choices.
-            # "Shell $ENV{HOME}/.gitolite.shell-users",
-            # 'Shell alice bob',
-
-            # set default roles from lines like 'option default.roles-1 = ...', etc.
-            # 'set-default-roles',
-
-            # show more detailed messages on deny
-            # 'expand-deny-messages',
-
-            # show a message of the day
-            # 'Motd',
-
-        # system admin stuff
-
-            # enable mirroring (don't forget to set the HOSTNAME too!)
-            # 'Mirroring',
-
-            # allow people to submit pub files with more than one key in them
-            # 'ssh-authkeys-split',
-
-            # selective read control hack
-            # 'partial-copy',
-
-            # manage local, gitolite-controlled, copies of read-only upstream repos
-            # 'upstream',
-
-            # updates 'description' file instead of 'gitweb.description' config item
-            # 'cgit',
-
-            # allow repo-specific hooks to be added
-            # 'repo-specific-hooks',
-
-        # performance, logging, monitoring...
-
-            # be nice
-            # 'renice 10',
-
-            # log CPU times (user, system, cumulative user, cumulative system)
-            # 'CpuTime',
-
-        # syntactic_sugar for gitolite.conf and included files
-
-            # allow backslash-escaped continuation lines in gitolite.conf
-            # 'continuation-lines',
-
-            # create implicit user groups from directory names in keydir/
-            # 'keysubdirs-as-groups',
-
-            # allow simple line-oriented macros
-            # 'macros',
-
-        # Kindergarten mode
-
-            # disallow various things that sensible people shouldn't be doing anyway
-            # 'Kindergarten',
-    ],
-
-);
-
-# ------------------------------------------------------------------------------
-# per perl rules, this should be the last line in such a file:
-1;
-
-# Local variables:
-# mode: perl
-# End:
-# vim: set syn=perl:
diff --git a/arvbox/lib/arvbox/docker/keep-setup.sh b/arvbox/lib/arvbox/docker/keep-setup.sh
deleted file mode 100755
index b66463f..0000000
--- a/arvbox/lib/arvbox/docker/keep-setup.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-sleep 2
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/gostuff
-cd /var/lib/arvados/gostuff
-
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/keepstore"
-install bin/keepstore /usr/local/bin
-
-mkdir -p /var/lib/arvados/$1
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-
-set +e
-read -rd $'\000' keepservice <<EOF
-{
- "service_host":"$localip",
- "service_port":$2,
- "service_ssl_flag":false,
- "service_type":"disk"
-}
-EOF
-set -e
-
-if test -s /var/lib/arvados/$1-uuid ; then
-    keep_uuid=$(cat /var/lib/arvados/$1-uuid)
-    arv keep_service update --uuid $keep_uuid --keep-service "$keepservice"
-else
-    UUID=$(arv --format=uuid keep_service create --keep-service "$keepservice")
-    echo $UUID > /var/lib/arvados/$1-uuid
-fi
-
-set +e
-killall -HUP keepproxy
-
-exec /usr/local/bin/keepstore \
-     -listen=:$2 \
-     -enforce-permissions=true \
-     -blob-signing-key-file=/var/lib/arvados/blob_signing_key \
-     -max-buffers=20 \
-     -volume=/var/lib/arvados/$1
diff --git a/arvbox/lib/arvbox/docker/logger b/arvbox/lib/arvbox/docker/logger
deleted file mode 100755
index a79a518..0000000
--- a/arvbox/lib/arvbox/docker/logger
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-exec svlogd -tt ./main
diff --git a/arvbox/lib/arvbox/docker/runit-docker/.gitignore b/arvbox/lib/arvbox/docker/runit-docker/.gitignore
deleted file mode 100644
index bbf313b..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/.gitignore
+++ /dev/null
@@ -1,32 +0,0 @@
-# Object files
-*.o
-*.ko
-*.obj
-*.elf
-
-# Precompiled Headers
-*.gch
-*.pch
-
-# Libraries
-*.lib
-*.a
-*.la
-*.lo
-
-# Shared objects (inc. Windows DLLs)
-*.dll
-*.so
-*.so.*
-*.dylib
-
-# Executables
-*.exe
-*.out
-*.app
-*.i*86
-*.x86_64
-*.hex
-
-# Debug files
-*.dSYM/
diff --git a/arvbox/lib/arvbox/docker/runit-docker/LICENSE b/arvbox/lib/arvbox/docker/runit-docker/LICENSE
deleted file mode 100644
index d158667..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2015, Kosma Moczek
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-
-* 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.
-
-* Neither the name of runit-docker 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.
-
diff --git a/arvbox/lib/arvbox/docker/runit-docker/Makefile b/arvbox/lib/arvbox/docker/runit-docker/Makefile
deleted file mode 100644
index 9a28963..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-CFLAGS=-std=c99 -Wall -O2 -fPIC -D_POSIX_SOURCE -D_GNU_SOURCE
-LDLIBS=-ldl
-
-PROGNAME=runit-docker
-
-all: $(PROGNAME).so
-
-%.so: %.c
-	gcc -shared $(CFLAGS) $(LDLIBS) -o $@ $^
-
-install: runit-docker.so
-	mkdir -p $(DESTDIR)/sbin
-	mkdir -p $(DESTDIR)/lib
-	install -m 755 $(PROGNAME) $(DESTDIR)/sbin/
-	install -m 755 $(PROGNAME).so $(DESTDIR)/lib/
-
-clean:
-	$(RM) $(PROGNAME).so
diff --git a/arvbox/lib/arvbox/docker/runit-docker/README.md b/arvbox/lib/arvbox/docker/runit-docker/README.md
deleted file mode 100644
index 1bcb8cc..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# runit-docker
-
-Docker and `runsvdir` don't quite agree on what each signal means, causing
-TONS of frustration when attempting to use `runsvdir` as init under Docker.
-`runit-docker` is a plug'n'play adapter library which does signal translation
-without the overhead and nuisance of running a nanny process.
-
-## Features
-
-* Pressing Ctrl-C does a clean shutdown.
-* `docker stop` does a clean shutdown.
-
-Under the hood, `runit-docker` translates `SIGTERM` and `SIGINT` to `SIGHUP`.
-
-## Usage
-
-* Build with `make`, install with `make install`.
-* Add `CMD ["/sbin/runit-docker"]` to your `Dockerfile`.
-* Run `debian/rules clean build binary` to build a Debian package.
-
-## Author
-
-runit-docker was written by Kosma Moczek <kosma.moczek at pixers.pl> during a single Scrum
-planning meeting. Damn meetings.
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/changelog b/arvbox/lib/arvbox/docker/runit-docker/debian/changelog
deleted file mode 100644
index 7d8689f..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/changelog
+++ /dev/null
@@ -1,12 +0,0 @@
-runit-docker (1.1) unstable; urgency=low
-
-  * Simplify logic.
-  * Install for SIGINT as well.
-
- -- Kosma Moczek <kosma at kosma.pl>  Mon, 11 May 2015 12:23:59 +0000
-
-runit-docker (1.0) unstable; urgency=low
-
-  * Initial release
-
- -- Kosma Moczek <kosma at kosma.pl>  Mon, 11 May 2015 12:23:59 +0000
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/compat b/arvbox/lib/arvbox/docker/runit-docker/debian/compat
deleted file mode 100644
index ec63514..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-9
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/control b/arvbox/lib/arvbox/docker/runit-docker/debian/control
deleted file mode 100644
index 4060915..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/control
+++ /dev/null
@@ -1,14 +0,0 @@
-Source: runit-docker
-Section: contrib/admin
-Priority: optional
-Maintainer: Kosma Moczek <kosma at kosma.pl>
-Build-Depends: debhelper (>= 9)
-Standards-Version: 3.9.5
-Homepage: https://github.com/kosma/runit-docker
-#Vcs-Git: git://anonscm.debian.org/collab-maint/runit-docker.git
-#Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/runit-docker.git;a=summary
-
-Package: runit-docker
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: painlessly use runit in Docker containers
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/copyright b/arvbox/lib/arvbox/docker/runit-docker/debian/copyright
deleted file mode 100644
index 8679a6a..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/copyright
+++ /dev/null
@@ -1,31 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: runit-docker
-Source: https://github.com/kosma/runit-docker
-
-Files: *
-Copyright: 2015 Kosma Moczek <kosma at kosma.pl>
-License: MIT
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 
- * Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
- 
- * 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.
- 
- * Neither the name of runit-docker 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.
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/docs b/arvbox/lib/arvbox/docker/runit-docker/debian/docs
deleted file mode 100644
index b43bf86..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/docs
+++ /dev/null
@@ -1 +0,0 @@
-README.md
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/rules b/arvbox/lib/arvbox/docker/runit-docker/debian/rules
deleted file mode 100755
index ce15cce..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/rules
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/make -f
-# See debhelper(7) (uncomment to enable)
-# output every command that modifies files on the build system.
-#DH_VERBOSE = 1
-
-# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
-DPKG_EXPORT_BUILDFLAGS = 1
-include /usr/share/dpkg/default.mk
-
-# see FEATURE AREAS in dpkg-buildflags(1)
-#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
-
-# see ENVIRONMENT in dpkg-buildflags(1)
-# package maintainers to append CFLAGS
-#export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
-# package maintainers to append LDFLAGS
-#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
-
-
-# main packaging script based on dh7 syntax
-%:
-	dh $@ 
-
-# debmake generated override targets
-# This is example for Cmake (See http://bugs.debian.org/641051 )
-#override_dh_auto_configure:
-#	dh_auto_configure -- \
-#	-DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
-
-
-
-
diff --git a/arvbox/lib/arvbox/docker/runit-docker/debian/source/format b/arvbox/lib/arvbox/docker/runit-docker/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/arvbox/lib/arvbox/docker/runit-docker/runit-docker b/arvbox/lib/arvbox/docker/runit-docker/runit-docker
deleted file mode 100755
index fdbaad5..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/runit-docker
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-export LD_PRELOAD=/lib/runit-docker.so
-exec runsvdir /etc/service
diff --git a/arvbox/lib/arvbox/docker/runit-docker/runit-docker.c b/arvbox/lib/arvbox/docker/runit-docker/runit-docker.c
deleted file mode 100644
index 825a35f..0000000
--- a/arvbox/lib/arvbox/docker/runit-docker/runit-docker.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <signal.h>
-#include <dlfcn.h>
-#include <stdlib.h>
-
-
-int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)
-{
-  static int (*real_sigaction)(int signum, const struct sigaction *act, struct sigaction *oldact) = NULL;
-
-  // Retrieve the real sigaction we just shadowed.
-  if (real_sigaction == NULL) {
-    real_sigaction = (void *) dlsym(RTLD_NEXT, "sigaction");
-    // Prevent further shadowing in children.
-    unsetenv("LD_PRELOAD");
-  }
-
-  if (signum == SIGTERM) {
-    // Skip this handler, it doesn't do what we want.
-    return 0;
-  }
-
-  if (signum == SIGHUP) {
-    // Install this handler for others as well.
-    real_sigaction(SIGTERM, act, oldact);
-    real_sigaction(SIGINT, act, oldact);
-  }
-
-  // Forward the call the the real sigaction.
-  return real_sigaction(signum, act, oldact);
-}
-
-// vim: ts=2 sw=2 et
diff --git a/arvbox/lib/arvbox/docker/runsu.sh b/arvbox/lib/arvbox/docker/runsu.sh
deleted file mode 100755
index 1557d09..0000000
--- a/arvbox/lib/arvbox/docker/runsu.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-HOSTUID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f4)
-HOSTGID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f5)
-
-flock /var/lib/arvados/createusers.lock /usr/local/lib/arvbox/createusers.sh
-
-export HOME=/var/lib/arvados
-
-if test -z "$1" ; then
-    exec chpst -u arvbox:arvbox:docker $0-service
-else
-    exec chpst -u arvbox:arvbox:docker $@
-fi
diff --git a/arvbox/lib/arvbox/docker/service/api/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/api/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/api/log/run b/arvbox/lib/arvbox/docker/service/api/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/api/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/api/run b/arvbox/lib/arvbox/docker/service/api/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/api/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/api/run-service b/arvbox/lib/arvbox/docker/service/api/run-service
deleted file mode 100755
index 058939c..0000000
--- a/arvbox/lib/arvbox/docker/service/api/run-service
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -ex -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-cd /usr/src/arvados/services/api
-export RAILS_ENV=development
-
-run_bundler --without=development
-bundle exec passenger start --runtime-check-only --runtime-dir=/var/lib/passenger
-
-if test "$1" = "--only-deps" ; then
-    exit
-fi
-
-set -u
-
-if ! test -s /var/lib/arvados/api_uuid_prefix ; then
-    ruby -e 'puts "#{rand(2**64).to_s(36)[0,5]}"' > /var/lib/arvados/api_uuid_prefix
-fi
-uuid_prefix=$(cat /var/lib/arvados/api_uuid_prefix)
-
-if ! test -s /var/lib/arvados/api_secret_token ; then
-    ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/api_secret_token
-fi
-secret_token=$(cat /var/lib/arvados/api_secret_token)
-
-if ! test -s /var/lib/arvados/blob_signing_key ; then
-    ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/blob_signing_key
-fi
-blob_signing_key=$(cat /var/lib/arvados/blob_signing_key)
-
-# self signed key will be created by SSO server script.
-test -s /var/lib/arvados/self-signed.key
-
-sso_app_secret=$(cat /var/lib/arvados/sso_app_secret)
-
-if test -s /var/lib/arvados/vm-uuid ; then
-    vm_uuid=$(cat /var/lib/arvados/vm-uuid)
-else
-    vm_uuid=$uuid_prefix-2x53u-$(ruby -e 'puts rand(2**400).to_s(36)[0,15]')
-    echo $vm_uuid > /var/lib/arvados/vm-uuid
-fi
-
-cat >config/application.yml <<EOF
-development:
-  uuid_prefix: $uuid_prefix
-  secret_token: $secret_token
-  blob_signing_key: $blob_signing_key
-  sso_app_secret: $sso_app_secret
-  sso_app_id: arvados-server
-  sso_provider_url: "https://$localip:${services[sso]}"
-  sso_insecure: true
-  workbench_address: "http://$localip/"
-  git_repo_ssh_base: "git@$localip:"
-  git_repo_https_base: "http://$localip:${services[arv-git-httpd]}/"
-  new_users_are_active: true
-  auto_admin_first_user: true
-  auto_setup_new_users: true
-  auto_setup_new_users_with_vm_uuid: $vm_uuid
-  auto_setup_new_users_with_repository: true
-  default_collection_replication: 1
-EOF
-
-(cd config && /usr/local/lib/arvbox/application_yml_override.py)
-
-if ! test -f /var/lib/arvados/api_database_pw ; then
-    ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/api_database_pw
-fi
-database_pw=$(cat /var/lib/arvados/api_database_pw)
-
-if ! (psql postgres -c "\du" | grep "^ arvados ") >/dev/null ; then
-    psql postgres -c "create user arvados with password '$database_pw'"
-    psql postgres -c "ALTER USER arvados CREATEDB;"
-fi
-
-sed "s/password:.*/password: $database_pw/" <config/database.yml.example >config/database.yml
-
-if ! test -f /var/lib/arvados/api_database_setup ; then
-   bundle exec rake db:setup
-   touch /var/lib/arvados/api_database_setup
-fi
-
-if ! test -s /var/lib/arvados/superuser_token ; then
-    bundle exec ./script/create_superuser_token.rb > /var/lib/arvados/superuser_token
-fi
-
-rm -rf tmp
-
-bundle exec rake db:migrate
-
-set +u
-if test "$1" = "--only-setup" ; then
-    exit
-fi
-
-ARVADOS_WEBSOCKETS=1 exec bundle exec passenger start --port=${services[api]} \
-                  --runtime-dir=/var/lib/passenger \
-                  --ssl --ssl-certificate=/var/lib/arvados/self-signed.pem \
-                  --ssl-certificate-key=/var/lib/arvados/self-signed.key
diff --git a/arvbox/lib/arvbox/docker/service/arv-git-httpd/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/arv-git-httpd/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/arv-git-httpd/log/run b/arvbox/lib/arvbox/docker/service/arv-git-httpd/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/arv-git-httpd/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/arv-git-httpd/run b/arvbox/lib/arvbox/docker/service/arv-git-httpd/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/arv-git-httpd/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/arv-git-httpd/run-service b/arvbox/lib/arvbox/docker/service/arv-git-httpd/run-service
deleted file mode 100755
index 854464e..0000000
--- a/arvbox/lib/arvbox/docker/service/arv-git-httpd/run-service
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/gostuff
-cd /var/lib/arvados/gostuff
-
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/arv-git-httpd"
-install bin/arv-git-httpd /usr/local/bin
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export GITOLITE_HTTP_HOME=/var/lib/arvados/git
-export GL_BYPASS_ACCESS_CHECKS=1
-export PATH="$PATH:/var/lib/arvados/git/bin"
-cd ~git
-
-exec /usr/local/bin/arv-git-httpd \
-     -address=:${services[arv-git-httpd]} \
-     -git-command=/usr/share/gitolite3/gitolite-shell \
-     -repo-root=/var/lib/arvados/git/repositories
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/log/run b/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run b/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run-service b/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run-service
deleted file mode 100755
index 211b438..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run-service
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/gostuff
-cd /var/lib/arvados/gostuff
-
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/crunch-run"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/crunch-dispatch-local"
-install bin/crunch-run bin/crunch-dispatch-local /usr/local/bin
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-
-exec /usr/local/bin/crunch-dispatch-local -crunch-run-command=/usr/local/bin/crunch-run
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/crunch-dispatch0/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/log/run b/arvbox/lib/arvbox/docker/service/crunch-dispatch0/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/run b/arvbox/lib/arvbox/docker/service/crunch-dispatch0/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/run-service b/arvbox/lib/arvbox/docker/service/crunch-dispatch0/run-service
deleted file mode 100755
index fa3a73a..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch0/run-service
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-exec /usr/local/lib/arvbox/crunch-setup.sh crunch0
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/crunch-dispatch1/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/log/run b/arvbox/lib/arvbox/docker/service/crunch-dispatch1/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/run b/arvbox/lib/arvbox/docker/service/crunch-dispatch1/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/run-service b/arvbox/lib/arvbox/docker/service/crunch-dispatch1/run-service
deleted file mode 100755
index 6430e9c..0000000
--- a/arvbox/lib/arvbox/docker/service/crunch-dispatch1/run-service
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-sleep 1
-exec /usr/local/lib/arvbox/crunch-setup.sh crunch1
diff --git a/arvbox/lib/arvbox/docker/service/doc/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/doc/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/doc/log/run b/arvbox/lib/arvbox/docker/service/doc/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/doc/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/doc/run b/arvbox/lib/arvbox/docker/service/doc/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/doc/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/doc/run-service b/arvbox/lib/arvbox/docker/service/doc/run-service
deleted file mode 100755
index acbe21c..0000000
--- a/arvbox/lib/arvbox/docker/service/doc/run-service
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -ex -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-cd /usr/src/arvados/doc
-run_bundler --without=development
-
-if test "$1" = "--only-deps" ; then
-    exit
-fi
-
-set -u
-
-cat <<EOF >/var/lib/arvados/doc-nginx.conf
-worker_processes auto;
-pid /var/lib/arvados/doc-nginx.pid;
-daemon off;
-
-events {
-	worker_connections 64;
-}
-
-http {
-     include /etc/nginx/mime.types;
-     default_type application/octet-stream;
-     server {
-            listen ${services[doc]} default_server;
-            listen [::]:${services[doc]} default_server;
-            root /usr/src/arvados/doc/.site;
-            index index.html;
-            server_name _;
-     }
-}
-EOF
-
-bundle exec rake generate baseurl=http://$localip:${services[doc]} arvados_api_host=$localip:${services[api]} arvados_workbench_host=http://$localip
-
-exec nginx -c /var/lib/arvados/doc-nginx.conf
diff --git a/arvbox/lib/arvbox/docker/service/docker/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/docker/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/docker/log/run b/arvbox/lib/arvbox/docker/service/docker/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/docker/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/docker/run b/arvbox/lib/arvbox/docker/service/docker/run
deleted file mode 100755
index 1ecdc16..0000000
--- a/arvbox/lib/arvbox/docker/service/docker/run
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/bash
-
-# Taken from https://github.com/jpetazzo/dind
-
-exec 2>&1
-
-# Ensure that all nodes in /dev/mapper correspond to mapped devices currently loaded by the device-mapper kernel driver
-dmsetup mknodes
-
-: {LOG:=stdio}
-
-# First, make sure that cgroups are mounted correctly.
-CGROUP=/sys/fs/cgroup
-[ -d $CGROUP ] || mkdir $CGROUP
-
-if mountpoint -q $CGROUP ; then
-    break
-else
-    mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP
-fi
-
-if ! mountpoint -q $CGROUP ; then
-    echo "Could not find or mount cgroups. Tried /sys/fs/cgroup and /cgroup.  Did you use --privileged?"
-    exit 1
-fi
-
-if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security
-then
-    mount -t securityfs none /sys/kernel/security || {
-        echo "Could not mount /sys/kernel/security."
-        echo "AppArmor detection and --privileged mode might break."
-    }
-fi
-
-# Mount the cgroup hierarchies exactly as they are in the parent system.
-for SUBSYS in $(cut -d: -f2 /proc/1/cgroup)
-do
-        [ -d $CGROUP/$SUBSYS ] || mkdir $CGROUP/$SUBSYS
-        mountpoint -q $CGROUP/$SUBSYS ||
-                mount -n -t cgroup -o $SUBSYS cgroup $CGROUP/$SUBSYS
-
-        # The two following sections address a bug which manifests itself
-        # by a cryptic "lxc-start: no ns_cgroup option specified" when
-        # trying to start containers withina container.
-        # The bug seems to appear when the cgroup hierarchies are not
-        # mounted on the exact same directories in the host, and in the
-        # container.
-
-        # Named, control-less cgroups are mounted with "-o name=foo"
-        # (and appear as such under /proc/<pid>/cgroup) but are usually
-        # mounted on a directory named "foo" (without the "name=" prefix).
-        # Systemd and OpenRC (and possibly others) both create such a
-        # cgroup. To avoid the aforementioned bug, we symlink "foo" to
-        # "name=foo". This shouldn't have any adverse effect.
-        echo $SUBSYS | grep -q ^name= && {
-                NAME=$(echo $SUBSYS | sed s/^name=//)
-                ln -s $SUBSYS $CGROUP/$NAME
-        }
-
-        # Likewise, on at least one system, it has been reported that
-        # systemd would mount the CPU and CPU accounting controllers
-        # (respectively "cpu" and "cpuacct") with "-o cpuacct,cpu"
-        # but on a directory called "cpu,cpuacct" (note the inversion
-        # in the order of the groups). This tries to work around it.
-        [ $SUBSYS = cpuacct,cpu ] && ln -s $SUBSYS $CGROUP/cpu,cpuacct
-done
-
-# Note: as I write those lines, the LXC userland tools cannot setup
-# a "sub-container" properly if the "devices" cgroup is not in its
-# own hierarchy. Let's detect this and issue a warning.
-grep -q :devices: /proc/1/cgroup ||
-	echo "WARNING: the 'devices' cgroup should be in its own hierarchy."
-grep -qw devices /proc/1/cgroup ||
-	echo "WARNING: it looks like the 'devices' cgroup is not mounted."
-
-# Now, close extraneous file descriptors.
-pushd /proc/self/fd >/dev/null
-for FD in *
-do
-	case "$FD" in
-	# Keep stdin/stdout/stderr
-	[012])
-		;;
-	# Nuke everything else
-	*)
-		eval exec "$FD>&-"
-		;;
-	esac
-done
-popd >/dev/null
-
-
-# If a pidfile is still around (for example after a container restart),
-# delete it so that docker can start.
-rm -rf /var/run/docker.pid
-
-read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
-trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT
-
-if ! docker daemon --storage-driver=overlay $DOCKER_DAEMON_ARGS ; then
-    docker daemon $DOCKER_DAEMON_ARGS
-fi
diff --git a/arvbox/lib/arvbox/docker/service/gitolite/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/gitolite/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/gitolite/log/run b/arvbox/lib/arvbox/docker/service/gitolite/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/gitolite/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/gitolite/run b/arvbox/lib/arvbox/docker/service/gitolite/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/gitolite/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/gitolite/run-service b/arvbox/lib/arvbox/docker/service/gitolite/run-service
deleted file mode 100755
index e0e8771..0000000
--- a/arvbox/lib/arvbox/docker/service/gitolite/run-service
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/git
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-
-export USER=git
-export USERNAME=git
-export LOGNAME=git
-export HOME=/var/lib/arvados/git
-
-cd ~arvbox
-
-mkdir -p ~arvbox/.ssh ~git/.ssh
-chmod 0700 ~arvbox/.ssh ~git/.ssh
-
-if ! test -s ~arvbox/.ssh/id_rsa ; then
-    ssh-keygen -t rsa -P '' -f .ssh/id_rsa
-    cp ~arvbox/.ssh/id_rsa ~arvbox/.ssh/id_rsa.pub ~git/.ssh
-fi
-
-if test -s ~arvbox/.ssh/known_hosts ; then
-    ssh-keygen -f ".ssh/known_hosts" -R localhost
-fi
-
-if ! test -f /var/lib/arvados/gitolite-setup ; then
-    cd ~git
-
-    # Do a no-op login to populate known_hosts
-    # with the hostkey, so it won't try to ask
-    # about it later.
-    cp .ssh/id_rsa.pub .ssh/authorized_keys
-    ssh -o stricthostkeychecking=no git at localhost true
-    rm .ssh/authorized_keys
-
-    cp /usr/local/lib/arvbox/gitolite.rc .gitolite.rc
-
-    gitolite setup -pk .ssh/id_rsa.pub
-
-    if ! test -d gitolite-admin ; then
-        git clone git at localhost:gitolite-admin
-    fi
-
-    cd gitolite-admin
-    git config user.email arvados
-    git config user.name arvados
-    git config push.default simple
-    git push
-
-    touch /var/lib/arvados/gitolite-setup
-else
-    # Do a no-op login to populate known_hosts
-    # with the hostkey, so it won't try to ask
-    # about it later.  Don't run anything,
-    # get the default gitolite behavior.
-    ssh -o stricthostkeychecking=no git at localhost
-fi
-
-prefix=$(arv --format=uuid user current | cut -d- -f1)
-
-if ! test -s /var/lib/arvados/arvados-git-uuid ; then
-    repo_uuid=$(arv --format=uuid repository create --repository "{\"owner_uuid\":\"$prefix-tpzed-000000000000000\", \"name\":\"arvados\"}")
-    echo $repo_uuid > /var/lib/arvados/arvados-git-uuid
-fi
-
-repo_uuid=$(cat /var/lib/arvados/arvados-git-uuid)
-
-if ! test -s /var/lib/arvados/arvados-git-link-uuid ; then
-    all_users_group_uuid="$prefix-j7d0g-fffffffffffffff"
-
-    set +e
-    read -rd $'\000' newlink <<EOF
-{
- "tail_uuid":"$all_users_group_uuid",
- "head_uuid":"$repo_uuid",
- "link_class":"permission",
- "name":"can_read"
-}
-EOF
-    set -e
-    link_uuid=$(arv --format=uuid link create --link "$newlink")
-    echo $link_uuid > /var/lib/arvados/arvados-git-link-uuid
-fi
-
-if ! test -d /var/lib/arvados/git/repositories/$repo_uuid.git ; then
-    git clone --bare /usr/src/arvados /var/lib/arvados/git/repositories/$repo_uuid.git
-else
-    git --git-dir=/var/lib/arvados/git/repositories/$repo_uuid.git fetch -f /usr/src/arvados master:master
-fi
-
-cd /usr/src/arvados/services/api
-export RAILS_ENV=development
-
-git_user_key=$(cat ~git/.ssh/id_rsa.pub)
-
-cat > config/arvados-clients.yml <<EOF
-development:
-  gitolite_url: /var/lib/arvados/git/repositories/gitolite-admin.git
-  gitolite_tmp: /var/lib/arvados/git
-  arvados_api_host: $localip:${services[api]}
-  arvados_api_token: "$ARVADOS_API_TOKEN"
-  arvados_api_host_insecure: true
-  gitolite_arvados_git_user_key: "$git_user_key"
-EOF
-
-while true ; do
-    bundle exec script/arvados-git-sync.rb development
-    sleep 120
-done
diff --git a/arvbox/lib/arvbox/docker/service/keep-web/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/keep-web/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/keep-web/log/run b/arvbox/lib/arvbox/docker/service/keep-web/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/keep-web/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keep-web/run b/arvbox/lib/arvbox/docker/service/keep-web/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/keep-web/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keep-web/run-service b/arvbox/lib/arvbox/docker/service/keep-web/run-service
deleted file mode 100755
index a2c6aa1..0000000
--- a/arvbox/lib/arvbox/docker/service/keep-web/run-service
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/gostuff
-cd /var/lib/arvados/gostuff
-
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/keep-web"
-install bin/keep-web /usr/local/bin
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-
-exec /usr/local/bin/keep-web -trust-all-content -listen=:${services[keep-web]}
diff --git a/arvbox/lib/arvbox/docker/service/keepproxy/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/keepproxy/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/keepproxy/log/run b/arvbox/lib/arvbox/docker/service/keepproxy/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/keepproxy/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keepproxy/run b/arvbox/lib/arvbox/docker/service/keepproxy/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/keepproxy/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keepproxy/run-service b/arvbox/lib/arvbox/docker/service/keepproxy/run-service
deleted file mode 100755
index 413a67e..0000000
--- a/arvbox/lib/arvbox/docker/service/keepproxy/run-service
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-sleep 2
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p /var/lib/arvados/gostuff
-cd /var/lib/arvados/gostuff
-
-export GOPATH=$PWD
-mkdir -p "$GOPATH/src/git.curoverse.com"
-ln -sfn "/usr/src/arvados" "$GOPATH/src/git.curoverse.com/arvados.git"
-flock /var/lib/arvados/gostuff.lock go get -t "git.curoverse.com/arvados.git/services/keepproxy"
-install bin/keepproxy /usr/local/bin
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-
-set +e
-read -rd $'\000' keepservice <<EOF
-{
- "service_host":"$localip",
- "service_port":${services[keepproxy]},
- "service_ssl_flag":false,
- "service_type":"proxy"
-}
-EOF
-set -e
-
-if test -s /var/lib/arvados/keepproxy-uuid ; then
-    keep_uuid=$(cat /var/lib/arvados/keepproxy-uuid)
-    arv keep_service update --uuid $keep_uuid --keep-service "$keepservice"
-else
-    UUID=$(arv --format=uuid keep_service create --keep-service "$keepservice")
-    echo $UUID > /var/lib/arvados/keepproxy-uuid
-fi
-
-exec /usr/local/bin/keepproxy -listen=:${services[keepproxy]}
diff --git a/arvbox/lib/arvbox/docker/service/keepstore0/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/keepstore0/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/keepstore0/log/run b/arvbox/lib/arvbox/docker/service/keepstore0/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/keepstore0/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keepstore0/run b/arvbox/lib/arvbox/docker/service/keepstore0/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/keepstore0/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keepstore0/run-service b/arvbox/lib/arvbox/docker/service/keepstore0/run-service
deleted file mode 100755
index cf411e4..0000000
--- a/arvbox/lib/arvbox/docker/service/keepstore0/run-service
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-. /usr/local/lib/arvbox/common.sh
-exec /usr/local/lib/arvbox/keep-setup.sh keep0 ${services[keepstore0]}
diff --git a/arvbox/lib/arvbox/docker/service/keepstore1/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/keepstore1/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/keepstore1/log/run b/arvbox/lib/arvbox/docker/service/keepstore1/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/keepstore1/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keepstore1/run b/arvbox/lib/arvbox/docker/service/keepstore1/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/keepstore1/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/keepstore1/run-service b/arvbox/lib/arvbox/docker/service/keepstore1/run-service
deleted file mode 100755
index 8d34d06..0000000
--- a/arvbox/lib/arvbox/docker/service/keepstore1/run-service
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-. /usr/local/lib/arvbox/common.sh
-exec /usr/local/lib/arvbox/keep-setup.sh keep1 ${services[keepstore1]}
diff --git a/arvbox/lib/arvbox/docker/service/postgres/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/postgres/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/postgres/log/run b/arvbox/lib/arvbox/docker/service/postgres/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/postgres/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/postgres/run b/arvbox/lib/arvbox/docker/service/postgres/run
deleted file mode 100755
index 4918bd7..0000000
--- a/arvbox/lib/arvbox/docker/service/postgres/run
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-flock /var/lib/arvados/createusers.lock /usr/local/lib/arvbox/createusers.sh
-
-. /usr/local/lib/arvbox/common.sh
-
-chown -R $PGUSER:$PGGROUP /var/lib/postgresql
-chown -R $PGUSER:$PGGROUP /var/run/postgresql
-chown -R $PGUSER:$PGGROUP /etc/postgresql
-chown -R $PGUSER:$PGGROUP /etc/ssl/private
-
-exec chpst -u $PGUSER:$PGGROUP $0-service
diff --git a/arvbox/lib/arvbox/docker/service/postgres/run-service b/arvbox/lib/arvbox/docker/service/postgres/run-service
deleted file mode 100755
index a05be62..0000000
--- a/arvbox/lib/arvbox/docker/service/postgres/run-service
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-if ! test -d /var/lib/postgresql/9.4/main ; then
-    /usr/lib/postgresql/9.4/bin/initdb -D /var/lib/postgresql/9.4/main
-    sh -c "while ! (psql postgres -c'\du' | grep '^ arvbox ') >/dev/null ; do createuser -s arvbox ; sleep 1 ; done" &
-fi
-mkdir -p /var/run/postgresql/9.4-main.pg_stat_tmp
-
-rm -f /var/lib/postgresql/9.4/main/postmaster.pid
-
-exec /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf
diff --git a/arvbox/lib/arvbox/docker/service/ready/run b/arvbox/lib/arvbox/docker/service/ready/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/ready/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/ready/run-service b/arvbox/lib/arvbox/docker/service/ready/run-service
deleted file mode 100755
index f560de0..0000000
--- a/arvbox/lib/arvbox/docker/service/ready/run-service
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/bash
-
-. /usr/local/lib/arvbox/common.sh
-
-set -eu -o pipefail
-
-if ! [[ -d /tmp/arvbox-ready ]] ; then
-   echo
-   echo "Arvados-in-a-box starting"
-   echo
-   echo "Note: if this is a fresh arvbox installation, it may take 10-15 minutes (or longer) to download and"
-   echo "install dependencies.  Use \"arvbox log\" to monitor the progress of specific services."
-   echo
-   mkdir -p /tmp/arvbox-ready
-fi
-
-sleep 3
-
-waiting=""
-
-for s in "${!services[@]}"
-do
-  if ! [[ -f /tmp/arvbox-ready/$s ]] ; then
-    if nc -z localhost ${services[$s]} ; then
-      echo "$s is ready at $localip:${services[$s]}"
-      touch /tmp/arvbox-ready/$s
-    else
-      waiting="$waiting $s"
-    fi
-  fi
-done
-
-if ! docker version >/dev/null 2>/dev/null ; then
-  waiting="$waiting docker"
-fi
-
-if ! which arv >/dev/null ; then
-  waiting="$waiting sdk"
-elif ! which arv-get >/dev/null ; then
-  waiting="$waiting sdk"
-fi
-
-if ! (ps x | grep -v grep | grep "crunch-dispatch") > /dev/null ; then
-    waiting="$waiting crunch-dispatch"
-fi
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-
-vm_ok=0
-if test -s /var/lib/arvados/vm-uuid -a -s /var/lib/arvados/superuser_token; then
-    vm_uuid=$(cat /var/lib/arvados/vm-uuid)
-    export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-    if (which arv && arv virtual_machine get --uuid $vm_uuid) >/dev/null 2>/dev/null ; then
-        vm_ok=1
-    fi
-fi
-
-if test $vm_ok = 0 ; then
-    waiting="$waiting vm"
-fi
-
-if ! [[ -z "$waiting" ]] ; then
-    if ps x | grep -v grep | grep "bundle install" > /dev/null; then
-        gemcount=$(ls /var/lib/gems/ruby/2.1.0/gems 2>/dev/null | wc -l)
-
-        gemlockcount=0
-        for l in /usr/src/arvados/services/api/Gemfile.lock \
-                     /usr/src/arvados/apps/workbench/Gemfile.lock \
-                     /usr/src/sso/Gemfile.lock ; do
-            gc=$(cat $l \
-                        | grep -vE "(GEM|PLATFORMS|DEPENDENCIES|$^|remote:|specs:)" \
-                        | sed 's/^ *//' | sed 's/(.*)//' | sed 's/ *$//' | sort | uniq | wc -l)
-            gemlockcount=$(($gemlockcount + $gc))
-        done
-        waiting="$waiting (installing ruby gems $gemcount/$gemlockcount)"
-    fi
-
-    if ps x | grep -v grep | grep "c++.*/var/lib/passenger" > /dev/null ; then
-        waiting="$waiting (compiling passenger)"
-    fi
-
-    if ps x | grep -v grep | grep "pip install" > /dev/null; then
-        waiting="$waiting (installing python packages)"
-    fi
-    echo "    Waiting for$waiting ..."
-    exit 1
-fi
-
-echo
-echo "Your Arvados-in-a-box is ready!"
-echo "Workbench is running at http://$localip"
-
-rm -r /tmp/arvbox-ready
-
-sv stop ready >/dev/null
diff --git a/arvbox/lib/arvbox/docker/service/sdk/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/sdk/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/sdk/log/run b/arvbox/lib/arvbox/docker/service/sdk/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/sdk/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/sdk/run b/arvbox/lib/arvbox/docker/service/sdk/run
deleted file mode 100755
index 816b166..0000000
--- a/arvbox/lib/arvbox/docker/service/sdk/run
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-set -e
-
-/usr/local/lib/arvbox/runsu.sh $0-service
-sv stop sdk
diff --git a/arvbox/lib/arvbox/docker/service/sdk/run-service b/arvbox/lib/arvbox/docker/service/sdk/run-service
deleted file mode 100755
index b51f0fc..0000000
--- a/arvbox/lib/arvbox/docker/service/sdk/run-service
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-mkdir -p ~/.pip /var/lib/arvados/pip
-cat > ~/.pip/pip.conf <<EOF
-[global]
-download_cache = /var/lib/arvados/pip
-EOF
-
-cd /usr/src/arvados/sdk/cli
-run_bundler --binstubs=$PWD/binstubs
-ln -sf /usr/src/arvados/sdk/cli/binstubs/arv /usr/local/bin/arv
-
-cd /usr/src/arvados/sdk/python
-python setup.py sdist
-pip_install $(ls dist/arvados-python-client-*.tar.gz | tail -n1)
-
-cd /usr/src/arvados/services/fuse
-python setup.py sdist
-pip_install $(ls dist/arvados_fuse-*.tar.gz | tail -n1)
diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/slurmctld/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/log/run b/arvbox/lib/arvbox/docker/service/slurmctld/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/slurmctld/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/run b/arvbox/lib/arvbox/docker/service/slurmctld/run
deleted file mode 100755
index bd75bd0..0000000
--- a/arvbox/lib/arvbox/docker/service/slurmctld/run
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-cat > /etc/slurm-llnl/slurm.conf  <<EOF
-ControlMachine=$HOSTNAME
-ControlAddr=$HOSTNAME
-AuthType=auth/munge
-DefaultStorageLoc=/var/log/slurm-llnl
-SelectType=select/cons_res
-SelectTypeParameters=CR_CPU_Memory
-SlurmUser=arvbox
-SlurmdUser=arvbox
-SlurmctldPort=7002
-SlurmctldTimeout=300
-SlurmdPort=7003
-SlurmdSpoolDir=/var/tmp/slurmd.spool
-SlurmdTimeout=300
-StateSaveLocation=/var/tmp/slurm.state
-NodeName=$HOSTNAME
-PartitionName=compute State=UP Default=YES Nodes=$HOSTNAME
-EOF
-
-mkdir -p /var/run/munge
-
-/usr/sbin/munged -f
-
-exec /usr/sbin/slurmctld -v -D
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/slurmd/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/log/run b/arvbox/lib/arvbox/docker/service/slurmd/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/slurmd/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/run b/arvbox/lib/arvbox/docker/service/slurmd/run
deleted file mode 100755
index 865a7e6..0000000
--- a/arvbox/lib/arvbox/docker/service/slurmd/run
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-exec /usr/local/lib/arvbox/runsu.sh /usr/sbin/slurmd -v -D
diff --git a/arvbox/lib/arvbox/docker/service/ssh/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/ssh/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/ssh/log/run b/arvbox/lib/arvbox/docker/service/ssh/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/ssh/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/ssh/run b/arvbox/lib/arvbox/docker/service/ssh/run
deleted file mode 100755
index 0f23542..0000000
--- a/arvbox/lib/arvbox/docker/service/ssh/run
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -eux -o pipefail
-
-if ! test -d /var/run/sshd ; then
-   mkdir /var/run/sshd
-   chmod 0755 /var/run/sshd
-fi
-/usr/sbin/sshd -D
diff --git a/arvbox/lib/arvbox/docker/service/sso/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/sso/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/sso/log/run b/arvbox/lib/arvbox/docker/service/sso/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/sso/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/sso/run b/arvbox/lib/arvbox/docker/service/sso/run
deleted file mode 120000
index a388c8b..0000000
--- a/arvbox/lib/arvbox/docker/service/sso/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/sso/run-service b/arvbox/lib/arvbox/docker/service/sso/run-service
deleted file mode 100755
index da413e0..0000000
--- a/arvbox/lib/arvbox/docker/service/sso/run-service
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -ex -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-cd /usr/src/sso
-export RAILS_ENV=development
-
-run_bundler --without=development
-bundle exec passenger start --runtime-check-only --runtime-dir=/var/lib/passenger
-
-if test "$1" = "--only-deps" ; then
-    exit
-fi
-
-set -u
-
-if ! test -s /var/lib/arvados/sso_uuid_prefix ; then
-  ruby -e 'puts "#{rand(2**64).to_s(36)[0,5]}"' > /var/lib/arvados/sso_uuid_prefix
-fi
-uuid_prefix=$(cat /var/lib/arvados/sso_uuid_prefix)
-
-if ! test -s /var/lib/arvados/sso_secret_token ; then
-  ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/sso_secret_token
-fi
-secret_token=$(cat /var/lib/arvados/sso_secret_token)
-
-if ! test -s /var/lib/arvados/self-signed.key ; then
-  openssl req -new -x509 -nodes -out /var/lib/arvados/self-signed.pem -keyout /var/lib/arvados/self-signed.key -days 365 -subj '/CN=localhost'
-fi
-
-cat >config/application.yml <<EOF
-development:
-  uuid_prefix: $uuid_prefix
-  secret_token: $secret_token
-  default_link_url: "http://$localip"
-  allow_account_registration: true
-EOF
-
-(cd config && /usr/local/lib/arvbox/application_yml_override.py)
-
-if ! test -f /var/lib/arvados/sso_database_pw ; then
-    ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/sso_database_pw
-fi
-database_pw=$(cat /var/lib/arvados/sso_database_pw)
-
-if ! (psql postgres -c "\du" | grep "^ arvados_sso ") >/dev/null ; then
-    psql postgres -c "create user arvados_sso with password '$database_pw'"
-    psql postgres -c "ALTER USER arvados_sso CREATEDB;"
-fi
-
-sed "s/password:.*/password: $database_pw/" <config/database.yml.example >config/database.yml
-
-if ! test -f /var/lib/arvados/sso_database_setup ; then
-   bundle exec rake db:setup
-
-   if ! test -s /var/lib/arvados/sso_app_secret ; then
-       ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/sso_app_secret
-   fi
-   app_secret=$(cat /var/lib/arvados/sso_app_secret)
-
-   bundle exec rails console <<EOF
-c = Client.new
-c.name = "joshid"
-c.app_id = "arvados-server"
-c.app_secret = "$app_secret"
-c.save!
-EOF
-
-   touch /var/lib/arvados/sso_database_setup
-fi
-
-rm -rf tmp
-
-bundle exec rake db:migrate
-
-set +u
-if test "$1" = "--only-setup" ; then
-    exit
-fi
-
-exec bundle exec passenger start --port=${services[sso]} \
-     --runtime-dir=/var/lib/passenger \
-     --ssl --ssl-certificate=/var/lib/arvados/self-signed.pem \
-     --ssl-certificate-key=/var/lib/arvados/self-signed.key
diff --git a/arvbox/lib/arvbox/docker/service/vm/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/vm/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/vm/log/run b/arvbox/lib/arvbox/docker/service/vm/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/vm/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/vm/run b/arvbox/lib/arvbox/docker/service/vm/run
deleted file mode 100755
index 0c10cb0..0000000
--- a/arvbox/lib/arvbox/docker/service/vm/run
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-set -e
-
-. /usr/local/lib/arvbox/common.sh
-
-git config --system "credential.http://$localip:${services[arv-git-httpd]}/.username" none
-git config --system "credential.http://$localip:${services[arv-git-httpd]}/.helper" '!cred(){ cat >/dev/null; if [ "$1" = get ]; then echo password=$ARVADOS_API_TOKEN; fi; };cred'
-
-/usr/local/lib/arvbox/runsu.sh $0-service
-
-cd /usr/src/arvados/services/login-sync
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid)
-
-while true ; do
-      bundle exec arvados-login-sync
-      sleep 120
-done
diff --git a/arvbox/lib/arvbox/docker/service/vm/run-service b/arvbox/lib/arvbox/docker/service/vm/run-service
deleted file mode 100755
index fb209f5..0000000
--- a/arvbox/lib/arvbox/docker/service/vm/run-service
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-sleep 2
-set -ex -o pipefail
-
-. /usr/local/lib/arvbox/common.sh
-
-cd /usr/src/arvados/services/login-sync
-run_bundler
-
-if test "$1" = "--only-deps" ; then
-    exit
-fi
-
-set -u
-
-export ARVADOS_API_HOST=$localip:${services[api]}
-export ARVADOS_API_HOST_INSECURE=1
-export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
-export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid)
-
-set +e
-read -rd $'\000' vm <<EOF
-{
- "uuid": "$ARVADOS_VIRTUAL_MACHINE_UUID",
- "hostname":"$localip"
-}
-EOF
-set -e
-
-if arv virtual_machine get --uuid $ARVADOS_VIRTUAL_MACHINE_UUID ; then
-    arv virtual_machine update --uuid $ARVADOS_VIRTUAL_MACHINE_UUID --virtual-machine "$vm"
-else
-    arv virtual_machine create --virtual-machine "$vm"
-fi
diff --git a/arvbox/lib/arvbox/docker/service/workbench/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/workbench/log/main/.gitstub
deleted file mode 100644
index e69de29..0000000
diff --git a/arvbox/lib/arvbox/docker/service/workbench/log/run b/arvbox/lib/arvbox/docker/service/workbench/log/run
deleted file mode 120000
index d6aef4a..0000000
--- a/arvbox/lib/arvbox/docker/service/workbench/log/run
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/workbench/run b/arvbox/lib/arvbox/docker/service/workbench/run
deleted file mode 100755
index 6ac0476..0000000
--- a/arvbox/lib/arvbox/docker/service/workbench/run
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-set -e
-
-/usr/local/lib/arvbox/runsu.sh $0-service $1
-
-cd /usr/src/arvados/apps/workbench
-
-rm -rf tmp
-mkdir tmp
-chown arvbox:arvbox tmp
-
-if test "$1" != "--only-deps" ; then
-    exec bundle exec passenger start --port 80 \
-         --user arvbox --runtime-dir=/var/lib/passenger
-fi
diff --git a/arvbox/lib/arvbox/docker/service/workbench/run-service b/arvbox/lib/arvbox/docker/service/workbench/run-service
deleted file mode 100755
index 850022a..0000000
--- a/arvbox/lib/arvbox/docker/service/workbench/run-service
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-exec 2>&1
-set -ex -o pipefail
-
-.  /usr/local/lib/arvbox/common.sh
-
-cd /usr/src/arvados/apps/workbench
-export RAILS_ENV=development
-
-run_bundler --without=development
-bundle exec passenger start --runtime-check-only --runtime-dir=/var/lib/passenger
-
-if test "$1" = "--only-deps" ; then
-    exit
-fi
-
-set -u
-
-if ! test -s /var/lib/arvados/workbench_secret_token ; then
-  ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/workbench_secret_token
-fi
-secret_token=$(cat /var/lib/arvados/workbench_secret_token)
-
-if ! test -s self-signed.key ; then
-  openssl req -new -x509 -nodes -out self-signed.pem -keyout self-signed.key -days 365 -subj '/CN=localhost'
-fi
-
-cat >config/application.yml <<EOF
-development:
-  secret_token: $secret_token
-  arvados_login_base: https://$localip:${services[api]}/login
-  arvados_v1_base: https://$localip:${services[api]}/arvados/v1
-  arvados_insecure_https: true
-  keep_web_download_url: http://$localip:${services[keep-web]}/c=%{uuid_or_pdh}
-  keep_web_url: http://$localip:${services[keep-web]}/c=%{uuid_or_pdh}
-  arvados_docsite: http://$localip:${services[doc]}/
-EOF
-
-(cd config && /usr/local/lib/arvbox/application_yml_override.py)
diff --git a/arvbox/lib/arvbox/docker/waitforpostgres.sh b/arvbox/lib/arvbox/docker/waitforpostgres.sh
deleted file mode 100755
index 84d9904..0000000
--- a/arvbox/lib/arvbox/docker/waitforpostgres.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-while ! psql postgres -c\\du >/dev/null 2>/dev/null ; do
-    sleep 1
-done

commit d64b434147ba00224c937d192573a46d4543089d
Merge: d7bda40 623af8e
Author: Tom Clegg <tom at curoverse.com>
Date:   Tue Mar 1 02:42:46 2016 -0500

    Merge branch 'master' into 8345-llfuse-unpin


commit 623af8e46e921f59abeeee9e7ae8ec4aef890b5b
Author: Brett Smith <brett at curoverse.com>
Date:   Mon Feb 29 12:45:39 2016 -0500

    8371, 8413: Bump Rails package iteration.
    
    Build these bug fixes into new packages.
    Closes #8371, #8413.

diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
index 23ed383..02d8d0d 100755
--- a/jenkins/run-library.sh
+++ b/jenkins/run-library.sh
@@ -148,9 +148,8 @@ handle_rails_package() {
     local -a pos_args=("$srcdir/=$railsdir" "$pkgname" "Curoverse, Inc." dir
                        "$(cat "$version_file")")
     local license_arg="$license_path=$railsdir/$(basename "$license_path")"
-    # --iteration=3 accommodates the package scripts change from #8014.
-    # --iteration=4 accommodates the packaging changes (inclusion of vendor/cache) from #8008.
-    local -a switches=(--iteration=4
+    # --iteration=5 accommodates the package script bugfixes #8371 and #8413.
+    local -a switches=(--iteration=5
                        --after-install "$scripts_dir/postinst"
                        --before-remove "$scripts_dir/prerm"
                        --after-remove "$scripts_dir/postrm")

commit f0a79eeed911157a9095b04e34e7da79c45d4340
Merge: 3c78487 8a067f3
Author: Brett Smith <brett at curoverse.com>
Date:   Mon Feb 29 12:43:38 2016 -0500

    Merge branch '8413-fix-rails-postinst-chgrp-wip'
    
    Refs #8413.  Closes #8475.


commit 8a067f3805be65efd9200a8d772cc4301707dcb0
Author: Brett Smith <brett at curoverse.com>
Date:   Fri Feb 26 18:13:19 2016 -0500

    8413: Rails postinst doesn't chgrp root /etc/arvados.
    
    Non-sensitive Rails configuration files can be 0644 root:root.
    Porting those permissions is fine for the individual configuration
    file, but not the parent directory tree.  Don't change the group of
    the directory tree in this case.

diff --git a/jenkins/rails-package-scripts/postinst.sh b/jenkins/rails-package-scripts/postinst.sh
index 5ff2a9b..6fac26b 100644
--- a/jenkins/rails-package-scripts/postinst.sh
+++ b/jenkins/rails-package-scripts/postinst.sh
@@ -94,11 +94,13 @@ setup_conffile() {
         # If there's a config file in /var/www identical to the one in /etc,
         # overwrite it with a symlink after porting its permissions.
         elif cmp --quiet "$release_conffile" "$etc_conffile"; then
-            local ownership="$(stat -c "%U:%G" "$release_conffile")"
+            local ownership="$(stat -c "%u:%g" "$release_conffile")"
+            local owning_group="${ownership#*:}"
+            if [ 0 != "$owning_group" ]; then
+                chgrp "$owning_group" "$CONFIG_PATH" /etc/arvados
+            fi
             chown "$ownership" "$etc_conffile"
             chmod --reference="$release_conffile" "$etc_conffile"
-            chgrp "${ownership#*:}" "$CONFIG_PATH" /etc/arvados
-            chmod g+rx "$CONFIG_PATH" /etc/arvados
             ln --force -s "$etc_conffile" "$release_conffile"
         fi
     fi

commit 3c7848724d18912317d3198192004cc2fceeaa3f
Merge: ec60d7f acab2f7
Author: Brett Smith <brett at curoverse.com>
Date:   Mon Feb 29 12:43:11 2016 -0500

    Merge branch '8371-centos-postrm-bugfix-wip'
    
    Refs #8371.  Closes #8476.


commit acab2f7c338f245baa7e5d9dca57476d12d863bf
Author: Brett Smith <brett at curoverse.com>
Date:   Fri Feb 26 18:20:41 2016 -0500

    8371: Rails postrm only fires after removing last RPM.
    
    This prevents removing the package files when the postrm script is
    called for the old version of a package after doing an upgrade.
    
    RPM post- scripts are called with $1 as the number of versions of the
    package currently installed on the system.  0 means the last version
    has been removed.  We only want to remove files in that case.

diff --git a/jenkins/rails-package-scripts/postrm.sh b/jenkins/rails-package-scripts/postrm.sh
index 8c45d2f..2d63f0b 100644
--- a/jenkins/rails-package-scripts/postrm.sh
+++ b/jenkins/rails-package-scripts/postrm.sh
@@ -14,7 +14,7 @@ purge () {
 if [ "$1" = 'purge' ]; then
   # This is a debian-based system and purge was requested
   purge
-elif [ "$1" = "0" ] || [ "$1" = "1" ] || [ "$1" = "2" ]; then
+elif [ "$1" = "0" ]; then
   # This is an rpm-based system, no guarantees are made, always purge
   # Apparently yum doesn't actually remember what it installed.
   # Clean those files up here, then purge.

commit ec60d7fd235835947efd8dba97213015d37b036a
Merge: 65a3779 f03b416
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu Feb 25 11:16:20 2016 -0500

    Merge branch 'arvbox-fixes' no issue #


commit f03b4165fd33b2f8844a4bcda7f650a7023986f1
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu Feb 25 11:15:47 2016 -0500

    Tweak slurm configuration to run as non-root user.

diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/run b/arvbox/lib/arvbox/docker/service/slurmctld/run
index 7b3c6e1..bd75bd0 100755
--- a/arvbox/lib/arvbox/docker/service/slurmctld/run
+++ b/arvbox/lib/arvbox/docker/service/slurmctld/run
@@ -9,9 +9,11 @@ cat > /etc/slurm-llnl/slurm.conf  <<EOF
 ControlMachine=$HOSTNAME
 ControlAddr=$HOSTNAME
 AuthType=auth/munge
-DefaultStorageLoc=/var/log/slurm
+DefaultStorageLoc=/var/log/slurm-llnl
 SelectType=select/cons_res
+SelectTypeParameters=CR_CPU_Memory
 SlurmUser=arvbox
+SlurmdUser=arvbox
 SlurmctldPort=7002
 SlurmctldTimeout=300
 SlurmdPort=7003
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/run b/arvbox/lib/arvbox/docker/service/slurmd/run
index 697f7a2..865a7e6 100755
--- a/arvbox/lib/arvbox/docker/service/slurmd/run
+++ b/arvbox/lib/arvbox/docker/service/slurmd/run
@@ -3,4 +3,4 @@
 exec 2>&1
 set -eux -o pipefail
 
-exec /usr/sbin/slurmd -v -D
+exec /usr/local/lib/arvbox/runsu.sh /usr/sbin/slurmd -v -D

commit 1aa0a5407d6a4e6b861d1fcf52d8268d62b9d6d4
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu Feb 25 11:14:21 2016 -0500

    Fix arvados-login-sync for vm account creation

diff --git a/arvbox/lib/arvbox/docker/service/vm/run b/arvbox/lib/arvbox/docker/service/vm/run
index b7fb9cc..0c10cb0 100755
--- a/arvbox/lib/arvbox/docker/service/vm/run
+++ b/arvbox/lib/arvbox/docker/service/vm/run
@@ -6,4 +6,16 @@ set -e
 git config --system "credential.http://$localip:${services[arv-git-httpd]}/.username" none
 git config --system "credential.http://$localip:${services[arv-git-httpd]}/.helper" '!cred(){ cat >/dev/null; if [ "$1" = get ]; then echo password=$ARVADOS_API_TOKEN; fi; };cred'
 
-exec /usr/local/lib/arvbox/runsu.sh $0-service
+/usr/local/lib/arvbox/runsu.sh $0-service
+
+cd /usr/src/arvados/services/login-sync
+
+export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST_INSECURE=1
+export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
+export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid)
+
+while true ; do
+      bundle exec arvados-login-sync
+      sleep 120
+done
diff --git a/arvbox/lib/arvbox/docker/service/vm/run-service b/arvbox/lib/arvbox/docker/service/vm/run-service
index 5bb6825..fb209f5 100755
--- a/arvbox/lib/arvbox/docker/service/vm/run-service
+++ b/arvbox/lib/arvbox/docker/service/vm/run-service
@@ -34,8 +34,3 @@ if arv virtual_machine get --uuid $ARVADOS_VIRTUAL_MACHINE_UUID ; then
 else
     arv virtual_machine create --virtual-machine "$vm"
 fi
-
-while true ; do
-      bundle exec arvados-login-sync
-      sleep 120
-done

commit e7ddc93ee0608266c34efbbfd4a84464eb8e81d2
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu Feb 25 11:12:00 2016 -0500

    Generalize arvbox 'svrestart' to 'sv' no issue #

diff --git a/arvbox/bin/arvbox b/arvbox/bin/arvbox
index 7be361b..d790cb6 100755
--- a/arvbox/bin/arvbox
+++ b/arvbox/bin/arvbox
@@ -358,10 +358,9 @@ case "$subcmd" in
         fi
         ;;
 
-    svrestart)
+    sv)
         if test -n "$1" ; then
-            docker exec -ti $ARVBOX_CONTAINER sv restart "$1"
-            docker exec -ti $ARVBOX_CONTAINER sv restart ready
+            docker exec -ti $ARVBOX_CONTAINER sv "$1" "$2"
         else
             echo "Usage: $0 $subcmd <service>"
             echo "Available services:"
@@ -397,7 +396,7 @@ case "$subcmd" in
         echo "reset      delete arvbox arvados data (be careful!)"
         echo "destroy    delete all arvbox code and data (be careful!)"
         echo "log       <service> tail log of specified service"
-        echo "svrestart <service> restart specified service inside arvbox"
+        echo "sv        <start|stop|restart> <service> change state of service inside arvbox"
         echo "clone <from> <to>   clone an arvbox"
         ;;
 esac

commit d7bda40439a964ab2117933aba3694cb635e23dc
Merge: 07c0534 65a3779
Author: Tom Clegg <tom at curoverse.com>
Date:   Sat Feb 20 04:49:20 2016 -0500

    Merge branch 'master' into 8345-llfuse-unpin
    
    Conflicts:
    	jenkins/run-build-packages.sh

diff --cc jenkins/run-build-packages.sh
index d850cb2,ec19b28..ccea8a2
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@@ -89,10 -89,10 +89,10 @@@ case "$TARGET" i
          PYTHON2_PKG_PREFIX=python
          PYTHON3_PACKAGE=python$PYTHON3_VERSION
          PYTHON3_PKG_PREFIX=python3
-         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
              rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
 -            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
 +            ciso8601 pycrypto backports.ssl_match_hostname llfuse \
              'pycurl<7.21.5')
          PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
          ;;
@@@ -102,10 -102,10 +102,10 @@@
          PYTHON2_PKG_PREFIX=python
          PYTHON3_PACKAGE=python$PYTHON3_VERSION
          PYTHON3_PKG_PREFIX=python3
-         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
              rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
 -            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
 +            ciso8601 pycrypto backports.ssl_match_hostname llfuse \
              'pycurl<7.21.5')
          PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
          ;;
@@@ -115,11 -115,10 +115,11 @@@
          PYTHON2_PKG_PREFIX=python
          PYTHON3_PACKAGE=python$PYTHON3_VERSION
          PYTHON3_PKG_PREFIX=python3
-         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
              rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
 -            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
 +            ciso8601 pycrypto backports.ssl_match_hostname llfuse \
 +            contextlib2 \
              'pycurl<7.21.5')
          PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
          ;;
@@@ -129,8 -128,8 +129,8 @@@
          PYTHON2_PKG_PREFIX=python
          PYTHON3_PACKAGE=python$PYTHON3_VERSION
          PYTHON3_PKG_PREFIX=python3
 -        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyvcf pyasn1-modules==0.0.5 llfuse==0.41.1 ciso8601 \
 +        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyvcf pyasn1-modules==0.0.5 llfuse ciso8601 \
-             google-api-python-client six uritemplate oauth2client httplib2 \
+             google-api-python-client==1.4.2 six uritemplate oauth2client==1.5.2 httplib2 \
              rsa 'pycurl<7.21.5' backports.ssl_match_hostname)
          PYTHON3_BACKPORTS=(docker-py requests websocket-client)
          ;;
@@@ -140,11 -139,11 +140,11 @@@
          PYTHON2_PKG_PREFIX=$PYTHON2_PACKAGE
          PYTHON3_PACKAGE=$(rpm -qf "$(which python$PYTHON3_VERSION)" --queryformat '%{NAME}\n')
          PYTHON3_PKG_PREFIX=$PYTHON3_PACKAGE
-         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
              rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
              ciso8601 pycrypto backports.ssl_match_hostname 'pycurl<7.21.5' \
 -            python-daemon lockfile llfuse==0.41.1 'pbr<1.0')
 +            python-daemon lockfile llfuse 'pbr<1.0')
          PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
          export PYCURL_SSL_LIBRARY=nss
          ;;

commit 65a3779e6968835bc0b1fc1b103a408fd4eec4aa
Author: Tom Clegg <tom at curoverse.com>
Date:   Sat Feb 20 03:39:03 2016 -0500

    Install bundler gem in all build containers.
    
    RVM used to install bundler by default, but now it doesn't.
    
    https://github.com/rvm/rvm/commit/dc07790042d78c525d7d52616c78cb2d55c0e764
    
    I suppose some systems (like Jenkins) have been able to continue
    working because they have cached docker images that were built before
    RVM dropped bundler (1.26.11 -- Mar 30, 2015).
    
    But on a new system, we ended up here:
    
    [...]
    Package python3-websocket-client_0.35.0-1_all.deb exists, not rebuilding
    /jenkins/run-library.sh: line 139: bundle: command not found
    ERROR: arvados-api-server package prep failed
    /jenkins/run-build-packages.sh: line 492: bundle: command not found
    ERROR: Asset precompilation failed
    ERROR:  build failed with exit status 1.
    
    No issue #

diff --git a/jenkins/package-build-dockerfiles/centos6/Dockerfile b/jenkins/package-build-dockerfiles/centos6/Dockerfile
index 2bbec2e..8a9d931 100644
--- a/jenkins/package-build-dockerfiles/centos6/Dockerfile
+++ b/jenkins/package-build-dockerfiles/centos6/Dockerfile
@@ -13,7 +13,7 @@ RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
     /usr/local/rvm/bin/rvm install 2.1 && \
     /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
-    /usr/local/rvm/bin/rvm-exec default gem install bundle fpm
+    /usr/local/rvm/bin/rvm-exec default gem install bundler fpm
 
 # Need to "touch" RPM database to workaround bug in interaction between
 # overlayfs and yum (https://bugzilla.redhat.com/show_bug.cgi?id=1213602)
diff --git a/jenkins/package-build-dockerfiles/debian7/Dockerfile b/jenkins/package-build-dockerfiles/debian7/Dockerfile
index 21b554f..0d04590 100644
--- a/jenkins/package-build-dockerfiles/debian7/Dockerfile
+++ b/jenkins/package-build-dockerfiles/debian7/Dockerfile
@@ -9,7 +9,7 @@ RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
     /usr/local/rvm/bin/rvm install 2.1 && \
     /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
-    /usr/local/rvm/bin/rvm-exec default gem install fpm
+    /usr/local/rvm/bin/rvm-exec default gem install bundler fpm
 
 # Install golang binary
 ADD generated/golang-amd64.tar.gz /usr/local/
diff --git a/jenkins/package-build-dockerfiles/debian8/Dockerfile b/jenkins/package-build-dockerfiles/debian8/Dockerfile
index 6fb622a..fcd390f 100644
--- a/jenkins/package-build-dockerfiles/debian8/Dockerfile
+++ b/jenkins/package-build-dockerfiles/debian8/Dockerfile
@@ -9,7 +9,7 @@ RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
     /usr/local/rvm/bin/rvm install 2.1 && \
     /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
-    /usr/local/rvm/bin/rvm-exec default gem install fpm
+    /usr/local/rvm/bin/rvm-exec default gem install bundler fpm
 
 # Install golang binary
 ADD generated/golang-amd64.tar.gz /usr/local/
diff --git a/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile b/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
index 4984d37..7d480a5 100644
--- a/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
+++ b/jenkins/package-build-dockerfiles/ubuntu1204/Dockerfile
@@ -9,7 +9,7 @@ RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
     /usr/local/rvm/bin/rvm install 2.1 && \
     /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
-    /usr/local/rvm/bin/rvm-exec default gem install fpm
+    /usr/local/rvm/bin/rvm-exec default gem install bundler fpm
 
 # Install golang binary
 ADD generated/golang-amd64.tar.gz /usr/local/
diff --git a/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile b/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
index a3d6c8d..0b8ee7a 100644
--- a/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
+++ b/jenkins/package-build-dockerfiles/ubuntu1404/Dockerfile
@@ -9,7 +9,7 @@ RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
     /usr/local/rvm/bin/rvm install 2.1 && \
     /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
-    /usr/local/rvm/bin/rvm-exec default gem install fpm
+    /usr/local/rvm/bin/rvm-exec default gem install bundler fpm
 
 # Install golang binary
 ADD generated/golang-amd64.tar.gz /usr/local/

commit 07c05348740cd932e54aecfa52bf2a1260b3948e
Author: Tom Clegg <tom at curoverse.com>
Date:   Sat Feb 20 03:04:50 2016 -0500

    Fix dependencies after installing built package. refs #8345

diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
index 117e2d2..0534b3d 100755
--- a/jenkins/run-library.sh
+++ b/jenkins/run-library.sh
@@ -269,6 +269,7 @@ fpm_build () {
               echo "Attemping to install build_dep $pkg using apt-get"
               apt-get install -y "$pkg"
           fi
+          apt-get -y -f install
       else
           pkg_rpm=$(ls "$WORKSPACE/packages/$TARGET/$pkg"-[0-9]*.rpm | sort -rg | awk 'NR==1')
           if [[ -e $pkg_rpm ]]; then

commit 726ff8da135916c0cd6e3e0e4c9614a91d3ccfca
Author: Ward Vandewege <ward at curoverse.com>
Date:   Fri Feb 19 23:58:09 2016 -0500

    Pin package builds of the google-api-python-client and oauth2client
    packages to a known-working version.
    
    no issue #

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 97251c5..ec19b28 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -89,8 +89,8 @@ case "$TARGET" in
         PYTHON2_PKG_PREFIX=python
         PYTHON3_PACKAGE=python$PYTHON3_VERSION
         PYTHON3_PKG_PREFIX=python3
-        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-            oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+            oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
             ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
             'pycurl<7.21.5')
@@ -102,8 +102,8 @@ case "$TARGET" in
         PYTHON2_PKG_PREFIX=python
         PYTHON3_PACKAGE=python$PYTHON3_VERSION
         PYTHON3_PKG_PREFIX=python3
-        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-            oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+            oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
             ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
             'pycurl<7.21.5')
@@ -115,8 +115,8 @@ case "$TARGET" in
         PYTHON2_PKG_PREFIX=python
         PYTHON3_PACKAGE=python$PYTHON3_VERSION
         PYTHON3_PKG_PREFIX=python3
-        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-            oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+            oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
             ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
             'pycurl<7.21.5')
@@ -129,7 +129,7 @@ case "$TARGET" in
         PYTHON3_PACKAGE=python$PYTHON3_VERSION
         PYTHON3_PKG_PREFIX=python3
         PYTHON_BACKPORTS=(pyasn1==0.1.7 pyvcf pyasn1-modules==0.0.5 llfuse==0.41.1 ciso8601 \
-            google-api-python-client six uritemplate oauth2client httplib2 \
+            google-api-python-client==1.4.2 six uritemplate oauth2client==1.5.2 httplib2 \
             rsa 'pycurl<7.21.5' backports.ssl_match_hostname)
         PYTHON3_BACKPORTS=(docker-py requests websocket-client)
         ;;
@@ -139,8 +139,8 @@ case "$TARGET" in
         PYTHON2_PKG_PREFIX=$PYTHON2_PACKAGE
         PYTHON3_PACKAGE=$(rpm -qf "$(which python$PYTHON3_VERSION)" --queryformat '%{NAME}\n')
         PYTHON3_PKG_PREFIX=$PYTHON3_PACKAGE
-        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
-            oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
+        PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client==1.4.2 \
+            oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
             ciso8601 pycrypto backports.ssl_match_hostname 'pycurl<7.21.5' \
             python-daemon lockfile llfuse==0.41.1 'pbr<1.0')

commit 4640c72bbd678b70827a6d3ecaf13a8e502dfd2a
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri Feb 19 22:46:34 2016 -0500

    8345: Add libselinux-dev build-dep missed by awk script, skip "recommended" packages

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 82d8d70..d850cb2 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -366,7 +366,7 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
         file="fuse_2.9.2-4ubuntu4.14.04.1.dsc" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}"
 
         # install dpkg-source and dpkg-buildpackage commands
-        apt-get install -y dpkg-dev
+        apt-get install -y --no-install-recommends dpkg-dev
 
         # extract source and apply patches
         dpkg-source -x fuse_2.9.2-4ubuntu4.14.04.1.dsc
@@ -386,7 +386,7 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
         mv debian/changelog.new debian/changelog
 
         # install build-deps and build
-        apt-get install -y $(awk 'BEGIN {FS=":"} $1=="Build-Depends" {n=split($2,deps,","); for (i=0; i<n; i++) {split(deps[i],pkg," "); if (pkg[1]!="") {print pkg[1]}}}' debian/control)
+        apt-get install -y --no-install-recommends debhelper dh-autoreconf libselinux-dev
         dpkg-buildpackage -rfakeroot -b
     )
     fpm_build "$LIBFUSE_DIR/fuse_2.9.2-5_amd64.deb" fuse "Ubuntu Developers" deb "2.9.2" --iteration 5

commit 8600760481ba1724cc18bd9b8be7b99bbca29dea
Author: Joshua C. Randall <jcrandall at alum.mit.edu>
Date:   Fri Feb 19 14:26:35 2016 +0000

    uses variable for curl output filename and makes curl foLlow redirects

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 7b0c8ec..82d8d70 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -361,9 +361,9 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
     (
         cd $LIBFUSE_DIR
         # download fuse 2.9.2 ubuntu 14.04 source package
-        curl -o fuse_2.9.2.orig.tar.xz http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2.orig.tar.xz
-        curl -o fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz
-        curl -o fuse_2.9.2-4ubuntu4.14.04.1.dsc http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1.dsc
+        file="fuse_2.9.2.orig.tar.xz" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}"
+        file="fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}"
+        file="fuse_2.9.2-4ubuntu4.14.04.1.dsc" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}"
 
         # install dpkg-source and dpkg-buildpackage commands
         apt-get install -y dpkg-dev
@@ -401,7 +401,7 @@ elif [[ $TARGET =~ centos6 ]]; then
     (
         cd "$LIBFUSE_DIR"
         # download fuse 2.9.2 centos 7 source rpm
-        curl -o fuse-2.9.2-6.el7.src.rpm "http://vault.centos.org/7.2.1511/os/Source/SPackages/fuse-2.9.2-6.el7.src.rpm"
+        file="fuse-2.9.2-6.el7.src.rpm" && curl -L -o "${file}" "http://vault.centos.org/7.2.1511/os/Source/SPackages/${file}"
         (
             # modify source rpm spec to remove conflict on filesystem version
             mkdir -p /root/rpmbuild/SOURCES

commit b7e4507cfe19368f0f80dddfde111f2dd0a690fb
Author: Joshua C. Randall <jcrandall at alum.mit.edu>
Date:   Fri Feb 19 14:18:06 2016 +0000

    cleans up debian/changelog generation per tomclegg's comment

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 56a67f1..7b0c8ec 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -374,17 +374,18 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
 
         # add new version to changelog
         cd fuse-2.9.2
-	mv debian/changelog debian/changelog.old
-	echo "fuse (2.9.2-5) precise; urgency=low" > debian/changelog
-	echo "" >> debian/changelog
-	echo "  * Backported from trusty-security to precise" >> debian/changelog
-	echo "" >> debian/changelog
-	echo " -- Joshua Randall <jcrandall at alum.mit.edu>  Thu, 4 Feb 2016 11:31:00 -0000" >> debian/changelog
-	echo "" >> debian/changelog
-	cat debian/changelog.old >> debian/changelog
-	rm -f debian/changelog.old
-
-	# install build-deps and build
+        (
+            echo "fuse (2.9.2-5) precise; urgency=low"
+            echo
+            echo "  * Backported from trusty-security to precise"
+            echo
+            echo " -- Joshua Randall <jcrandall at alum.mit.edu>  Thu, 4 Feb 2016 11:31:00 -0000"
+            echo
+            cat debian/changelog
+        ) > debian/changelog.new
+        mv debian/changelog.new debian/changelog
+
+        # install build-deps and build
         apt-get install -y $(awk 'BEGIN {FS=":"} $1=="Build-Depends" {n=split($2,deps,","); for (i=0; i<n; i++) {split(deps[i],pkg," "); if (pkg[1]!="") {print pkg[1]}}}' debian/control)
         dpkg-buildpackage -rfakeroot -b
     )

commit abb1db4b4dcb4931c7fa2c03e21b994ddd911a3c
Author: Joshua C. Randall <jcrandall at alum.mit.edu>
Date:   Fri Feb 19 14:11:47 2016 +0000

    adds safety quotes and '-[0-9]' before wildcard as suggested in PR #6 comments

diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
index 7198345..117e2d2 100755
--- a/jenkins/run-library.sh
+++ b/jenkins/run-library.sh
@@ -270,7 +270,7 @@ fpm_build () {
               apt-get install -y "$pkg"
           fi
       else
-          pkg_rpm=$(ls $WORKSPACE/packages/$TARGET/$pkg*.rpm | sort -rg | awk 'NR==1')
+          pkg_rpm=$(ls "$WORKSPACE/packages/$TARGET/$pkg"-[0-9]*.rpm | sort -rg | awk 'NR==1')
           if [[ -e $pkg_rpm ]]; then
               echo "Installing build_dep $pkg from $pkg_rpm"
               rpm -i "$pkg_rpm"

commit 99e1256022759020b0bba971ea5c4e252dab4611
Author: Joshua C. Randall <jcrandall at alum.mit.edu>
Date:   Fri Feb 19 14:09:34 2016 +0000

    adds safety quotes and '_' before wildcard as suggested in PR #6 comments

diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
index 3901882..7198345 100755
--- a/jenkins/run-library.sh
+++ b/jenkins/run-library.sh
@@ -261,7 +261,7 @@ fpm_build () {
   fi
   for pkg in "${build_depends[@]}"; do
       if [[ $TARGET =~ debian|ubuntu ]]; then
-          pkg_deb=$(ls $WORKSPACE/packages/$TARGET/$pkg*.deb | sort -rg | awk 'NR==1')
+          pkg_deb=$(ls "$WORKSPACE/packages/$TARGET/$pkg_"*.deb | sort -rg | awk 'NR==1')
           if [[ -e $pkg_deb ]]; then
               echo "Installing build_dep $pkg from $pkg_deb"
               dpkg -i "$pkg_deb"

commit e407a1d4db57c41cebebaf8f3d663785df8f5fb4
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu Feb 18 16:28:29 2016 -0500

    Run slurmctld and slurmd inside arvbox. refs #6518

diff --git a/arvbox/lib/arvbox/docker/Dockerfile.base b/arvbox/lib/arvbox/docker/Dockerfile.base
index 160afee..280ac68 100644
--- a/arvbox/lib/arvbox/docker/Dockerfile.base
+++ b/arvbox/lib/arvbox/docker/Dockerfile.base
@@ -10,7 +10,7 @@ RUN apt-get update && \
     pkg-config libattr1-dev python-llfuse python-pycurl \
     libwww-perl libio-socket-ssl-perl libcrypt-ssleay-perl \
     libjson-perl nginx gitolite3 lsof python-epydoc graphviz \
-    apt-transport-https ca-certificates
+    apt-transport-https ca-certificates slurm-wlm
 
 VOLUME /var/lib/docker
 VOLUME /var/log/nginx
@@ -38,8 +38,5 @@ ADD crunch-setup.sh gitolite.rc \
     application_yml_override.py \
     /usr/local/lib/arvbox/
 
-ADD service/ /var/lib/arvbox/service
-RUN rmdir /etc/service && ln -sf /var/lib/arvbox/service /etc
-
 # Start the supervisor.
 CMD ["/usr/local/bin/runsvinit"]
diff --git a/arvbox/lib/arvbox/docker/Dockerfile.demo b/arvbox/lib/arvbox/docker/Dockerfile.demo
index d3e36c6..1f13415 100644
--- a/arvbox/lib/arvbox/docker/Dockerfile.demo
+++ b/arvbox/lib/arvbox/docker/Dockerfile.demo
@@ -4,6 +4,9 @@ RUN cd /usr/src && \
     git clone https://github.com/curoverse/arvados.git && \
     git clone https://github.com/curoverse/sso-devise-omniauth-provider.git sso
 
+ADD service/ /var/lib/arvbox/service
+RUN rmdir /etc/service && ln -sf /var/lib/arvbox/service /etc
+
 RUN chown -R 1000:1000 /usr/src && /usr/local/lib/arvbox/createusers.sh
 
 RUN sudo -u arvbox /var/lib/arvbox/service/sso/run-service --only-deps
diff --git a/arvbox/lib/arvbox/docker/Dockerfile.dev b/arvbox/lib/arvbox/docker/Dockerfile.dev
index 5ec73bb..051c274 100644
--- a/arvbox/lib/arvbox/docker/Dockerfile.dev
+++ b/arvbox/lib/arvbox/docker/Dockerfile.dev
@@ -10,4 +10,7 @@ RUN set -e && \
  tar -C /usr/local -xjf /tmp/$PJS.tar.bz2 && \
  ln -s ../$PJS/bin/phantomjs /usr/local/bin/
 
+ADD service/ /var/lib/arvbox/service
+RUN rmdir /etc/service && ln -sf /var/lib/arvbox/service /etc
+
 RUN mkdir /etc/test-service && ln -sf /var/lib/arvbox/service/postgres /etc/test-service
diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/slurmctld/log/main/.gitstub
new file mode 100644
index 0000000..e69de29
diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/log/run b/arvbox/lib/arvbox/docker/service/slurmctld/log/run
new file mode 120000
index 0000000..d6aef4a
--- /dev/null
+++ b/arvbox/lib/arvbox/docker/service/slurmctld/log/run
@@ -0,0 +1 @@
+/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/slurmctld/run b/arvbox/lib/arvbox/docker/service/slurmctld/run
new file mode 100755
index 0000000..7b3c6e1
--- /dev/null
+++ b/arvbox/lib/arvbox/docker/service/slurmctld/run
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+exec 2>&1
+set -eux -o pipefail
+
+. /usr/local/lib/arvbox/common.sh
+
+cat > /etc/slurm-llnl/slurm.conf  <<EOF
+ControlMachine=$HOSTNAME
+ControlAddr=$HOSTNAME
+AuthType=auth/munge
+DefaultStorageLoc=/var/log/slurm
+SelectType=select/cons_res
+SlurmUser=arvbox
+SlurmctldPort=7002
+SlurmctldTimeout=300
+SlurmdPort=7003
+SlurmdSpoolDir=/var/tmp/slurmd.spool
+SlurmdTimeout=300
+StateSaveLocation=/var/tmp/slurm.state
+NodeName=$HOSTNAME
+PartitionName=compute State=UP Default=YES Nodes=$HOSTNAME
+EOF
+
+mkdir -p /var/run/munge
+
+/usr/sbin/munged -f
+
+exec /usr/sbin/slurmctld -v -D
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/log/main/.gitstub b/arvbox/lib/arvbox/docker/service/slurmd/log/main/.gitstub
new file mode 100644
index 0000000..e69de29
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/log/run b/arvbox/lib/arvbox/docker/service/slurmd/log/run
new file mode 120000
index 0000000..d6aef4a
--- /dev/null
+++ b/arvbox/lib/arvbox/docker/service/slurmd/log/run
@@ -0,0 +1 @@
+/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/arvbox/lib/arvbox/docker/service/slurmd/run b/arvbox/lib/arvbox/docker/service/slurmd/run
new file mode 100755
index 0000000..697f7a2
--- /dev/null
+++ b/arvbox/lib/arvbox/docker/service/slurmd/run
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+exec 2>&1
+set -eux -o pipefail
+
+exec /usr/sbin/slurmd -v -D

commit f46095f12c8470a4eac64997bef622e5f26cafb9
Author: Joshua Randall <joshua.randall at sanger.ac.uk>
Date:   Fri Feb 5 15:16:37 2016 +0000

    adds centos6 backport of fuse 2.9.2

diff --git a/jenkins/package-build-dockerfiles/centos6/Dockerfile b/jenkins/package-build-dockerfiles/centos6/Dockerfile
index 2bbec2e..64905b1 100644
--- a/jenkins/package-build-dockerfiles/centos6/Dockerfile
+++ b/jenkins/package-build-dockerfiles/centos6/Dockerfile
@@ -2,7 +2,7 @@ FROM centos:6
 MAINTAINER Brett Smith <brett at curoverse.com>
 
 # Install build dependencies provided in base distribution
-RUN yum -q -y install make automake gcc gcc-c++ libyaml-devel patch readline-devel zlib-devel libffi-devel openssl-devel bzip2 libtool bison sqlite-devel rpm-build git perl-ExtUtils-MakeMaker fuse-devel libattr-devel nss-devel libcurl-devel which tar scl-utils centos-release-SCL postgresql-devel
+RUN yum -q -y install make automake gcc gcc-c++ libyaml-devel patch readline-devel zlib-devel libffi-devel openssl-devel bzip2 libtool bison sqlite-devel rpm-build git perl-ExtUtils-MakeMaker libattr-devel nss-devel libcurl-devel which tar scl-utils centos-release-SCL postgresql-devel
 
 # Install golang binary
 ADD generated/golang-amd64.tar.gz /usr/local/
diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 792325a..56a67f1 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -355,8 +355,8 @@ LIBCLOUD_DIR=$(mktemp -d)
 fpm_build $LIBCLOUD_DIR "$PYTHON2_PKG_PREFIX"-apache-libcloud
 rm -rf $LIBCLOUD_DIR
 
-# libfuse 2.9.2 on Ubuntu 12.04 
 if [[ $TARGET =~ ubuntu1204 ]]; then
+    # port libfuse 2.9.2 to Ubuntu 12.04 
     LIBFUSE_DIR=$(mktemp -d)
     (
         cd $LIBFUSE_DIR
@@ -365,11 +365,12 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
         curl -o fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz
         curl -o fuse_2.9.2-4ubuntu4.14.04.1.dsc http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1.dsc
 
-        # install dpkg-dev for dpkg-source and dpkg-buildpackage commands
+        # install dpkg-source and dpkg-buildpackage commands
         apt-get install -y dpkg-dev
 
         # extract source and apply patches
         dpkg-source -x fuse_2.9.2-4ubuntu4.14.04.1.dsc
+        rm -f fuse_2.9.2.orig.tar.xz fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz fuse_2.9.2-4ubuntu4.14.04.1.dsc
 
         # add new version to changelog
         cd fuse-2.9.2
@@ -381,16 +382,44 @@ if [[ $TARGET =~ ubuntu1204 ]]; then
 	echo " -- Joshua Randall <jcrandall at alum.mit.edu>  Thu, 4 Feb 2016 11:31:00 -0000" >> debian/changelog
 	echo "" >> debian/changelog
 	cat debian/changelog.old >> debian/changelog
-	rm debian/changelog.old
+	rm -f debian/changelog.old
 
 	# install build-deps and build
         apt-get install -y $(awk 'BEGIN {FS=":"} $1=="Build-Depends" {n=split($2,deps,","); for (i=0; i<n; i++) {split(deps[i],pkg," "); if (pkg[1]!="") {print pkg[1]}}}' debian/control)
         dpkg-buildpackage -rfakeroot -b
     )
-    fpm_build $LIBFUSE_DIR/fuse_2.9.2-5_amd64.deb fuse "Ubuntu Developers" deb "2.9.2" --iteration 5
-    fpm_build $LIBFUSE_DIR/libfuse2_2.9.2-5_amd64.deb libfuse2 "Ubuntu Developers" deb "2.9.2" --iteration 5
-    fpm_build $LIBFUSE_DIR/libfuse-dev_2.9.2-5_amd64.deb libfuse-dev "Ubuntu Developers" deb "2.9.2" --iteration 5
+    fpm_build "$LIBFUSE_DIR/fuse_2.9.2-5_amd64.deb" fuse "Ubuntu Developers" deb "2.9.2" --iteration 5
+    fpm_build "$LIBFUSE_DIR/libfuse2_2.9.2-5_amd64.deb" libfuse2 "Ubuntu Developers" deb "2.9.2" --iteration 5
+    fpm_build "$LIBFUSE_DIR/libfuse-dev_2.9.2-5_amd64.deb" libfuse-dev "Ubuntu Developers" deb "2.9.2" --iteration 5
     rm -rf $LIBFUSE_DIR
+elif [[ $TARGET =~ centos6 ]]; then
+    # port fuse 2.9.2 to centos 6
+    # install tools to build rpm from source
+    yum install -y rpm-build redhat-rpm-config
+    LIBFUSE_DIR=$(mktemp -d)
+    (
+        cd "$LIBFUSE_DIR"
+        # download fuse 2.9.2 centos 7 source rpm
+        curl -o fuse-2.9.2-6.el7.src.rpm "http://vault.centos.org/7.2.1511/os/Source/SPackages/fuse-2.9.2-6.el7.src.rpm"
+        (
+            # modify source rpm spec to remove conflict on filesystem version
+            mkdir -p /root/rpmbuild/SOURCES
+            cd /root/rpmbuild/SOURCES
+            rpm2cpio ${LIBFUSE_DIR}/fuse-2.9.2-6.el7.src.rpm | cpio -i
+            perl -pi -e 's/Conflicts:\s*filesystem.*//g' fuse.spec
+        )
+        # build rpms from source 
+        rpmbuild -bb /root/rpmbuild/SOURCES/fuse.spec
+        rm -f fuse-2.9.2-6.el7.src.rpm
+        # move built RPMs to LIBFUSE_DIR
+        mv "/root/rpmbuild/RPMS/x86_64/fuse-2.9.2-6.el6.x86_64.rpm" ${LIBFUSE_DIR}/
+        mv "/root/rpmbuild/RPMS/x86_64/fuse-libs-2.9.2-6.el6.x86_64.rpm" ${LIBFUSE_DIR}/
+        mv "/root/rpmbuild/RPMS/x86_64/fuse-devel-2.9.2-6.el6.x86_64.rpm" ${LIBFUSE_DIR}/
+        rm -rf /root/rpmbuild
+    )
+    fpm_build "$LIBFUSE_DIR/fuse-libs-2.9.2-6.el6.x86_64.rpm" fuse-libs "Centos Developers" rpm "2.9.2" --iteration 5
+    fpm_build "$LIBFUSE_DIR/fuse-2.9.2-6.el6.x86_64.rpm" fuse "Centos Developers" rpm "2.9.2" --iteration 5 --no-auto-depends
+    fpm_build "$LIBFUSE_DIR/fuse-devel-2.9.2-6.el6.x86_64.rpm" fuse-devel "Centos Developers" rpm "2.9.2" --iteration 5 --no-auto-depends
 fi
 
 # Python 2 dependencies

commit 11280265c0ce229e5bd617583a06e630901a8617
Author: Joshua Randall <joshua.randall at sanger.ac.uk>
Date:   Wed Feb 3 12:48:19 2016 +0000

    Unpins llfuse version and adds fuse 2.9.2 backport

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 97251c5..792325a 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -92,7 +92,7 @@ case "$TARGET" in
         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
-            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
+            ciso8601 pycrypto backports.ssl_match_hostname llfuse \
             'pycurl<7.21.5')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         ;;
@@ -105,7 +105,7 @@ case "$TARGET" in
         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
-            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
+            ciso8601 pycrypto backports.ssl_match_hostname llfuse \
             'pycurl<7.21.5')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         ;;
@@ -118,7 +118,8 @@ case "$TARGET" in
         PYTHON_BACKPORTS=(python-gflags pyvcf google-api-python-client \
             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
-            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
+            ciso8601 pycrypto backports.ssl_match_hostname llfuse \
+            contextlib2 \
             'pycurl<7.21.5')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         ;;
@@ -128,7 +129,7 @@ case "$TARGET" in
         PYTHON2_PKG_PREFIX=python
         PYTHON3_PACKAGE=python$PYTHON3_VERSION
         PYTHON3_PKG_PREFIX=python3
-        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyvcf pyasn1-modules==0.0.5 llfuse==0.41.1 ciso8601 \
+        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyvcf pyasn1-modules==0.0.5 llfuse ciso8601 \
             google-api-python-client six uritemplate oauth2client httplib2 \
             rsa 'pycurl<7.21.5' backports.ssl_match_hostname)
         PYTHON3_BACKPORTS=(docker-py requests websocket-client)
@@ -143,7 +144,7 @@ case "$TARGET" in
             oauth2client pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six pyexecjs jsonschema \
             ciso8601 pycrypto backports.ssl_match_hostname 'pycurl<7.21.5' \
-            python-daemon lockfile llfuse==0.41.1 'pbr<1.0')
+            python-daemon lockfile llfuse 'pbr<1.0')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         export PYCURL_SSL_LIBRARY=nss
         ;;
@@ -354,6 +355,44 @@ LIBCLOUD_DIR=$(mktemp -d)
 fpm_build $LIBCLOUD_DIR "$PYTHON2_PKG_PREFIX"-apache-libcloud
 rm -rf $LIBCLOUD_DIR
 
+# libfuse 2.9.2 on Ubuntu 12.04 
+if [[ $TARGET =~ ubuntu1204 ]]; then
+    LIBFUSE_DIR=$(mktemp -d)
+    (
+        cd $LIBFUSE_DIR
+        # download fuse 2.9.2 ubuntu 14.04 source package
+        curl -o fuse_2.9.2.orig.tar.xz http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2.orig.tar.xz
+        curl -o fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz
+        curl -o fuse_2.9.2-4ubuntu4.14.04.1.dsc http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1.dsc
+
+        # install dpkg-dev for dpkg-source and dpkg-buildpackage commands
+        apt-get install -y dpkg-dev
+
+        # extract source and apply patches
+        dpkg-source -x fuse_2.9.2-4ubuntu4.14.04.1.dsc
+
+        # add new version to changelog
+        cd fuse-2.9.2
+	mv debian/changelog debian/changelog.old
+	echo "fuse (2.9.2-5) precise; urgency=low" > debian/changelog
+	echo "" >> debian/changelog
+	echo "  * Backported from trusty-security to precise" >> debian/changelog
+	echo "" >> debian/changelog
+	echo " -- Joshua Randall <jcrandall at alum.mit.edu>  Thu, 4 Feb 2016 11:31:00 -0000" >> debian/changelog
+	echo "" >> debian/changelog
+	cat debian/changelog.old >> debian/changelog
+	rm debian/changelog.old
+
+	# install build-deps and build
+        apt-get install -y $(awk 'BEGIN {FS=":"} $1=="Build-Depends" {n=split($2,deps,","); for (i=0; i<n; i++) {split(deps[i],pkg," "); if (pkg[1]!="") {print pkg[1]}}}' debian/control)
+        dpkg-buildpackage -rfakeroot -b
+    )
+    fpm_build $LIBFUSE_DIR/fuse_2.9.2-5_amd64.deb fuse "Ubuntu Developers" deb "2.9.2" --iteration 5
+    fpm_build $LIBFUSE_DIR/libfuse2_2.9.2-5_amd64.deb libfuse2 "Ubuntu Developers" deb "2.9.2" --iteration 5
+    fpm_build $LIBFUSE_DIR/libfuse-dev_2.9.2-5_amd64.deb libfuse-dev "Ubuntu Developers" deb "2.9.2" --iteration 5
+    rm -rf $LIBFUSE_DIR
+fi
+
 # Python 2 dependencies
 declare -a PIP_DOWNLOAD_SWITCHES=(--no-deps)
 # Add --no-use-wheel if this pip knows it.
diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
index 83e0ea0..3901882 100755
--- a/jenkins/run-library.sh
+++ b/jenkins/run-library.sh
@@ -243,17 +243,43 @@ fpm_build () {
   # the package source dir. These are added last so they can override
   # the arguments added by this script.
   declare -a fpm_args=()
+  declare -a build_depends=()
   declare -a fpm_depends=()
   declare -a fpm_exclude=()
+  FPM_INFO=""
   if [[ -d "$PACKAGE_DIR" ]]; then
       FPM_INFO="$PACKAGE_DIR/fpm-info.sh"
-  else
+  elif [[ -e "${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE}/fpm-info.sh" ]]; then
       FPM_INFO="${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE}/fpm-info.sh"
+      debug_echo "Found fpm-info.sh in backports: $FPM_INFO"
+  elif [[ -e "${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE_NAME}/fpm-info.sh" ]]; then
+      FPM_INFO="${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE_NAME}/fpm-info.sh"
   fi
   if [[ -e "$FPM_INFO" ]]; then
       debug_echo "Loading fpm overrides from $FPM_INFO"
       source "$FPM_INFO"
   fi
+  for pkg in "${build_depends[@]}"; do
+      if [[ $TARGET =~ debian|ubuntu ]]; then
+          pkg_deb=$(ls $WORKSPACE/packages/$TARGET/$pkg*.deb | sort -rg | awk 'NR==1')
+          if [[ -e $pkg_deb ]]; then
+              echo "Installing build_dep $pkg from $pkg_deb"
+              dpkg -i "$pkg_deb"
+          else
+              echo "Attemping to install build_dep $pkg using apt-get"
+              apt-get install -y "$pkg"
+          fi
+      else
+          pkg_rpm=$(ls $WORKSPACE/packages/$TARGET/$pkg*.rpm | sort -rg | awk 'NR==1')
+          if [[ -e $pkg_rpm ]]; then
+              echo "Installing build_dep $pkg from $pkg_rpm"
+              rpm -i "$pkg_rpm"
+          else
+              echo "Attemping to install build_dep $pkg"
+              rpm -i "$pkg"
+          fi
+      fi
+  done
   for i in "${fpm_depends[@]}"; do
     COMMAND_ARR+=('--depends' "$i")
   done

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list