blob: 92533c05c6320217ae93db434bda8efb2f42be2d [file] [log] [blame]
#!/usr/bin/env python
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
#the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys, os, json, re, time
import getpass
import subprocess
import readline
import platform
dname = platform.linux_distribution()[0].lower()
dver = platform.linux_distribution()[1]
if getpass.getuser() != "root":
print("You need to run this script as root!")
sys.exit(-1)
print("Your distro seems to be : " + dname + " " + dver)
if dname == 'ubuntu' or dname == 'debian':
print("Running installation script for Debian/Ubuntu servers, hang on!")
print("Installing pre-requisites via apt-get")
subprocess.check_call(('apt-get', 'install', 'apache2', 'git', 'liblua5.2-dev', 'lua-cjson', 'lua-sec', 'lua-socket', 'python3', 'python3-pip', 'subversion'))
print("Installing Python modules")
subprocess.check_call(('pip3', 'install', 'elasticsearch', 'formatflowed'))
print("Installing ElasticSearch")
subprocess.check_call(('apt-get', 'install', 'openjdk-7-jre-headless'))
try:
subprocess.check_call(("wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -"), shell=True)
subprocess.check_call(('echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list'), shell=True)
except:
print("Did we already add ES to the repo? hmm")
subprocess.check_call(('apt-get', 'update'))
subprocess.check_call(('apt-get', 'install', 'elasticsearch'))
print("Checking out a copy of Pony Mail from GitHub")
subprocess.check_call(('git', 'clone', 'https://github.com/Humbedooh/ponymail.git', '/var/www/ponymail'))
print("Starting ElasticSearch")
subprocess.check_call(('service', 'elasticsearch', 'start'))
print("Writing httpd configuration file /etc/apache2/sites-enabled/99-ponymail.conf")
with open("/etc/apache2/sites-enabled/99-ponymail.conf", "w") as f:
f.write("""
<VirtualHost *:80>
ServerName mylists.foo.tld
DocumentRoot /var/www/ponymail/site
AddHandler lua-script .lua
LuaScope thread
LuaCodeCache stat
AcceptPathInfo On
</VirtualHost>""")
f.close()
if dname == 'ubuntu' and dver == '14.04':
print("Ubuntu 14.04 specific step; Compiling mod_lua")
subprocess.check_call(('apt-get', 'install', 'apache2-dev'))
subprocess.check_call(('svn', 'co', 'https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x/modules/lua/', '/tmp/mod_lua'))
subprocess.check_call(("cd /tmp/mod_lua && apxs2 -I/usr/include/lua5.2 -cia mod_lua.c lua_*.c -lm -llua5.2"), shell=True)
print("Enabling mod_lua")
subprocess.check_call(('a2enmod', 'lua'))
print("Starting httpd")
subprocess.check_call(('service', 'apache2', 'start'))
print("Done! Please run setup.py now to set up Pony Mail")