From d2ba7da0126ff7d4dbb0aecb5c8819577aca903b Mon Sep 17 00:00:00 2001
From: James Allen <james@sharelatex.com>
Date: Thu, 15 May 2014 17:45:24 +0100
Subject: [PATCH] Start putting together .deb package builder

---
 .gitignore                                  |  1 +
 Gruntfile.coffee                            | 66 +++++++++++++++++++++
 package/scripts/after_install.sh            | 21 +++++++
 package/upstart/sharelatex-clsi             | 19 ++++++
 package/upstart/sharelatex-docstore         | 19 ++++++
 package/upstart/sharelatex-document-updater | 19 ++++++
 package/upstart/sharelatex-filestore        | 19 ++++++
 package/upstart/sharelatex-template         | 19 ++++++
 package/upstart/sharelatex-track-changes    | 19 ++++++
 package/upstart/sharelatex-web              | 19 ++++++
 10 files changed, 221 insertions(+)
 create mode 100644 package/scripts/after_install.sh
 create mode 100644 package/upstart/sharelatex-clsi
 create mode 100644 package/upstart/sharelatex-docstore
 create mode 100644 package/upstart/sharelatex-document-updater
 create mode 100644 package/upstart/sharelatex-filestore
 create mode 100644 package/upstart/sharelatex-template
 create mode 100644 package/upstart/sharelatex-track-changes
 create mode 100644 package/upstart/sharelatex-web

diff --git a/.gitignore b/.gitignore
index f874ec7..1e4d53f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ document-updater
 clsi
 filestore
 track-changes
+docstore
 
 compiles
 cache
diff --git a/Gruntfile.coffee b/Gruntfile.coffee
index b732143..add7904 100644
--- a/Gruntfile.coffee
+++ b/Gruntfile.coffee
@@ -111,6 +111,9 @@ module.exports = (grunt) ->
 		Helpers.checkMake @async()
 	grunt.registerTask "check", "Check that you have the required dependencies installed", ["check:redis", "check:latexmk", "check:s3", "check:fs"]
 
+	grunt.registerTask "build_deb", "Build an installable .deb file from the current directory", () ->
+		Helpers.buildDeb @async()
+
 	Helpers =
 		installService: (repo_src, dir, callback = (error) ->) ->
 			Helpers.cloneGitRepo repo_src, dir, (error) ->
@@ -302,6 +305,69 @@ module.exports = (grunt) ->
 					grunt.log.write "OK."
 					return callback()
 
+		buildDeb: (callback = (error) ->) ->
+			# TODO: filestore uses local 'uploads' directory, not configurable in settings
+			command = ["fpm", "-s", "dir", "-t", "deb", "-n", "sharelatex", "-v", "0.0.1", "--verbose"]
+			command.push(
+				"--maintainer", "'ShareLaTeX <team@sharelatex.com>'"
+				"--config-files", "/etc/sharelatex/settings.coffee",
+				"--directories",  "/var/data/sharelatex"
+				"--directories",  "/var/log/sharelatex"
+			)
+
+			command.push(
+				"--depends", "'redis-server > 2.6.12'"
+				"--depends", "'mongodb-10gen > 2.4.0'"
+				"--depends", "'nodejs > 0.10.0'"
+			)
+
+			template = fs.readFileSync("package/upstart/sharelatex-template").toString()
+			for service in SERVICES
+				fs.writeFileSync "package/upstart/sharelatex-#{service.name}", template.replace(/SERVICE/g, service.name)
+				command.push(
+					"--deb-upstart", "package/upstart/sharelatex-#{service.name}"
+				)
+
+			after_install_script = """
+				#!/bin/sh
+				sudo adduser --system --group --home /var/www/sharelatex --no-create-home sharelatex
+
+				mkdir -p /var/log/sharelatex
+				chown sharelatex:sharelatex /var/log/sharelatex
+
+			"""
+
+			for dir in ["user_files", "uploads", "compiles", "cache", "dump"]
+				after_install_script += """
+					mkdir -p /var/data/sharelatex/#{dir}
+					chown sharelatex:sharelatex /var/data/sharelatex/#{dir}
+					
+				"""
+
+			for service in SERVICES
+				after_install_script += "service sharelatex-#{service.name} restart\n"
+			fs.writeFileSync "package/scripts/after_install.sh", after_install_script
+			command.push("--after-install", "package/scripts/after_install.sh")
+
+			command.push("--exclude", "'**/.git'")
+			for path in ["filestore/user_files", "filestore/uploads", "clsi/cache", "clsi/compiles"]
+				command.push "--exclude", path
+
+			for service in SERVICES
+				command.push "#{service.name}=/var/www/sharelatex/"
+
+			command.push(
+				"package/config/settings.coffee=/etc/sharelatex/settings.coffee"
+			)
+			console.log command.join(" ")
+			exec command.join(" "), (error, stdout, stderr) ->
+				return callback(error) if error?
+				console.log stdout
+				console.error stderr if stderr?
+				callback()
+
+			
+
 
 
 
diff --git a/package/scripts/after_install.sh b/package/scripts/after_install.sh
new file mode 100644
index 0000000..e1dc6ff
--- /dev/null
+++ b/package/scripts/after_install.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+sudo adduser --system --group --home /var/www/sharelatex --no-create-home sharelatex
+
+mkdir -p /var/log/sharelatex
+chown sharelatex:sharelatex /var/log/sharelatex
+mkdir -p /var/data/sharelatex/user_files
+chown sharelatex:sharelatex /var/data/sharelatex/user_files
+mkdir -p /var/data/sharelatex/uploads
+chown sharelatex:sharelatex /var/data/sharelatex/uploads
+mkdir -p /var/data/sharelatex/compiles
+chown sharelatex:sharelatex /var/data/sharelatex/compiles
+mkdir -p /var/data/sharelatex/cache
+chown sharelatex:sharelatex /var/data/sharelatex/cache
+mkdir -p /var/data/sharelatex/dump
+chown sharelatex:sharelatex /var/data/sharelatex/dump
+service sharelatex-web restart
+service sharelatex-document-updater restart
+service sharelatex-clsi restart
+service sharelatex-filestore restart
+service sharelatex-track-changes restart
+service sharelatex-docstore restart
diff --git a/package/upstart/sharelatex-clsi b/package/upstart/sharelatex-clsi
new file mode 100644
index 0000000..3dfe85b
--- /dev/null
+++ b/package/upstart/sharelatex-clsi
@@ -0,0 +1,19 @@
+description "sharelatex-clsi"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-clsi.pid
+	chdir /var/www/sharelatex/clsi
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/clsi.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-docstore b/package/upstart/sharelatex-docstore
new file mode 100644
index 0000000..542fe55
--- /dev/null
+++ b/package/upstart/sharelatex-docstore
@@ -0,0 +1,19 @@
+description "sharelatex-docstore"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-docstore.pid
+	chdir /var/www/sharelatex/docstore
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/docstore.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-document-updater b/package/upstart/sharelatex-document-updater
new file mode 100644
index 0000000..ef31136
--- /dev/null
+++ b/package/upstart/sharelatex-document-updater
@@ -0,0 +1,19 @@
+description "sharelatex-document-updater"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-document-updater.pid
+	chdir /var/www/sharelatex/document-updater
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/document-updater.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-filestore b/package/upstart/sharelatex-filestore
new file mode 100644
index 0000000..6f5c73b
--- /dev/null
+++ b/package/upstart/sharelatex-filestore
@@ -0,0 +1,19 @@
+description "sharelatex-filestore"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-filestore.pid
+	chdir /var/www/sharelatex/filestore
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/filestore.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-template b/package/upstart/sharelatex-template
new file mode 100644
index 0000000..f9ed4c6
--- /dev/null
+++ b/package/upstart/sharelatex-template
@@ -0,0 +1,19 @@
+description "sharelatex-SERVICE"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-SERVICE.pid
+	chdir /var/www/sharelatex/SERVICE
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/SERVICE.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-track-changes b/package/upstart/sharelatex-track-changes
new file mode 100644
index 0000000..2b3b61d
--- /dev/null
+++ b/package/upstart/sharelatex-track-changes
@@ -0,0 +1,19 @@
+description "sharelatex-track-changes"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-track-changes.pid
+	chdir /var/www/sharelatex/track-changes
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/track-changes.log 2>&1
+end script
diff --git a/package/upstart/sharelatex-web b/package/upstart/sharelatex-web
new file mode 100644
index 0000000..86d83bb
--- /dev/null
+++ b/package/upstart/sharelatex-web
@@ -0,0 +1,19 @@
+description "sharelatex-web"
+author      "ShareLaTeX <team@sharelatex.com>"
+
+start on started mountall
+stop on shutdown
+
+respawn
+
+limit nofile 8192 8192
+
+pre-start script
+	mkdir -p /var/log/sharelatex
+end script
+
+script
+	echo $$ > /var/run/sharelatex-web.pid
+	chdir /var/www/sharelatex/web
+	exec sudo -u sharelatex -g sharelatex env SHARELATEX_CONFIG=/etc/sharelatex/settings.coffee NODE_ENV=production node app.js >> /var/log/sharelatex/web.log 2>&1
+end script
-- 
GitLab