diff options
author | Minteck <contact@minteck.org> | 2022-11-28 17:31:34 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-11-28 17:31:34 +0100 |
commit | 7923aa8942b55884320ef2428417e3ee4b121613 (patch) | |
tree | 7993632f2898b1998f25b11ce40a8d2eb3d44730 /MistyCore/index.js | |
download | mistyos-og-7923aa8942b55884320ef2428417e3ee4b121613.tar.gz mistyos-og-7923aa8942b55884320ef2428417e3ee4b121613.tar.bz2 mistyos-og-7923aa8942b55884320ef2428417e3ee4b121613.zip |
Diffstat (limited to 'MistyCore/index.js')
-rw-r--r-- | MistyCore/index.js | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/MistyCore/index.js b/MistyCore/index.js new file mode 100644 index 0000000..6f09b4a --- /dev/null +++ b/MistyCore/index.js @@ -0,0 +1,150 @@ +process.stdout.write("."); +const fs = require('fs'); +const path = require('path'); +const chalk = require("chalk"); + +global._error = require('./error'); + +process.stdout.write("."); +global.systemRoot = path.resolve(__dirname + "/.."); +global.systemLog = path.resolve(systemRoot + "/../Volumes/VM/CurrentLog.log"); +global.hostname = "(none)"; +global.currentStage = 0; +global.uiProcess = null; +global.osVersion = fs.readFileSync(systemRoot + "/MistyOSVersion").toString().trim(); + +process.stdout.write("."); +process.on('uncaughtException', (error) => { + try { + log("MistyCore", "An internal exception occurred."); + log("MistyCore", error.stack); + log("MistyCore", "Aborting system operation"); + } catch (e) {} + + try { + fs.copyFileSync(systemLog, systemRoot + "/Logs/LastCrash.log"); + } catch (e) {} + + try { + require('child_process').execFileSync("/System/Binaries/sh", [ "-c", "echo 's' > /System/Volumes/FieldService/sysrq-trigger" ]); + } catch (e) {} + + console.clear(); + for (let i = 0; i < process.stdout.rows - 1; i++) { + process.stdout.write(chalk.bgYellow.white(" ".repeat(process.stdout.columns))); + } + + process.stdout.cursorTo(0, 0); + _error(error, currentStage, osVersion); + global.halt(); +}) + +process.stdout.write("."); +global.halt = () => { + let v = true; + while (v) {} +} + +process.stdout.write("."); +global.log = (service, text) => { + let lines = text.split("\n"); + + for (let line of lines) { + fs.appendFileSync(systemLog, "\n" + new Date().toDateString().substring(4, 10) + " " + new Date().toTimeString().split(" ")[0] + " " + hostname + " " + service + ": " + text); + } +} + +process.stdout.write("."); +if (!fs.existsSync(systemRoot + "/../Volumes")) fs.mkdirSync(systemRoot + "/../Volumes"); +if (!fs.existsSync(systemRoot + "/../Volumes/VM")) fs.mkdirSync(systemRoot + "/../Volumes/VM"); +fs.writeFileSync(systemLog, ""); + +process.stdout.write("."); +log("MistyCore", "Setting runtime variables..."); +fs.writeFileSync(systemRoot + "/../Volumes/VM/SystemRoot", systemRoot); +fs.writeFileSync(systemRoot + "/../Volumes/VM/SystemLog", systemLog); +fs.writeFileSync(systemRoot + "/../Volumes/VM/Hostname", hostname); +fs.writeFileSync(systemRoot + "/../Volumes/VM/Version", fs.readFileSync(systemRoot + "/MistyOSVersion").toString().trim()); +fs.mkdirSync(systemRoot + "/../Volumes/VM/LaunchDaemons"); +fs.mkdirSync(systemRoot + "/../Volumes/VM/LaunchDaemonsTimes"); +log("MistyCore", "Done setting runtime variables"); + +process.stdout.write("."); +global.services = require('./service'); +global.socket = require('./socket'); + +process.stdout.write("."); +log("MistyCore", "Creating launch daemons wrappers..."); +let servicesList = services.list(); +for (let name in servicesList) { + fs.writeFileSync(systemRoot + "/../Volumes/VM/LaunchDaemons/" + name, "-1"); +} +log("MistyCore", "Done creating launch daemons wrappers"); + +log("MistyCore", "Starting MistyCore on MistyOS " + fs.readFileSync(systemRoot + "/MistyOSVersion").toString().trim()); + +process.stdout.write("."); +console.clear(); +log("MistyCore", "Showing banner"); + +require('./banner')(); + +console.log(""); +console.log("MistyOS is starting up..."); +process.stdout.write(" Initializing MistyCore...\n"); + +log("MistyCore", "Done showing banner"); +log("MistyCore-Startup", "Running startup items..."); + +for (let unit of fs.readdirSync(systemRoot + "/StartupItems")) { + let startupItemStage = parseInt(unit.substring(0, 1)); + if (startupItemStage !== currentStage) { + services.reachTarget(currentStage); + currentStage = startupItemStage; + } + + log("MistyCore-Startup", "Starting item: " + systemRoot + "/StartupItems/" + unit); + + let unitName = unit.split("--")[1]; + let unitNamePretty = unitName.substring(0, unitName.length - 3); + + process.stdout.write(" Running " + unitNamePretty + "..."); + + try { + log("MistyCore-Startup", "Executing file: " + systemRoot + "/StartupItems/" + unit); + require(systemRoot + "/StartupItems/" + unit); + log("MistyCore-Startup", "Registered success for item: " + systemRoot + "/StartupItems/" + unit); + + process.stdout.write(chalk.green(" Success") + "\n"); + } catch (e) { + log("MistyCore-Startup", "Registered failure for item: " + systemRoot + "/StartupItems/" + unit); + log("MistyCore-Startup", e.stack); + + process.stdout.write(chalk.yellow(" Failure") + "\n"); + console.log(""); + console.log(chalk.red.inverse("MistyOS is unable to start up.")); + console.log(""); + console.log(chalk.red("A failing startup item is preventing MistyOS from starting up correctly.")); + console.log(" " + chalk.red("Startup item: " + unitNamePretty)); + console.log(" " + chalk.red("Error message: " + e.message)); + console.log(""); + console.log(chalk.red("Try starting your device in safe mode by holding Shift during start up.")); + global.halt(); + } +} + +services.reachTarget(9); + +if (!global.uiProcess) { + console.log(""); + console.log(chalk.red.inverse("MistyOS does not have a user interface.")); + console.log(""); + console.log(chalk.red("MistyOS has started successfully, but no user interface has been started.")); + console.log(" " + chalk.red("Wanted startup item: /System/Library/StartupItems/999--Shell.js")); + console.log(" " + chalk.red("Try reinstall MistyOS if this is not expected.")); + console.log(""); + console.log(chalk.red("Try starting your device in safe mode by holding Shift during start up.")); + global.halt(); +} + +setInterval(() => {})
\ No newline at end of file |