summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2021-07-04 09:56:01 +0200
committerIrina Gómez <irinagomez@us.es>2021-07-04 09:56:01 +0200
commit314ecd5be6e2c1e818316b3fdec469be571639cc (patch)
treea8994971feee1f516ff0b80b05bded988c0cc12e
parent2d03ee5a0b6a9a115719f48ba96c3d050c631f66 (diff)
#918 Script to prepare the OpenGnsys repository to use images synchronized with git.
Provisional, if the behavior is included by default it should be done in the normal installation file. Windows and Linux images must go in separate repositories. By mistake there is a single repository with two working trees, one for Linux and the other for Windows. It is not corrected now because the scripts are prepared for this configuration.
-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