diff --git a/Library/LaunchDaemons/com.daplie.goldilocks.web.plist b/Library/LaunchDaemons/com.daplie.goldilocks.web.plist
index 8dab4cd..6746afe 100644
--- a/Library/LaunchDaemons/com.daplie.goldilocks.web.plist
+++ b/Library/LaunchDaemons/com.daplie.goldilocks.web.plist
@@ -6,6 +6,7 @@
Goldilocks
ProgramArguments
+ /usr/local/bin/node
/usr/local/bin/goldilocks
--config
/etc/goldilocks/goldilocks.yml
diff --git a/bin/goldilocks.js b/bin/goldilocks.js
index d11f1a1..d7d4a51 100755
--- a/bin/goldilocks.js
+++ b/bin/goldilocks.js
@@ -32,17 +32,17 @@ function readConfigAndRun(args) {
var config;
if (args.config) {
- filename = path.join(cwd, args.config);
+ filename = path.resolve(cwd, args.config);
text = fs.readFileSync(filename, 'utf8');
}
else {
- filename = path.join(cwd, 'goldilocks.yml');
+ filename = path.resolve(cwd, 'goldilocks.yml');
if (fs.existsSync(filename)) {
text = fs.readFileSync(filename, 'utf8');
}
else {
- filename = path.join(cwd, 'goldilocks.json');
+ filename = path.resolve(cwd, 'goldilocks.json');
if (fs.existsSync(filename)) {
text = fs.readFileSync(filename, 'utf8');
} else {
@@ -56,6 +56,10 @@ function readConfigAndRun(args) {
} catch(e) {
try {
config = require('js-yaml').safeLoad(text);
+ // blank config file
+ if ('undefined' === typeof config) {
+ config = {};
+ }
} catch(e) {
throw new Error(
"Could not load '" + filename + "' as JSON nor YAML"
diff --git a/etc/goldilocks/goldilocks.yml b/etc/goldilocks/goldilocks.yml
new file mode 100644
index 0000000..e69de29
diff --git a/etc/systemd/system/goldilocks.service b/etc/systemd/system/goldilocks.service
index 44676ea..640dadc 100644
--- a/etc/systemd/system/goldilocks.service
+++ b/etc/systemd/system/goldilocks.service
@@ -23,11 +23,11 @@ User=www-data
Group=www-data
# If we need to pass environment variables in the future
-; Environment=GOLDILOCKS_PATH=/opt/goldilocks
+Environment=GOLDILOCKS_PATH=/srv/www
# Set a sane working directory, sane flags, and specify how to reload the config file
WorkingDirectory=/srv/www
-ExecStart=/usr/local/bin/goldilocks --config /etc/goldilocks/goldilocks.yml
+ExecStart=/usr/local/bin/node /usr/local/bin/goldilocks --config /etc/goldilocks/goldilocks.yml
ExecReload=/bin/kill -USR1 $MAINPID
# Limit the number of file descriptors and processes; see `man systemd.exec` for more limit settings.
@@ -46,11 +46,12 @@ ProtectSystem=full
# … except TLS/SSL, ACME, and Let's Encrypt certificates
# and /var/log/goldilocks, because we want a place where logs can go.
# This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
-ReadWriteDirectories=/etc/goldilocks /etc/acme /etc/letsencrypt /etc/ssl /var/log/goldilocks /opt/goldilocks /srv/www
+ReadWriteDirectories=/etc/goldilocks /etc/ssl /srv/www /var/log/goldilocks
+# you may also want to add other directories such as /opt/goldilocks /etc/acme /etc/letsencrypt
# Note: in v231 and above ReadWritePaths has been renamed to ReadWriteDirectories
; ReadWritePaths=/etc/goldilocks /var/log/goldilocks
-;
+
# The following additional security directives only work with systemd v229 or later.
# They further retrict privileges that can be gained.
# Note that you may have to add capabilities required by any plugins in use.
diff --git a/install.sh b/install.sh
index 0250e7b..e524083 100644
--- a/install.sh
+++ b/install.sh
@@ -1,5 +1,17 @@
#!/bin/bash
+# something or other about android and tmux using PREFIX
+#: "${PREFIX:=''}"
+MY_ROOT=""
+if [ -z "${PREFIX-}" ]; then
+ MY_ROOT=""
+else
+ MY_ROOT="$PREFIX"
+fi
+# Not every platform has or needs sudo, gotta save them O(1)s...
+sudo_cmd=""
+((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
+
###############################
# #
# http_get #
@@ -54,15 +66,12 @@ detect_http_get
# #
###################
-# Not every platform has or needs sudo
-sudo_cmd=""
-((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
-
my_app_name=goldilocks
my_app_pkg_name=com.daplie.goldilocks.web
my_app_dir=$(mktemp -d)
installer_base="https://git.daplie.com/Daplie/goldilocks.js/raw/master"
+my_app_etc_config="etc/${my_app_name}/${my_app_name}.yml"
my_app_systemd_service="etc/systemd/system/${my_app_name}.service"
my_app_systemd_tmpfiles="etc/tmpfiles.d/${my_app_name}.conf"
my_app_launchd_service="Library/LaunchDaemons/${my_app_pkg_name}.plist"
@@ -72,22 +81,26 @@ install_for_systemd()
echo ""
echo "Installing as systemd service"
echo ""
- dap_dl "$installer_base/$my_app_system_service" "$my_app_dir/$my_app_system_service"
- $sudo_cmd mv "$my_app_dir/$my_app_system_service" "$PREFIX/$my_app_system_service"
- $sudo_cmd chown -R root:root "$PREFIX/$my_app_system_service"
- $sudo_cmd chmod 644 "$PREFIX/$my_app_system_service"
+ mkdir -p $(dirname "$my_app_dir/$my_app_systemd_service")
+ dap_dl "$installer_base/$my_app_systemd_service" "$my_app_dir/$my_app_systemd_service"
+ $sudo_cmd mv "$my_app_dir/$my_app_systemd_service" "$MY_ROOT/$my_app_systemd_service"
+ $sudo_cmd chown -R root:root "$MY_ROOT/$my_app_systemd_service"
+ $sudo_cmd chmod 644 "$MY_ROOT/$my_app_systemd_service"
- dap_dl "$installer_base/$my_app_system_tmpfiles" "$my_app_dir/$my_app_system_tmpfiles"
- $sudo_cmd mv "$my_app_dir/$my_app_system_tmpfiles" "$PREFIX/$my_app_system_tmpfiles"
- $sudo_cmd chown -R root:root "$PREFIX/$my_app_system_tmpfiles"
- $sudo_cmd chmod 644 "$PREFIX/$my_app_system_tmpfiles"
+ mkdir -p $(dirname "$my_app_dir/$my_app_systemd_tmpfiles")
+ dap_dl "$installer_base/$my_app_systemd_tmpfiles" "$my_app_dir/$my_app_systemd_tmpfiles"
+ $sudo_cmd mv "$my_app_dir/$my_app_systemd_tmpfiles" "$MY_ROOT/$my_app_systemd_tmpfiles"
+ $sudo_cmd chown -R root:root "$MY_ROOT/$my_app_systemd_tmpfiles"
+ $sudo_cmd chmod 644 "$MY_ROOT/$my_app_systemd_tmpfiles"
$sudo_cmd systemctl stop "${my_app_name}.service" >/dev/null 2>/dev/null
$sudo_cmd systemctl daemon-reload
$sudo_cmd systemctl start "${my_app_name}.service"
$sudo_cmd systemctl enable "${my_app_name}.service"
- echo "$my_app_name started with systemctl"
+ echo "$my_app_name started with systemctl, check its status like so"
+ echo " $sudo_cmd systemctl status $my_app_name"
+ echo " $sudo_cmd journalctl -xe -u goldilocks"
}
install_for_launchd()
@@ -96,20 +109,37 @@ install_for_launchd()
echo "Installing as launchd service"
echo ""
# See http://www.launchd.info/
+ mkdir -p $(dirname "$my_app_dir/$my_app_launchd_service")
dap_dl "$installer_base/$my_app_launchd_service" "$my_app_dir/$my_app_launchd_service"
- $sudo_cmd mv "$my_app_dir/$my_app_launchd_service" "$PREFIX/$my_app_launchd_service"
- $sudo_cmd chown root:wheel "$PREFIX/$my_app_launchd_service"
- $sudo_cmd chmod 0644 "$PREFIX/$my_app_launchd_service"
- $sudo_cmd launchctl unload -w "$PREFIX/$my_app_launchd_service" >/dev/null 2>/dev/null
- $sudo_cmd launchctl load -w "$PREFIX/$my_app_launchd_service"
+ $sudo_cmd mv "$my_app_dir/$my_app_launchd_service" "$MY_ROOT/$my_app_launchd_service"
+ $sudo_cmd chown root:wheel "$MY_ROOT/$my_app_launchd_service"
+ $sudo_cmd chmod 0644 "$MY_ROOT/$my_app_launchd_service"
+ $sudo_cmd launchctl unload -w "$MY_ROOT/$my_app_launchd_service" >/dev/null 2>/dev/null
+ $sudo_cmd launchctl load -w "$MY_ROOT/$my_app_launchd_service"
echo "$my_app_name started with launchd"
}
+install_etc_config()
+{
+ if [ ! -e "$MY_ROOT/$my_app_etc_config" ]; then
+ $sudo_cmd mkdir -p $(dirname "$MY_ROOT/$my_app_etc_config")
+ mkdir -p $(dirname "$my_app_dir/$my_app_etc_config")
+ dap_dl "$installer_base/$my_app_etc_config" "$my_app_dir/$my_app_etc_config"
+ $sudo_cmd mv "$my_app_dir/$my_app_etc_config" "$MY_ROOT/$my_app_etc_config"
+ fi
+
+ $sudo_cmd chown -R www-data:www-data $(dirname "$MY_ROOT/$my_app_etc_config")
+ $sudo_cmd chmod 775 $(dirname "$MY_ROOT/$my_app_etc_config")
+ $sudo_cmd chmod 664 "$MY_ROOT/$my_app_etc_config"
+}
+
install_service()
{
+ install_etc_config
+
installable=""
- if [ -d "$PREFIX/etc/systemd/system" ]; then
+ if [ -d "$MY_ROOT/etc/systemd/system" ]; then
install_for_systemd
installable="true"
fi
@@ -138,5 +168,17 @@ dap_dl_bash "https://git.daplie.com/coolaj86/node-install-script/raw/master/setu
# Install
npm install -g 'git+https://git@git.daplie.com/Daplie/goldilocks.js.git#v1'
+# Unistall
+dap_dl "https://git.daplie.com/Daplie/goldilocks.js/raw/master/uninstall.sh" "./goldilocks-uninstall"
+$sudo_cmd chmod 755 "./goldilocks-uninstall"
+$sudo_cmd chown root:root "./goldilocks-uninstall"
+$sudo_cmd mv "./goldilocks-uninstall" "/usr/local/bin/uninstall-goldilocks"
+
+# Set perms
+$sudo_cmd mkdir -p /srv/www
+$sudo_cmd mkdir -p /etc/goldilocks
+$sudo_cmd mkdir -p /var/log/goldilocks
+$sudo_cmd mkdir -p /opt/goldilocks
+
# Install Service
-install_service
\ No newline at end of file
+install_service
diff --git a/package.json b/package.json
index b26bcd1..197b0d4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "goldilocks",
- "version": "2.2.0",
+ "version": "1.0.0-placeholder",
"description": "The node.js webserver that's just right, Greenlock (HTTPS/TLS/SSL via ACME/Let's Encrypt) and tunneling (RVPN) included.",
"main": "bin/goldilocks.js",
"repository": {
diff --git a/uninstall.sh b/uninstall.sh
new file mode 100644
index 0000000..a577bec
--- /dev/null
+++ b/uninstall.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# something or other about android and tmux using PREFIX
+#: "${PREFIX:=''}"
+MY_ROOT=""
+if [ -z "${PREFIX-}" ]; then
+ MY_ROOT=""
+else
+ MY_ROOT="$PREFIX"
+fi
+# Not every platform has or needs sudo, gotta save them O(1)s...
+sudo_cmd=""
+((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
+
+# you don't want any oopsies when an rm -rf is involved...
+set -e
+set -u
+
+my_app_name=goldilocks
+my_app_pkg_name=com.daplie.goldilocks.web
+
+my_app_etc_config="etc/${my_app_name}/${my_app_name}.yml"
+my_app_systemd_service="etc/systemd/system/${my_app_name}.service"
+my_app_systemd_tmpfiles="etc/tmpfiles.d/${my_app_name}.conf"
+my_app_launchd_service="Library/LaunchDaemons/${my_app_pkg_name}.plist"
+my_app_upstart_service="etc/init.d/${my_app_name}.conf"
+
+
+$sudo_cmd rm -f /usr/local/bin/goldilocks
+$sudo_cmd rm -f /usr/local/bin/uninstall-goldilocks
+$sudo_cmd rm -rf /usr/local/lib/node_modules/goldilocks
+
+$sudo_cmd rm -f "$MY_ROOT/$my_app_etc_config"
+$sudo_cmd rmdir -p $(dirname "$MY_ROOT/$my_app_etc_config") 2>/dev/null || true
+$sudo_cmd rm -f "$MY_ROOT/$my_app_systemd_service"
+$sudo_cmd rm -f "$MY_ROOT/$my_app_systemd_tmpfiles"
+$sudo_cmd rm -f "$MY_ROOT/$my_app_launchd_service"
+$sudo_cmd rm -f "$MY_ROOT/$my_app_upstart_service"
+
+$sudo_cmd rm -rf /opt/$my_app_name
+$sudo_cmd rm -rf /var/log/$my_app_name
+
+# TODO flag for --purge
+#rm -rf /etc/goldilocks
+
+# TODO trap uninstall function
+
+echo "uninstall complete: $my_app_name"