#!/bin/sh # Fallar ante cualquier error set -e # Por ahora sólo soportamos x86_64 uname -m | grep -q x86_64 || exit 1 # Sutty tiene que estar clonada en el directorio anterior test -d ../sutty/.git || git clone git@0xacab.org:sutty/sutty.git ../sutty ENTORNO=../hain correr() { echo "> $1" # Necesitamos bubblewrap type bwrap >/dev/null || exit 1 mkdir -p "$ENTORNO/home" # migrar de versiones anteriores de hainish test -d "$ENTORNO$HOME" && mv "$ENTORNO$HOME" "$ENTORNO/home/suttier" env -i \ TERM="$TERM" \ USER="$USER" \ HOME="/home/suttier" \ RAILS_ENV=development \ HAIN_ENV=true \ bwrap \ --unshare-user-try \ --unshare-ipc \ --unshare-pid \ --unshare-uts \ --unshare-cgroup-try \ --bind "$ENTORNO" / \ --bind .. /Sutty \ --ro-bind /etc/hosts /etc/hosts \ --ro-bind /etc/passwd /etc/passwd \ --ro-bind /etc/group /etc/group \ --ro-bind /etc/resolv.conf /etc/resolv.conf \ --ro-bind /etc/localtime /etc/localtime \ --dev-bind /dev /dev \ --dev-bind /sys /sys \ --dev-bind /proc /proc \ --dev-bind /tmp /tmp \ /bin/sh -l -c "$1" } crear_entorno() { if test -d "$ENTORNO"; then echo "El entorno ya existe en $ENTORNO" return fi ALPINE="3.13.5" ALPINE_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE%.*}/releases/x86_64/alpine-minirootfs-${ALPINE}-x86_64.tar.gz" # Definir si vamos a usar wget o curl type wget >/dev/null && download="wget -O -" type busybox >/dev/null && download="busybox wget -O -" type curl >/dev/null && download="curl" # Si no hay ninguno de los dos, salir test -z "${download}" && exit 1 # Darle permiso de lectura a otres también umask 022 # Crear el directorio de trabajo mkdir "$ENTORNO" # Descargar y extraer Alpine ${download} "${ALPINE_URL}" | tar xz --directory "$ENTORNO" # Directorio de instalación de las gemas install -dm 755 -o "${USER}" -g "$(id -g "${USER}")" "$ENTORNO/opt/sutty" # Instalar las dependencias echo "Instalando paquetes..." correr "apk add --no-cache \ libxslt libxml2 libssh2 postgresql-libs sqlite-libs \ tzdata bash ffmpeg vips file git make \ ruby ruby-bundler ruby-json ruby-bigdecimal ruby-irb ruby-rake \ nodejs yarn \ gnutls-utils nghttp2 \ less" # Habilitar la instalación de gemas binarias sed -re "s/#(@platforms = )/\1/" -i "$ENTORNO/usr/lib/ruby/2.7.0/rubygems.rb" echo "Instalando gemas..." correr "cd /Sutty/sutty && \ bundle config set path /opt/sutty && \ bundle install" echo "Instalando node_modules..." correr "cd /Sutty/sutty && yarn install" } crear_entorno correr "${1:-sh}"