From 2d649ab017ad47e606472a5e9958d7fedb837691 Mon Sep 17 00:00:00 2001 From: Radon Rosborough Date: Fri, 31 Jul 2020 19:26:05 -0600 Subject: [PATCH] The edge of glory (rolling-release ~everything~) --- Dockerfile.prod | 2 +- backend/src/langs.ts | 1 - backend/src/util.ts | 16 +++- scripts/docker-install-phase1.bash | 19 ++-- scripts/docker-install-phase2.bash | 1 + scripts/docker-install-phase3a.bash | 8 +- scripts/docker-install-phase3b.bash | 12 ++- scripts/docker-install-phase3d.bash | 10 +- scripts/docker-install-phase4.bash | 144 ++++++++++++++++------------ scripts/docker-install-phase6.bash | 18 ++-- scripts/docker-install-phase7.bash | 58 ++++------- scripts/install-scripts.bash | 4 +- 12 files changed, 164 insertions(+), 129 deletions(-) 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