From a76fb60fcf0f0e3b1ae03d18f002611b0879b1a3 Mon Sep 17 00:00:00 2001
From: Antoine Catton <acatton@tiolive.com>
Date: Fri, 10 Aug 2012 17:02:10 +0900
Subject: [PATCH] Add shellinabox to lxc recipe

---
 software/lxc/instance-lxc.cfg | 79 +++++++++++++++++++++++++++++++++++
 software/lxc/software.cfg     |  6 ++-
 2 files changed, 84 insertions(+), 1 deletion(-)

diff --git a/software/lxc/instance-lxc.cfg b/software/lxc/instance-lxc.cfg
index 7c4bd6d4c..6a3a9bba5 100644
--- a/software/lxc/instance-lxc.cfg
+++ b/software/lxc/instance-lxc.cfg
@@ -5,20 +5,47 @@ develop-eggs-directory = ${buildout:develop-eggs-directory}
 offline = true
 
 parts =
+    publish
     rootfs
     uuid
     lxc-conf
+    shellinabox
+    certificate-authority
+    ca-shellinabox
 
 [rootdirectory]
 recipe = slapos.cookbook:mkdirectory
 etc = $${buildout:directory}/etc
 tmp = $${buildout:directory}/tmp
 srv = $${buildout:directory}/srv
+bin = $${buildout:directory}/bin
 
 [basedirectory]
 recipe = slapos.cookbook:mkdirectory
 services = $${rootdirectory:etc}/run
 
+[directory]
+recipe = slapos.cookbook:mkdirectory
+shellinabox = $${rootdirectory:srv}/shellinabox/
+ca-dir = $${rootdirectory:srv}/ca/
+
+[cadirectory]
+recipe = slapos.cookbook:mkdirectory
+requests = $${directory:ca-dir}/requests/
+private = $${directory:ca-dir}/private/
+certs = $${directory:ca-dir}/certs/
+newcerts = $${directory:ca-dir}/newcerts/
+crl = $${directory:ca-dir}/crl/
+
+[cadirectory]
+recipe = slapos.cookbook:mkdirectory
+requests = $${directory:ca-dir}/requests/
+private = $${directory:ca-dir}/private/
+certs = $${directory:ca-dir}/certs/
+newcerts = $${directory:ca-dir}/newcerts/
+crl = $${directory:ca-dir}/crl/
+
+
 [rootfs]
 recipe = slapos.cookbook:downloader
 url = $${slap-parameter:rootfs}
@@ -38,9 +65,61 @@ name = $${uuid:uuid}
 rootfs = $${rootfs:downloaded-file}
 requested = $${slap-connection:requested}
 
+[passwd]
+recipe = slapos.cookbook:pwgen
+file = $${buildout:directory}/.password
+pwgen-binary = ${pwgen:location}/bin/pwgen
+
+[shellinabox]
+recipe = slapos.cookbook:shellinabox
+ipv6 = $${slap-network-information:global-ipv6}
+port = 8080
+shell = ${lxc:location}/bin/lxc-console -n $${uuid:uuid}
+wrapper = $${rootdirectory:bin}/shellinaboxd_raw
+shellinabox-binary = ${shellinabox:location}/bin/shellinaboxd
+password = $${passwd:password}
+directory = $${buildout:directory}/
+login-shell = $${rootdirectory:bin}/login
+certificate-directory = $${directory:shellinabox}
+cert-file = $${directory:shellinabox}/public.crt
+key-file = $${directory:shellinabox}/private.key
+
+[ca-shellinabox]
+<= certificate-authority
+recipe = slapos.cookbook:certificate_authority.request
+executable = $${shellinabox:wrapper}
+wrapper = $${rootdirectory:bin}/shellinaboxd
+key-file = $${shellinabox:key-file}
+cert-file = $${shellinabox:cert-file}
+
+[certificate-authority]
+recipe = slapos.cookbook:certificate_authority
+openssl-binary = ${openssl:location}/bin/openssl
+ca-dir = $${directory:ca-dir}
+requests-directory = $${cadirectory:requests}
+wrapper = $${basedirectory:services}/ca
+ca-private = $${cadirectory:private}
+ca-certs = $${cadirectory:certs}
+ca-newcerts = $${cadirectory:newcerts}
+ca-crl = $${cadirectory:crl}
+
+[ca-shellinabox]
+<= certificate-authority
+recipe = slapos.cookbook:certificate_authority.request
+executable = $${shellinabox:wrapper}
+wrapper = $${rootdirectory:bin}/shellinaboxd
+key-file = $${shellinabox:key-file}
+cert-file = $${shellinabox:cert-file}
+
 [uuid]
 recipe = slapos.cookbook:uuid
 cache-file = $${buildout:directory}/.slapcontainername
 
+[publish]
+recipe = slapos.cookbook:publish
+url = http://[$${shellinabox:ipv6}]:$${shellinabox:port}/
+password = $${shellinabox:password}
+
+
 [slap-parameter]
 rootfs-md5sum =
diff --git a/software/lxc/software.cfg b/software/lxc/software.cfg
index c3e3e38df..c3091a2ca 100644
--- a/software/lxc/software.cfg
+++ b/software/lxc/software.cfg
@@ -9,6 +9,8 @@ extends =
   ../../component/gzip/buildout.cfg
   ../../component/bzip2/buildout.cfg
   ../../component/xz-utils/buildout.cfg
+  ../../component/shellinabox/buildout.cfg
+  ../../component/pwgen/buildout.cfg
 
 parts =
   lxml-python
@@ -18,6 +20,8 @@ parts =
   slapos-cookbook
   slapos-toolbox
   lxc
+  shellinabox
+  pwgen
 
 [template]
 recipe = slapos.recipe.template
@@ -29,7 +33,7 @@ mode = 0644
 [template-lxc]
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance-lxc.cfg
-md5sum = 5ecbded7dacfa66964a2172bbfddfb5f
+md5sum = ad1bd6fcab771e51a78b5b9446e47421
 output = ${buildout:directory}/template-lxc.cfg
 mode = 0644
 
-- 
2.30.9