From 314ecd5be6e2c1e818316b3fdec469be571639cc Mon Sep 17 00:00:00 2001 From: Irina Gómez Date: Sun, 4 Jul 2021 09:56:01 +0200 Subject: #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. --- installer/opengnsys_git_installer.sh | 109 +++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100755 installer/opengnsys_git_installer.sh 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 -- cgit v1.2.3-18-g5258