From 8e9ec3ca23f52364ef66e999eb39540e9c992a6e Mon Sep 17 00:00:00 2001 From: KunoiSayami <46131041+KunoiSayami@users.noreply.github.com> Date: Fri, 7 May 2021 20:18:51 +0800 Subject: [PATCH] feat: Install script support Arch Linux * Fixed multiple bugs --- install/install.js | 61 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/install/install.js b/install/install.js index e03f77dd6..9a61a159a 100644 --- a/install/install.js +++ b/install/install.js @@ -6,8 +6,22 @@ let MINIO_ACCESS_KEY = randomstring(32); let MINIO_SECRET_KEY = randomstring(32); let DATABASE_PASSWORD = randomstring(32); +const default_nvm_source_command = '\n# load nvm env(by hydro installer)\nexport NVM_DIR="$HOME/.nvm"\n[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"\n'; + +let install_env = function () { + let rc_path = '/root/.' + (__env["SHELL"].endsWith('zsh') ? 'zsh' : 'bash') + 'rc'; + if (!fs.exist(rc_path)) { + fs.writefile(rc_path, default_nvm_source_command); + return; + } + let rc_file = fs.readfile(rc_path); + if (!rc_file.includes(default_nvm_source_command)) { + fs.appendfile(default_nvm_source_command); + } +} + if (__arch !== 'amd64') log.fatal('不支持的架构 %s ,请尝试手动安装', __arch); -const china = (cli.prompt('此服务器是否位于国内?(Y/n)') || 'y') === 'y'; +const china = (cli.prompt('此服务器是否位于中国大陆?(Y/n) ') || 'y') === 'y'; const NVM_NODEJS_ORG_MIRROR = china ? 'https://mirrors.tuna.tsinghua.edu.cn/nodejs-release' : 'https://nodejs.org/dist'; @@ -27,10 +41,13 @@ const lines = osinfoFile.split('\n'); const values = {}; for (const line of lines) { const d = line.split('='); + if (d.length == 1) { + continue + } if (d[1].startsWith('"')) values[d[0]] = d[1].substr(1, d[1].length - 2); - else values[d[0]] = d[1]; + else values[d[0].toLowerCase()] = d[1]; } -if (['ubuntu', 'arch'].includes(values.id)) log.fatal('不支持的系统'); +if (!['ubuntu', 'arch'].includes(values.id)) log.fatal('不支持的系统'); const Arch = values.id === 'arch'; const steps = [ @@ -38,24 +55,31 @@ const steps = [ init: '正在初始化安装 / Preparing', operations: [ 'mkdir -p /data/db /data/file ~/.hydro', - 'apt-get -qq update', - 'apt-get install -y curl wget gnupg', + Arch ? 'pacman --needed --quiet --noconfirm -Sy' : 'apt-get -qq update', + Arch ? 'pacman --needed --quiet --noconfirm -S gnupg curl' : 'apt-get install -y curl wget gnupg', ], }, { init: '正在安装 MongoDB / Installing MongoDB', skip: () => fs.exist('/usr/bin/mongo'), - operations: [ - () => { - fs.writefile( - '/etc/apt/sources.list.d/mongodb-org-4.4.list', - `deb [ arch=amd64 ] ${MONGODB_REPO} ${values.UBUNTU_CODENAME}/mongodb-org/4.4 multiverse`, - ); - }, - 'wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -', - 'apt-get -qq update', - 'apt-get -q install -y mongodb-org', - ], + operations: Arch ? + [ + 'curl -fSLO https://s3.undefined.moe/hydro/arch/libcurl-openssl-1.0-7.76.0-1-x86_64.pkg.tar.zst', + 'curl -fSLO https://s3.undefined.moe/hydro/arch/mongodb-bin-4.4.5-1-x86_64.pkg.tar.zst', + 'curl -fSLO https://s3.undefined.moe/hydro/arch/mongodb-tools-bin-100.3.1-1-x86_64.pkg.tar.zst', + 'pacman --noconfirm -U libcurl-openssl-1.0-7.76.0-1-x86_64.pkg.tar.zst mongodb-bin-4.4.5-1-x86_64.pkg.tar.zst mongodb-tools-bin-100.3.1-1-x86_64.pkg.tar.zst' + ] : + [ + () => { + fs.writefile( + '/etc/apt/sources.list.d/mongodb-org-4.4.list', + `deb [ arch=amd64 ] ${MONGODB_REPO} ${values.UBUNTU_CODENAME}/mongodb-org/4.4 multiverse`, + ); + }, + 'wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -', + 'apt-get -qq update', + 'apt-get -q install -y mongodb-org', + ], }, { init: '正在安装 NVM / Installing NVM', @@ -81,6 +105,7 @@ const steps = [ const res = exec1('bash -c "source /root/.nvm/nvm.sh && nvm install 14"', { NVM_NODEJS_ORG_MIRROR }); const ver = res.output.split('Now using node v')[1].split(' ')[0]; setenv('PATH', `/root/.nvm/versions/node/v${ver}/bin:${__env.PATH}`); + install_env(); }, 'npm i yarn -g', ], @@ -118,7 +143,7 @@ const steps = [ init: '正在安装 MinIO / Installing MinIO', skip: () => fs.exist('/root/.hydro/env'), operations: [ - `wget ${MINIO_DOWNLOAD} -O /usr/bin/minio`, + `curl -fSL ${MINIO_DOWNLOAD} -o /usr/bin/minio`, 'chmod +x /usr/bin/minio', () => fs.writefile( '/root/.hydro/env', @@ -129,7 +154,7 @@ const steps = [ { init: '正在安装编译器 / Installing compiler', operations: [ - 'apt-get install -y g++ fp-compiler >/dev/null', + Arch ? 'pacman --needed --quiet --noconfirm -S gcc fpc' : 'apt-get install -y g++ fp-compiler >/dev/null', ], }, {