From df8a3d39bc7afa63b4c347f0eb8a9103f3ab62d9 Mon Sep 17 00:00:00 2001 From: Aaron <20esaua@ttsdstudents.org> Date: Fri, 29 Mar 2019 03:33:14 +0000 Subject: [PATCH] Add installation scripts --- .gitignore | 13 +++++ Makefile | 4 +- PKGBUILD | 20 +++++++ docs/onionr-icon.png | Bin 0 -> 87335 bytes install/install_arch.sh | 83 ++++++++++++++++++++++++++++++ install/install_debian.sh | 83 ++++++++++++++++++++++++++++++ install/onionr | 12 +++++ install/onionr.service | 15 ++++++ onionr/config.py | 12 ++--- onionr/core.py | 10 ++-- onionr/logger.py | 5 +- onionr/netcontroller.py | 12 ++--- onionr/onionr.py | 31 +++++++---- onionr/onionrcommands/__init__.py | 3 +- onionr/onionrplugins.py | 34 +++++++++--- 15 files changed, 293 insertions(+), 44 deletions(-) create mode 100644 PKGBUILD create mode 100755 docs/onionr-icon.png create mode 100755 install/install_arch.sh create mode 100755 install/install_debian.sh create mode 100755 install/onionr create mode 100644 install/onionr.service diff --git a/.gitignore b/.gitignore index bd451856..637243fe 100755 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,16 @@ core .vscode/* venv/* onionr/fs* + +# log files +output.log +*.log +onionr/output.log +onionr/*.log +onionr/data/output.log +onionr/data/*.log + +# package files +onionr-*.pkg.tar.gz +pkg/ +src/ diff --git a/Makefile b/Makefile index f3ba33cb..982b1dc0 100755 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ PREFIX = /usr/local .DEFAULT_GOAL := setup setup: - sudo pip3 install -r requirements.txt + pip3 install -r requirements.txt --require-hashes --user -@cd onionr/static-data/ui/; ./compile.py install: @@ -32,7 +32,7 @@ reset: @echo "Hard-resetting Onionr..." rm -rf onionr/$(ONIONR_HOME)/ | true > /dev/null 2>&1 cd onionr/static-data/www/ui/; rm -rf ./dist; python compile.py - #@./onionr.sh.sh version | grep -v "Failed" --color=always + #@./onionr.sh version | grep -v "Failed" --color=always plugins-reset: @echo "Resetting plugins..." diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 00000000..c94ca729 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,20 @@ +url="https://onionr.net/" +pkgname="onionr" +pkgver=0.0 +pkgrel=1 +pkgdesc="P2P anonymous storage network" +arch=("x86_64") +license=('GPL') +source=("onionr-${pkgver}::git+https://gitlab.com/beardog/onionr.git#branch=master") +md5sums=('SKIP') +makedepends=('git', 'python3-pip') + +build() { + cd "$pkgname-${pkgver}" + make +} + +package() { + cd "$pkgname-${pkgver}" + # make install +} diff --git a/docs/onionr-icon.png b/docs/onionr-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..861af295863d90c9d29f5defc674f905a2a03762 GIT binary patch literal 87335 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 Cg(v0! literal 0 HcmV?d00001 diff --git a/install/install_arch.sh b/install/install_arch.sh new file mode 100755 index 00000000..acd3fb1e --- /dev/null +++ b/install/install_arch.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +EXECUTABLE='/usr/bin/onionr' +OUTPUT_DIR='/usr/share/onionr' +DATA_DIR='/etc/onionr' +LOG_DIR='/var/log/onionr' + +BRANCH='master' + +# setup error handlers + +set -e + +trap "echo -e '\033[31mOnionr installation failed.\033[0m' >&2; exit 1337" ERR INT TERM + +# require root permissions + +if ! [ $(id -u) = 0 ]; then + echo 'This script must be run as root.' >&2 + exit 1337 +fi + +# install basic dependencies + +pacman --needed --noconfirm -S git curl python python-pip tor + +# get the repository + +rm -rf "$OUTPUT_DIR" "$DATA_DIR" "$LOG_DIR" + +git clone https://gitlab.com/beardog/onionr "$OUTPUT_DIR" + +cd "$OUTPUT_DIR" +git checkout "$BRANCH" + +# install python dependencies + +pip3 install --no-input -r "$OUTPUT_DIR/requirements.txt" --require-hashes + +# create nologin onionr user if not exists + +id -u onionr &>/dev/null || useradd -r -s /sbin/nologin onionr + +chmod 755 "$OUTPUT_DIR" +chown -R onionr:onionr "$OUTPUT_DIR" + +# create directories + +mkdir -p "$OUTPUT_DIR/onionr/data" "$LOG_DIR" +mv "$OUTPUT_DIR/onionr/data" "$DATA_DIR" + +chmod -R 750 "$DATA_DIR" "$LOG_DIR" +chown -R onionr:onionr "$DATA_DIR" "$LOG_DIR" + +# create executable + +cp "$OUTPUT_DIR/install/onionr" "$EXECUTABLE" + +chmod 755 "$EXECUTABLE" +chown root:root "$EXECUTABLE" + +# create systemd service + +SERVICE='/etc/systemd/system/onionr.service' + +cp "$OUTPUT_DIR/install/onionr.service" "$SERVICE" + +chmod 644 "$SERVICE" +chown root:root "$SERVICE" + +systemctl daemon-reload +systemctl enable onionr +systemctl start onionr + +# pretty header thing + +"$EXECUTABLE" --header 'Onionr successfully installed.' + +# and we're good! + +trap - ERR + +exit 0 diff --git a/install/install_debian.sh b/install/install_debian.sh new file mode 100755 index 00000000..4f37f56f --- /dev/null +++ b/install/install_debian.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +EXECUTABLE='/usr/bin/onionr' +OUTPUT_DIR='/usr/share/onionr' +DATA_DIR='/etc/onionr' +LOG_DIR='/var/log/onionr' + +BRANCH='master' + +# setup error handlers + +set -e + +trap "echo -e '\033[31mOnionr installation failed.\033[0m' >&2; exit 1337" ERR INT TERM + +# require root permissions + +if ! [ $(id -u) = 0 ]; then + echo 'This script must be run as root.' >&2 + exit 1337 +fi + +# install basic dependencies + +apt -y install git curl python3.7 python3-pip python3-setuptools tor + +# get the repository + +rm -rf "$OUTPUT_DIR" "$DATA_DIR" "$LOG_DIR" + +git clone https://gitlab.com/beardog/onionr "$OUTPUT_DIR" + +cd "$OUTPUT_DIR" +git checkout "$BRANCH" + +# install python dependencies + +python3.7 -m pip install --no-input -r "$OUTPUT_DIR/requirements.txt" --require-hashes + +# create nologin onionr user if not exists + +id -u onionr &>/dev/null || useradd -r -s /sbin/nologin onionr + +chmod 755 "$OUTPUT_DIR" +chown -R onionr:onionr "$OUTPUT_DIR" + +# create directories + +mkdir -p "$OUTPUT_DIR/onionr/data" "$LOG_DIR" +mv "$OUTPUT_DIR/onionr/data" "$DATA_DIR" + +chmod -R 750 "$DATA_DIR" "$LOG_DIR" +chown -R onionr:onionr "$DATA_DIR" "$LOG_DIR" + +# create executable + +cp "$OUTPUT_DIR/install/onionr" "$EXECUTABLE" + +chmod 755 "$EXECUTABLE" +chown root:root "$EXECUTABLE" + +# create systemd service + +SERVICE='/etc/systemd/system/onionr.service' + +cp "$OUTPUT_DIR/install/onionr.service" "$SERVICE" + +chmod 644 "$SERVICE" +chown root:root "$SERVICE" + +systemctl daemon-reload +systemctl enable onionr +systemctl start onionr + +# pretty header thing + +"$EXECUTABLE" --header 'Onionr successfully installed.' + +# and we're good! + +trap - ERR + +exit 0 diff --git a/install/onionr b/install/onionr new file mode 100755 index 00000000..31fd58cc --- /dev/null +++ b/install/onionr @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e + +[ "root" != "$USER" ] && exec sudo $0 "$@" + +export OUTPUT_DIR=${OUTPUT_DIR:=/usr/share/onionr} +export ONIONR_HOME=${ONIONR_HOME:=/etc/onionr} +export LOG_DIR=${LOG_DIR:=/var/log/onionr} + +cd "$OUTPUT_DIR" +exec su onionr -s /bin/sh -c "./onionr.sh ""$@""" diff --git a/install/onionr.service b/install/onionr.service new file mode 100644 index 00000000..0f2a42b6 --- /dev/null +++ b/install/onionr.service @@ -0,0 +1,15 @@ +[Unit] +Description=Onionr Daemon +Requires=network.target tor.service +After=network.target tor.service + +[Service] +Environment="DATA_DIR=/usr/share/onionr" +Environment="LOG_DIR=/var/log/onionr/" +ExecStart=/usr/bin/onionr --start +ExecStop=/usr/bin/onionr --stop +Type=simple +Restart=always + +[Install] +WantedBy=tor.service diff --git a/onionr/config.py b/onionr/config.py index 960286f6..fe093b57 100755 --- a/onionr/config.py +++ b/onionr/config.py @@ -20,13 +20,11 @@ import os, json, logger -try: - dataDir = os.environ['ONIONR_HOME'] - if not dataDir.endswith('/'): - dataDir += '/' -except KeyError: - dataDir = 'data/' - +# set data dir +dataDir = os.environ.get('ONIONR_HOME', os.environ.get('DATA_DIR', 'data/')) +if not dataDir.endswith('/'): + dataDir += '/' + _configfile = os.path.abspath(dataDir + 'config.json') _config = {} diff --git a/onionr/core.py b/onionr/core.py index f178fefd..1cbce026 100755 --- a/onionr/core.py +++ b/onionr/core.py @@ -39,12 +39,10 @@ class Core: Initialize Core Onionr library ''' - try: - self.dataDir = os.environ['ONIONR_HOME'] - if not self.dataDir.endswith('/'): - self.dataDir += '/' - except KeyError: - self.dataDir = 'data/' + # set data dir + self.dataDir = os.environ.get('ONIONR_HOME', os.environ.get('DATA_DIR', 'data/')) + if not self.dataDir.endswith('/'): + self.dataDir += '/' try: self.onionrInst = None diff --git a/onionr/logger.py b/onionr/logger.py index 18dfdf1d..34dc4d06 100755 --- a/onionr/logger.py +++ b/onionr/logger.py @@ -64,10 +64,9 @@ class colors: ''' Use the bitwise operators to merge these settings ''' +USE_ANSI = 0b100 if os.name == 'nt': USE_ANSI = 0b000 -else: - USE_ANSI = 0b100 OUTPUT_TO_CONSOLE = 0b010 OUTPUT_TO_FILE = 0b001 @@ -80,7 +79,7 @@ LEVEL_IMPORTANT = 6 _type = OUTPUT_TO_CONSOLE | USE_ANSI # the default settings for logging _level = LEVEL_DEBUG # the lowest level to log -_outputfile = './output.log' # the file to log to +_outputfile = 'data/onionr.log' # the file to log to def set_settings(type): ''' diff --git a/onionr/netcontroller.py b/onionr/netcontroller.py index 2898256c..4f6281c9 100755 --- a/onionr/netcontroller.py +++ b/onionr/netcontroller.py @@ -46,12 +46,10 @@ class NetController: ''' def __init__(self, hsPort, apiServerIP='127.0.0.1'): - try: - self.dataDir = os.environ['ONIONR_HOME'] - if not self.dataDir.endswith('/'): - self.dataDir += '/' - except KeyError: - self.dataDir = 'data/' + # set data dir + self.dataDir = os.environ.get('ONIONR_HOME', os.environ.get('DATA_DIR', 'data/')) + if not self.dataDir.endswith('/'): + self.dataDir += '/' self.torConfigLocation = self.dataDir + 'torrc' self.readyState = False @@ -165,7 +163,7 @@ HiddenServicePort 80 ''' + self.apiServerIP + ''':''' + str(self.hsPort) except KeyboardInterrupt: logger.fatal('Got keyboard interrupt.', timestamp = False, level = logger.LEVEL_IMPORTANT) return False - + logger.debug('Finished starting Tor.', timestamp=True) self.readyState = True diff --git a/onionr/onionr.py b/onionr/onionr.py index 3dff5cc3..532c87d5 100755 --- a/onionr/onionr.py +++ b/onionr/onionr.py @@ -62,12 +62,13 @@ class Onionr: except FileNotFoundError: pass - try: - self.dataDir = os.environ['ONIONR_HOME'] - if not self.dataDir.endswith('/'): - self.dataDir += '/' - except KeyError: - self.dataDir = 'data/' + # set data dir + self.dataDir = os.environ.get('ONIONR_HOME', os.environ.get('DATA_DIR', 'data/')) + if not self.dataDir.endswith('/'): + self.dataDir += '/' + + # set log file + logger.set_file(os.environ.get('LOG_DIR', 'data') + '/onionr.log') # Load global configuration data data_exists = Onionr.setupConfig(self.dataDir, self = self) @@ -144,19 +145,27 @@ class Onionr: self.execute(command) return - + def exitSigterm(self, signum, frame): self.killed = True def setupConfig(dataDir, self = None): setupconfig.setup_config(dataDir, self) + def cmdHeader(self): + if len(sys.argv) >= 3: + self.header(logger.colors.fg.pink + sys.argv[2].replace('Onionr', logger.colors.bold + 'Onionr' + logger.colors.reset + logger.colors.fg.pink)) + else: + self.header(None) + def header(self, message = logger.colors.fg.pink + logger.colors.bold + 'Onionr' + logger.colors.reset + logger.colors.fg.pink + ' has started.'): if os.path.exists('static-data/header.txt') and logger.get_level() <= logger.LEVEL_INFO: with open('static-data/header.txt', 'rb') as file: # only to stdout, not file or log or anything sys.stderr.write(file.read().decode().replace('P', logger.colors.fg.pink).replace('W', logger.colors.reset + logger.colors.bold).replace('G', logger.colors.fg.green).replace('\n', logger.colors.reset + '\n').replace('B', logger.colors.bold).replace('A', '%s' % API_VERSION).replace('V', ONIONR_VERSION)) - logger.info(logger.colors.fg.lightgreen + '-> ' + str(message) + logger.colors.reset + logger.colors.fg.lightgreen + ' <-\n', sensitive=True) + + if not message is None: + logger.info(logger.colors.fg.lightgreen + '-> ' + str(message) + logger.colors.reset + logger.colors.fg.lightgreen + ' <-\n', sensitive=True) def doExport(self, bHash): exportDir = self.dataDir + 'block-export/' @@ -220,13 +229,13 @@ class Onionr: def showDetails(self): commands.onionrstatistics.show_details(self) - + def openHome(self): commands.open_home(self) def addID(self): commands.pubkeymanager.add_ID(self) - + def changeID(self): commands.pubkeymanager.change_ID(self) @@ -385,7 +394,7 @@ class Onionr: ''' Displays a message suggesting help ''' - if __name__ == '__main__': + if __name__ == '__main__': logger.info('Do ' + logger.colors.bold + sys.argv[0] + ' --help' + logger.colors.reset + logger.colors.fg.green + ' for Onionr help.') def start(self, input = False, override = False): diff --git a/onionr/onionrcommands/__init__.py b/onionr/onionrcommands/__init__.py index 2889f182..bf10f4ed 100644 --- a/onionr/onionrcommands/__init__.py +++ b/onionr/onionrcommands/__init__.py @@ -53,6 +53,7 @@ def get_commands(onionr_inst): return {'': onionr_inst.showHelpSuggestion, 'help': onionr_inst.showHelp, 'version': onionr_inst.version, + 'header': onionr_inst.cmdHeader, 'config': onionr_inst.configure, 'start': onionr_inst.start, 'stop': onionr_inst.killDaemon, @@ -168,4 +169,4 @@ cmd_help = { 'add-id': 'Generate a new ID (key pair)', 'change-id': 'Change active ID', 'open-home': 'Open your node\'s home/info screen' - } \ No newline at end of file + } diff --git a/onionr/onionrplugins.py b/onionr/onionrplugins.py index a7560957..7595805b 100755 --- a/onionr/onionrplugins.py +++ b/onionr/onionrplugins.py @@ -21,12 +21,10 @@ import os, re, importlib, config, logger import onionrevents as events -try: - dataDir = os.environ['ONIONR_HOME'] - if not dataDir.endswith('/'): - dataDir += '/' -except KeyError: - dataDir = 'data/' +# set data dir +dataDir = os.environ.get('ONIONR_HOME', os.environ.get('DATA_DIR', 'data/')) +if not dataDir.endswith('/'): + dataDir += '/' _pluginsfolder = dataDir + 'plugins/' _instances = dict() @@ -157,6 +155,28 @@ def stop(name, onionr = None): return None +# credit: https://stackoverflow.com/a/29589414 +def import_module_from_file(full_path_to_module): + """ + Import a module given the full path/filename of the .py file + + Python 3.4 + + """ + + module = None + + # Get module name and path from full path + module_dir, module_file = os.path.split(full_path_to_module) + module_name, module_ext = os.path.splitext(module_file) + + # Get module "spec" from filename + spec = importlib.util.spec_from_file_location(module_name,full_path_to_module) + + module = spec.loader.load_module() + + return module + def get_plugin(name): ''' Returns the instance of a module @@ -167,7 +187,7 @@ def get_plugin(name): if str(name).lower() in _instances: return _instances[str(name).lower()] else: - _instances[str(name).lower()] = importlib.import_module(get_plugins_folder(name, False).replace('/', '.') + 'main') + _instances[str(name).lower()] = import_module_from_file(get_plugins_folder(name, False) + 'main.py') return get_plugin(name) def get_plugins():