From 73d9914923cdb8430886a6f95273b843f956a26c Mon Sep 17 00:00:00 2001
From: itsikkes <itsikkes@users.noreply.github.com>
Date: Thu, 28 Jul 2016 17:42:20 +0300
Subject: [PATCH] Improved .deb creation and installation process for Ubuntu

Added support for Systemd Units for MongoDB and Island; Some more
installation fixes
---
 monkey_island/deb-package/DEBIAN/control           |  5 +++--
 monkey_island/deb-package/DEBIAN/postinst          |  9 ++++++++-
 monkey_island/deb-package/DEBIAN/prerm             |  2 ++
 .../deb-package/monkey_island_pip_requirements.txt | 10 ++++++----
 monkey_island/linux/install.sh                     | 14 ++++++++++++++
 .../linux/ubuntu/systemd/monkey-island.service     | 10 ++++++++++
 .../linux/ubuntu/systemd/monkey-mongo.service      | 12 ++++++++++++
 monkey_island/linux/ubuntu/systemd/start_server.sh |  4 ++++
 monkey_island/requirements.txt                     |  4 +++-
 9 files changed, 62 insertions(+), 8 deletions(-)
 create mode 100644 monkey_island/linux/install.sh
 create mode 100644 monkey_island/linux/ubuntu/systemd/monkey-island.service
 create mode 100644 monkey_island/linux/ubuntu/systemd/monkey-mongo.service
 create mode 100644 monkey_island/linux/ubuntu/systemd/start_server.sh

diff --git a/monkey_island/deb-package/DEBIAN/control b/monkey_island/deb-package/DEBIAN/control
index 8cdac69df..e56705e37 100644
--- a/monkey_island/deb-package/DEBIAN/control
+++ b/monkey_island/deb-package/DEBIAN/control
@@ -1,7 +1,8 @@
 Package: gc-monkey-island
 Architecture: amd64
-Maintainer: Uri Hershcovits <uri@guardicore.com>
+Maintainer: Guardicore
 Homepage: http://www.guardicore.com
 Priority: optional
 Version: VERSION
-Description: Guardicore Chaos Monkey C&C installation package
+Description: Guardicore Infection Monkey Island (C&C) installation package
+Depends: openssl, python-pip
diff --git a/monkey_island/deb-package/DEBIAN/postinst b/monkey_island/deb-package/DEBIAN/postinst
index 0890adad4..22f24e715 100644
--- a/monkey_island/deb-package/DEBIAN/postinst
+++ b/monkey_island/deb-package/DEBIAN/postinst
@@ -13,9 +13,16 @@ pip install -r $MONKEY_FOLDER/pip_requirements.txt --no-index --find-links file:
 rm -rf ${INSTALLATION_FOLDER}
 rm -f ${MONKEY_FOLDER}/pip_requirements.txt
 
-mv ${MONKEY_FOLDER}/ubuntu/* /etc/init/
+cp ${MONKEY_FOLDER}/ubuntu/* /etc/init/
+if [ -d "/etc/systemd/network" ]; then
+    cp ${MONKEY_FOLDER}/ubuntu/systemd/*.service /lib/systemd/system/
+    chmod +x ${MONKEY_FOLDER}/ubuntu/systemd/start_server.sh
+    systemctl daemon-reload
+fi
 
 ${MONKEY_FOLDER}/create_certificate.sh
 
 service monkey-island start
 service monkey-mongo start
+
+echo Monkey Island installation ended
\ No newline at end of file
diff --git a/monkey_island/deb-package/DEBIAN/prerm b/monkey_island/deb-package/DEBIAN/prerm
index 1fcb4754e..9c49e0cd7 100644
--- a/monkey_island/deb-package/DEBIAN/prerm
+++ b/monkey_island/deb-package/DEBIAN/prerm
@@ -5,3 +5,5 @@ service monkey-mongo stop || true
 
 rm -f /etc/init/monkey-island.conf
 rm -f /etc/init/monkey-mongo.conf
+rm /lib/systemd/system/monkey-island.service
+rm /lib/systemd/system/monkey-mongo.service
\ No newline at end of file
diff --git a/monkey_island/deb-package/monkey_island_pip_requirements.txt b/monkey_island/deb-package/monkey_island_pip_requirements.txt
index 1ea580e18..288aea101 100644
--- a/monkey_island/deb-package/monkey_island_pip_requirements.txt
+++ b/monkey_island/deb-package/monkey_island_pip_requirements.txt
@@ -1,4 +1,6 @@
-flask
-Flask-Pymongo
-Flask-Restful
-python-dateutil
\ No newline at end of file
+flask
+Flask-Pymongo
+Flask-Restful
+python-dateutil
+impacket
+pycrypto
\ No newline at end of file
diff --git a/monkey_island/linux/install.sh b/monkey_island/linux/install.sh
new file mode 100644
index 000000000..f230b58d2
--- /dev/null
+++ b/monkey_island/linux/install.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+MACHINE_TYPE=`uname -m`
+if [ ${MACHINE_TYPE} == 'x86_64' ]; then
+  # 64-bit stuff here
+  ARCH=64
+else
+  # 32-bit stuff here
+  ARCH=32
+fi
+
+MONKEY_FILE=monkey-linux-$ARCH
+cp -f /var/monkey_island/cc/binaries/$MONKEY_FILE /tmp
+/tmp/$MONKEY_FILE m0nk3y $@
diff --git a/monkey_island/linux/ubuntu/systemd/monkey-island.service b/monkey_island/linux/ubuntu/systemd/monkey-island.service
new file mode 100644
index 000000000..fe43875ac
--- /dev/null
+++ b/monkey_island/linux/ubuntu/systemd/monkey-island.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Monkey Island Service
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/var/monkey_island/ubuntu/systemd/start_server.sh
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/monkey_island/linux/ubuntu/systemd/monkey-mongo.service b/monkey_island/linux/ubuntu/systemd/monkey-mongo.service
new file mode 100644
index 000000000..6c1fee8f8
--- /dev/null
+++ b/monkey_island/linux/ubuntu/systemd/monkey-mongo.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Monkey Island Mongo Service
+After=network.target
+
+[Service]
+ExecStart=/var/monkey_island/bin/mongodb/bin/mongod --quiet --dbpath /var/monkey_island/db
+KillMode=process
+Restart=always
+ExecStop=/var/monkey_island/bin/mongodb/bin/mongod --shutdown
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/monkey_island/linux/ubuntu/systemd/start_server.sh b/monkey_island/linux/ubuntu/systemd/start_server.sh
new file mode 100644
index 000000000..817da7a55
--- /dev/null
+++ b/monkey_island/linux/ubuntu/systemd/start_server.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd /var/monkey_island/cc
+python main.py
\ No newline at end of file
diff --git a/monkey_island/requirements.txt b/monkey_island/requirements.txt
index 9d203c6c7..288aea101 100644
--- a/monkey_island/requirements.txt
+++ b/monkey_island/requirements.txt
@@ -1,4 +1,6 @@
 flask
 Flask-Pymongo
 Flask-Restful
-python-dateutil
\ No newline at end of file
+python-dateutil
+impacket
+pycrypto
\ No newline at end of file