From d2ba7da0126ff7d4dbb0aecb5c8819577aca903b Mon Sep 17 00:00:00 2001 From: James Allen 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 f874ec7375..1e4d53f6b3 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 b732143aa4..add7904afb 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 '" + "--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 0000000000..e1dc6ff6fa --- /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 0000000000..3dfe85b14a --- /dev/null +++ b/package/upstart/sharelatex-clsi @@ -0,0 +1,19 @@ +description "sharelatex-clsi" +author "ShareLaTeX " + +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 0000000000..542fe550ad --- /dev/null +++ b/package/upstart/sharelatex-docstore @@ -0,0 +1,19 @@ +description "sharelatex-docstore" +author "ShareLaTeX " + +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 0000000000..ef31136031 --- /dev/null +++ b/package/upstart/sharelatex-document-updater @@ -0,0 +1,19 @@ +description "sharelatex-document-updater" +author "ShareLaTeX " + +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 0000000000..6f5c73bc4f --- /dev/null +++ b/package/upstart/sharelatex-filestore @@ -0,0 +1,19 @@ +description "sharelatex-filestore" +author "ShareLaTeX " + +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 0000000000..f9ed4c6a93 --- /dev/null +++ b/package/upstart/sharelatex-template @@ -0,0 +1,19 @@ +description "sharelatex-SERVICE" +author "ShareLaTeX " + +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 0000000000..2b3b61dfd1 --- /dev/null +++ b/package/upstart/sharelatex-track-changes @@ -0,0 +1,19 @@ +description "sharelatex-track-changes" +author "ShareLaTeX " + +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 0000000000..86d83bba78 --- /dev/null +++ b/package/upstart/sharelatex-web @@ -0,0 +1,19 @@ +description "sharelatex-web" +author "ShareLaTeX " + +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