summaryrefslogtreecommitdiffstats
path: root/installer/opengnsys_git_installer.sh
blob: 55b2cd61281274e276315ef70fa12497f1115210 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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