summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinstaller/opengnsys_git_installer.sh109
1 files changed, 109 insertions, 0 deletions
diff --git a/installer/opengnsys_git_installer.sh b/installer/opengnsys_git_installer.sh
new file mode 100755
index 00000000..55b2cd61
--- /dev/null
+++ b/installer/opengnsys_git_installer.sh
@@ -0,0 +1,109 @@
+#!/bin/bash
+#/**
+#@file opengnsys_git_installer.sh
+#@brief Script para la instalación del repositorio git (provisional)
+#@return
+#@exception 1 Sólo ejecutable por root
+#@exception 2 No encuentra la clave pública dentro del ogLive por defecto (usar setsslkey)
+#@note Se crean dos repositorio git separados para linux y windows
+#*/
+OGDIR=/opt/opengnsys
+OGDIRIMAGES=$OGDIR/images
+BASEDIR=base.git
+TMPGIT=/tmp/git
+ENGINECFG=$OGDIR/client/etc/engine.cfg
+
+PATH=$PATH:$OGDIR/bin
+TFTPDIR=$OGDIR/tftpboot
+INITRD=oginitrd.img
+TMPDIR=/tmp/oglive$$
+SSHUSER=opengnsys
+SSHDIR="/home/$SSHUSER/.ssh"
+
+# Control básico de errores.
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: sólo ejecutable por root" >&2
+ exit 1
+fi
+
+# Autenticación del usuario opengnsys con clave pública desde los ogLive
+# Requiere que todos los ogLive tengan la misma clave publica (utilizar setsslkey)
+
+# Tomamos la clave publica del cliente por defecto
+OGLIVEDEFAULT=$(oglivecli list |awk -v NUM=$(oglivecli get-default) '{if ($1 == NUM) print $2}')
+CLIENTINITRD="$TFTPDIR/$OGLIVEDEFAULT/$INITRD"
+
+# Si me salgo con error borro el directorio temporal
+trap "rm -rf $TMPDIR 2>/dev/null" 1 2 3 6 9 15 0
+
+if [ -r "$CLIENTINITRD" ]; then
+ mkdir -p $TMPDIR
+ cd $TMPDIR || exit 3
+ gzip -dc "$CLIENTINITRD" | cpio -im
+ if [ -r scripts/ssl/id_rsa.pub ]; then
+ PUBLICKEY=$(cat scripts/ssl/id_rsa.pub 2>/dev/null)
+ fi
+fi
+# Si la clave publica no existe me salgo con error
+if [ "$PUBLICKEY" == "" ]; then
+ echo "No se encuentra clave pública dentro del ogLive:"
+ echo " Los oglive deben tener la misma clave pública (utilizar setsslkey)"
+ exit 2
+fi
+
+[ -d $SSHDIR ] || mkdir -p $SSHDIR
+echo $PUBLICKEY >> $SSHDIR/authorized_keys
+chmod 400 $SSHDIR/authorized_keys
+chown -R $SSHUSER:$SSHUSER $SSHDIR
+
+# Configuramos el servicio ssh para que permita el acceso con clave pública
+echo " Configuramos el servicio ssh para que permita el acceso con clave pública."
+sed -i s/"^.*PubkeyAuthentication.*$"/"PubkeyAuthentication yes"/ /etc/ssh/sshd_config
+systemctl reload ssh
+
+# Instalamos git
+apt install git
+
+# Para que el usuario sólo pueda usar git (no ssh)
+SHELL=$(which git-shell)
+sudo usermod -s $SHELL opengnsys
+
+# Configuramos git
+git config --global user.name "OpenGnsys"
+git config --global user.email "OpenGnsys@opengnsys.com"
+
+# Creamos repositorio
+echo "Creamos repositorio de GIT."
+git init --bare $OGDIRIMAGES/$BASEDIR
+
+# Clonamos y realizamos primer commit
+git clone $OGDIRIMAGES/$BASEDIR $TMPGIT
+cd $TMPGIT
+git commit --allow-empty -m "Iniciamos repositorio."
+git push
+
+echo "Creamos los árboles de trabajo para linux y windows."
+cd $OGDIRIMAGES/$BASEDIR
+git branch windowsBare
+git branch linuxBare
+
+git worktree add $OGDIRIMAGES/windows.git windowsBare
+git worktree add $OGDIRIMAGES/linux.git linuxBare
+
+# No sé si es necesario. Probar a comentarlo
+for DIR in windows.git linux.git; do
+ cd $OGDIRIMAGES/$DIR
+ BARE=${DIR%.git}Bare
+ git commit --allow-empty -m "Iniciamos repositorio."
+ git push --set-upstream origin $BARE
+ git push
+done
+
+echo "Creamos los directorios de las ACL"
+# Creamos los directorios para las ACL
+mkdir $OGDIRIMAGES/WinAcl $OGDIRIMAGES/LinAcl
+
+# Damos permiso al usurio opengnsys
+for DIR in base.git linux.git windows.git LinAcl WinAcl; do
+ chown -R opengnsys:opengnsys $OGDIRIMAGES/$DIR
+done