diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index b6d1464a..00000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,16 +0,0 @@ -For :bug: bug reports, please fill out the information below plus any additional relevant information. If this is a feature request, feel free to clear the form. - -**Short problem description** - -**Environment** -- [ ] I am using Node.js v12.x LTS or higher -- [ ] `npm install` or `yarn` reports success -- Actual Node.js version (`node --version`): -- Operating system (`uname -a` on *nix systems): -- Revision (`git rev-parse --short HEAD`): - -**Expected behavior** - -**Actual behavior** - -**Steps to reproduce** diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..91f99583 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,30 @@ +--- +name: Bug report +about: Help improve ENiGMA½! +title: '' +labels: '' +assignees: '' + +--- + +**Describe the Bug** +A clear and concise description of what the :bug: bug is. + +**To Reproduce** +Any relevant steps to reproduce the behavior: + +**Expected Behavior** +A clear and concise description of what you expected to happen. + +**Actual Behavior** + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment** +* [ ] I am using Node.js v12.x LTS or higher +* [ ] `npm install` or `yarn` reports success +* Actual Node.js version (`node --version`): +* Operating system (`uname -a` on *nix systems): +* Revision (`git rev-parse --short HEAD`): +* Any additional relevant information about your setup diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..011200ae --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. Links to relevant specs such as FTN or documentation are appreciated if relevant. diff --git a/README.md b/README.md index 4137ae0d..a3013a0c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ ENiGMA½ is a modern BBS software with a nostalgic flair! - ## Features Available Now * Multi platform: Anywhere [Node.js](https://nodejs.org/) runs likely works (known to work under Linux, FreeBSD, OpenBSD, OS X and Windows) * Unlimited multi node support (for all those BBS "callers"!) @@ -26,16 +25,23 @@ ENiGMA½ is a modern BBS software with a nostalgic flair! * ANSI support in the Full Screen Editor (FSE), file descriptions, etc. * A built in achievement system. BBSing gamified! + ...and much much more. Please check out [the issue tracker](https://github.com/NuSkooler/enigma-bbs/issues) and feel free to request features (or contribute!) features! + ## Documentation [Browse the docs online](https://nuskooler.github.io/enigma-bbs/). Be sure to checkout the [/docs/](/docs/) folder as well for the latest and greatest documentation. -## In the Works -Many more features are in the pipeline. Checkout the [the issue tracker](https://github.com/NuSkooler/enigma-bbs/issues) and feel free to request features (or contribute!) features. +## Installation +On most *nix systems simply run the following from your terminal: +``` +curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash +``` -## Known Issues -As of now this is considered **beta** code! Please **expect bugs** :bug: -- and when you find them, log issues and/or submit pull requests. With that said, the code is actually quite stable and is used by a number of boards. +Please see [Installation Methods](https://nuskooler.github.io/enigma-bbs/installation/installation-methods.html) for Windows, Docker, and so on... -See [the issue tracker](https://github.com/NuSkooler/enigma-bbs/issues) for more information. +## Donating +If you feel the urge to donate, [you can do so here](https://liberapay.com/NuSkooler/donate)
+ +Donate using Liberapay ## Support * Use [the issue tracker](https://github.com/NuSkooler/enigma-bbs/issues) @@ -60,14 +66,6 @@ ENiGMA has been tested with many terminals. However, the following are suggested * [PlaneT Afr0](https://planetafr0.org/): (**ssh://planetafr0.org:8889**) * [Goblin Studio](https://goblin.strangled.net): (**ssh://goblin.strangled.net:8889**) -## Installation -On *nix type systems: -``` -curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash -``` - -Please see [Installation Methods](https://nuskooler.github.io/enigma-bbs/installation/installation-methods.html) for Windows, Docker, and so on... - ## Special Thanks * [Dave Stephens aka RiPuk](https://github.com/davestephens) for the awesome [ENiGMA website](https://enigma-bbs.github.io/) and [KICK ASS documentation](https://nuskooler.github.io/enigma-bbs/), code contributions, etc. * [Daniel Mecklenburg Jr.](https://github.com/codewar65) for the awesome VTX terminal and general coding talk @@ -83,6 +81,10 @@ Please see [Installation Methods](https://nuskooler.github.io/enigma-bbs/install * [nail/blocktronics](http://blocktronics.org/tag/nail/) for the [sickmade Xibalba logo](http://pc.textmod.es/pack/blocktronics-420/n-xbalba.ans)! * [Whazzit/blocktronics](http://blocktronics.org/tag/whazzit/) for the amazing Mayan ANSI pieces scattered about Xibalba BBS! * [Smooth](https://16colo.rs/tags/artist/smooth)/[fUEL](https://fuel.wtf/) for lots of dope art. Why not [snag a T-Shirt](https://www.redbubble.com/people/araknet/works/39126831-enigma-1-2-software-logo-design-by-smooth-of-fuel?p=t-shirt)? +* Al's Geek Lab for the [installation video](https://youtu.be/WnN-ucVi3ZU)! +* Alpha for the [FTN-style configuration guide](https://medium.com/@alpha_11845/setting-up-ftn-style-message-networks-with-enigma%C2%BD-bbs-709b22a1ae0d)! + +...and so many others! This project would be nothing without the BBS and artscene communities! ## License Released under the [BSD 2-clause](https://opensource.org/licenses/BSD-2-Clause) license: diff --git a/art/themes/luciano_blocktronics/MMENU.ANS b/art/themes/luciano_blocktronics/MMENU.ANS index 9db39ca9..28792570 100644 Binary files a/art/themes/luciano_blocktronics/MMENU.ANS and b/art/themes/luciano_blocktronics/MMENU.ANS differ diff --git a/core/ftn_util.js b/core/ftn_util.js index 9d53c9a3..9a171a52 100644 --- a/core/ftn_util.js +++ b/core/ftn_util.js @@ -375,14 +375,8 @@ function getCharacterSetIdentifierByEncoding(encodingName) { return value ? `${value[0]} ${value[1]}` : encodingName.toUpperCase(); } -// http://ftsc.org/docs/fts-5003.001 -// http://www.unicode.org/L2/L1999/99325-N.htm -function getEncodingFromCharacterSetIdentifier(chrs) { - const ident = chrs.split(' ')[0].toUpperCase(); - - // :TODO: fill in the rest!!! - return { - // level 1 +const CHRSToEncodingTable = { + Level1 : { 'ASCII' : 'ascii', // ISO-646-1 'DUTCH' : 'ascii', // ISO-646 'FINNISH' : 'ascii', // ISO-646-10 @@ -397,8 +391,8 @@ function getEncodingFromCharacterSetIdentifier(chrs) { 'SWISS' : 'ascii', // ISO-646 'UK' : 'ascii', // ISO-646 'ISO-10' : 'ascii', // ISO-646-10 - - // level 2 + }, + Level2 : { 'CP437' : 'cp437', 'CP850' : 'cp850', 'CP852' : 'cp852', @@ -412,15 +406,52 @@ function getEncodingFromCharacterSetIdentifier(chrs) { 'LATIN-2' : 'iso-8859-2', 'LATIN-5' : 'iso-8859-9', 'LATIN-9' : 'iso-8859-15', + }, - // level 4 + Level4 : { 'UTF-8' : 'utf8', + }, - // deprecated stuff + DeprecatedMisc : { 'IBMPC' : 'cp1250', // :TODO: validate '+7_FIDO' : 'cp866', '+7' : 'cp866', 'MAC' : 'macroman', // :TODO: validate + } +}; - }[ident]; -} \ No newline at end of file +// Given 1:N CHRS kludge IDs, try to pick the best encoding we can +// http://ftsc.org/docs/fts-5003.001 +// http://www.unicode.org/L2/L1999/99325-N.htm +function getEncodingFromCharacterSetIdentifier(chrs) { + if (!Array.isArray(chrs)) { + chrs = [ chrs ]; + } + + const encLevel = (ident, table, level) => { + const enc = table[ident]; + if (enc) { + return { enc, level }; + } + }; + + const mapping = []; + chrs.forEach(c => { + const ident = c.split(' ')[0].toUpperCase(); + const mapped = + encLevel(ident, CHRSToEncodingTable.Level1, 2) || + encLevel(ident, CHRSToEncodingTable.Level2, 1) || + encLevel(ident, CHRSToEncodingTable.Level4, 0) || + encLevel(ident, CHRSToEncodingTable.DeprecatedMisc, 3); + + if (mapped) { + mapping.push(mapped); + } + }); + + mapping.sort( (l, r) => { + return l.level - r.level; + }); + + return mapping[0] && mapping[0].enc; +} diff --git a/core/oputil/oputil_config.js b/core/oputil/oputil_config.js index b1490c28..bcd6529f 100644 --- a/core/oputil/oputil_config.js +++ b/core/oputil/oputil_config.js @@ -224,9 +224,13 @@ const copyFileSyncSilent = (to, from, flags) => { function buildNewConfig() { askNewConfigQuestions( (err, configPath, config) => { - if(err) { return; + if(err) { + return err; } + // ensure 'menus' exists + mkdirsSync(paths.join(__dirname, '../../config/menus')); + const boardName = sanatizeFilename(config.general.boardName) .replace(/[^a-z0-9_-]/ig, '_') .replace(/_+/g, '_') diff --git a/core/qwk_mail_packet.js b/core/qwk_mail_packet.js index 6bdfe8ad..eab57eb7 100644 --- a/core/qwk_mail_packet.js +++ b/core/qwk_mail_packet.js @@ -1089,7 +1089,7 @@ class QWKPacketWriter extends EventEmitter { // indicator such as FTN-style CHRS, try to use that. encoding = _.get(message.meta, 'FtnKludge.CHRS'); if (encoding) { - // convert from CHRS to something standard + // Convert from CHRS to something standard encoding = getEncodingFromCharacterSetIdentifier(encoding); if (encoding) { return encoding; diff --git a/docs/index.md b/docs/index.md index edeab5a6..1f5eba1d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,18 +10,21 @@ ENiGMA½ is a modern BBS software with a nostalgic flair! ## Features Available Now * Multi platform: Anywhere [Node.js](https://nodejs.org/) runs likely works (known to work under Linux, FreeBSD, OpenBSD, OS X and Windows) * Unlimited multi node support (for all those BBS "callers"!) - * **Highly** customizable via [HJSON](http://hjson.org/) based configuration, menus, and themes in addition to JavaScript based [mods](modding/) - * [MCI support](art/mci.md) for lightbars, toggles, input areas, and so on plus many other other bells and whistles + * **Highly** customizable via [HJSON](http://hjson.org/) based configuration, menus, and themes in addition to JavaScript based [mods](docs/modding/existing-mods.md) + * [MCI support](docs/art/mci.md) for lightbars, toggles, input areas, and so on plus many other other bells and whistles * Telnet, **SSH**, and both secure and non-secure [WebSocket](https://en.wikipedia.org/wiki/WebSocket) access built in! Additional servers are easy to implement * [CP437](http://www.ascii-codes.com/) and UTF-8 output - * [SyncTerm](http://syncterm.bbsdev.net/) style font and baud emulation support. Display PC/DOS and Amiga style artwork as it's intended! In general, ANSI-BBS / [cterm.txt](http://cvs.synchro.net/cgi-bin/viewcvs.cgi/*checkout*/src/conio/cterm.txt?content-type=text%2Fplain&revision=HEAD) / [bansi.txt](http://www.bbsdocumentary.com/library/PROGRAMS/GRAPHICS/ANSI/bansi.txt) are followed for expected BBS behavior - * Full [SAUCE](http://www.acid.org/info/sauce/sauce.htm) support - * Renegade style pipe color codes - * [SQLite](http://sqlite.org/) storage of users, message areas, and so on - * Strong [PBKDF2](https://en.wikipedia.org/wiki/PBKDF2) backed password encryption - * [Door support](modding/local-doors.md) including common dropfile formats for legacy DOS doors. Built in [BBSLink](http://bbslink.net/), [DoorParty](http://forums.throwbackbbs.com/), [Exodus](https://oddnetwork.org/exodus/) and [CombatNet](http://combatnet.us/) support! - * [Bunyan](https://github.com/trentm/node-bunyan) logging - * [Message networks](messageareas/message_networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export - * [Gazelle](https://github.com/WhatCD/Gazelle) inspired File Bases including fast fully indexed full text search (FTS), #tags, and HTTP(S) temporary download URLs using a built in [web server](servers/web-server.md). Legacy X/Y/Z modem also supported! + * [SyncTERM](http://syncterm.bbsdev.net/) style font and baud emulation support. Display PC/DOS and Amiga style artwork as it's intended! In general, ANSI-BBS / [cterm.txt](http://cvs.synchro.net/cgi-bin/viewcvs.cgi/*checkout*/src/conio/cterm.txt?content-type=text%2Fplain&revision=HEAD) / [bansi.txt](http://www.bbsdocumentary.com/library/PROGRAMS/GRAPHICS/ANSI/bansi.txt) are followed for expected BBS behavior. + * Full [SAUCE](http://www.acid.org/info/sauce/sauce.htm) support. + * Renegade style [pipe color codes](/docs/configuration/colour-codes.md). + * [SQLite](http://sqlite.org/) storage of users, message areas, etc. + * Strong [PBKDF2](https://en.wikipedia.org/wiki/PBKDF2) backed password encryption. + * Support for 2-Factor Authentication with One-Time-Passwords + * [Door support](docs/modding/door-servers.md) including common dropfile formats for legacy DOS doors. Built in [BBSLink](http://bbslink.net/), [DoorParty](http://forums.throwbackbbs.com/), [Exodus](https://oddnetwork.org/exodus/) and [CombatNet](http://combatnet.us/) support! + * [Bunyan](https://github.com/trentm/node-bunyan) logging! + * [Message networks](docs/messageareas/message-networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export. Messages Bases can also be exposed via [Gopher](docs/servers/gopher.md), or [NNTP](docs/servers/nntp.md)! + * [Gazelle](https://github.com/WhatCD/Gazelle) inspired File Bases including fast fully indexed full text search (FTS), #tags, and HTTP(S) temporary download URLs using a built in [web server](docs/servers/web-server.md). Legacy X/Y/Z modem also supported! * Upload processor supporting [FILE_ID.DIZ](https://en.wikipedia.org/wiki/FILE_ID.DIZ) and [NFO](https://en.wikipedia.org/wiki/.nfo) extraction, year estimation, and more! - * ANSI support in the Full Screen Editor (FSE), file descriptions, and so on + * ANSI support in the Full Screen Editor (FSE), file descriptions, etc. + * A built in achievement system. BBSing gamified! + diff --git a/docs/installation/docker.md b/docs/installation/docker.md index 82e03e5c..4071a018 100644 --- a/docs/installation/docker.md +++ b/docs/installation/docker.md @@ -2,20 +2,21 @@ layout: page title: Docker --- -**You'll need Docker installed before going any further. How to do so are out of scope of these docs, but you can find full instructions +**You'll need Docker installed before going any further. How to do so are out of scope of these docs, but you can find full instructions for every operating system on the [Docker website](https://docs.docker.com/engine/installation/).** ## Quick Start - -Download and run the ENiGMA½ BBS image: +Download and run the ENiGMA½ BBS image: docker run -d \ -p 8888:8888 \ davestephens/enigma-bbs:latest -As no config has been supplied the container will use a basic one so that it starts successfully. Note that as no persistence -directory has been supplied, once the container stops any changes made will be lost! +:information_source: This is a **very basic** example! As no config has been supplied the container will use a basic one so that it starts successfully. Note that as no persistence directory has been supplied, once the container stops any changes made will be lost! -## Customised Docker Setup +:information_source: [Volumes](https://docs.docker.com/storage/volumes/) may be used for things such as your configuration and database path. +## Customized Docker Setup TBC using Docker Compose + +:pencil: This area is looking for contributors! diff --git a/docs/installation/install-script.md b/docs/installation/install-script.md index 2f92db79..56da80cf 100644 --- a/docs/installation/install-script.md +++ b/docs/installation/install-script.md @@ -9,10 +9,10 @@ Under most Linux/UNIX like environments (Linux, BSD, OS X, ...) new users can s curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash ``` -You may review the [installation script](https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh) -on GitHub before running it. +:information_source: You may wish to review the [installation script](https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh) +on GitHub before running it! -The script will install nvm, Node.js 6 and grab the latest ENiGMA BBS from GitHub. It will also guide you through creating a basic configuration file, and recommend some packages to install. +The script will install `nvm`, Node.js and grab the latest ENiGMA BBS from GitHub. It will also guide you through creating a basic configuration file, and recommend some packages to install. After installing, see [Updating](/docs/admin/updating.md). diff --git a/docs/installation/installation-methods.md b/docs/installation/installation-methods.md index 5d751ea0..1b2f64e4 100644 --- a/docs/installation/installation-methods.md +++ b/docs/installation/installation-methods.md @@ -3,14 +3,16 @@ layout: page title: Installation Methods --- ## Installation Methods -There are multiple ways of installing ENiGMA BBS, depending on your level of experience and desire to do -things manually versus have it automated for you. +There are multiple ways of installing ENiGMA BBS, depending on your level of experience and desire to do things manually versus have it automated for you. | Method | Operating System Compatibility | Notes | |--------|--------------------------------|-------| | [Installation Script](install-script.md) | Linux, BSD, OSX | Quick and easy installation under most Linux/UNIX like environments (Linux, BSD, OS X, ...) | | [Docker Images](docker.md) | Linux, BSD, OSX, Windows | Easy upgrades, compatible with all operating systems, no dependencies to install | -| [Manual](manual.md) | Linux, Windows (probably others but untested! | If you like doing things manually, or are running Windows | +| [Manual](manual.md) | Linux, Windows, BSD (And others; YMMV!) | If you like doing things manually, or are running Windows | + +## Community HOWTO's +:scroll: Check out [this awesome video on installation and basic configuration](https://youtu.be/WnN-ucVi3ZU) from Al's Geek Lab! ## Keeping Up To Date After installing, you'll want to [keep your system updated](/docs/admin/updating.md). \ No newline at end of file diff --git a/docs/installation/manual.md b/docs/installation/manual.md index 0965a870..46fc301d 100644 --- a/docs/installation/manual.md +++ b/docs/installation/manual.md @@ -6,17 +6,16 @@ For Linux environments it's recommended you run the [install script](install-scr do things manually, read on... ## Prerequisites -* [Node.js](https://nodejs.org/) version **v10.x LTS or higher** (Note that 8.x LTS *probably* works but is unsupported). - * :information_source: It is **highly** recommended to use [nvm](https://github.com/creationix/nvm) to manage your - Node.js installation if you're on a Linux/Unix environment. +* [Node.js](https://nodejs.org/) version **v12.x LTS or higher** (Other versions may work but are not supported). + * :information_source: It is **highly** recommended to use [Node Version Manager (NVM)](https://github.com/creationix/nvm) to manage your Node.js installation if you're on a Linux/Unix environment. -* [Python](https://www.python.org/downloads/) 2.7.x for compiling Node.js packages with native extensions. +* [Python](https://www.python.org/downloads/) for compiling Node.js packages with native extensions via `node-gyp`. * A compiler such as Clang or GCC for Linux/UNIX systems or a recent copy of Visual Studio ([Visual Studio Express](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) editions are OK) for Windows users. Note that you **should only need the Visual C++ component**. -* [git](https://git-scm.com/downloads) to check out the ENiGMA source code. +* [Git](https://git-scm.com/downloads) to check out the ENiGMA source code. ## Node.js ### With NVM @@ -29,9 +28,9 @@ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | Next, install Node.js with NVM: ```bash -nvm install 10 -nvm use 10 -nvm alias default 10 +nvm install 12 +nvm use 12 +nvm alias default 12 ``` If the above steps completed without errors, you should now have `nvm`, `node`, and `npm` installed and in your environment. @@ -64,6 +63,8 @@ ENiGMA BBS makes use of a few packages for archive and legacy protocol support. | exiftool | [ExifTool](https://www.sno.phy.queensu.ca/~phil/exiftool/) | libimage-exiftool-perl | perl-Image-ExifTool | Unknown | xdms | Unpack/view Amiga DMS | [xdms](http://manpages.ubuntu.com/manpages/trusty/man1/xdms.1.html) | xdms | Unknown +:information_source: Please see also [Archivers](/docs/configuration/archivers.md) and [File Transfer Protocols](/docs/configuration/file-transfer-protocols.md) for additional recommended binaries and configuration. + ## Config Files You'll need a basic configuration to get started. The main system configuration is handled via `config/config.hjson`. This is an [HJSON](http://hjson.org/) file (compiliant JSON is also OK). See [Configuration](../configuration/) for more information. diff --git a/docs/messageareas/configuring-a-message-area.md b/docs/messageareas/configuring-a-message-area.md index 444cb091..394b3aa6 100644 --- a/docs/messageareas/configuring-a-message-area.md +++ b/docs/messageareas/configuring-a-message-area.md @@ -55,6 +55,7 @@ Message Areas are topic specific containers for messages that live within a part | `default` | :-1: | Specify `true` to make this the default area (e.g. assigned to new users) | | `acs` | :-1: | A standard [ACS](/docs/configuration/acs.md) block. See **ACS** below. | | `autoSignatures` | :-1: | Set to `false` to disable auto-signatures in this area. | +| `realNames` | :-1: | Set to `true` to use real names in this area. | ### ACS An optional standard [ACS](/docs/configuration/acs.md) block can be supplied with the following rules: diff --git a/docs/messageareas/ftn.md b/docs/messageareas/ftn.md index 34f90862..54face6b 100644 --- a/docs/messageareas/ftn.md +++ b/docs/messageareas/ftn.md @@ -6,6 +6,8 @@ title: FidoNet-Style Networks (FTN) ## FidoNet-Style Networks (FTN) [FidoNet](https://en.wikipedia.org/wiki/FidoNet) proper and other FidoNet-Style networks are supported by ENiGMA½. A bit of configuration and you'll be up and running in no time! +:scroll: Before proceeding you may wish to check [Setting up FTN-style message networks with ENiGMA½ BBS](https://medium.com/@alpha_11845/setting-up-ftn-style-message-networks-with-enigma%C2%BD-bbs-709b22a1ae0d) by Alpha. An excellent guide detailing some of the setup described here! + ### Configuration Getting a fully running FTN enabled system requires a few configuration points: diff --git a/misc/install.sh b/misc/install.sh index ed81d205..741c4585 100755 --- a/misc/install.sh +++ b/misc/install.sh @@ -12,7 +12,7 @@ WAIT_BEFORE_INSTALL=10 enigma_header() { clear cat << EndOfMessage - ______ + ______ _____________________ _____ ____________________ __________\\_ / \\__ ____/\\_ ____ \\ /____/ / _____ __ \\ / ______/ // /___jp! // __|___// | \\// |// | \\// | | \\// \\ /___ /_____ @@ -21,14 +21,24 @@ _____________________ _____ ____________________ __________\\_ / /__ _\\ <*> ENiGMA½ // https://github.com/NuSkooler/enigma-bbs <*> /__/ -ENiGMA½ will be installed to ${ENIGMA_INSTALL_DIR}, from source ${ENIGMA_SOURCE}, branch ${ENIGMA_BRANCH}. -ENiGMA½ requires Node.js. Version ${ENIGMA_NODE_VERSION}.x current will be installed via nvm. If you already have nvm installed, this install script will update it to the latest version. +Installing ENiGMA½: + Source : ${ENIGMA_SOURCE} (${ENIGMA_BRANCH} branch) + Destination: ${ENIGMA_INSTALL_DIR} + Node.js : ${ENIGMA_NODE_VERSION}.x via NVM (If you have NVM it will be updated to the latest version) -If this isn't what you were expecting, hit CTRL-C now. Installation will continue in ${WAIT_BEFORE_INSTALL} seconds... +>> If this isn't what you were expecting, hit CTRL-C now! +>> Installation will continue in ${WAIT_BEFORE_INSTALL} seconds... EndOfMessage - sleep ${WAIT_BEFORE_INSTALL} + + SECS=10 + while [ $SECS -gt 0 ]; do + echo -ne "${SECS}... " + sleep 1 + ((SECS --)) + done + echo "" } fatal_error() { @@ -36,9 +46,32 @@ fatal_error() { exit 1 } +check_exists() { + command -v $1 >/dev/null 2>&1 ; +} + +enigma_install_needs_ex() { + echo -ne "Checking for '$1'..." + if check_exists $1 ; then + echo " Found!" + else + echo "" + fatal_error "ENiGMA½ requires '$1' but it was not found. Please install it and/or make sure it is in your path then restart the installer.\n\n$2" + fi +} + +enigma_install_needs_python() { + echo -ne "Checking for a suitable Python installation..." + if check_exists "python" || check_exists "python7" || check_exists "python3" ; then + echo " Found!" + else + echo "" + fatal_error "ENiGMA½ requires Python for node-gyp to build binaries. Please see https://www.npmjs.com/package/node-gyp for details." + fi +} + enigma_install_needs() { - echo "Checking $1 installation" - command -v $1 >/dev/null 2>&1 || fatal_error "ENiGMA½ requires $1 but it's not installed. Please install it and restart the installer." + enigma_install_needs_ex $1 "Examples:\n sudo apt install $1 # Debian/Ubuntu\n sudo yum install $1 # CentOS" } log() { @@ -48,7 +81,8 @@ log() { enigma_install_init() { enigma_install_needs git enigma_install_needs curl - enigma_install_needs python + enigma_install_needs_python + enigma_install_needs_ex make "Examples:\n sudo apt install build-essential # Debian/Ubuntu\n sudo yum groupinstall 'Development Tools' # CentOS" enigma_install_needs make enigma_install_needs gcc } @@ -114,14 +148,21 @@ install_node_packages() { enigma_footer() { log "ENiGMA½ installation complete!" - echo -e "\e[33m" + echo -e "\e[1;33m" cat << EndOfMessage -If this is the first time you've installed ENiGMA½, you now need to generate a minimal configuration. To do so, run the following commands (note: if you did not already have node.js installed, you may need to log out/back in to refresh your path): + +ADDITIONAL ACTIONS ARE REQUIRED! +-------------------------------- + +1 - If you did not have Node.js and/or NVM installed previous to this please open a new shell/terminal now! + (!) Not doing so will prevent 'nvm' or 'node' commands from functioning! + +2 - If this is the first time you've installed ENiGMA½, you now need to generate a minimal configuration: cd ${ENIGMA_INSTALL_DIR} ./oputil.js config new -Additionally, the following support binaires are recommended: +3 - Additionally, a minimum of the following support binaires are recommended: 7zip: Archive support Debian/Ubuntu : apt-get install p7zip CentOS : yum install p7zip @@ -136,7 +177,7 @@ Additionally, the following support binaires are recommended: Debian/Ubuntu : apt-get install lrzsz CentOS : yum install lrzsz - See docs for more information! + See docs for more information including other useful binaries! EndOfMessage echo -e "\e[39m"