[ARVADOS] updated: 64072501d668d7086aa053b05d72dafaf52fbdb7

Git user git at public.curoverse.com
Fri Mar 11 14:11:37 EST 2016


Summary of changes:
 build/package-build-dockerfiles/Makefile | 2 +-
 build/run-build-packages.sh              | 5 +++++
 build/run-tests.sh                       | 2 ++
 3 files changed, 8 insertions(+), 1 deletion(-)

  discards  2b345de84ee95f655b4d3621575a31230588781b (commit)
  discards  77f5565c40f52c6929472d7d375ad44b09640958 (commit)
  discards  5ef755ed9143cd70dcf2d643baa4ca0c3f8e4288 (commit)
  discards  89e0608f1b82586efd662f2918ff195b0d0c96e4 (commit)
  discards  3bddce308692548110019765b0074c1876269b9c (commit)
  discards  c025847bd30e5dc2678fb2ebd4e3e39c8352c60e (commit)
  discards  7166965c7bda6c727586fb10a00056b3086705f4 (commit)
       via  64072501d668d7086aa053b05d72dafaf52fbdb7 (commit)
       via  6bd98a37898069e56eeb3bf54555caa5eb4be634 (commit)
       via  0f0493315521592a615d431ac20a046ca8e705d3 (commit)
       via  d6e43568d82b1d3adaf7a120b9178ba75cf989e7 (commit)
       via  19ae770973482257117fe8ded5619c3018c4b60f (commit)
       via  555b039609a3c8700c27767c255fdfe00eb42063 (commit)
       via  097e2b21b9285c9cd302061552e1d343bd8debe7 (commit)
       via  5d377ee0cb917903590787a770c72846dd0b10cb (commit)
       via  ea62edd0b615e16b8f21fc5ba024a63dac7045c0 (commit)
       via  474bc10a9a9c278f4d58217aa741b2cf329cc923 (commit)
       via  2fe15804eca476cf1ad362dab6c0beaf40a19103 (commit)
       via  957c22b775b4b80731a84bcf2565a37072fa1bd9 (commit)
       via  2b9b7518a60a71315a1504bf96b3182122bec702 (commit)
       via  8eda2e72fc37cdb9f947c19ad994ac094aa0a507 (commit)
       via  1659fd3eca62ac51e7628af3464dd03787e2d84f (commit)
       via  27ac5631c777fefc89839089109d0b06d596019d (commit)
       via  a4f8a4e24e7a778194878c200391c4a3dca55961 (commit)
       via  cdbcd6d4e3af4d99aeec97263ad12774e1ef81e4 (commit)
       via  2213311cb8647e41604a94d64ddd02b21ae78411 (commit)
       via  659d7361e7a0fc1f6537e6851ffd3d29ce19bb26 (commit)
       via  97424aa89b3f279986621ec5f574670dacb5a836 (commit)
       via  d64b434147ba00224c937d192573a46d4543089d (commit)
       via  623af8e46e921f59abeeee9e7ae8ec4aef890b5b (commit)
       via  f0a79eeed911157a9095b04e34e7da79c45d4340 (commit)
       via  8a067f3805be65efd9200a8d772cc4301707dcb0 (commit)
       via  3c7848724d18912317d3198192004cc2fceeaa3f (commit)
       via  acab2f7c338f245baa7e5d9dca57476d12d863bf (commit)
       via  ec60d7fd235835947efd8dba97213015d37b036a (commit)
       via  f03b4165fd33b2f8844a4bcda7f650a7023986f1 (commit)
       via  1aa0a5407d6a4e6b861d1fcf52d8268d62b9d6d4 (commit)
       via  e7ddc93ee0608266c34efbbfd4a84464eb8e81d2 (commit)
       via  d7bda40439a964ab2117933aba3694cb635e23dc (commit)
       via  65a3779e6968835bc0b1fc1b103a408fd4eec4aa (commit)
       via  07c05348740cd932e54aecfa52bf2a1260b3948e (commit)
       via  726ff8da135916c0cd6e3e0e4c9614a91d3ccfca (commit)
       via  4640c72bbd678b70827a6d3ecaf13a8e502dfd2a (commit)
       via  8600760481ba1724cc18bd9b8be7b99bbca29dea (commit)
       via  b7e4507cfe19368f0f80dddfde111f2dd0a690fb (commit)
       via  abb1db4b4dcb4931c7fa2c03e21b994ddd911a3c (commit)
       via  99e1256022759020b0bba971ea5c4e252dab4611 (commit)
       via  e407a1d4db57c41cebebaf8f3d663785df8f5fb4 (commit)
       via  8568240aaa6b9dba2af675dc0d6e09fe1001abfd (commit)
       via  aa65f4dc68b750a635c857c0480df3f5a2dca7a4 (commit)
       via  819ffb0ad38eb1f86ab6b6e3c4ae7c860b465636 (commit)
       via  6f19089ca96e485f457932dce44256e46f1e3711 (commit)
       via  f46095f12c8470a4eac64997bef622e5f26cafb9 (commit)
       via  11280265c0ce229e5bd617583a06e630901a8617 (commit)
       via  bb26448a7551a9165e8674ade83e32f4d17adc9a (commit)
       via  48e6cb38b2e0c023589d4083192190bdc30c4762 (commit)
       via  512193d7a3befd4172b5aa4685c01da84a690430 (commit)
       via  17d02ba1aa5c25c101ae1a887f18e9dc5d2bb139 (commit)
       via  a1ca4978b7e4e6d917c50c64c3bf5e527690a7e4 (commit)
       via  a86550746f8343128d9bc38eb115d9495decc58f (commit)
       via  42f2e4db0a40db50617d8631a2ff7e5add6539e4 (commit)
       via  5dacdfe33d9d72e2445fff52069c2afd604271d3 (commit)
       via  aa204e80a18f8827405fbb5a67de2ef8fa7074fc (commit)
       via  baa66db7b5b05032c408a60180fa81b98d079ee4 (commit)
       via  0a18c5fb313d91930f4ff0c5cf05aabfe5e1a748 (commit)
       via  738bac6d373ec54b4bf75b2da71b9c65203ecc76 (commit)
       via  9a0aa9fcfdaec36bfa0cec543d8502f4006df2e8 (commit)
       via  ff110d616ea28bffb9677f91702f716992e7d130 (commit)
       via  680bebbec151616f1582e6c1e85b7515907670f8 (commit)
       via  487aeb0d3e2263edc777f3f5451fa05f5f071285 (commit)
       via  18fb92535f505e30b86c50e1c58eaf93c0179412 (commit)
       via  43b16e43f7f2558bc619f3611ee4b96fb74b5e05 (commit)
       via  e9043f6d8de8ca8c928b0097e39b1695a26ffb2b (commit)
       via  575d7f1fd77f66448df49c341a59baef6b3b5ef9 (commit)
       via  a8c09e00f06c51887497b94b98178b2815e149e2 (commit)
       via  7512b31d3c7e3ae890a37b2222f113c9b351d86a (commit)
       via  7f05c28c4ac0ddffdf9e13bfc104bc60f7195174 (commit)
       via  06b0b75584e41e90aa635b6d833936343075c132 (commit)
       via  7b2fd8f0c85a013df886e881d5d97aebf4890169 (commit)
       via  026d70487631662d1b0ccf8f66fbef71b9be40d6 (commit)
       via  22e538ac7ece05cbfc32b2dfb463f3fb955d7f61 (commit)
       via  fe5164555b117d5c9c538905c495192adad0b815 (commit)
       via  5cc977da78b718596faa9ad0352b7c14402f90fa (commit)
       via  b408ce71a9caddea144fd7d90aa166c9cb16e715 (commit)
       via  846a9311a328b9cbadc8b70d34134b72b0b6b332 (commit)
       via  f44f65a25c1d505e7faa9e26351525c10bb2cbbd (commit)
       via  a956a49875fc484c2c237aec228a92f8ce5b0f06 (commit)
       via  f84fd5c8f2292a41bbb4cd762dbedab09adbf784 (commit)
       via  2fe4a6a068e720e72b1695de133b4363e9a69a40 (commit)
       via  ebdbb0bb23ceb1d1373472e6405fa2293f51616b (commit)
       via  60d3fdf6dedff3cb9eca478caacfeee19a752812 (commit)
       via  ffd741be7af1eca4c11884a3e8aa6630be25de2d (commit)
       via  c9e5a801bb72c20b6c56e0b88e78ea5626fb6497 (commit)
       via  1e48d4f97d643b3a36f7856284e3a95430bc8f92 (commit)
       via  211b5c1e8a86fe9f3a6704f76120e2fed78a9247 (commit)
       via  81afb79616d482b177d91ee4e198392e750221ab (commit)
       via  e6ee12052db27b61f8bcf7af89acc9dc520a1799 (commit)
       via  0814135175ab777abe515e4ba404dd0bf2929b24 (commit)
       via  9f73adf4a13fef44dd133b91c46693aea1af69df (commit)
       via  c1c5b145f832bd9a647c6e07e19f148cf26ff910 (commit)
       via  9fb392b2eaa59f20f7186de726531d922408dfa1 (commit)
       via  1c0ce486e11b13ef5cd10959d4eca1fd948d88d1 (commit)
       via  26170766797e80d0c86c25a10331f43c6d0eb283 (commit)
       via  46ae733bd885da0d75882831af822c9578621730 (commit)
       via  2bee50fa0b09c9dd785fe6d6beafe21fa961111d (commit)
       via  33f530c93b5bd397c6c9569385613915acf4cdbb (commit)
       via  4735c45083770bf8344dd80dd84695bb4e0fd169 (commit)
       via  886c3c5c57c6419aceb390aea88c5886f43bbf42 (commit)
       via  5560d70bf29553b1d0719dda060d298de7bfc338 (commit)
       via  d42d4368192ec140faf161db6c98a500aa39fdcd (commit)
       via  e88afb9fdcdd8b9659ad68021987fd71269d7ff4 (commit)
       via  d42db2ef8638690a1a3e0f4e66ec898d529c8736 (commit)
       via  fff5527a9d917345367f08f0e2fe2dbb81e00187 (commit)
       via  bbed885afb9007c5d81ff55af70e8d7be92f8f37 (commit)
       via  575f75167b48977b3c825e30f944fca70a74f901 (commit)
       via  6db0d02823e4721272a9492c2a03bb16afb56469 (commit)
       via  e7a2d57f559f84d9a2181526e3a4d6ca6082f3c4 (commit)
       via  b4ca11159ff0d38af3750c3a109e731f295a8460 (commit)
       via  dbedfbcff43c82cc5d4685a013d58c6245a5f6ab (commit)
       via  2748e092a403d6d8ff11a01238e55935aba7055a (commit)
       via  d3bbd1396af6fb8e6b6c8f50a0406cbc71ee82ca (commit)
       via  bebf531a2cb9cf08843d6ac4d4ae2238d58efc2b (commit)
       via  2542d0dfd960962d10bc4daf603fdb9e2c22d146 (commit)
       via  8c2f3c1f36572e6822d9457d13d7129efd330fd3 (commit)
       via  6ca2758f31fb1a4afeb4eb5aca3cd8d6af402169 (commit)
       via  14ef215b72d2d56986ad29f1358cf27f7be75294 (commit)
       via  24129230929833c3bad1e81b6af9b975c1f605a1 (commit)
       via  fc413df044d945ac7620b0220980b23698cc1f5d (commit)
       via  c6d5c89d0581b6f93793ed9e43d3ec28bc3488e1 (commit)
       via  abc952f3017c4bcb68578cd90d130ec08f72aeb2 (commit)
       via  e359eafa8b63bd374153ab0bfe81680b3a476dcd (commit)
       via  30fc3285c237081c3bbe20de8a6e3adcfbc29ca0 (commit)
       via  751ca54d959fdf93f042800cb5c4831e11979b78 (commit)
       via  723ab7027a196d66e82d373d58f767503e88f771 (commit)
       via  acc982607d60ae73a482a9254b6a34979832efb8 (commit)
       via  835109e6384b40e3c801587849bcf76ea0b1e76f (commit)
       via  e2a1b086e41099f52b407e4085576b00eed39b2b (commit)
       via  a5bf97676451900886f6dda7521ca7db27cdd452 (commit)
       via  5cac6f5fd28ab38fcc7279d5d7bd5f224d689d8a (commit)
       via  d35ac7e38b0eb480a4573a77a4bdff2a84f92f28 (commit)
       via  5cabf9c500789ffa2a32b8c298d0978f3c08c539 (commit)
       via  7c80a8b76a2972ef4e42dcc281f46d9e0c8839ea (commit)
       via  057ea788a6cfc9c0a5fc02376e0557f4d0529b38 (commit)
       via  3adaad524ee4dacb06434956bee3c96599299c98 (commit)
       via  57b2c57db16bed3f712200f603a9e77998706cc6 (commit)
       via  846f42e54e6f2e4b00802c5f1a45cb2ec1b23674 (commit)
       via  69e10b5d9116fed733b192ba902d2dc7ad68a076 (commit)
       via  cadd265aa66c1fd41e3a385a3b23e97462094b4b (commit)
       via  40fff998c296ff1fa3ae681a1ae4c06df7f6abe5 (commit)
       via  f551c4a120603e54eb6b9119b3e214df3523a8c9 (commit)
       via  426e8062746c72854622a7a676c8f5c51fef45ff (commit)
       via  937bbde50c186d8d28bff1d8980fd701cb9b72ab (commit)
       via  d3c6950d8f2945c18448a0b1edf38bf8d15ced3f (commit)
       via  d8b5db8865d9d2929e9a3fe708d609d10622817f (commit)
       via  d119e26a14b0bc143638ca38926a4a0d911fe8f1 (commit)
       via  cffee40d749672091b0969c8ec3168ab3e5254d6 (commit)
       via  9eac45e52bf4a4b37bebfb2fc85ec5584207bfa8 (commit)
       via  a23620386db119bf670221368016484a5a2f1f93 (commit)
       via  ad5f9554d13754e16def528a24a2669f7cbd4e5d (commit)
       via  72c6e7bcd898caa3a2ed718e66b71568fe66bc7d (commit)
       via  d20e33394de2a85f17399e0e4d9d7d2e52c94178 (commit)
       via  b67e59900349a05e6ed030f1cb92020a8109e7dd (commit)
       via  bc27dd23b329c7d82deebb3065917dceba18da27 (commit)
       via  51601a277992c213e60c6bebbc876631891ce699 (commit)
       via  39520ae3caa8227e58471b8783106a3c2dba1304 (commit)
       via  f4d018c979b333d61fed9b1884d7edab540f3c1a (commit)
       via  d3f13c19bdc7b2efe160c66116461faf865fed4e (commit)
       via  8f535386bf3cf4bb0e6a929e4a39796fae235f3f (commit)
       via  3af59ee413454b94ad45bb5d8990896186b5d672 (commit)
       via  82b42172688762c4f5fa7727a6974c94e8ccd86a (commit)
       via  be68e901353548dd87ccadcd62ae82551b1995d2 (commit)
       via  2d11eaae9b48ebf7998b37d978466d26ddcfc769 (commit)
       via  5f2cf1041d2579bc4c29d5691b9ebaf9250f39b8 (commit)
       via  44b7b4e113d39b34e35d6b2323fee9fbad21611c (commit)
       via  da075298c7ddbefa68947783a787b46f659fefdf (commit)
       via  182891aa10947a1238195a8565c051efd1dd5480 (commit)
       via  fec33dcaf67cb752c669915bb49dead9b8f11e4f (commit)
       via  d99331757367dbbb3607a4644a5a6572667cb262 (commit)
       via  5a9879c969a110494880301464c80d648fcd560b (commit)
       via  a9f03b2a636cbc7dc16628a5de8701cc66e04871 (commit)
       via  1c82c1f875ca2681ff36e804fde8f6beb8f36c77 (commit)
       via  9ac3e54bc97741867159976495d723a06f2cf28d (commit)
       via  3789a46123ea8a3c90977d8365d3720f9f6585b1 (commit)
       via  f23d3167e9163944b7a52ce9d822b930053bb957 (commit)
       via  170c33818a1ac6a3e35f411d80cf77a008bd6e07 (commit)
       via  c21753f5f91a3144395f4b259b09fb16b39b4b2d (commit)
       via  656b5e388467792f437caf1afa032dd4d36b2eb1 (commit)
       via  25ada289bea32adcbaee5a5181eb94809693ec9c (commit)
       via  9819eac0a0ec331264e58864e66682ae9d436e82 (commit)
       via  469c824c8db7dd960350997b3f4d55bcb3245456 (commit)
       via  7da79d9d4ec5509eefb06751173bb9ff5793a4ce (commit)
       via  da2a7a1bd6ef8ca7daafbf9b88d0754be3fc9382 (commit)
       via  5ee7a415414d023634ef3e9b9333d49068791e79 (commit)
       via  fb189c35101622a1bcd53d4c10b589963afd8747 (commit)
       via  c43d72c6d70213350abf70e81710f98afa0a0862 (commit)
       via  302257484801465c1e0371e36dcc0d3a28392af1 (commit)
       via  9afc5f2d9ca0af29c34ff15e58b66387c3c149a6 (commit)
       via  f6f099ed8d235f23a70870b2e013afd6a085db00 (commit)
       via  f0c491076403ee51e42604e603aacb9873944aba (commit)
       via  716e83202432b70111466738123fadbf38824d87 (commit)
       via  33692d98e44828a7114f1b8faa54c359b769e87b (commit)
       via  ee3c9aa1a39e6864a096a6619e237534d524ef69 (commit)
       via  323701f50f452cd96a15d14c278d41bd6e6b6f25 (commit)
       via  761d43de01eb9c197162a14f8cacd3d58d67da77 (commit)
       via  d5f9f022f9414ffb8bc1b7b2f04096468574e2e5 (commit)
       via  a4e96f869530a93545582f5a21ec0e6caa20bcd9 (commit)
       via  c6f9a3fc32babe5c0d26a1b23a89a5c7917af8db (commit)
       via  6dab05d0e5f1337aaa045b785d81536766edd27c (commit)
       via  96952e4e39a617dd5233772ccf31c42195150d5e (commit)
       via  9201f7f9da3043ad5574d3cfb8f841493a76460e (commit)
       via  9dda02a389dd2989e6190e07d2d5e8727dd6842a (commit)
       via  ff7b6fbcbca05e47fa226f8bef9f70de74e39024 (commit)
       via  bfa2dd53794c53558aecb44577ab1e4752c268a0 (commit)
       via  b4006ddaf13af4210e2019adfbc1eba3ae963c60 (commit)
       via  5ea1be908b4b46f029111deeff5216401a9662e2 (commit)
       via  73fbce50c5916c0daa9939cecc2088fb572ee17a (commit)
       via  4d3faccfe98c1f00987d7bc1ab6509ef347cc2ac (commit)
       via  e6a5235b8be6eb8e884d6d648b7bc89179829d9f (commit)
       via  379365ca0bf7948269ed705af53874f65668d851 (commit)
       via  ad88edf91c59cbf2cfdf59f21f278871889636b3 (commit)
       via  d9b63321261cbc98a50166981213342b7c0b91f1 (commit)
       via  823a16ae78acdadd17d6f563dfafe4678c364906 (commit)
       via  21a3d01379891f2670991e4d24804e1dc87a1ab1 (commit)
       via  8713e250470011db40d0cc9f1a02afbf98d2853c (commit)
       via  77f198433d31d492d86c38359940acd7f5012cf8 (commit)
       via  b5494642ea862658418d2f9a419b10d1fe25431a (commit)
       via  b8568977a1c6f7ff82900291814699617f8547b1 (commit)
       via  8003783f717ecb167a47c11d01f459b43670fd0e (commit)
       via  a3ec6d08fcaa76d3b16906f57eb07bbecafce545 (commit)
       via  8379e4d518e9351212004e1d4155d8b869e727f1 (commit)
       via  fe19ce4b94f7ae3277e9016bc7886179f46ec472 (commit)
       via  aafddea00106bd7e9fd6336623788dbab95b7306 (commit)
       via  bab8ca353f89418b0d92ec639e5964cd1d2aada5 (commit)
       via  feac22422cfdc33e14633b1a2b724c49eea69d94 (commit)
       via  0be695eef3af4788a0890060a765e6b0d2c32334 (commit)
       via  fd45d42570bad689429ac62df86929e6b0c86cdf (commit)
       via  fc1a358d5403e87bfdeca2d0c510362576a8c2e4 (commit)
       via  06dd898fe349cbc5a16fb5f6daf2b563fbb3c936 (commit)
       via  81b4b70978fe97e6bd22bcb85cdfa36131f2f012 (commit)
       via  7701a7ad84b0d4fb4642568bd75f63a5c0586658 (commit)
       via  b0dd0080e98ffccb2d48f247583f55c8937bda84 (commit)
       via  fcc0a767df83518e1b42c78ab7d4805fe6b5192b (commit)
       via  bdffa02ff66636f6e3b28d5ab553d9fcad69037b (commit)
       via  3f03b72f0c24ee2c5abfe5654107f6e1c019bc15 (commit)
       via  59c684f9e8a545ffae5036b193d09e9c8ab7e689 (commit)
       via  bf4baab1c1e2a422334fc07d77a44036832583a9 (commit)
       via  dfc5f78444e593f24ab976a6ad472c2d1dce12b9 (commit)
       via  988b1304d57f960f1006af52dc700026061a280e (commit)
       via  4e76299b9c1d4132a1fb681d332be638fc922425 (commit)
       via  3d595c9b4cda969d75715395a29057e1740568e3 (commit)
       via  69e7600c1d70c485325a3b2c9d818ac2e1e1084d (commit)
       via  ebaa21aa60ce8f177091dc347ef47ec7e90af3ae (commit)
       via  c18ab4005222f73e5e50684ed1f242d8988baec4 (commit)
       via  61974cf1393c51568293d19685ea3a4aafc4a770 (commit)
       via  b8048416d62f1c380f425d0d2dc7ed0fbbd6fe5c (commit)
       via  7034b1b4089ade8f362f592ec209fcfd45b87ec3 (commit)
       via  eafd0331da34dd8d61f9f3afd22f7976615b2781 (commit)
       via  d44585be5835346f21df58aae29fd0c9a3f3d63e (commit)
       via  310b52541abd4625151df391e1194ec2e7c76448 (commit)
       via  cc2a6672fef9bb825b2fa4b8482f4306cae491a1 (commit)
       via  ae548f25303fad421a20ebcc34af39a6d0ee0db8 (commit)
       via  310db12be5e8825d11e91a0abc30b63548ec4757 (commit)
       via  4886a88b72e5faef32780bc2fdd60ec5c2d7f16d (commit)
       via  c0e1dbb244f0cf8d838ebd9296e797a0a2f23fdf (commit)
       via  34ef97e556eff9a315160f0317a6652154d749f0 (commit)
       via  d8d561588362cf4c2e100949b39eb45661471535 (commit)
       via  f32deb7586783a24dd419329975f1d9429728d29 (commit)
       via  c31cdc09ae6aefbbf6f9e14b3c6fdf910a729b29 (commit)
       via  5cf15331acb6250da715ee9c41a2a0db7986917c (commit)
       via  a5c1b7e9798565f07e231c43b3453fe7b69c7368 (commit)
       via  d30c7f8b3210ae1e825033e852c369d16b7e48f1 (commit)
       via  c9182875d51afe9407271334d0be1fdbd718c4d1 (commit)
       via  ef2d37b1b95aa57a2840080995ee0555b7a64f50 (commit)
       via  9cc673cf435ec02b043e2b3729b0ce411cfd5f95 (commit)
       via  86cc2e4b923ab24ef9a6460efa23904a9f8ed742 (commit)
       via  30945c85e1d6b6dd20885683851ff4f1f0575346 (commit)
       via  a7d40e5a84aadcbfcbce43876d6f1ad5e7d9d824 (commit)
       via  0a0ca0b129c2061db7c6f70e46334500088b984e (commit)
       via  ea0e43b2e928db9e7ef77977adc789cf44bc81c2 (commit)
       via  5b7eaf60e9ae6a239f9ef601ff615913680f054f (commit)
       via  4690e2bf79cfef03c548e08fd5cf67efa709ad12 (commit)
       via  bdfbb8c113d8e7f63bb8caa57010437826c59dc9 (commit)
       via  2edb46e696fa3ca24aeb0c820f15630ece41f0fc (commit)
       via  c1aed40ede934f264217fa46f9b4bec666d3b600 (commit)
       via  aa569f0b4c661ec83fb5be6574250f1c3f713119 (commit)
       via  08c24c27a61b52063146576e9c80773b0e481f37 (commit)
       via  8f04915e13d44ce5028eb07f3eed3879a592f11b (commit)
       via  5dfd1323ad00fa86e008072e8a1b19f9869b586f (commit)
       via  73f6f1bb2bc589b28f5779521de5db4aa0993deb (commit)
       via  510a6b6a1a8e263a7cfb305032ae3ef07d88a400 (commit)
       via  6086e2a55293b8a21883f720788d951c3545cac6 (commit)
       via  0a139ea3b0b4dd9785ce1c847e08d507a9f1bb6d (commit)
       via  b3677ac8c09f7e42ee6e7cfe1ec7dfcdd0832009 (commit)
       via  400c39aabb36fa98b8878806bd5210677495527a (commit)
       via  287590ce79a8cf78573e1edf5bb8cd85c8e48210 (commit)
       via  9932d701d2ebe1d8f9d04aeaef701a1e7b616852 (commit)
       via  e18701a42562461556c3fac9013abf76f29f44fd (commit)
       via  d8c6d08d57863faf78b2b582950dd8997f83a811 (commit)
       via  264344dc26e402ac477c34f90ef1a8f52dc4ebab (commit)
       via  a0c5e16c9709e4785c92489bc5347e8fbd8f3b5e (commit)
       via  0e301da832ce612d42488c2ad69addf1f44ee85f (commit)
       via  4044a6363ba1ccebc98369dfa70052961fcf1117 (commit)
       via  f5d864c9681464e9984c92ccfd72189b5985d8b2 (commit)
       via  598d191de7ae6033ababaefcfcfc973e13ccdcbe (commit)
       via  5cb61be1c7a900d9d872c8b037f158e3c10f40bc (commit)
       via  ca279f2c28d2c7130b3fba8df28fc6c86d559d1b (commit)
       via  6dc673b966cf35cd390b2fa1d139fa31a59788e2 (commit)
       via  3eecec6dc8eea0765a0821526255f682daa3f321 (commit)
       via  c6de6999ba87c75f2856953b908ddec4af404c99 (commit)
       via  f4fcedfae4edf9c38cf9becb228f3956f2812448 (commit)
       via  0b1b571382be1fbbfb4b2dbb499f0367a798e711 (commit)
       via  0181b121e163c32c932aa4585ae668d50584281f (commit)
       via  76edfd719d2cef94494cc4f50b02cf380f88cf99 (commit)
       via  121e7a814e34136e77191f2eb1951ad27a623453 (commit)
       via  82807388a1f7dd901e619419690253a5fd58663b (commit)
       via  53ad1144ce5b37d4d6e7c9cdbabddf92b483f75a (commit)
       via  e5561b32e943e67eb457b8d7669e005a0338395e (commit)
       via  2f56fdaf3a039ee87d264933fe1306c2642f81fe (commit)
       via  aac6af892c9bbaeb791d62ed7470a80713e66650 (commit)
       via  0e13d045f78e1c78c9f2be3012c6bf06bf1ea5bd (commit)
       via  f0d1f9935eadd303d6b160ae9c349398f6691bd9 (commit)
       via  0f696afd56780250b3f2828b875fb7ea8e4ebe81 (commit)
       via  591ddfb6f369bd37bf8218646219f5f3fcc561bd (commit)
       via  c159d1d0032ce82789e0725b9a50c48ef634ecd4 (commit)
       via  38f341f93f21a6ecd8c27620825c57a093677330 (commit)
       via  f288c6cc7eebf112c73e909cbf7b74318cbf884c (commit)
       via  c5dfc8a4b24c4da0a83e8bd759b361b6d1080955 (commit)
       via  84cfa56ae6bff1649b73a63c8f23d20a5a87f9ff (commit)
       via  ef45c8676d34405a2c99ffa51c258b8cb7b6777a (commit)
       via  fbce5ceda30fd45c1834d487ed882f394352ef8a (commit)
       via  b9bcac3ebad592ae9a620f26b3841986c63614e8 (commit)
       via  6268a275acf7c9daf8561e4b969cfbe4e3f44df8 (commit)
       via  848ccc7efab5dab22f7fedd920daffbd102d09a7 (commit)
       via  855e16bace329e9a449fcfc569a0e8ba6acc2d21 (commit)
       via  530468d1224a7c2251ee54bf5ec8d1f8d875de14 (commit)
       via  1a4ea520c247fd46f544ae83bb9640e9f0652577 (commit)
       via  381b79bf5cfefe790bdcc24dd33296b8518e4c19 (commit)
       via  301f4e3ad12f7ff3c08b352b05dc7886c629900e (commit)
       via  05ee30be7534c9234ccf029076563ccc7e7a8189 (commit)
       via  0dd517477cee1a5a4c247b765e150976f4809e58 (commit)
       via  626ea7dba17faa4106fcd317aa7e277e9ec5227f (commit)
       via  7761d1a6b70e1531c73f91043b9f69a251099701 (commit)
       via  6c26aa2c194f60b2823da49166741203524a0b48 (commit)
       via  44eab398d387d1e72850c6a1fedd74272ca119a9 (commit)
       via  a572ef644ee17b0a61e039ce691a39554031aa73 (commit)
       via  ac6798733ce11d6a3410bf1da639cb3e5a84047f (commit)
       via  845e3998bb2b4175e947a20eea4ed530629a778b (commit)
       via  b6a5513611786d2c0a513bac3ab2db00d84bf289 (commit)
       via  1e7b6aa1f16e06b796e3ed3f66c48f38a9287a5d (commit)
       via  bb48082657c79156ad9af20d71c1ca73eafdf0fa (commit)
       via  6a1a627a78a021aa164bfd1136bb5396e1defd95 (commit)
       via  2b9864be33a42c3f9f612fcb3cf51e46c040a354 (commit)
       via  cc7fb93641cd735c8bd0ec744b1fa1b84a242626 (commit)
       via  32f2a67ecfd7a5b4169d4e3fbc162306771f0d34 (commit)
       via  eae444a782a53e348fd5df5929cfb2713f0d6fa8 (commit)
       via  c4d584c524efe8c9c689a263bec54b99b3d89138 (commit)
       via  31e86126eba36e27c824b769ddea304e52ceeb59 (commit)
       via  23b42a86c646eed10830b4b34ec46173728140d0 (commit)
       via  0f0793754990012c75393cd517c85c261579cddd (commit)
       via  a43a3fb3b393b125b7c6d4139375b4bd95890cfa (commit)
       via  9a4afad134f563d41f2a0c84b4389698df07a8db (commit)
       via  123d3d778051c90b6be39b0f0b25da24d025d382 (commit)
       via  1553f4842dba02aaca9fd7e5a9ac426d7532c462 (commit)
       via  ffa8b415658e6d3ba3836c6e208fe35979de0bf4 (commit)
       via  a3465f97627494bde0f148e27559046308cbedda (commit)
       via  5b7e2250d5802b20b73242ae4d0641b32f72cce7 (commit)
       via  4bfcd9f168a3371b19bbd12429a8da37883256c6 (commit)
       via  422349074a47c6cf6394234a3dba975c84b94b09 (commit)
       via  72c3457917a25dede1695c8abda316aa4e5afd5e (commit)
       via  bf95f654a1587dceb6d2d27c03d6da84a5a2a92a (commit)
       via  0fbece8ea4acf263da8bc312ba3451c1adb7ea43 (commit)
       via  9fa534460eaa10ac16d1de355e45898517306ec5 (commit)
       via  08d02e15e140740902dfab5895295c08d4ca0d16 (commit)
       via  42e438d97a95d8e46f045acfaf82298d8bb3dcab (commit)
       via  303a6e2ad510ea2a4c36e7bc2b7ce789ce0b0a7a (commit)
       via  858cd93950d0fd7b621e9e4656261856e60856ad (commit)
       via  034677aa057f89be2d5bf923d6956164396d11cb (commit)
       via  acdfc466ec52fbbf394f0e0b00544e809e74cec8 (commit)
       via  274c7abf3aee7dee8bfe648f485087a5a0ab59ed (commit)
       via  3002e7a6bc67564e900a5da490ef4e6b3b43224f (commit)
       via  8b51595b8ee2a1a554d365e857dda5cfde440e53 (commit)
       via  d64856940e5568d3b8bd83d60f36d13e7bc11fa2 (commit)
       via  f9bc13bd47c5404da529d5a71153500d2ee755c7 (commit)
       via  decff518125e54dc044170fb4e31a5b86d566bb5 (commit)
       via  ccb48a84de0d9adff1809574aac4df77b9b4575c (commit)
       via  672107d387a86334aa70711d071bc3c2bf9c5502 (commit)
       via  40ee991675ff42fe531bb8f2d1bd44311e9fe370 (commit)
       via  aa9dc78611ff1339d02edcce329540d32fafd9b9 (commit)
       via  5cdd9c170ff4c5c3ac4c5101ee4a9ada47a4adce (commit)
       via  65ecef658fb337d97db7025bcdd4107276988543 (commit)
       via  a00ef8633a3fbed5baecc5c47e9a330943dc8f8e (commit)
       via  3c0d0df8f6d287e83ea959881afedddc5d4b784a (commit)
       via  503254168510f46f55da0fcf6c49436c900920b5 (commit)
       via  6c6ca86bfa400d880d051fd87c7c1fb9b8905114 (commit)
       via  7b264271f10d442953f216d66f439d770e0fadad (commit)
       via  341344e17cc68abe57ed2a2ef97807f5d01d9232 (commit)
       via  8c01f6309392198702e89946f4dd6eb76c3f2772 (commit)
       via  c50da8ea8cdc343407b53e41fcaf971294cf2a65 (commit)
       via  91a75ac34ec1b4f78ba2b9b63fe650941ab72dce (commit)
       via  7383891fa3dfa915967e3d15c5e678f9545ffb26 (commit)
       via  02d27b88fe5afeb52e69b387929ef8d59663c09c (commit)
       via  be33b03fe8aef6e9e23f82ee7653bc46fabef161 (commit)
       via  03d58fa94878d11cac6d25cdb67180060d1e2fe5 (commit)
       via  2d03ecf4a147db64708991bd3bf2f1d9fc9b358e (commit)
       via  e8492641dbf4051c456d355e536126740198892a (commit)
       via  6c63e6c0a80c1f77a9f96be9956aa2a31147a89e (commit)
       via  41d0494a83f08584f7427f6a050517cb1a6dd70d (commit)
       via  abcdf588c84675cb4f5ce528ee30e4f40cac99b0 (commit)
       via  f3e822f9fe498c6c9ef5fc0602b98695349e6e5e (commit)
       via  11339c91b5e7efdc214897856b103d0c532df45e (commit)
       via  d7f1a63c8396715e501be04addefb0a158303e69 (commit)
       via  6772d21bda502b479d29f21030816560f110c04d (commit)
       via  f6c53e0e14c29950c6b29f2b3c6a46c13071fbd2 (commit)
       via  501a707f36ac0b2ac13dc074020641b58128e175 (commit)
       via  a526319c2a822c1a2b06b09d734fa3da6f84ec31 (commit)
       via  e925baa047b64d387c539473746b495972310813 (commit)
       via  a6969ab968422f146df9cf9ef301fb5b0b422ded (commit)
       via  3e70317d25333921718191ac3ba9be91e0408449 (commit)
       via  440a06656f8c81cf3d7757dd00991872683fc513 (commit)
       via  4af2bd565b75a9dcbb553975599d5e0b8856e940 (commit)
       via  253673e89ef17f5f19b5c3b7cbe32d8348e1ba4f (commit)
       via  20354a24f9582cc0abb268d45adacf5f386a10ed (commit)
       via  21bcc1b7eb165fb094db43f60b8073250074c3c1 (commit)
       via  960bdb270fb93118e9241ffc28648962f136a37f (commit)
       via  e1fc53f3f8db8a6770dce3f11231191734217211 (commit)
       via  82295301ecb7223887e4860ded71ee6373d3bb94 (commit)
       via  04a389ca22184133efe626dc83d8e8951c802551 (commit)
       via  5fb964860b2cacdf87a18b5295cd0c492aace3f6 (commit)
       via  0f143ed9e47ec9d07c0b17758c3bc466e631366a (commit)
       via  0c5278fc1b23cae26dfea01be30a759b4413f35d (commit)
       via  d5774ee9d1d5ff2cc1b8fc7edcc9aeac704e7d39 (commit)
       via  80f4c0641ca89efa0813feaa3429de9b471dd816 (commit)
       via  c05dc4cdc80d754a284e93478e643fd38dec123f (commit)
       via  7efe1eb66d31585bd6cd4a52ef0d12e0bdd91a88 (commit)
       via  152e3b9509574666dc8e27d750b8bbe2d79b88a6 (commit)
       via  48c6d3e3a7f10c6351a1cbc8fab1ea06cb616348 (commit)
       via  49b655c14efe7bc5d73c099813db22fc09050d83 (commit)
       via  fce78b35e3fa0534d4173762b979c916cc463cdd (commit)
       via  c479436a110f977879ff278e9a550efe47f26e1d (commit)
       via  7490e64759f56a8da52c8259da8b96baa769a6fe (commit)
       via  2fb06b518ef7c6f402d7d8832577400a0814dab0 (commit)
       via  061a0fa3af58c1c1db584e21cb069547288f7e82 (commit)
       via  8bfa3e75783933f7a9e484b18074336456fbc834 (commit)
       via  511d0877b038c3ce33f3fcfa72def70f7da84692 (commit)
       via  72216082a3e042745707e69692e4b8664fc07a6e (commit)
       via  7b41632216dcdc83aba5bc48b61189f705bd3e97 (commit)
       via  8c7f4b71ffe3976dca29a8337e3d487ad7547096 (commit)
       via  f85eb7e10ef091aa9989d811705f04236bbd897a (commit)
       via  ebf8ab12ebbbdd4b4b317b1b14f1e65d67e381c3 (commit)
       via  4d4d004399af1dc0a99d67893f818756a8d19a90 (commit)
       via  e28c8a92c6ca9b1c6a32d727cf5913a44229ec4c (commit)
       via  d0e6362a7388d6e17d43f92ec64d13d5ee206894 (commit)
       via  e52b761b16170faf94bad9dd407cbd3238bf371b (commit)
       via  bcbbd1e9d64d4527644072364a267eca13af434d (commit)
       via  8a2221bea7f28533a62a1c39e822f8c9d30b0b95 (commit)
       via  358ad8eabdc9eec2e8b690ca0310b213dc4f6098 (commit)
       via  4a96daeef2dd5a209ec685ee3e1d6864987d1f4f (commit)
       via  5ab76d533d0189c66d68220229b7453e33fbf4b7 (commit)
       via  ce997a9f7f79d7ee4c5ed9ca9ed072c3626f82a6 (commit)
       via  ed9e8d8616e919f81703134a7d5cbac62f151877 (commit)
       via  b5c641cae15249d888c7bb41c937338af8f7102d (commit)
       via  27d5f6ed785b6e127cf9a2f1145fac21627a9a89 (commit)
       via  cd13ebefd14bc536d069f395bc866e902550ffff (commit)
       via  44c80db735811f803760159dd3f1065ab0822179 (commit)
       via  85ea947a0961e4217be9d53763fb5f40aed6e3db (commit)
       via  adb6ea84650d517054fc67c097b456714057d07f (commit)
       via  6268adae9d3812084c7854d62e1be8b5412605f8 (commit)
       via  c3db5a62be3c07e4ddaff6a76a8adcaaee1a0319 (commit)
       via  91e919d5ef0dc210dc1e4c9c150acb7b082ce92a (commit)
       via  d3f844f115bdcb6b349b9aad3d46e32dd4d18d33 (commit)
       via  0536d6d65bc15cc4286bf26e21b893d94eb9f4a2 (commit)
       via  0528a6d4df9d81622f9813c2a8925dd7322a81bb (commit)
       via  076ba4ed7de93d81211c905551e38768f79a5518 (commit)
       via  7ae95cd88f8de821b56d81a49a6999669d823c76 (commit)
       via  1b9ca54af0f7f70c65382ebe748a22e6763130e6 (commit)
       via  e9db1de8aaa0a519f31684561e3c660461ccf22e (commit)
       via  7b3296a9decf3443b47b386a399aecb5b996c3fa (commit)
       via  e71be8357f42713487c158be2493cd245963deb2 (commit)
       via  a522b5843859343b885850afff05130fa0b7345b (commit)
       via  1c44466e5983383785eaf25f3b5da01936cd2cad (commit)
       via  a013dc7e4f0d91499d7349eee553a771551cd13e (commit)
       via  1a655bf26c6bbec82c13d79e15f9fdd43fb18c1d (commit)
       via  8f4aa687e70abdd7329a2ebf928a175eb529744b (commit)
       via  8d7ac59313253c4858bbe2cbd4db746b1d16e0c8 (commit)
       via  14b624d40b6267456bffbbd516410dd802f143df (commit)
       via  8dce81a50c4aa76f2d2bcb3742c9708e26b5dee1 (commit)
       via  23fa740736501e4cf023a3a94a3f9e567e95c2fa (commit)
       via  ea45d699313db83eb9fc941bbd65872e1790b1e2 (commit)
       via  aa68e1bfb8b5fe86127c4a3157183f423c9179b4 (commit)
       via  284acd7cf652e9ca0fcd57a230fedcc2a155db67 (commit)
       via  5060bf0df9927f1c4c20640db5d956692818f3cc (commit)
       via  27880e36c02ea90649f0badfb8e88894ede6f6ce (commit)
       via  1530c4fdb9c691ac378ebc67ff3c5775f2f9ee9b (commit)
       via  eefe18d01ac964d062e32b9bbc7eed306fee9a8c (commit)
       via  7fa64db2c56414cf9db215a1771266a4f9b6161b (commit)
       via  c1ab6401ba557f8ca015eb462f8bbba692c7b88a (commit)
       via  0ec1187c3f9b73dec2078ddfd98d3a248c3a1648 (commit)
       via  0d50b5b6183156ba3dbe1d6fe16588dccfcdc962 (commit)
       via  2923ce9f48f072119e8c5d0771ae3480a2679864 (commit)
       via  c65e0ee82ed25c9161dfa63e3d1ff298bd0c4c17 (commit)
       via  da1182c77e96a58bb6a829bf825d732cd299f807 (commit)
       via  cc48478bd40eed336631339af3c272dd1a1d86bf (commit)
       via  7114c08c46f867f9e668d34b3fddeaf662a9b214 (commit)
       via  ad3df9216ff20898eb96353e5d6c52b271a87375 (commit)
       via  77dffc7b9308abb3d331c165c3042ec6ff41992a (commit)
       via  30522a0e950b024366b07c8a25f24a66935600a0 (commit)
       via  d99b860348c603932ca80c1c5b80c3e6880c1f35 (commit)
       via  0869894ffaad8b028c4775bafb853535d1183689 (commit)
       via  88474d0ad55e159de59e35a74cf9686d3e641f92 (commit)
       via  60dbf9f65de31341aae26c1804e77be6bf268dd0 (commit)
       via  ca3061e04ae8556d3b66fb3391dc309df3c80010 (commit)
       via  56508d6b4085d51c640df635ebfa64ca824cdb94 (commit)
       via  fef361d38a31b29fdda31e8a5eda13c908c04966 (commit)
       via  b25bb303ff9c56f3b4349ba1e1cab399acf404f5 (commit)
       via  8e51498f431f233a38da76c169ea2e897e91f051 (commit)
       via  63517baef2f2e2d2e1ea10d4952189ef377da635 (commit)
       via  ee10e6bbf12c994dd6335560acac2327392ba3b0 (commit)
       via  07b0b88d99a07be66b564d7d8cd76fbaf27e5909 (commit)
       via  e4f90e4d14a89ff08ba654333d316cd3e5e97225 (commit)
       via  0b16f3e4e4beccf000f04f63129276e0716c141c (commit)
       via  73b46d8b02451bb782f7262253778593181fd02d (commit)
       via  1b30b40e3b83876ef1d96bcbffb9356dce94c5b7 (commit)
       via  d9ef4f277d847a62e17f944cd42a892eb00aab67 (commit)
       via  68d7d4f2b6fce5f755f4ccecc978a8b16d73c802 (commit)
       via  eb8d11d83e21d6554dd69784254898c7454a2727 (commit)
       via  0f9882d559fc996a260fb6e00254fd9d5f7de218 (commit)
       via  254c4352cf3f0fba7861bd51b42498e996036227 (commit)
       via  cf97dfcc0a04149057688f302252d696c2d575fa (commit)
       via  12a671a65b2cc1ec7431f8cd8b024cf70f269f7a (commit)
       via  8c67902ccd67de79c0c86c85116c46b5dcfd82bb (commit)
       via  3052322166d7f44270479f7421275732582542e0 (commit)
       via  9022eaebb83e9ab8c53e0ca61c1b44841f0cc809 (commit)
       via  3c37f8e662a46e78b00e498ab7be26165018f87c (commit)
       via  3de7432a187e32c3ca0dd3fb94b3d52c7563dc04 (commit)
       via  565c31196f3ccd4346c8a1ac1e19b1deda22eea6 (commit)
       via  7cf1194ba3e69a861a7f88740cd6490193339e67 (commit)
       via  61a24458626de4c717cd8999ae57b1c573e3e160 (commit)
       via  f7878b7f8780cb2e17078486b2239661be6aeedc (commit)
       via  01f16229133a6f5fda6d92b7f86edda5e08dac8f (commit)
       via  ac72156ab86f90457a2907620cb2df5733c57184 (commit)
       via  7c797619a3bf856a5f3cee92fb40722c6e771336 (commit)
       via  38770e0e9fd272061c2bf80ee8bcce25c2611e6a (commit)
       via  043ff05cfca336d99cf40480e93ec4cae06a7fdd (commit)
       via  d7e56bd7e8744b54af33675cb875859ca9d053ea (commit)
       via  327681d1eee19c941e33beaef75359ea72b0c2f9 (commit)
       via  9336a8a8a11983f28e61db93b9e2262eff793f39 (commit)
       via  79df4374ee643ae843e93abc14b80145c9154730 (commit)
       via  346ebae28e3a179b51fe79948212006a09d6940e (commit)
       via  6882ae221f4dcecda48162696b8dd756828b37c3 (commit)
       via  05e6f52d0cf418ee7d727b5e034d45a60a246ba3 (commit)
       via  9b75f439dcdfeb850487c59863c680c9edd772a1 (commit)
       via  06f6b31925a51c5100017c4a05bba430d29252a4 (commit)
       via  b70e4ce5d5ea65e788a172e757af5c07b016fe4f (commit)
       via  2d816cf50f92cb6d984a8821f6c6ddd621f5140b (commit)
       via  17341ef86b68cab0352535d12c5925814609e4d2 (commit)
       via  bae79452d0fb211338eb2a327f3679ebc5210ca2 (commit)
       via  32468a5b95280d671f4648dea6d2ff10d171378d (commit)
       via  35532d9eec8564a63e91af98a08117203e859d97 (commit)
       via  1d1cdff657785ca3c9d930d1cf3ef462d98a1b24 (commit)
       via  d9b0e6003e265412de46174ea0e2705a8e872f2b (commit)
       via  45ab2f46c34ab5336768d095c0232f24efb6e04d (commit)
       via  1ae46a07c7f2d1453a82a6dad0c546b224485e64 (commit)
       via  61ed4ec992c01d2bb7c052983de9f917d3407edc (commit)
       via  95620c2efb18c5a89cc88995f5c1a09a054d56a9 (commit)
       via  2da54dc5851ad6bf0837e344b880bda01fc466a0 (commit)
       via  3d678bcc827a44ff27152db3dc5f1b0084f1e101 (commit)
       via  aa4d046ce529b28b783c4b8044983d8676a2e7ca (commit)
       via  35f3cb05ac5c3319072b0f7f86b49f244e3cc3e7 (commit)
       via  84dd5e80955f6fd3c5a26c0eb752c765e5011c5c (commit)
       via  b67325fa722e4cf3d2e68cffa401ee1304866396 (commit)
       via  2e7d59676bf6098d0c3f277e450ffd38a0bf938d (commit)
       via  9e4360d3c323f6d9b25055b142b87295236bc648 (commit)
       via  8ada64214ea1a4cf63748b32a7edaa2317709f7d (commit)
       via  17a7412040734fa4b906b1e6c5743ddc41bacf2f (commit)
       via  722ec7495f5ad00a404c31d8b72052be41a780da (commit)
       via  874f78e7f17a15da00e4aad0c9bc14620330dded (commit)
       via  e688effcdc8513fe5acc24116857c71edb306267 (commit)
       via  2147a538d2b64392a2c86e90a123c47e7efaac24 (commit)
       via  1815b1113c4983d8e2666c76ac23401086440c01 (commit)
       via  760afe4c383fc4136c949c26b0f3b14169e1e2ca (commit)
       via  6ed1a66a9ea26c74a60643c1c99191f2bb43a1c5 (commit)
       via  be1ff42eb4380029fa7118b9fb822fa88dfb1594 (commit)
       via  984848632f6d553a26661058c9b3561303e8d747 (commit)
       via  e1f0d735e521b0487b2cd8bb179054932ca58201 (commit)
       via  fcfdab3ca5bc40939aed45fcabf436ff3c3a67bb (commit)

This update added new revisions after undoing existing revisions.  That is
to say, the old revision is not a strict subset of the new revision.  This
situation occurs when you --force push a change and generate a repository
containing something like this:

 * -- * -- B -- O -- O -- O (2b345de84ee95f655b4d3621575a31230588781b)
            \
             N -- N -- N (64072501d668d7086aa053b05d72dafaf52fbdb7)

When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 64072501d668d7086aa053b05d72dafaf52fbdb7
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Mar 9 16:01:22 2016 -0500

    8491: 8222: Prohibit activesupport 4.2.6 so our gem can be installed with ruby <2.2.2

diff --git a/sdk/ruby/arvados.gemspec b/sdk/ruby/arvados.gemspec
index 3adcf4d..3d090f4 100644
--- a/sdk/ruby/arvados.gemspec
+++ b/sdk/ruby/arvados.gemspec
@@ -19,10 +19,11 @@ Gem::Specification.new do |s|
                    "lib/arvados/collection.rb", "lib/arvados/keep.rb",
                    "README", "LICENSE-2.0.txt"]
   s.required_ruby_version = '>= 2.1.0'
+  # activesupport <4.2.6 only because https://dev.arvados.org/issues/8222
+  s.add_dependency('activesupport', '>= 3.2.13', '< 4.2.6')
+  s.add_dependency('andand', '~> 1.3', '>= 1.3.3')
   s.add_dependency('google-api-client', '~> 0.6.3', '>= 0.6.3')
-  s.add_dependency('activesupport', '>= 3.2.13')
   s.add_dependency('json', '~> 1.7', '>= 1.7.7')
-  s.add_dependency('andand', '~> 1.3', '>= 1.3.3')
   s.add_runtime_dependency('jwt', '>= 0.1.5', '< 1.0.0')
   s.homepage    =
     'https://arvados.org'

commit 6bd98a37898069e56eeb3bf54555caa5eb4be634
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Mar 9 13:36:49 2016 -0500

    8491: Remove git-commit.version before running api server tests

diff --git a/build/run-tests.sh b/build/run-tests.sh
index fac7ca0..1552e40 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -773,6 +773,7 @@ do_test doc doclinkchecker
 stop_services
 
 test_apiserver() {
+    rm -f "$WORKSPACE/services/api/git-commit.version"
     cd "$WORKSPACE/services/api" \
         && RAILS_ENV=test bundle exec rake test TESTOPTS=-v ${testargs[services/api]}
 }

commit 0f0493315521592a615d431ac20a046ca8e705d3
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Mar 9 13:36:16 2016 -0500

    8491: --retry applies to do_install too

diff --git a/build/run-tests.sh b/build/run-tests.sh
index 41b237b..fac7ca0 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -485,8 +485,8 @@ timer() {
     echo -n "$(($SECONDS - $t0))s"
 }
 
-do_test() {
-    while ! do_test_once ${@} && [[ "$retry" == 1 ]]
+retry() {
+    while ! ${@} && [[ "$retry" == 1 ]]
     do
         read -p 'Try again? [Y/n] ' x
         if [[ "$x" != "y" ]] && [[ "$x" != "" ]]
@@ -496,6 +496,10 @@ do_test() {
     done
 }
 
+do_test() {
+    retry do_test_once ${@}
+}
+
 do_test_once() {
     unset result
     if [[ -z "${skip[$1]}" ]] && ( [[ -z "$only" ]] || [[ "$only" == "$1" ]] )
@@ -548,6 +552,10 @@ do_test_once() {
 }
 
 do_install() {
+    retry do_install_once ${@}
+}
+
+do_install_once() {
     if [[ -z "$skip_install" || (-n "$only_install" && "$only_install" == "$1") ]]
     then
         title "Running $1 install"
@@ -580,8 +588,10 @@ do_install() {
         else
             "install_$1"
         fi
-        checkexit $? "$1 install"
+        result=$?
+        checkexit $result "$1 install"
         title "End of $1 install (`timer`)"
+        return $result
     else
         title "Skipping $1 install"
     fi

commit d6e43568d82b1d3adaf7a120b9178ba75cf989e7
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..921eb02
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+export WORKSPACE?=$(shell pwd)
+test:
+	build/run-tests.sh ${TEST_FLAGS}
+packages:
+	build/run-build-packages-all-targets.sh ${PACKAGES_FLAGS}
+test-packages:
+	build/run-build-packages-all-targets.sh --test-packages ${PACKAGES_FLAGS}
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/run_upload_packages.py b/build/jenkins/run_upload_packages.py
deleted file mode 100755
index 04e6c80..0000000
--- a/build/jenkins/run_upload_packages.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/usr/bin/env python3
-
-import argparse
-import functools
-import glob
-import logging
-import os
-import pipes
-import shutil
-import subprocess
-import sys
-import time
-
-class TimestampFile:
-    def __init__(self, path):
-        self.path = path
-        self.start_time = time.time()
-
-    def last_upload(self):
-        try:
-            return os.path.getmtime(self.path)
-        except EnvironmentError:
-            return -1
-
-    def update(self):
-        os.close(os.open(self.path, os.O_CREAT | os.O_APPEND))
-        os.utime(self.path, (time.time(), self.start_time))
-
-
-class PackageSuite:
-    NEED_SSH = False
-
-    def __init__(self, glob_root, rel_globs):
-        logger_part = getattr(self, 'LOGGER_PART', os.path.basename(glob_root))
-        self.logger = logging.getLogger('arvados-dev.upload.' + logger_part)
-        self.globs = [os.path.join(glob_root, rel_glob)
-                      for rel_glob in rel_globs]
-
-    def files_to_upload(self, since_timestamp):
-        for abs_glob in self.globs:
-            for path in glob.glob(abs_glob):
-                if os.path.getmtime(path) >= since_timestamp:
-                    yield path
-
-    def upload_file(self, path):
-        raise NotImplementedError("PackageSuite.upload_file")
-
-    def upload_files(self, paths):
-        for path in paths:
-            self.logger.info("Uploading %s", path)
-            self.upload_file(path)
-
-    def post_uploads(self, paths):
-        pass
-
-    def update_packages(self, since_timestamp):
-        upload_paths = list(self.files_to_upload(since_timestamp))
-        if upload_paths:
-            self.upload_files(upload_paths)
-            self.post_uploads(upload_paths)
-
-
-class PythonPackageSuite(PackageSuite):
-    LOGGER_PART = 'python'
-
-    def __init__(self, glob_root, rel_globs):
-        super().__init__(glob_root, rel_globs)
-        self.seen_packages = set()
-
-    def upload_file(self, path):
-        src_dir = os.path.dirname(os.path.dirname(path))
-        if src_dir in self.seen_packages:
-            return
-        self.seen_packages.add(src_dir)
-        # NOTE: If we ever start uploading Python 3 packages, we'll need to
-        # figure out some way to adapt cmd to match.  It might be easiest
-        # to give all our setup.py files the executable bit, and run that
-        # directly.
-        # We also must run `sdist` before `upload`: `upload` uploads any
-        # distributions previously generated in the command.  It doesn't
-        # know how to upload distributions already on disk.  We write the
-        # result to a dedicated directory to avoid interfering with our
-        # timestamp tracking.
-        cmd = ['python2.7', 'setup.py']
-        if not self.logger.isEnabledFor(logging.INFO):
-            cmd.append('--quiet')
-        cmd.extend(['sdist', '--dist-dir', '.upload_dist', 'upload'])
-        subprocess.check_call(cmd, cwd=src_dir)
-        shutil.rmtree(os.path.join(src_dir, '.upload_dist'))
-
-
-class GemPackageSuite(PackageSuite):
-    LOGGER_PART = 'gems'
-
-    def upload_file(self, path):
-        cmd = ['gem', 'push', path]
-        push_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
-        repushed = any(line == b'Repushing of gem versions is not allowed.\n'
-                       for line in push_proc.stdout)
-        # Read any remaining stdout before closing.
-        for line in push_proc.stdout:
-            pass
-        push_proc.stdout.close()
-        if (push_proc.wait() != 0) and not repushed:
-            raise subprocess.CalledProcessError(push_proc.returncode, cmd)
-
-
-class DistroPackageSuite(PackageSuite):
-    NEED_SSH = True
-    REMOTE_DEST_DIR = 'tmp'
-
-    def __init__(self, glob_root, rel_globs, target, ssh_host, ssh_opts):
-        super().__init__(glob_root, rel_globs)
-        self.target = target
-        self.ssh_host = ssh_host
-        self.ssh_opts = ['-o' + opt for opt in ssh_opts]
-        if not self.logger.isEnabledFor(logging.INFO):
-            self.ssh_opts.append('-q')
-
-    def _build_cmd(self, base_cmd, *args):
-        cmd = [base_cmd]
-        cmd.extend(self.ssh_opts)
-        cmd.extend(args)
-        return cmd
-
-    def _paths_basenames(self, paths):
-        return (os.path.basename(path) for path in paths)
-
-    def _run_script(self, script, *args):
-        # SSH will use a shell to run our bash command, so we have to
-        # quote our arguments.
-        # self.__class__.__name__ provides $0 for the script, which makes a
-        # nicer message if there's an error.
-        subprocess.check_call(self._build_cmd(
-                'ssh', self.ssh_host, 'bash', '-ec', pipes.quote(script),
-                self.__class__.__name__, *(pipes.quote(s) for s in args)))
-
-    def upload_files(self, paths):
-        cmd = self._build_cmd('scp', *paths)
-        cmd.append('{self.ssh_host}:{self.REMOTE_DEST_DIR}'.format(self=self))
-        subprocess.check_call(cmd)
-
-
-class DebianPackageSuite(DistroPackageSuite):
-    FREIGHT_SCRIPT = """
-cd "$1"; shift
-DISTNAME=$1; shift
-freight add "$@" "apt/$DISTNAME"
-freight cache "apt/$DISTNAME"
-rm "$@"
-"""
-    TARGET_DISTNAMES = {
-        'debian7': 'wheezy',
-        'debian8': 'jessie',
-        'ubuntu1204': 'precise',
-        'ubuntu1404': 'trusty',
-        }
-
-    def post_uploads(self, paths):
-        self._run_script(self.FREIGHT_SCRIPT, self.REMOTE_DEST_DIR,
-                         self.TARGET_DISTNAMES[self.target],
-                         *self._paths_basenames(paths))
-
-
-class RedHatPackageSuite(DistroPackageSuite):
-    CREATEREPO_SCRIPT = """
-cd "$1"; shift
-REPODIR=$1; shift
-rpmsign --addsign "$@" </dev/null
-mv "$@" "$REPODIR"
-createrepo "$REPODIR"
-"""
-    REPO_ROOT = '/var/www/rpm.arvados.org/'
-    TARGET_REPODIRS = {
-        'centos6': 'CentOS/6/os/x86_64/'
-        }
-
-    def post_uploads(self, paths):
-        repo_dir = os.path.join(self.REPO_ROOT,
-                                self.TARGET_REPODIRS[self.target])
-        self._run_script(self.CREATEREPO_SCRIPT, self.REMOTE_DEST_DIR,
-                         repo_dir, *self._paths_basenames(paths))
-
-
-def _define_suite(suite_class, *rel_globs, **kwargs):
-    return functools.partial(suite_class, rel_globs=rel_globs, **kwargs)
-
-PACKAGE_SUITES = {
-    'python': _define_suite(PythonPackageSuite,
-                            'sdk/pam/dist/*.tar.gz',
-                            'sdk/python/dist/*.tar.gz',
-                            'sdk/cwl/dist/*.tar.gz',
-                            'services/nodemanager/dist/*.tar.gz',
-                            'services/fuse/dist/*.tar.gz',
-                        ),
-    'gems': _define_suite(GemPackageSuite,
-                          'sdk/ruby/*.gem',
-                          'sdk/cli/*.gem',
-                          'services/login-sync/*.gem',
-                      ),
-    }
-for target in ['debian7', 'debian8', 'ubuntu1204', 'ubuntu1404']:
-    PACKAGE_SUITES[target] = _define_suite(
-        DebianPackageSuite, os.path.join('packages', target, '*.deb'),
-        target=target)
-for target in ['centos6']:
-    PACKAGE_SUITES[target] = _define_suite(
-        RedHatPackageSuite, os.path.join('packages', target, '*.rpm'),
-        target=target)
-
-def parse_arguments(arguments):
-    parser = argparse.ArgumentParser(
-        prog="run_upload_packages.py",
-        description="Upload Arvados packages to various repositories")
-    parser.add_argument(
-        '--workspace', '-W', default=os.environ.get('WORKSPACE'),
-        help="Arvados source directory with built packages to upload")
-    parser.add_argument(
-        '--ssh-host', '-H',
-        help="Host specification for distribution repository server")
-    parser.add_argument('-o', action='append', default=[], dest='ssh_opts',
-                         metavar='OPTION', help="Pass option to `ssh -o`")
-    parser.add_argument('--verbose', '-v', action='count', default=0,
-                        help="Log more information and subcommand output")
-    parser.add_argument(
-        'targets', nargs='*', default=['all'], metavar='target',
-        help="Upload packages to these targets (default all)\nAvailable targets: " +
-        ', '.join(sorted(PACKAGE_SUITES.keys())))
-    args = parser.parse_args(arguments)
-    if 'all' in args.targets:
-        args.targets = list(PACKAGE_SUITES.keys())
-
-    if args.workspace is None:
-        parser.error("workspace not set from command line or environment")
-    for target in args.targets:
-        try:
-            suite_class = PACKAGE_SUITES[target].func
-        except KeyError:
-            parser.error("unrecognized target {!r}".format(target))
-        if suite_class.NEED_SSH and (args.ssh_host is None):
-            parser.error(
-                "--ssh-host must be specified to upload distribution packages")
-    return args
-
-def setup_logger(stream_dest, args):
-    log_handler = logging.StreamHandler(stream_dest)
-    log_handler.setFormatter(logging.Formatter(
-            '%(asctime)s %(name)s[%(process)d] %(levelname)s: %(message)s',
-            '%Y-%m-%d %H:%M:%S'))
-    logger = logging.getLogger('arvados-dev.upload')
-    logger.addHandler(log_handler)
-    logger.setLevel(max(1, logging.WARNING - (10 * args.verbose)))
-
-def build_suite_and_upload(target, since_timestamp, args):
-    suite_def = PACKAGE_SUITES[target]
-    kwargs = {}
-    if suite_def.func.NEED_SSH:
-        kwargs.update(ssh_host=args.ssh_host, ssh_opts=args.ssh_opts)
-    suite = suite_def(args.workspace, **kwargs)
-    suite.update_packages(since_timestamp)
-
-def main(arguments, stdout=sys.stdout, stderr=sys.stderr):
-    args = parse_arguments(arguments)
-    setup_logger(stderr, args)
-    ts_file = TimestampFile(os.path.join(args.workspace, 'packages',
-                                         '.last_upload'))
-    last_upload_ts = ts_file.last_upload()
-    for target in args.targets:
-        build_suite_and_upload(target, last_upload_ts, args)
-    ts_file.update()
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
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

commit 19ae770973482257117fe8ded5619c3018c4b60f
Merge: d1de328 555b039
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri Mar 11 13:40:36 2016 -0500

    Add 'build/' from commit '555b039609a3c8700c27767c255fdfe00eb42063'
    
    git-subtree-dir: build
    git-subtree-mainline: d1de3281f023bfdbb62a172dec058caf2496224f
    git-subtree-split: 555b039609a3c8700c27767c255fdfe00eb42063

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,9216f82..9216f82
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,6970929..6970929
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,41b237b..41b237b
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 555b039609a3c8700c27767c255fdfe00eb42063
Merge: ea62edd 097e2b2
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri Mar 11 13:35:13 2016 -0500

    Merge branch '8345-llfuse-unpin' refs #8345


commit 097e2b21b9285c9cd302061552e1d343bd8debe7
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri Mar 11 12:28:53 2016 -0500

    8345: Need "yum install -y" to reliably install rpm packages.

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 0ada192..061bc99 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -363,7 +363,7 @@ 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 \
+    yum install -y \
         "$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"

commit 5d377ee0cb917903590787a770c72846dd0b10cb
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri Mar 11 02:15:10 2016 -0500

    8345: 8491: Downgrade to llfuse 0.41 until #8345 gets sorted out (but keep the fuse backports).

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index 136b73c..0ada192 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==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 \
+            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
             'pycurl<7.21.5' contextlib2)
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         ;;
@@ -105,7 +105,7 @@ case "$TARGET" in
         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 \
+            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
             'pycurl<7.21.5')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         ;;
@@ -118,7 +118,7 @@ case "$TARGET" in
         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 \
+            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
             contextlib2 \
             'pycurl<7.21.5')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
@@ -129,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 ciso8601 \
+        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyvcf pyasn1-modules==0.0.5 llfuse==0.41.1 ciso8601 \
             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)
@@ -144,7 +144,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 'pycurl<7.21.5' \
-            python-daemon lockfile llfuse 'pbr<1.0')
+            python-daemon lockfile llfuse==0.41.1 'pbr<1.0')
         PYTHON3_BACKPORTS=(docker-py six requests websocket-client)
         export PYCURL_SSL_LIBRARY=nss
         ;;
diff --git a/jenkins/run-tests.sh b/jenkins/run-tests.sh
index a17d610..07a4bf4 100755
--- a/jenkins/run-tests.sh
+++ b/jenkins/run-tests.sh
@@ -425,10 +425,13 @@ 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'
+# This will help people who reuse --temp dirs when we upgrade to llfuse 0.42
+if egrep -q 'llfuse.*>= *0\.42' "$WORKSPACE/services/fuse/setup.py"; then
+    # 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
 fi
 
 # Deactivate Python 2 virtualenv

commit ea62edd0b615e16b8f21fc5ba024a63dac7045c0
Author: Ward Vandewege <ward at curoverse.com>
Date:   Thu Mar 10 14:06:38 2016 -0500

    Get the go binary from a http url instead of https, so that our
    transparent proxy can cache it.
    
    No issue #

diff --git a/jenkins/package-build-dockerfiles/Makefile b/jenkins/package-build-dockerfiles/Makefile
index 70fbf28..9216f82 100644
--- a/jenkins/package-build-dockerfiles/Makefile
+++ b/jenkins/package-build-dockerfiles/Makefile
@@ -23,7 +23,7 @@ ubuntu1404/generated: common-generated-all
 common-generated-all: common-generated/golang-amd64.tar.gz
 
 common-generated/golang-amd64.tar.gz: common-generated
-	wget -cqO common-generated/golang-amd64.tar.gz https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
+	wget -cqO common-generated/golang-amd64.tar.gz http://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
 
 common-generated:
 	mkdir common-generated

commit 474bc10a9a9c278f4d58217aa741b2cf329cc923
Author: Ward Vandewege <ward at curoverse.com>
Date:   Thu Mar 10 14:05:21 2016 -0500

    Build package for arvados-cwl-runner.
    
    refs #8671

diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh
index ec19b28..c89c418 100755
--- a/jenkins/run-build-packages.sh
+++ b/jenkins/run-build-packages.sh
@@ -315,6 +315,11 @@ 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
 
+# cwl-runner
+cd $WORKSPACE/packages/$TARGET
+rm -rf "$WORKSPACE/sdk/cwl/build"
+fpm_build $WORKSPACE/sdk/cwl "${PYTHON2_PKG_PREFIX}-arvados-cwl-runner" 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/cwl/arvados_cwl_runner.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados CWL runner"
+
 # The PAM module
 if [[ $TARGET =~ debian|ubuntu ]]; then
     cd $WORKSPACE/packages/$TARGET

commit 2fe15804eca476cf1ad362dab6c0beaf40a19103
Merge: 2213311 957c22b
Author: radhika <radhika at curoverse.com>
Date:   Thu Mar 10 11:39:40 2016 -0500

    refs #8558
    Merge branch '8558-add-cwl-jenkins'


commit 957c22b775b4b80731a84bcf2565a37072fa1bd9
Author: radhika <radhika at curoverse.com>
Date:   Wed Mar 9 14:39:30 2016 -0500

    8558: add cwl to jenkins

diff --git a/jenkins/run-tests.sh b/jenkins/run-tests.sh
index 1289095..3b3ddff 100755
--- a/jenkins/run-tests.sh
+++ b/jenkins/run-tests.sh
@@ -79,6 +79,7 @@ sdk/go/manifest
 sdk/go/blockdigest
 sdk/go/streamer
 sdk/go/crunchrunner
+sdk/cwl
 tools/crunchstat-summary
 tools/keep-rsync
 
@@ -642,6 +643,7 @@ declare -a pythonstuff
 pythonstuff=(
     sdk/pam
     sdk/python
+    sdk/cwl
     services/fuse
     services/nodemanager
     tools/crunchstat-summary

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