diff --git a/Dockerfile.prod b/Dockerfile.prod
index 8be8370..8de085f 100644
--- a/Dockerfile.prod
+++ b/Dockerfile.prod
@@ -68,4 +68,4 @@ RUN sudo cp -a /tmp/riju/* /home/docker/src/ && rm -rf /tmp/riju
WORKDIR /home/docker/src
RUN sudo deluser docker sudo
-RUN yarn test
+RUN RIJU_PRIVILEGED=1 yarn test
diff --git a/backend/src/langs.ts b/backend/src/langs.ts
index c234140..ae70733 100644
--- a/backend/src/langs.ts
+++ b/backend/src/langs.ts
@@ -1845,7 +1845,6 @@ binding_irb.run(IRB.conf)
scope: {
code: `x = 5`,
},
- ensure: `ruby -e 'raise "version mismatch, expected #{RUBY_VERSION}" unless ENV["PATH"].include? ".gem/ruby/#{RUBY_VERSION}/bin"'`,
format: {
run: "rufo -x",
input: `puts "Hello, world!";
diff --git a/backend/src/util.ts b/backend/src/util.ts
index 326485b..ba4e588 100644
--- a/backend/src/util.ts
+++ b/backend/src/util.ts
@@ -1,4 +1,4 @@
-import { spawn, SpawnOptions } from "child_process";
+import { SpawnOptions, spawn, spawnSync } from "child_process";
import * as os from "os";
import * as process from "process";
@@ -21,10 +21,20 @@ export const rijuSystemPrivileged = appRoot.resolve(
"system/out/riju-system-privileged"
);
+const rubyVersion = (() => {
+ try {
+ return spawnSync("ruby", ["-e", "puts RUBY_VERSION"])
+ .stdout.toString()
+ .trim();
+ } catch (err) {
+ return null;
+ }
+})();
+
function getEnv({ uid, uuid }: Context) {
const cwd = `/tmp/riju/${uuid}`;
const path = [
- `${cwd}/.gem/ruby/2.7.0/bin`,
+ rubyVersion && `${cwd}/.gem/ruby/${rubyVersion}/bin`,
`${cwd}/.local/bin`,
`${cwd}/node_modules/.bin`,
`/usr/local/sbin`,
@@ -32,7 +42,7 @@ function getEnv({ uid, uuid }: Context) {
`/usr/sbin`,
`/usr/bin`,
`/bin`,
- ];
+ ].filter((x) => x);
const username =
uid >= MIN_UID && uid < MAX_UID ? `riju${uid}` : os.userInfo().username;
return {
diff --git a/scripts/docker-install-phase1.bash b/scripts/docker-install-phase1.bash
index 27f8701..285758a 100755
--- a/scripts/docker-install-phase1.bash
+++ b/scripts/docker-install-phase1.bash
@@ -12,25 +12,32 @@ apt-get update
apt-get install -y apt-transport-https curl gnupg lsb-release software-properties-common wget
rm -rf /var/lib/apt/lists/*
+ubuntu_ver="$(lsb_release -rs)"
+ubuntu_name="$(lsb_release -cs)"
+
curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
curl -sSL https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
+curl -sSL https://downloads.ceylon-lang.org/apt/ceylon-debian-repo.gpg.key | apt-key add -
curl -sSL https://keybase.io/crystal/pgp_keys.asc | apt-key add -
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B4112585D386EB94
-wget -nv https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
+wget -nv "https://packages.microsoft.com/config/ubuntu/${ubuntu_ver}/packages-microsoft-prod.deb"
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
-tee -a /etc/apt/sources.list.d/custom.list >/dev/null <<"EOF"
+nodesource="$(curl -sS https://deb.nodesource.com/setup_current.x | grep NODEREPO= | grep -Eo 'node_[0-9]+\.x' | head -n1)"
+cran="$(curl -sS https://cran.r-project.org/bin/linux/ubuntu/ | grep '
' | grep focal | grep -Eo 'cran[0-9]+' | head -n1)"
+
+tee -a /etc/apt/sources.list.d/custom.list >/dev/null </dev/null
+latest_release() {
+ curl -sSL "https://api.github.com/repos/$1/releases/latest" | jq -r .tag_name
+}
+
# Needed for project infrastructure
-wget -nv https://github.com/watchexec/watchexec/releases/download/1.13.1/watchexec-1.13.1-x86_64-unknown-linux-gnu.deb
+ver="$(latest_release watchexec/watchexec)"
+wget -nv "https://github.com/watchexec/watchexec/releases/download/${rel}/watchexec-${ver}-x86_64-unknown-linux-gnu.deb"
dpkg -i watchexec-*.deb
rm watchexec-*.deb
git clone https://github.com/circulosmeos/gdown.pl.git
-mv gdown.pl/gdown.pl /usr/bin/gdown
+mv gdown.pl/gdown.pl /usr/local/bin/gdown
rm -rf gdown.pl
# Shared
-wget -nv https://github.com/jgm/pandoc/releases/download/2.10/pandoc-2.10-linux-amd64.tar.gz
+ver="$(latest_release jgm/pandoc)"
+wget -nv "https://github.com/jgm/pandoc/releases/download/${ver}/pandoc-${ver}-linux-amd64.tar.gz"
tar -xf pandoc-*-linux-amd64.tar.gz -C /usr --strip-components=1
rm pandoc-*-linux-amd64.tar.gz
# ><>
-wget -nv https://gist.githubusercontent.com/anonymous/6392418/raw/3b16018cb47f2f9ad1fa085c155cc5c0dc448b2d/fish.py -O /usr/bin/esofish
-sed -i 's:^#!.*:#!/usr/bin/env python3:' /usr/bin/esofish
-chmod +x /usr/bin/esofish
+wget -nv https://gist.githubusercontent.com/anonymous/6392418/raw/fish.py -O /usr/local/bin/esofish
+sed -i 's:^#!.*:#!/usr/bin/env python3:' /usr/local/bin/esofish
+chmod +x /usr/local/bin/esofish
# Ada
wget -nv https://dl.bintray.com/reznikmm/ada-language-server/linux-latest.tar.gz
tar -xf linux-latest.tar.gz
-mv linux/ada_language_server /usr/bin/ada_language_server
+mv linux/ada_language_server /usr/local/bin/ada_language_server
mv linux/*.so* /usr/lib/x86_64-linux-gnu/
rm -rf linux linux-latest.tar.gz
# APL
-wget -nv ftp://ftp.gnu.org/gnu/apl/apl_1.8-1_amd64.deb
+file="$(curl -sS ftp://ftp.gnu.org/gnu/apl/ | grep -Eo 'apl_[-0-9.]+_amd64.deb$' | sort -rV | head -n1)"
+wget -nv "ftp://ftp.gnu.org/gnu/apl/${file}"
dpkg -i apl_*_amd64.deb
rm apl_*_amd64.deb
-# Ceylon
-wget -nv https://ceylon-lang.org/download/dist/1_3_3_deb -O ceylon.deb
-dpkg -i ceylon.deb
-rm ceylon.deb
-
# Clojure
-wget -nv https://github.com/snoe/clojure-lsp/releases/download/release-20200629T153107/clojure-lsp
+ver="$(latest_release snoe/clojure-lsp)"
+wget -nv "https://github.com/snoe/clojure-lsp/releases/download/${ver}/clojure-lsp"
chmod +x clojure-lsp
-mv clojure-lsp /usr/bin/clojure-lsp
+mv clojure-lsp /usr/local/bin/clojure-lsp
# D
-wget -nv http://downloads.dlang.org/releases/2.x/2.092.0/dmd_2.092.0-0_amd64.deb
+wget -nv "$(curl -sSL https://dlang.org/download.html | grep -Eo '"http://[^"]+amd64.deb"' | tr -d '"')"
dpkg -i dmd_*.deb
rm dmd_*.deb
# Dhall
-wget -nv https://github.com/dhall-lang/dhall-haskell/releases/download/1.33.1/dhall-json-1.7.0-x86_64-linux.tar.bz2
+ver="$(latest_release dhall-lang/dhall-haskell)"
+file="$(curl -sSL "https://api.github.com/repos/dhall-lang/dhall-haskell/releases/tags/${ver}" | jq -r '.assets | map(select(.name | (contains("dhall-json") and contains("x86_64-linux.tar.bz2")))) | .[0].name')"
+wget -nv "https://github.com/dhall-lang/dhall-haskell/releases/download/${ver}/${file}"
mkdir dhall-json
tar -xf dhall-json-*-x86_64-linux.tar.bz2 -C dhall-json
-mv dhall-json/bin/dhall-to-json dhall-json/bin/json-to-dhall /usr/bin/
+mv dhall-json/bin/dhall-to-json dhall-json/bin/json-to-dhall /usr/local/bin/
rm -rf dhall-json dhall-json-*-x86_64-linux.tar.bz2
# Elixir
-wget -nv https://github.com/elixir-lsp/elixir-ls/releases/download/v0.5.0/elixir-ls.zip
+ver="$(latest_release elixir-lsp/elixir-ls)"
+wget -nv "https://github.com/elixir-lsp/elixir-ls/releases/download/${ver}/elixir-ls.zip"
unzip -d /opt/elixir-ls elixir-ls.zip
-ln -s /opt/elixir-ls/language_server.sh /usr/bin/elixir-ls
+ln -s /opt/elixir-ls/language_server.sh /usr/local/bin/elixir-ls
rm elixir-ls.zip
# Elm
-wget -nv https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz
+ver="$(latest_release elm/compiler)"
+wget -nv "https://github.com/elm/compiler/releases/download/${ver}/binary-for-linux-64-bit.gz"
gunzip binary-for-linux-64-bit.gz
chmod +x binary-for-linux-64-bit
-mv binary-for-linux-64-bit /usr/bin/elm
+mv binary-for-linux-64-bit /usr/local/bin/elm
# Emojicode
-wget -nv https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz
+ver="$(latest_release emojicode/emojicode)"
+wget -nv "https://github.com/emojicode/emojicode/releases/download/${ver}/Emojicode-$(sed 's/^v//' <<< "$ver")-Linux-x86_64.tar.gz"
tar -xf Emojicode-*-Linux-x86_64.tar.gz
pushd Emojicode-*-Linux-x86_64 >/dev/null
mv emojicodec /usr/local/bin/
@@ -90,64 +98,67 @@ rm Entropy.zip
# Erlang
wget -nv https://s3.amazonaws.com/rebar3/rebar3
chmod +x rebar3
-mv rebar3 /usr/bin/rebar3
+mv rebar3 /usr/local/bin/rebar3
# Euphoria
-wget -nv https://sourceforge.net/projects/rapideuphoria/files/Euphoria/4.0.5/euphoria_4.0.5_amd64.deb/download -O euphoria.deb
+wget -nv "$(curl -sSL https://sourceforge.net/projects/rapideuphoria/best_release.json | jq -r '.platform_releases.linux.url')" -O euphoria.deb
dpkg -i euphoria.deb
rm euphoria.deb
# Factor
-wget -nv https://downloads.factorcode.org/releases/0.98/factor-linux-x86-64-0.98.tar.gz
+ver="$(curl -sSL https://factorcode.org/ | grep -Eo 'release\?os=linux[^>]+>[^<]+' | sed -E 's/[^>]+>//' | head -n1)"
+wget -nv "https://downloads.factorcode.org/releases/${ver}/factor-linux-x86-64-${ver}.tar.gz"
tar -xf factor-linux-x86-64-*.tar.gz
mv -T factor /opt/factor
-ln -s /opt/factor/factor /usr/bin/factor-lang
+ln -s /opt/factor/factor /usr/local/bin/factor-lang
rm factor-linux-x86-64-*.tar.gz
# Go
export GO111MODULE=on
export GOPATH="$PWD/go"
go get golang.org/x/tools/gopls@latest
-mv go/bin/gopls /usr/bin/gopls
+mv go/bin/gopls /usr/local/bin/gopls
rm -rf go
# GolfScript
-wget -nv http://www.golfscript.com/golfscript/golfscript.rb -O /usr/bin/golfscript
-chmod +x /usr/bin/golfscript
+wget -nv http://www.golfscript.com/golfscript/golfscript.rb -O /usr/local/bin/golfscript
+chmod +x /usr/local/bin/golfscript
# Haskell
wget -nv https://get.haskellstack.org/stable/linux-x86_64-static.tar.gz
tar -xf linux-x86_64-static.tar.gz
-mv stack-*-linux-x86_64-static/stack /usr/bin/stack
+mv stack-*-linux-x86_64-static/stack /usr/local/bin/stack
rm -rf stack-*-linux-x86_64-static linux-x86_64-static.tar.gz
wget "https://drive.google.com/uc?export=download&id=1MpozlNLmWeUaQuT-5t6gyE3Yv56gUbea" -O /usr/local/bin/brittany
chmod +x /usr/local/bin/brittany
mkdir -p /opt/haskell
-gdown "https://drive.google.com/uc?export=download&id=1GPoR_ja4ns16KCamRgwB-JVag4HK0igz" /usr/bin/hie
+gdown "https://drive.google.com/uc?export=download&id=1GPoR_ja4ns16KCamRgwB-JVag4HK0igz" /usr/local/bin/hie
gdown "https://drive.google.com/uc?export=download&id=1qSxj8JjAeetAmNjUGayX0RBARgr5R4Ij" /opt/haskell/hoogle.hoo
-chmod +x /usr/bin/hie
+chmod +x /usr/local/bin/hie
# HCL/TOML/YAML
-wget -nv https://github.com/sclevine/yj/releases/download/v4.0.0/yj-linux
+ver="$(latest_release sclevine/yj)"
+wget -nv "https://github.com/sclevine/yj/releases/download/${ver}/yj-linux"
chmod +x yj-linux
-mv yj-linux /usr/bin/yj
+mv yj-linux /usr/local/bin/yj
# Ink
-wget -nv https://github.com/thesephist/ink/releases/download/v0.1.7/ink-linux
-wget -nv https://github.com/thesephist/ink/releases/download/v0.1.7/std.ink
-wget -nv https://github.com/thesephist/ink/releases/download/v0.1.7/str.ink
+ver="$(latest_release thesephist/ink)"
+wget -nv "https://github.com/thesephist/ink/releases/download/${ver}/ink-linux"
+wget -nv "https://github.com/thesephist/ink/releases/download/${ver}/std.ink"
+wget -nv "https://github.com/thesephist/ink/releases/download/${ver}/str.ink"
chmod +x ink-linux
-mv ink-linux /usr/bin/ink
+mv ink-linux /usr/local/bin/ink
mkdir /opt/ink
mv std.ink str.ink /opt/ink/
# Ioke
-wget -nv https://ioke.org/dist/ioke-P-ikj-0.4.0.tar.gz
+wget -nv https://ioke.org/dist/ioke-P-ikj-latest.tar.gz
tar -xf ioke-P-ikj-*.tar.gz -C /opt
rm ioke-P-ikj-*.tar.gz
-ln -s /opt/ioke/bin/ioke /usr/bin/ioke
+ln -s /opt/ioke/bin/ioke /usr/local/bin/ioke
# Kitten
wget -nv "https://drive.google.com/uc?export=download&id=11u0G2I8i0u4ez27zvEjAT6E9xF4RwuFZ" -O /usr/local/bin/kitten
@@ -155,18 +166,21 @@ wget -nv "https://drive.google.com/uc?export=download&id=1h-U1iURWax8h18kTD1AyGS
chmod +x /usr/local/bin/kitten
# Kotlin
-wget -nv https://github.com/JetBrains/kotlin/releases/download/v1.3.72/kotlin-compiler-1.3.72.zip
+ver="$(latest_release JetBrains/kotlin)"
+wget -nv "https://github.com/JetBrains/kotlin/releases/download/${ver}/kotlin-compiler-$(sed 's/^v//' <<< "$ver").zip"
unzip kotlin-*.zip
-cp kotlinc/bin/* /usr/bin/
-cp kotlinc/lib/* /usr/lib/
+cp kotlinc/bin/* /usr/local/bin/
+cp kotlinc/lib/* /usr/local/lib/
rm -rf kotlin-*.zip kotlinc
# Lua
-wget -nv https://github.com/EmmyLua/EmmyLua-LanguageServer/releases/download/0.3.6/EmmyLua-LS-all.jar
+ver="$(latest_release EmmyLua/EmmyLua-LanguageServer)"
+wget -nv "https://github.com/EmmyLua/EmmyLua-LanguageServer/releases/download/${ver}/EmmyLua-LS-all.jar"
mv EmmyLua-LS-all.jar /usr/lib/EmmyLua-LS.jar
# MariaDB
-wget -nv "https://downloads.mariadb.org/f/mariadb-10.5.4/bintar-linux-x86_64/mariadb-10.5.4-linux-x86_64.tar.gz/from/http%3A//mirror.vpsfree.cz/mariadb/?serve" -O mariadb.tar.gz
+ver="$(curl -sSL https://downloads.mariadb.org/ | grep 'href="/mariadb/[0-9]' | grep -Eo '[0-9][^/]+' | sort -rV | head -n1)"
+wget -nv "https://downloads.mariadb.org/f/mariadb-${ver}/bintar-linux-x86_64/mariadb-${ver}-linux-x86_64.tar.gz/from/http%3A//mirror.vpsfree.cz/mariadb/?serve" -O mariadb.tar.gz
tar -xf mariadb.tar.gz
mkdir /opt/mariadb
mv mariadb-*-linux-x86_64/* /opt/mariadb/
@@ -174,17 +188,20 @@ chmod a=rx,u=rwx /opt/mariadb/lib/plugin/auth_pam_tool_dir
chmod a=rx,u=rwxs /opt/mariadb/lib/plugin/auth_pam_tool_dir/auth_pam_tool
# Omgrofl
+ver="$(latest_release OlegSmelov/omgrofl-interpreter)"
mkdir /opt/omgrofl
-wget -nv https://github.com/OlegSmelov/omgrofl-interpreter/releases/download/v0.1/Omgrofl.jar -O /opt/omgrofl/Omgrofl.jar
+wget -nv "https://github.com/OlegSmelov/omgrofl-interpreter/releases/download/${ver}/Omgrofl.jar" -O /opt/omgrofl/Omgrofl.jar
# PowerShell
-wget -nv https://github.com/PowerShell/PowerShell/releases/download/v7.0.1/powershell-7.0.1-linux-x64.tar.gz
+ver="$(latest_release PowerShell/PowerShell)"
+wget -nv "https://github.com/PowerShell/PowerShell/releases/download/${ver}/powershell-$(sed 's/^v//' <<< "$ver")-linux-x64.tar.gz"
mkdir /opt/powershell
tar -xf powershell-*.tar.gz -C /opt/powershell
-ln -s /opt/powershell/pwsh /usr/bin/pwsh
+ln -s /opt/powershell/pwsh /usr/local/bin/pwsh
rm powershell-*.tar.gz
-wget -nv https://github.com/PowerShell/PowerShellEditorServices/releases/download/v2.2.0/PowerShellEditorServices.zip
+ver="$(latest_release PowerShell/PowerShellEditorServices)"
+wget -nv "https://github.com/PowerShell/PowerShellEditorServices/releases/download/${ver}/PowerShellEditorServices.zip"
unzip PowerShellEditorServices.zip
mv PowerShellEditorServices /opt/powershell-editor-services
rm PowerShellEditorServices.zip
@@ -195,11 +212,12 @@ nupkg="$(echo "$xml" | grep -Eo 'https://[^<]+\.nupkg' | tail -n1)"
wget -nv "${nupkg}"
unzip -d /opt/mspyls Python-Language-Server-linux-x64.*.nupkg
chmod +x /opt/mspyls/Microsoft.Python.LanguageServer
-ln -s /opt/mspyls/Microsoft.Python.LanguageServer /usr/bin/Microsoft.Python.LanguageServer
+ln -s /opt/mspyls/Microsoft.Python.LanguageServer /usr/local/bin/Microsoft.Python.LanguageServer
rm Python-Language-Server-linux-x64.*.nupkg
# ReasonML
-wget -nv https://github.com/jaredly/reason-language-server/releases/download/1.7.10/rls-linux.zip
+ver="$(latest_release jaredly/reason-language-server)"
+wget -nv "https://github.com/jaredly/reason-language-server/releases/download/${ver}/rls-linux.zip"
unzip rls-linux.zip
mv rls-linux/reason-language-server /usr/local/bin/
rm rls-linux.zip
@@ -215,14 +233,15 @@ RUSTUP_HOME=/opt/rust exec /opt/rust/bin/${0##*/} "$@"
EOF
chmod +x /opt/rust/wrapper
for file in /opt/rust/bin/*; do
- ln -s /opt/rust/wrapper "/usr/bin/${file##*/}"
+ ln -s /opt/rust/wrapper "/usr/local/bin/${file##*/}"
done
# Scala
+file="$(curl -sSL https://scalameta.org/metals/docs/editors/emacs.html | grep -Eo 'org.scalameta[^ ]+')"
wget -nv https://git.io/coursier-cli
chmod +x coursier-cli
-mv coursier-cli /usr/bin/coursier
-coursier bootstrap --java-opt -Xss4m --java-opt -Xms100m --java-opt -Dmetals.client=emacs org.scalameta:metals_2.12:0.9.1 -r bintray:scalacenter/releases -r sonatype:snapshots -o /usr/bin/metals
+mv coursier-cli /usr/local/bin/coursier
+coursier bootstrap --java-opt -Xss4m --java-opt -Xms100m --java-opt -Dmetals.client=emacs "${file}" -r bintray:scalacenter/releases -r sonatype:snapshots -o /usr/local/bin/metals
metals -version /dev/null
+make || true
+mv snobol4 /usr/local/bin/snobol4
+popd >/dev/null
+rm -rf snobol4-*
# Swift
gdown "https://drive.google.com/uc?export=download&id=1eE1-VuZz0gv-fITaGVT_r1UunCLjS-JT" swift.tar.gz
mkdir /opt/swift
tar -xf swift.tar.gz -C /opt/swift --strip-components=2
-ln -s /opt/swift/bin/swiftc /usr/bin/swiftc
-ln -s /opt/swift/bin/sourcekit-lsp /usr/bin/sourcekit-lsp
+ln -s /opt/swift/bin/swiftc /usr/local/bin/swiftc
+ln -s /opt/swift/bin/sourcekit-lsp /usr/local/bin/sourcekit-lsp
rm swift.tar.gz
popd >/dev/null
diff --git a/scripts/docker-install-phase6.bash b/scripts/docker-install-phase6.bash
index 765d58d..0da0891 100755
--- a/scripts/docker-install-phase6.bash
+++ b/scripts/docker-install-phase6.bash
@@ -8,19 +8,19 @@ pushd /tmp >/dev/null
# Beatnik
git clone https://github.com/catseye/Beatnik.git
sed -i 's#env python#env python2#' Beatnik/script/beatnik.py
-mv Beatnik/script/beatnik.py /usr/bin/beatnik
+mv Beatnik/script/beatnik.py /usr/local/bin/beatnik
rm -rf Beatnik
# Binary Lambda Calculus
wget -nv https://www.ioccc.org/2012/tromp/tromp.c
-clang tromp.c -Wno-everything -DInt=long -DX=8 -DA=500000 -o /usr/bin/tromp
+clang tromp.c -Wno-everything -DInt=long -DX=8 -DA=500000 -o /usr/local/bin/tromp
rm tromp.c
# Erlang
git clone https://github.com/erlang-ls/erlang_ls.git
pushd erlang_ls >/dev/null
make
-mv _build/default/bin/erlang_ls /usr/bin/erlang_ls
+mv _build/default/bin/erlang_ls /usr/local/bin/erlang_ls
popd >/dev/null
rm -rf erlang_ls
@@ -31,7 +31,7 @@ git clone https://github.com/m-ender/hexagony.git /opt/hexagony
git clone https://github.com/raxod502/kalyn.git
pushd kalyn >/dev/null
stack build kalyn
-mv "$(stack exec which kalyn)" /usr/bin/kalyn
+mv "$(stack exec which kalyn)" /usr/local/bin/kalyn
mkdir /opt/kalyn
cp -R src-kalyn/Stdlib src-kalyn/Stdlib.kalyn /opt/kalyn/
popd >/dev/null
@@ -46,14 +46,14 @@ rm -rf lci
# Malbolge
git clone https://github.com/bipinu/malbolge.git
-clang malbolge/malbolge.c -o /usr/bin/malbolge
+clang malbolge/malbolge.c -o /usr/local/bin/malbolge
rm -rf malbolge
# Rapira
git clone https://github.com/freeduke33/rerap2.git
pushd rerap2 >/dev/null
make
-mv rapira /usr/bin/rapira
+mv rapira /usr/local/bin/rapira
popd >/dev/null
rm -rf rerap2
@@ -66,12 +66,12 @@ popd >/dev/null
rm -rf qalb
# Thue
-wget -nv https://catseye.tc/distfiles/thue-1.5-2015.0827.zip
+wget -nv "$(curl -sSL https://catseye.tc/distribution/Thue_distribution | grep -Eo 'https://catseye.tc/distfiles/thue-[^"]+\.zip' | head -n1)"
unzip thue-*.zip
rm thue-*.zip
pushd thue-* >/dev/null
./build.sh
-mv bin/thue /usr/bin/thue
+mv bin/thue /usr/local/bin/thue
popd >/dev/null
rm -rf thue-*
@@ -79,7 +79,7 @@ rm -rf thue-*
git clone https://github.com/manyoso/zot.git
pushd zot >/dev/null
./build.sh
-mv build/bin/zot /usr/bin/zot
+mv build/bin/zot /usr/local/bin/zot
popd >/dev/null
rm -rf zot
diff --git a/scripts/docker-install-phase7.bash b/scripts/docker-install-phase7.bash
index 49fcccd..68249e9 100755
--- a/scripts/docker-install-phase7.bash
+++ b/scripts/docker-install-phase7.bash
@@ -4,14 +4,22 @@ set -e
set -o pipefail
set -x
pushd /tmp >/dev/null
+useradd -m -N -l -r -p '!' build
# Cmd
-useradd -m -N -l -r -p '!' build
sudo -u build wine cmd < /dev/null
mkdir -p /opt/cmd/home-template
cp -R /home/build/.wine /opt/cmd/home-template/
chmod -R a=u,go-w /opt/cmd/home-template
-userdel -r build
+
+# Elm
+mkdir -p /opt/elm
+mkdir elm-project
+pushd elm-project >/dev/null
+yes | elm init
+cat elm.json | jq '."source-directories" = ["."]' > /opt/elm/elm.json
+popd >/dev/null
+rm -rf elm-project
# PureScript
mkdir project-template
@@ -43,7 +51,7 @@ yarn install
popd >/dev/null
# Befunge
-tee /usr/bin/befunge-repl >/dev/null <<"EOF"
+tee /usr/local/bin/befunge-repl >/dev/null <<"EOF"
#!/usr/bin/env -S NODE_PATH=/usr/lib/node_modules node
const fs = require("fs");
@@ -71,10 +79,10 @@ befunge.run(fs.readFileSync(args[0], { encoding: "utf-8" })).catch((err) => {
process.exit(1);
});
EOF
-chmod +x /usr/bin/befunge-repl
+chmod +x /usr/local/bin/befunge-repl
# Binary Lambda Calculus
-tee /usr/bin/binary-to-text >/dev/null <<"EOF"
+tee /usr/local/bin/binary-to-text >/dev/null <<"EOF"
#!/usr/bin/env python3
import re
@@ -88,10 +96,10 @@ for m in re.finditer(r"([01]{8})", text):
print("".join(out), end="")
EOF
-chmod +x /usr/bin/binary-to-text
+chmod +x /usr/local/bin/binary-to-text
# BrainF
-tee /usr/bin/brainf-repl >/dev/null <<"EOF"
+tee /usr/local/bin/brainf-repl >/dev/null <<"EOF"
#!/usr/bin/env python3
import argparse
import readline
@@ -120,36 +128,7 @@ while True:
f.flush()
subprocess.run(["beef", f.name])
EOF
-chmod +x /usr/bin/brainf-repl
-
-# Elm
-mkdir /opt/elm
-tee /opt/elm/elm.json >/dev/null <<"EOF"
-{
- "type": "application",
- "source-directories": [
- "."
- ],
- "elm-version": "0.19.1",
- "dependencies": {
- "direct": {
- "elm/browser": "1.0.2",
- "elm/core": "1.0.5",
- "elm/html": "1.0.0"
- },
- "indirect": {
- "elm/json": "1.1.3",
- "elm/time": "1.0.0",
- "elm/url": "1.0.0",
- "elm/virtual-dom": "1.0.2"
- }
- },
- "test-dependencies": {
- "direct": {},
- "indirect": {}
- }
-}
-EOF
+chmod +x /usr/local/bin/brainf-repl
# Haskell
mkdir -p /opt/haskell
@@ -187,7 +166,7 @@ repl.start({prompt: "قلب> ", eval: (cmd, context, filename, callback) => call
EOF
# Unlambda
-tee /usr/bin/unlambda-repl >/dev/null <<"EOF"
+tee /usr/local/bin/unlambda-repl >/dev/null <<"EOF"
#!/usr/bin/env python3
import argparse
import readline
@@ -213,7 +192,8 @@ while True:
continue
subprocess.run(["unlambda"], input=code, encoding="utf-8")
EOF
-chmod +x /usr/bin/unlambda-repl
+chmod +x /usr/local/bin/unlambda-repl
+userdel -r build
popd >/dev/null
rm "$0"
diff --git a/scripts/install-scripts.bash b/scripts/install-scripts.bash
index 5f5c741..494a92e 100755
--- a/scripts/install-scripts.bash
+++ b/scripts/install-scripts.bash
@@ -4,9 +4,9 @@ set -e
set -o pipefail
cp scripts/riju.service /etc/systemd/system/riju.service
-cp scripts/riju-serve.bash /usr/bin/riju-serve
+cp scripts/riju-serve.bash /usr/local/bin/riju-serve
cp scripts/certbot-pre.bash /etc/letsencrypt/renewal-hooks/pre/riju
cp scripts/certbot-post.bash /etc/letsencrypt/renewal-hooks/post/riju
-cp scripts/deploy-phase1.py /usr/bin/riju-deploy
+cp scripts/deploy-phase1.py /usr/local/bin/riju-deploy
systemctl daemon-reload