take 2
This commit is contained in:
parent
b90e65fd19
commit
219fbbf05f
1 changed files with 76 additions and 31 deletions
79
haini.sh
79
haini.sh
|
@ -8,46 +8,91 @@ uname -m | grep -q x86_64 || exit 1
|
||||||
# Sutty tiene que estar clonada en el directorio anterior
|
# Sutty tiene que estar clonada en el directorio anterior
|
||||||
test -d ../sutty/.git || git clone git@0xacab.org:sutty/sutty.git ../sutty
|
test -d ../sutty/.git || git clone git@0xacab.org:sutty/sutty.git ../sutty
|
||||||
|
|
||||||
|
ENTORNO=../hain
|
||||||
|
|
||||||
|
function correr() {
|
||||||
|
echo "> $1"
|
||||||
|
|
||||||
|
# Necesitamos bubblewrap
|
||||||
|
type bwrap >/dev/null || exit 1
|
||||||
|
|
||||||
|
env -i \
|
||||||
|
USER="$USER" \
|
||||||
|
HOME="$HOME" \
|
||||||
|
RAILS_ENV=development \
|
||||||
|
bwrap \
|
||||||
|
--unshare-user-try \
|
||||||
|
--unshare-ipc \
|
||||||
|
--unshare-pid \
|
||||||
|
--unshare-uts \
|
||||||
|
--unshare-cgroup-try \
|
||||||
|
--bind "$ENTORNO" / \
|
||||||
|
--bind .. /Sutty \
|
||||||
|
--ro-bind /etc/host.conf /etc/host.conf \
|
||||||
|
--ro-bind /etc/hosts /etc/hosts \
|
||||||
|
--ro-bind /etc/networks /etc/networks \
|
||||||
|
--ro-bind /etc/passwd /etc/passwd \
|
||||||
|
--ro-bind /etc/group /etc/group \
|
||||||
|
--ro-bind /etc/nsswitch.conf /etc/nsswitch.conf \
|
||||||
|
--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"
|
||||||
|
}
|
||||||
|
|
||||||
|
function crear_entorno() {
|
||||||
|
if test -d "$ENTORNO"; then
|
||||||
|
echo "El entorno ya existe en $ENTORNO"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
# La versión de Alpine es el segundo argumento
|
# La versión de Alpine es el segundo argumento
|
||||||
ALPINE="${2:-3.13.5}"
|
ALPINE="${2:-3.13.5}"
|
||||||
ALPINE_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE%.*}/releases/x86_64/alpine-minirootfs-${ALPINE}-x86_64.tar.gz"
|
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
|
# Definir si vamos a usar wget o curl
|
||||||
type wget >/dev/null && download="wget -O -"
|
type wget >/dev/null && download="wget -O -"
|
||||||
|
type busybox >/dev/null && download="busybox wget -O -"
|
||||||
type curl >/dev/null && download="curl"
|
type curl >/dev/null && download="curl"
|
||||||
|
|
||||||
# Si no hay ninguno de los dos, salir
|
# Si no hay ninguno de los dos, salir
|
||||||
test -z "${download}" && exit 1
|
test -z "${download}" && exit 1
|
||||||
|
|
||||||
# Necesitamos proot
|
|
||||||
type proot >/dev/null || exit 1
|
|
||||||
|
|
||||||
# Necesario para algunas distribuciones
|
|
||||||
export PROOT_NO_SECCOMP=1
|
|
||||||
|
|
||||||
# El entorno de trabajo es desarrollo
|
|
||||||
export RAILS_ENV=development
|
|
||||||
|
|
||||||
# Darle permiso de lectura a otres también
|
# Darle permiso de lectura a otres también
|
||||||
umask 022
|
umask 022
|
||||||
|
|
||||||
# Crear el directorio de trabajo
|
# Crear el directorio de trabajo
|
||||||
mkdir ../hain && cd ../hain
|
mkdir "$ENTORNO"
|
||||||
|
|
||||||
# Descargar y extraer Alpine
|
# Descargar y extraer Alpine
|
||||||
${download} "${ALPINE_URL}" | tar xvzf -
|
${download} "${ALPINE_URL}" | tar xz --directory "$ENTORNO"
|
||||||
|
|
||||||
# Directorio de instalación de las gemas
|
# Directorio de instalación de las gemas
|
||||||
install -dm 755 -o ${USER} -g $(id -g ${USER}) opt/sutty
|
install -dm 755 -o ${USER} -g $(id -g ${USER}) "$ENTORNO/opt/sutty"
|
||||||
|
|
||||||
# Instalar las dependencias
|
# Instalar las dependencias
|
||||||
proot -S . /sbin/apk add --no-cache \
|
echo "Instalando paquetes..."
|
||||||
|
correr "apk add --no-cache \
|
||||||
libxslt libxml2 libssh2 postgresql-libs sqlite-libs \
|
libxslt libxml2 libssh2 postgresql-libs sqlite-libs \
|
||||||
tzdata bash ffmpeg vips file git make \
|
tzdata bash ffmpeg vips file git make \
|
||||||
ruby ruby-bundler ruby-json ruby-bigdecimal ruby-irb ruby-rake
|
ruby ruby-bundler ruby-json ruby-bigdecimal ruby-irb ruby-rake \
|
||||||
|
nodejs yarn \
|
||||||
|
gnutls-utils nghttp2"
|
||||||
|
|
||||||
# Habilitar la instalación de gemas binarias
|
# Habilitar la instalación de gemas binarias
|
||||||
sed -re "s/#(@platforms = )/\1/" -i usr/lib/ruby/2.7.0/rubygems.rb
|
sed -re "s/#(@platforms = )/\1/" -i "$ENTORNO/usr/lib/ruby/2.7.0/rubygems.rb"
|
||||||
|
|
||||||
# Instalar las gemas como root
|
echo "Instalando gemas..."
|
||||||
proot -R . -w ../sutty /usr/bin/bundle install --path /opt/sutty
|
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}"
|
||||||
|
|
Loading…
Reference in a new issue