wget -v, .env, readme, -i386, env vars

This commit is contained in:
Radon Rosborough 2020-10-07 21:14:39 -07:00
parent 444a8be812
commit 418ddf3743
13 changed files with 304 additions and 118 deletions

View File

@ -1,3 +1,6 @@
-include .env
export
UID := $(shell id -u)
.PHONY: help

225
README.md
View File

@ -151,6 +151,227 @@ and fail the build if they fail.
See also [riju-cdn](https://github.com/raxod502/riju-cdn).
## Flag
## Adding a language
[![Flag](flag.png)](https://www.reddit.com/r/Breath_of_the_Wild/comments/947ewf/flag_of_the_gerudo_based_on_the_flag_of_kazakhstan/)
The workflow for adding a language is more streamlined than you might
expect, given that building Riju's Docker image takes over an hour.
This is because there is no need to rebuild the image when a change is
made. Instead, you can manually apply the changes to a running
container in parallel with adding those changes to the Dockerfile
scripts.
### Install
The first step in adding a language is figuring out how to install it.
There are a number of considerations here:
* If it's available from Ubuntu, that's the best option.
* Language-specific package managers are a second-best choice.
* Downloading precompiled binaries is also not the worst. It's best if
upstream offers a .deb download, but manual installation is fine
too.
* Compiling from source is the worst option, but sometimes it's the
only way.
Typically, I `sudo su` and change directory to `/tmp` in order to test
out installation. Once I've identified a way to install such that the
software appears to function, I transcribe the commands from my shell
back into the relevant Dockerfile script.
#### Dockerfile scripts
These are as follows:
* `docker-install-phase0.bash`: perform initial upgrade of all Ubuntu
packages, unminimize system
* `docker-install-phase1.bash`: configure APT repositories and
additional architectures
* `docker-install-phase2.bash`: install tools that are used for Riju
itself (build and development tools)
* `docker-install-phase3a.bash`: install APT packages for languages
A-D
* `docker-install-phase3b.bash`: install APT packages for languages
E-L
* `docker-install-phase3c.bash`: install APT packages for languages
M-R
* `docker-install-phase3d.bash`: install APT packages for languages
S-Z
* `docker-install-phase4.bash`: install precompiled binaries and
tarballs
* `docker-install-phase5.bash`: set up language-specific package
managers and install packages from them
* `docker-install-phase6.bash`: install things from source
* `docker-install-phase7.bash`: set up project templates for languages
that require you start by running a "create new project" command,
and install custom wrapper scripts
* `docker-install-phase8.bash`: set up access control and do final
cleanup
#### Rolling-release policy
You'll notice in these scripts a distinct lack of any version numbers.
This is because Riju uses rolling-release for everything that can
conceivably be rolling-released (even things that look like they're
probably never *going* to get a new release, since the last one was in
2004).
For APT and language-specific packages, this is typically simple. A
small number of APT packages include a version number as part of their
name for some reason, and I work around this using various
`grep-aptavail` incantations at the top of the `phase-3[ad].bash`
scripts. I suggest checking those examples and referring to the
`grep-aptavail` man page to understand what is going on.
For binaries and tarballs in `phase4.bash`, a version number is
typically encoded in the download URL. For projects available via
GitHub Releases (preferred), there is a `latest_release` shell
function to fetch the latest tag. For things hosted elsewhere, I
resort to using `curl` and `grep` on the download homepage to identify
the latest version number or download URL. Crafting an appropriate
pipeline for these cases is as much an art as a science. We simply
hope that the relevant webpages will not have their layout changed too
frequently.
#### Conventions
* We do all work from `/tmp` and clean up our files when done. (The
current code doesn't always do a great job of this; see
[#27](https://github.com/raxod502/riju/issues/27).)
* When changing directory, we use `pushd` and `popd` in pairs.
* We prefer putting files where they're supposed to be in the first
place, rather than moving (or worse, copying) them. This can be
accomplished by means of `wget -O`, `unzip -d`, `tar -C
[--strip-components]`, and similar.
* We like to keep things as minimal as possible in terms of shell
scripting, but try to follow the standard installation procedure
where reasonable.
### Running
There are three categories of languages: non-interactive, interactive,
and interactive+scoped. The capabilities are as follows:
* *Non-interactive:* You can run a file.
* FIXME
## Debugging tools
Add `#debug` to the end of a Riju URL and reload the page to output
all messages in JSON format in the JavaScript console. You can copy
the LSP messages as JSON for direct use in the LSP REPL (see below).
To get a sandboxed shell session, the same as is used to run languages
on Riju, run:
$ yarn sandbox
To start up a JSON REPL for interacting with LSP servers, run:
$ yarn lsp-repl (LANGUAGE | CMD...)
## Self-hosting
Riju is hosted on [DigitalOcean](https://www.digitalocean.com/). Sign
up for an account and obtain a personal access token with read/write
access.
You will need some credentials. Start by selecting an admin password
to use for the DigitalOcean instance. Then generate two SSH key-pairs
(or you can use pre-existing ones). One is for the admin account on
DigitalOcean, while the other is to deploy from CI.
Install [Packer](https://www.packer.io/). Riju uses Packer to generate
DigitalOcean AMIs to ensure a consistent setup for the production
instance. Navigate to the `packer` subdirectory of this repository and
create a file `secrets.json`, changing the values as appropriate for
your setup:
```json
{
"digitalocean_api_token": "28114a9f0ed5637c576794138c71bf03d01946288a6922ea083f923ec883c431",
"admin_password": "R3iIhqs856N1sT5Mg6QFAsB5VPJrXS",
"admin_ssh_public_key_file": "/home/raxod502/.ssh/id_rsa.pub",
"deploy_ssh_public_key_file": "/home/raxod502/.ssh/id_rsa_riju_deploy.pub"
}
```
We'll start by setting up Riju without TLS. Run:
$ packer build -var-file secrets.json config.json
This will take about five minutes to generate a DigitalOcean AMI. Log
in to your DigitalOcean and launch an instance based on that AMI
(called an "Image" in the interface). The hosted version of Riju uses
the $10/month instance with 1 vCPU and 2GB memory / 50GB disk.
Root login is disabled on the AMI generated by Packer, but
DigitalOcean unfortunately doesn't give you any option to leave login
settings unchanged. I suggest setting the root password to a random
string. Make a note of the IP address of the droplet and SSH into it
under the admin user, using the key that you specified in
`secrets.json`. Now perform the following setup:
$ sudo passwd -l root
This completes the first DigitalOcean portion of deployment.
Now you'll need an account on [Docker Hub](https://hub.docker.com/),
which is where built images will be stored before they are pulled down
to DigitalOcean. Create a repository; the name will be
`your-docker-id/whatever-you-name-the-repo`. You'll need this below.
You're now ready to deploy. You can do this manually to begin with. In
the repository root on your local checkout of Riju, create a file
`.env`, changing the values as appropriate for your setup:
DOCKER_REPO=raxod502/riju
DOMAIN=riju.codes
DEPLOY_SSH_PRIVATE_KEY=/home/raxod502/.ssh/id_rsa_riju_deploy
Run:
$ docker login
$ make deploy
Riju should now be available online at your instance's public IP
address.
Next, let's configure TLS. You'll need to configure DNS for your
domain with a CNAME to point at your DigitalOcean instance. Once DNS
has propagated, SSH into your DigitalOcean instance and run:
$ sudo systemctl stop riju
$ sudo certbot certonly --standalone
$ sudo systemctl start riju
You'll also want to set up automatic renewal. This can be done by
installing the two Certbot hook scripts from Riju in the
`packer/resources` subdirectory. Here is one approach:
$ sudo wget https://github.com/raxod502/riju/raw/master/packer/resources/certbot-pre.bash
-O /etc/letsencrypt/renewal-hooks/pre/riju
$ sudo wget https://github.com/raxod502/riju/raw/master/packer/resources/certbot-post.bash
-O /etc/letsencrypt/renewal-hooks/post/riju
$ sudo chmod +x /etc/letsencrypt/renewal-hooks/pre/riju
$ sudo chmod +x /etc/letsencrypt/renewal-hooks/post/riju
At this point you should be able to visit Riju at your custom browser
with TLS enabled.
We can now set up CI. Sign up at [CircleCI](https://circleci.com/) and
enable automatic builds for your fork of Riju. You'll need to set the
following environment variables for the Riju project on CircleCI,
adjusting as appropriate for your own setup:
DOCKER_USERNAME=raxod502
DOCKER_PASSWORD=MIMvzS1bKPunDDSX4AJu
DOCKER_REPO=raxod502/riju
DOMAIN=riju.codes
DEPLOY_SSH_PRIVATE_KEY=b2Rs......lots more......SFAK
To obtain the base64-encoded deploy key, run:
$ cat ~/.ssh/id_rsa_riju_deploy | base64 | tr -d '\n'; echo
New pushes to master should trigger deploys, while pushes to other
branches should trigger just builds.

View File

@ -607,7 +607,7 @@ const testTypes: {
format: {
pred: ({ format }) => (format ? true : false),
},
lsp: { pred: ({ lsp }) => (lsp && lsp.code ? true : false) },
lsp: { pred: ({ lsp }) => (lsp ? true : false) },
};
function getTestList() {

View File

@ -1,22 +0,0 @@
{
"variables": {
"api_token": ""
},
"sensitive-variables": ["api_token"],
"builders": [
{
"type": "digitalocean",
"api_token": "{{user `api_token`}}",
"image": "ubuntu-20-04-x64",
"region": "sfo3",
"size": "s-1vcpu-1gb",
"ssh_username": "root"
}
],
"provisioners": [
{
"type": "shell",
"script": "provision-certbot.bash"
}
]
}

View File

@ -1,16 +1,16 @@
{
"variables": {
"api_token": "",
"digitalocean_api_token": "",
"admin_password": "",
"admin_ssh_public_key_file": "",
"deploy_ssh_public_key_file": "",
"docker_repo": "raxod502/riju"
},
"sensitive-variables": ["api_token", "admin_password"],
"sensitive-variables": ["digitalocean_api_token", "admin_password"],
"builders": [
{
"type": "digitalocean",
"api_token": "{{user `api_token`}}",
"api_token": "{{user `digitalocean_api_token`}}",
"image": "ubuntu-20-04-x64",
"region": "sfo3",
"size": "s-1vcpu-1gb",

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -euxo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get dist-upgrade -y
apt-get install -y certbot
rm -rf /var/lib/apt/lists/*

View File

@ -1,6 +1,3 @@
#!/usr/bin/env bash
set -e
set -o pipefail
systemctl start riju

View File

@ -1,6 +1,3 @@
#!/usr/bin/env bash
set -e
set -o pipefail
systemctl stop riju

View File

@ -13,15 +13,16 @@ if [[ -z "${DOMAIN}" ]]; then
fi
if [[ -z "${DEPLOY_SSH_PRIVATE_KEY}" ]]; then
if [[ -f "$HOME/.ssh/id_rsa_riju_deploy" ]]; then
DEPLOY_SSH_PRIVATE_KEY="$(< "$HOME/.ssh/id_rsa_riju_deploy")"
else
echo "environment variable not set: DEPLOY_SSH_PRIVATE_KEY"
fi
else
DEPLOY_SSH_PRIVATE_KEY="$(printf '%s\n' "${DEPLOY_SSH_PRIVATE_KEY}" | base64 -d)"
echo "environment variable not set: DEPLOY_SSH_PRIVATE_KEY" >&2
exit 1
fi
if [[ -f "${DEPLOY_SSH_PRIVATE_KEY}" ]]; then
DEPLOY_SSH_PRIVATE_KEY="$(< "${DEPLOY_SSH_PRIVATE_KEY}")"
fi
DEPLOY_SSH_PRIVATE_KEY="$(printf '%s\n' "${DEPLOY_SSH_PRIVATE_KEY}" | base64 -d)"
tag="$(date +%s%3N)-$(git branch --show-current)-$(git rev-parse @)"
if [[ -n "$(git status --porcelain)" ]]; then

View File

@ -23,7 +23,7 @@ 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/${ubuntu_ver}/packages-microsoft-prod.deb"
wget "https://packages.microsoft.com/config/ubuntu/${ubuntu_ver}/packages-microsoft-prod.deb"
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

View File

@ -104,7 +104,7 @@ ksh
# Limbo
gcc
libc6-dev-i386
libc6-dev:i386
libx11-dev:i386
libxext-dev:i386
linux-libc-dev:i386

View File

@ -11,23 +11,23 @@ latest_release() {
# Needed for project infrastructure
ver="$(latest_release watchexec/watchexec)"
wget -nv "https://github.com/watchexec/watchexec/releases/download/${ver}/watchexec-${ver}-x86_64-unknown-linux-gnu.deb"
wget "https://github.com/watchexec/watchexec/releases/download/${ver}/watchexec-${ver}-x86_64-unknown-linux-gnu.deb"
dpkg -i watchexec-*.deb
rm watchexec-*.deb
# Shared
ver="$(latest_release jgm/pandoc)"
wget -nv "https://github.com/jgm/pandoc/releases/download/${ver}/pandoc-${ver}-linux-amd64.tar.gz"
wget "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/fish.py -O /usr/local/bin/fish-lang
wget https://gist.githubusercontent.com/anonymous/6392418/raw/fish.py -O /usr/local/bin/fish-lang
sed -i 's:^#!.*:#!/usr/bin/env python3:' /usr/local/bin/fish-lang
chmod +x /usr/local/bin/fish-lang
# ABC
wget -nv https://homepages.cwi.nl/~steven/abc/implementations/abc.tar.gz
wget https://homepages.cwi.nl/~steven/abc/implementations/abc.tar.gz
mkdir /opt/abc
tar -xf abc.tar.gz -C /opt/abc --strip-components=1
chmod +x /opt/abc/abc /opt/abc/abckeys
@ -40,7 +40,7 @@ chmod +x /usr/local/bin/abc
rm abc.tar.gz
# Ada
wget -nv https://dl.bintray.com/reznikmm/ada-language-server/linux-latest.tar.gz
wget https://dl.bintray.com/reznikmm/ada-language-server/linux-latest.tar.gz
tar -xf linux-latest.tar.gz
mv linux/ada_language_server /usr/local/bin/ada_language_server
mv linux/*.so* /usr/lib/x86_64-linux-gnu/
@ -48,26 +48,26 @@ rm -rf linux linux-latest.tar.gz
# Ante
mkdir /opt/ante
wget -nv https://github.com/raxod502/riju-cdn/releases/download/ante-0.8.0-d2c43992e0c7a4c1942d5c097233f4f7638a1ee6/ante -O /opt/ante/ante
wget https://github.com/raxod502/riju-cdn/releases/download/ante-0.8.0-d2c43992e0c7a4c1942d5c097233f4f7638a1ee6/ante -O /opt/ante/ante
chmod +x /opt/ante/ante
wget -nv https://github.com/raxod502/riju-cdn/releases/download/ante-0.8.0-d2c43992e0c7a4c1942d5c097233f4f7638a1ee6/libantecommon.so -O /opt/ante/libantecommon.so
wget https://github.com/raxod502/riju-cdn/releases/download/ante-0.8.0-d2c43992e0c7a4c1942d5c097233f4f7638a1ee6/libantecommon.so -O /opt/ante/libantecommon.so
ln -s /opt/ante/ante /usr/local/bin/
wget -nv https://github.com/raxod502/riju-cdn/releases/download/ante-0.8.0-d2c43992e0c7a4c1942d5c097233f4f7638a1ee6/stdlib.tar.gz
wget https://github.com/raxod502/riju-cdn/releases/download/ante-0.8.0-d2c43992e0c7a4c1942d5c097233f4f7638a1ee6/stdlib.tar.gz
tar -xf stdlib.tar.gz -C /opt/ante
rm stdlib.tar.gz
# Ante (Cards)
wget -nv https://github.com/michaeldv/ante/raw/master/ante.rb -O /usr/local/bin/ante-cards
wget https://github.com/michaeldv/ante/raw/master/ante.rb -O /usr/local/bin/ante-cards
chmod +x /usr/local/bin/ante-cards
# APL
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}"
wget "ftp://ftp.gnu.org/gnu/apl/${file}"
dpkg -i apl_*_amd64.deb
rm apl_*_amd64.deb
# Boo
wget -nv https://github.com/boo-lang/boo/releases/download/unstable/boo-latest.zip
wget https://github.com/boo-lang/boo/releases/download/unstable/boo-latest.zip
unzip boo-latest.zip
mv boo-latest /usr/local/lib/boo
chmod +x /usr/local/lib/boo/booc /usr/local/lib/boo/booish
@ -75,19 +75,19 @@ ln -s /usr/local/lib/boo/booc /usr/local/lib/boo/booish /usr/local/bin/
# Clojure
ver="$(latest_release snoe/clojure-lsp)"
wget -nv "https://github.com/snoe/clojure-lsp/releases/download/${ver}/clojure-lsp"
wget "https://github.com/snoe/clojure-lsp/releases/download/${ver}/clojure-lsp"
chmod +x clojure-lsp
mv clojure-lsp /usr/local/bin/clojure-lsp
# D
wget -nv "$(curl -sSL https://dlang.org/download.html | grep -Eo '"http://[^"]+amd64.deb"' | tr -d '"')"
wget "$(curl -sSL https://dlang.org/download.html | grep -Eo '"http://[^"]+amd64.deb"' | tr -d '"')"
dpkg -i dmd_*.deb
rm dmd_*.deb
# Dhall
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}"
wget "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/local/bin/
@ -95,7 +95,7 @@ rm -rf dhall-json dhall-json-*-x86_64-linux.tar.bz2
# Dylan
ver="$(latest_release dylan-lang/opendylan)"
wget -nv "https://github.com/dylan-lang/opendylan/releases/download/${ver}/opendylan-$(grep -Eo '[0-9]+\.[0-9]+' <<< "$ver")-x86_64-linux.tar.bz2"
wget "https://github.com/dylan-lang/opendylan/releases/download/${ver}/opendylan-$(grep -Eo '[0-9]+\.[0-9]+' <<< "$ver")-x86_64-linux.tar.bz2"
tar -xf opendylan-*-x86_64-linux.tar.bz2
rm opendylan-*-x86_64-linux.tar.bz2
mv opendylan-* /opt/dylan
@ -103,21 +103,21 @@ ln -s /opt/dylan/bin/dylan-compiler /opt/dylan/bin/make-dylan-app /usr/local/bin
# Elixir
ver="$(latest_release elixir-lsp/elixir-ls)"
wget -nv "https://github.com/elixir-lsp/elixir-ls/releases/download/${ver}/elixir-ls.zip"
wget "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/local/bin/elixir-ls
rm elixir-ls.zip
# Elm
ver="$(latest_release elm/compiler)"
wget -nv "https://github.com/elm/compiler/releases/download/${ver}/binary-for-linux-64-bit.gz"
wget "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/local/bin/elm
# Emojicode
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"
wget "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/
@ -129,24 +129,24 @@ popd >/dev/null
rm -rf Emojicode-*-Linux-x86_64 Emojicode-*-Linux-x86_64.tar.gz
# Entropy
wget -nv http://danieltemkin.com/Content/Entropy/Entropy.zip
wget http://danieltemkin.com/Content/Entropy/Entropy.zip
unzip -d /opt/entropy Entropy.zip
rm Entropy.zip
# Erlang
wget -nv https://s3.amazonaws.com/rebar3/rebar3
wget https://s3.amazonaws.com/rebar3/rebar3
chmod +x rebar3
mv rebar3 /usr/local/bin/rebar3
# Euphoria
wget -nv http://www.rapideuphoria.com/31/euphor31.tar
wget http://www.rapideuphoria.com/31/euphor31.tar
mkdir /opt/euphoria
tar -xf euphor*.tar -C /opt/euphoria --strip-components=1
ln -s /opt/euphoria/bin/exu /usr/bin/
rm euphor*.tar
# Ezhil
wget -nv https://github.com/raxod502/riju-cdn/releases/download/ezhil-2017.08.19/ezhil.tar.gz
wget https://github.com/raxod502/riju-cdn/releases/download/ezhil-2017.08.19/ezhil.tar.gz
tar -xf ezhil.tar.gz
mv ezhil-* /opt/ezhil
cp /opt/ezhil/ezhili /opt/ezhil/ezhuthi/
@ -155,7 +155,7 @@ rm ezhil.tar.gz
# Factor
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"
wget "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/local/bin/factor-lang
@ -175,68 +175,68 @@ mv go/bin/gopls /usr/local/bin/gopls
rm -rf go
# GolfScript
wget -nv http://www.golfscript.com/golfscript/golfscript.rb -O /usr/local/bin/golfscript
wget http://www.golfscript.com/golfscript/golfscript.rb -O /usr/local/bin/golfscript
chmod +x /usr/local/bin/golfscript
# Grass
wget -nv http://www.blue.sky.or.jp/grass/grass.rb -O /usr/local/bin/grass
wget http://www.blue.sky.or.jp/grass/grass.rb -O /usr/local/bin/grass
chmod +x /usr/local/bin/grass
# Haskell
curl -sSL https://get.haskellstack.org/ | sh
wget -nv https://github.com/raxod502/riju-cdn/releases/download/brittany-0.12.1.1/brittany -O /usr/local/bin/brittany
wget https://github.com/raxod502/riju-cdn/releases/download/brittany-0.12.1.1/brittany -O /usr/local/bin/brittany
chmod +x /usr/local/bin/brittany
mkdir -p /opt/haskell
wget -nv https://github.com/raxod502/riju-cdn/releases/download/hie-1.4-a9005b2ba2050bdfdd4438f1d471a3f7985492cd-ghc8.6.5/hie -O /usr/local/bin/hie
wget -nv https://github.com/raxod502/riju-cdn/releases/download/hie-1.4-a9005b2ba2050bdfdd4438f1d471a3f7985492cd-ghc8.6.5/hoogle.hoo -O /opt/haskell/hoogle.hoo
wget https://github.com/raxod502/riju-cdn/releases/download/hie-1.4-a9005b2ba2050bdfdd4438f1d471a3f7985492cd-ghc8.6.5/hie -O /usr/local/bin/hie
wget https://github.com/raxod502/riju-cdn/releases/download/hie-1.4-a9005b2ba2050bdfdd4438f1d471a3f7985492cd-ghc8.6.5/hoogle.hoo -O /opt/haskell/hoogle.hoo
chmod +x /usr/local/bin/hie
# HCL/TOML/YAML
ver="$(latest_release sclevine/yj)"
wget -nv "https://github.com/sclevine/yj/releases/download/${ver}/yj-linux"
wget "https://github.com/sclevine/yj/releases/download/${ver}/yj-linux"
chmod +x yj-linux
mv yj-linux /usr/local/bin/yj
# HMMM
wget -nv https://www.cs.hmc.edu/~cs5grad/cs5/hmmm/code/hmmm -O /usr/local/bin/hmmm
wget https://www.cs.hmc.edu/~cs5grad/cs5/hmmm/code/hmmm -O /usr/local/bin/hmmm
chmod +x /usr/local/bin/hmmm
# 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"
wget "https://github.com/thesephist/ink/releases/download/${ver}/ink-linux"
wget "https://github.com/thesephist/ink/releases/download/${ver}/std.ink"
wget "https://github.com/thesephist/ink/releases/download/${ver}/str.ink"
chmod +x ink-linux
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-ikj-latest.tar.gz
wget https://ioke.org/dist/ioke-ikj-latest.tar.gz
tar -xf ioke-ikj-*.tar.gz -C /opt
rm ioke-ikj-*.tar.gz
ln -s /opt/ioke/bin/ioke /usr/local/bin/ioke
# J
wget -nv "$(curl -sSL https://code.jsoftware.com/wiki/System/Installation/J901/Debian | grep -F '<a' | grep 'amd64\.deb' | grep -Eo 'http://.+?\.deb')"
wget "$(curl -sSL https://code.jsoftware.com/wiki/System/Installation/J901/Debian | grep -F '<a' | grep 'amd64\.deb' | grep -Eo 'http://.+?\.deb')"
dpkg -i j*_amd64.deb
rm j*_amd64.deb
# Java
wget -nv https://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz
wget https://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz
mkdir /opt/jdt
tar -C /opt/jdt -xf jdt-language-server-latest.tar.gz
rm jdt-language-server-latest.tar.gz
# Kitten
wget -nv https://github.com/raxod502/riju-cdn/releases/download/kitten-0.1-bcaffa109c7f93959b3c2e9e7ae74462f840088d.ktn/kitten -O /usr/local/bin/kitten
wget -nv https://github.com/raxod502/riju-cdn/releases/download/kitten-0.1-bcaffa109c7f93959b3c2e9e7ae74462f840088d.ktn/common.ktn -O /usr/local/bin/common.ktn
wget https://github.com/raxod502/riju-cdn/releases/download/kitten-0.1-bcaffa109c7f93959b3c2e9e7ae74462f840088d.ktn/kitten -O /usr/local/bin/kitten
wget https://github.com/raxod502/riju-cdn/releases/download/kitten-0.1-bcaffa109c7f93959b3c2e9e7ae74462f840088d.ktn/common.ktn -O /usr/local/bin/common.ktn
chmod +x /usr/local/bin/kitten
# Kotlin
ver="$(latest_release JetBrains/kotlin)"
wget -nv "https://github.com/JetBrains/kotlin/releases/download/${ver}/kotlin-compiler-$(sed 's/^v//' <<< "$ver").zip"
wget "https://github.com/JetBrains/kotlin/releases/download/${ver}/kotlin-compiler-$(sed 's/^v//' <<< "$ver").zip"
unzip kotlin-*.zip
mv kotlinc /opt/kotlin
ln -s /opt/kotlin/bin/* /usr/local/bin/
@ -245,12 +245,12 @@ rm kotlin-*.zip
# Lua
ver="$(latest_release EmmyLua/EmmyLua-LanguageServer)"
wget -nv "https://github.com/EmmyLua/EmmyLua-LanguageServer/releases/download/${ver}/EmmyLua-LS-all.jar"
wget "https://github.com/EmmyLua/EmmyLua-LanguageServer/releases/download/${ver}/EmmyLua-LS-all.jar"
mv EmmyLua-LS-all.jar /usr/lib/EmmyLua-LS.jar
# MariaDB
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//sfo1.mirrors.digitalocean.com/mariadb/?serve" -O mariadb.tar.gz
wget "https://downloads.mariadb.org/f/mariadb-${ver}/bintar-linux-x86_64/mariadb-${ver}-linux-x86_64.tar.gz/from/http%3A//sfo1.mirrors.digitalocean.com/mariadb/?serve" -O mariadb.tar.gz
tar -xf mariadb.tar.gz
mkdir /opt/mariadb
mv mariadb-*-linux-x86_64/* /opt/mariadb/
@ -260,30 +260,30 @@ 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/${ver}/Omgrofl.jar" -O /opt/omgrofl/Omgrofl.jar
wget "https://github.com/OlegSmelov/omgrofl-interpreter/releases/download/${ver}/Omgrofl.jar" -O /opt/omgrofl/Omgrofl.jar
# Oz
ver="$(latest_release mozart/mozart2)"
wget -nv "https://github.com/mozart/mozart2/releases/download/${ver}/mozart2-$(sed 's/^v//' <<< "$ver")-x86_64-linux.deb"
wget "https://github.com/mozart/mozart2/releases/download/${ver}/mozart2-$(sed 's/^v//' <<< "$ver")-x86_64-linux.deb"
dpkg -i mozart2-*-x86_64-linux.deb
rm mozart2-*-x86_64-linux.deb
# PowerShell
ver="$(latest_release PowerShell/PowerShell)"
wget -nv "https://github.com/PowerShell/PowerShell/releases/download/${ver}/powershell-$(sed 's/^v//' <<< "$ver")-linux-x64.tar.gz"
wget "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/local/bin/pwsh
rm powershell-*.tar.gz
ver="$(latest_release PowerShell/PowerShellEditorServices)"
wget -nv "https://github.com/PowerShell/PowerShellEditorServices/releases/download/${ver}/PowerShellEditorServices.zip"
wget "https://github.com/PowerShell/PowerShellEditorServices/releases/download/${ver}/PowerShellEditorServices.zip"
unzip PowerShellEditorServices.zip
mv PowerShellEditorServices /opt/powershell-editor-services
rm PowerShellEditorServices.zip
# PSeInt
wget -nv "$(curl -sSL "http://pseint.sourceforge.net/index.php?page=descargas.php&os=lnx" | grep -Eo 'http://[^"]+l64[^"]+\.tgz\?download')" -O pseint.tgz
wget "$(curl -sSL "http://pseint.sourceforge.net/index.php?page=descargas.php&os=lnx" | grep -Eo 'http://[^"]+l64[^"]+\.tgz\?download')" -O pseint.tgz
tar -xf pseint.tgz
mv pseint/bin/pseint /usr/local/bin/
rm -rf pseint pseint.tgz
@ -291,7 +291,7 @@ rm -rf pseint pseint.tgz
# Python
xml="$(curl -sSL "https://pvsc.blob.core.windows.net/python-language-server-stable?restype=container&comp=list&prefix=Python-Language-Server-linux-x64")"
nupkg="$(echo "$xml" | grep -Eo 'https://[^<]+\.nupkg' | tail -n1)"
wget -nv "${nupkg}"
wget "${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/local/bin/Microsoft.Python.LanguageServer
@ -299,21 +299,21 @@ rm Python-Language-Server-linux-x64.*.nupkg
# ReasonML
ver="$(latest_release jaredly/reason-language-server)"
wget -nv "https://github.com/jaredly/reason-language-server/releases/download/${ver}/rls-linux.zip"
wget "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
# REBOL
file="$(curl -sSL http://www.rebol.com/downloads.html | sed '0,/x86-64/d' | grep -Eo 'downloads/[^"]+' | head -n1)"
wget -nv "http://www.rebol.com/${file}"
wget "http://www.rebol.com/${file}"
tar -xf rebol-core-*.tar.gz
mv rebol-core/rebol /usr/local/bin/
rm -rf rebol-core rebol-core-*.tar.gz
# Red
path="$(curl -sSL https://static.red-lang.org/download.html | grep -Eo '/dl/linux/[^"]+' | head -n1)"
wget -nv "https://static.red-lang.org/${path}" -O /usr/local/bin/red
wget "https://static.red-lang.org/${path}" -O /usr/local/bin/red
chmod +x /usr/local/bin/red
# Rust
@ -331,18 +331,18 @@ for file in /opt/rust/bin/*; do
done
# SETL
wget -nv https://setl.org/setl/bin/Linux-x86-64bit/setlbin.tgz
wget https://setl.org/setl/bin/Linux-x86-64bit/setlbin.tgz
tar -xf setlbin.tgz -C /usr/local/bin
# SQL
ver="$(latest_release lighttiger2505/sqls)"
wget -nv "https://github.com/lighttiger2505/sqls/releases/download/${ver}/sqls-${ver}-linux-amd64.tar.gz"
wget "https://github.com/lighttiger2505/sqls/releases/download/${ver}/sqls-${ver}-linux-amd64.tar.gz"
tar -xf sqls-*-linux-amd64.tar.gz
mv linux-amd64/sqls /usr/local/bin/
rm -rf linux-amd64 sqls-*-linux-amd64.tar.gz
# Swift
wget -nv https://github.com/raxod502/riju-cdn/releases/download/swift-5.2.4-20.04/swift.tar.gz -O swift.tar.gz
wget https://github.com/raxod502/riju-cdn/releases/download/swift-5.2.4-20.04/swift.tar.gz -O swift.tar.gz
mkdir /opt/swift
tar -xf swift.tar.gz -C /opt/swift --strip-components=2
ln -s /opt/swift/bin/swiftc /usr/local/bin/swiftc
@ -350,11 +350,11 @@ ln -s /opt/swift/bin/sourcekit-lsp /usr/local/bin/sourcekit-lsp
rm swift.tar.gz
# Unison
wget -nv https://github.com/raxod502/riju-cdn/releases/download/unison-M1l-232-519cbeb58704c1b9410c9386e492be59fd5a5334/unison -O /usr/local/bin/unison
wget https://github.com/raxod502/riju-cdn/releases/download/unison-M1l-232-519cbeb58704c1b9410c9386e492be59fd5a5334/unison -O /usr/local/bin/unison
chmod +x /usr/local/bin/unison
file="$(curl -fsSL http://velato.net/ | grep -Eo 'Velato[0-9_]+.zip')"
wget -nv "http://velato.net/Content/Velato/${file}"
wget "http://velato.net/Content/Velato/${file}"
unzip -d /opt/velato Velato*.zip
rm Velato*.zip

View File

@ -32,7 +32,7 @@ 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
wget https://www.ioccc.org/2012/tromp/tromp.c
clang tromp.c -Wno-everything -DInt=long -DX=8 -DA=500000 -o /usr/local/bin/tromp
rm tromp.c
@ -43,7 +43,7 @@ npm install
popd >/dev/null
# Clean
wget -nv "$(curl -sSL https://clean.cs.ru.nl/Download_Clean | grep linux/clean | grep -F 64.tar.gz | grep -Eo "https://[^>]+\.tar\.gz")"
wget "$(curl -sSL https://clean.cs.ru.nl/Download_Clean | grep linux/clean | grep -F 64.tar.gz | grep -Eo "https://[^>]+\.tar\.gz")"
mkdir /opt/clean
tar -xf clean*_64.tar.gz -C /opt/clean --strip-components=1
pushd /opt/clean >/dev/null
@ -67,7 +67,7 @@ rm -rf erlang_ls
git clone https://github.com/m-ender/hexagony.git /opt/hexagony
# Idris
wget -nv https://www.idris-lang.org/idris2-src/idris2-latest.tgz
wget https://www.idris-lang.org/idris2-src/idris2-latest.tgz
tar -xf idris2-latest.tgz
pushd Idris2-* >/dev/null
make bootstrap-build SCHEME=chezscheme PREFIX=/usr/local
@ -95,7 +95,7 @@ popd >/dev/null
rm -rf lazyk
# Limbo
wget -nv "$(curl -sSL http://www.vitanuova.com/inferno/downloads.html | grep -E 'inferno-[0-9]+\.tgz' | grep -Eo 'http://[^"]+')"
wget "$(curl -sSL http://www.vitanuova.com/inferno/downloads.html | grep -E 'inferno-[0-9]+\.tgz' | grep -Eo 'http://[^"]+')"
tar -xf inferno-*.tgz -C /usr/local
pushd /usr/local/inferno >/dev/null
sed -i 's/gcc/gcc -m32/g' makemk.sh
@ -119,7 +119,7 @@ rm -rf malbolge
# Oberon
file="$(curl -sSL https://miasap.se/obnc/ | grep -F obnc_ | grep -Eo 'obnc_[^"]+' | grep -v win | head -n1)"
wget -nv "https://miasap.se/obnc/downloads/${file}"
wget "https://miasap.se/obnc/downloads/${file}"
tar -xf obnc_*.tar.gz
pushd obnc-* >/dev/null
./build
@ -178,7 +178,7 @@ rm -rf slick
# Snobol
file="$(curl -sSL ftp://ftp.snobol4.org/snobol/ | grep -Eo 'snobol4-.*\.tar\.gz' | sort -rV | head -n1)"
wget -nv "ftp://ftp.snobol4.org/snobol/${file}"
wget "ftp://ftp.snobol4.org/snobol/${file}"
tar -xf snobol4-*.tar.gz
rm snobol4-*.tar.gz
pushd snobol4-* >/dev/null
@ -197,7 +197,7 @@ popd >/dev/null
# Tabloid
mkdir /opt/tabloid
pushd /opt/tabloid >/dev/null
wget -nv https://github.com/thesephist/tabloid/raw/master/static/js/lang.js
wget https://github.com/thesephist/tabloid/raw/master/static/js/lang.js
cat <<"EOF" >> lang.js
module.exports = { tokenize, Parser, Environment };
EOF
@ -214,7 +214,7 @@ popd >/dev/null
rm -rf TECOC
# Thue
wget -nv "$(curl -sSL https://catseye.tc/distribution/Thue_distribution | grep -Eo 'https://catseye.tc/distfiles/thue-[^"]+\.zip' | head -n1)"
wget "$(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
@ -224,7 +224,7 @@ popd >/dev/null
rm -rf thue-*
# Velato
wget -nv http://www.archduke.org/midi/asc2mid.c
wget http://www.archduke.org/midi/asc2mid.c
clang asc2mid.c -o /usr/local/bin/asc2mid
rm asc2mid.c