From ba600f5da6e21905d4862a9237968a57f3ec3076 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 11 Jan 2021 11:44:49 +1300 Subject: [PATCH] FreeBSD installation (#1165) * Update server.js Eliminate requirement to CD into project directory prior to running `npm start` or `node server.js`. * Add rc.d daemon script Adds a RC.d daemon script to control the HomeBrewery status. Based on Andrew Pearson's Node-RED script for the same purpose. * Create install.sh * Update install.sh * Update install.sh Switch to latest version of MongoDB * Add config items Add config items and default values: - web_port (8001) - environment (local) * Remove environment variables from rc.d Remove environment variables from rc.d as they are now in config/default.json. * Update server.js Change to setting NODE_ENV; default to 'local' if not set via environment variable or in the config file. * Remove --force option Remove --force option from `npm audit fix`. While this has not caused any issues to date, there is no guarantee that it will continue to be the case. * Create README.FREEBSD.md Initial write up of install instructions. Includes instruction to `wget` from the `naturalcrit/homebrewery` project rather than the FreeBSD fork, on the assumption that the PR will be merged at some point. * Update install.sh Change to main project repo, on assumption that the PR will be merged at some point * Change install directory Change of install directory to `/usr/local/homebrewery` * Update homebrewery Add `dev_mode` to the HomeBrewery service, which starts the HomeBrewery project in live rebuild mode. * Update server.js Eliminating unnecessary debugging code, reducing line count and making lint happy :) * Update server.js Lint is happy, now attempting to pacify CircleCI * Move NODE_ENV to service file; remove from server.js and config/default.json * Remove hanging comma in config.json Change default port assignment from 8000 to 8001 in config.json and FreeBSD service config * Add link to FreeBSD install documenation in the main README.md file * Fix for MongoDB package update breaking install script Change to enable use of rcvars for NODE_ENV and PORT --- README.FREEBSD.md | 35 ++++++++++++++++++++++ README.md | 4 +++ config/default.json | 5 ++-- freebsd/install.sh | 20 +++++++++++++ freebsd/rc.d/homebrewery | 65 ++++++++++++++++++++++++++++++++++++++++ server.js | 4 ++- 6 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 README.FREEBSD.md create mode 100644 freebsd/install.sh create mode 100644 freebsd/rc.d/homebrewery diff --git a/README.FREEBSD.md b/README.FREEBSD.md new file mode 100644 index 000000000..92f9064d0 --- /dev/null +++ b/README.FREEBSD.md @@ -0,0 +1,35 @@ +# FreeBSD/FreeNAS Installation Instructions + +## Before Installing + +These instructions assume that you are installing to a completely new, fresh FreeBSD/FreeNAS jail. As such, some steps will not be necessary if you are installing to an existing FreeBSD/FreeNAS install. + +## Installation instructions + +1. Create a new jail, with the appropriate network settings to access the internet. + +2. Install wget (`pkg install -y wget`). On a fresh jail, you will be prompted to press 'Y' to set up `pkg`. + +3. Download the installation script (`wget --no-check-certificate https://raw.githubusercontent.com/naturalcrit/homebrewery/master/freebsd/install.sh`). The parameter `--no-check-certificate` is required as we haven't set up any trusted certificates/authorities yet. + +4. Make the downloaded file executable (`chmod +x install.sh`). + +5. Run the script (`./install.sh`). This will automatically download all of the required packages, install both them and HomeBrewery, configure the system and finally start HomeBrewery. + +**NOTE:** At this time, the script **ONLY** installs HomeBrewery. It does **NOT** install the NaturalCrit login system, as that is currently a completely separate project. + +--- + +### Testing + +These installation instructions have been tested on the following FreeBSD/FreeNAS platforms: + +* FreeNAS-11.3-U5; Jail 11.4-RELEASE-p2 + +## Final Notes + +While this installation process works successfully at the time of writing (December 28, 2020), it relies on all of the Node.JS packages used in the HomeBrewery project retaining their cross-platform capabilities to continue to function under FreeBSD. This is one of the inherent advantages of Node.JS, but it is by no means guaranteed and as such, functionality or even installation under FreeBSD may fail without warning at some point in the future. + +Regards, +G +December 28, 2020 diff --git a/README.md b/README.md index 9645f29bf..9a5faeaf4 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,10 @@ in your browser and use the Homebrewery offline. Please see the docs here: [README.DOCKER.md](./README.DOCKER.md) +### Running the application on FreeBSD or FreeNAS + +Please see the docs here: [README.FreeBSD.md](./README.FREEBSD.md) + ### Standalone PHB Stylesheet If you just want the stylesheet that is generated to make pages look like they are from the Player's Handbook, you will find it in the diff --git a/config/default.json b/config/default.json index 1dc3dcb86..daf77e82e 100644 --- a/config/default.json +++ b/config/default.json @@ -1,5 +1,6 @@ { "host" : "homebrewery.local.naturalcrit.com:8000", "naturalcrit_url" : "local.naturalcrit.com:8010", - "secret" : "secret" -} \ No newline at end of file + "secret" : "secret", + "web_port" : 8000 +} diff --git a/freebsd/install.sh b/freebsd/install.sh new file mode 100644 index 000000000..0b3bb7fdc --- /dev/null +++ b/freebsd/install.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +pkg install -y git nano node npm mongodb44 + +sysrc mongod_enable=YES +service mongod start + +cd /usr/local/ +git clone https://github.com/naturalcrit/homebrewery.git + +cd homebrewery +npm install +npm audit fix +npm run postinstall + +cp freebsd/rc.d/homebrewery /usr/local/etc/rc.d/ +chmod +x /usr/local/etc/rc.d/homebrewery + +sysrc homebrewery_enable=YES +service homebrewery start \ No newline at end of file diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery new file mode 100644 index 000000000..20f2bc7e6 --- /dev/null +++ b/freebsd/rc.d/homebrewery @@ -0,0 +1,65 @@ +#!/bin/sh +# +# PROVIDE: homebrewery +# REQUIRE: NETWORKING +# KEYWORD: shutdown + +# Author: S Robertson +# Version: 1.0.0 + +# Description: +# This script runs HomeBrewery as a service under the supplied user on boot + +# How to use: +# Place this file in /usr/local/etc/rc.d/ +# Add homebrewery_enable="YES" to /etc/rc.config +# (Optional) To run as non-root, add homebrewery_runAs="homebrewery" to /etc/rc.config +# (Optional) To pass HomeBrewery args, add homebrewery_args="" to /etc/rc.config + +# Freebsd rc library +. /etc/rc.subr + +# General Info +name="homebrewery" # Safe name of program +location="/usr/local/" # Install location +program_name="homebrewery" # Name of exec +title="HomeBrewery" # Title to display in top/htop + +# RC.config vars +load_rc_config $name # Loading rc config vars +: ${homebrewery_enable="NO"} # Default: Do not enable HomeBrewery +: ${homebrewery_runAs="root"} # Default: Run HomeBrewery as root +: ${homebrewery_port=8000} # Default: Run HomeBrewery on port 8000 +: ${homebrewery_NODE_ENV="local"} # Default: Run HomeBrewery in local mode + +# Freebsd Setup +rcvar=homebrewery_enable # Enables the rc.conf YES/NO flag +pidfile="/var/run/${program_name}.pid" # File that allows the system to keep track of HomeBrewery status + +# Env Setup +export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user +export NODE_ENV=${homebrewery_NODE_ENV} +export PORT=${homebrewery_port} + +# Command Setup +exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file + +# Command +command="/usr/sbin/daemon" +command_args="-r -t ${title} -u ${homebrewery_runAs} -o ${output_file} -P ${pidfile} /usr/local/bin/node ${exec_cmd} ${homebrewery_args}" + +# Extra Commands +extra_commands="dev_mode" + +dev_mode_cmd="homebrewery_dev_mode" + +homebrewery_dev_mode() { +echo "Starting HomeBrewery in live rebuild Developer mode..." +cd ${location}/${program_name}/ +/usr/local/bin/node ${location}/${program_name}/scripts/buildHomebrew.js --dev +} + +# Loading Config +load_rc_config ${name} +run_rc_command "$1" diff --git a/server.js b/server.js index 57b5b71f9..5528a3762 100644 --- a/server.js +++ b/server.js @@ -14,6 +14,8 @@ app.use('/', expressStaticGzip(`${__dirname}/build`, { index : false })); +process.chdir(__dirname); + //app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')()); @@ -230,6 +232,6 @@ app.use((req, res)=>{ }); -const PORT = process.env.PORT || 8000; +const PORT = process.env.PORT || config.get('web_port') || 8000; app.listen(PORT); console.log(`server on port:${PORT}`);