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
|