Puesta en producción
Migasfree en producción
El valor del producto se halla en la producción.
—Albert Einstein
Si te has decidido a instalar en producción el servidor migasfree, debes cambiar
las contraseñas a los usuarios que vienen por defecto, y preparar un
backup de la base de datos y de la carpeta /var/migasfree
.
Recomendamos siempre instalar el servidor migasfree sobre un S.O. Debian, pero si eres un aventurero, puedes atreverte a emplear otro. Eso sí, igual tienes que generar los paquetes tú mismo. En Empaquetando migasfree tienes instrucciones de cómo obtenerlos.
Instalación
# wget -O - http://migasfree.org/pub/install-server | bash
Configuración del servidor
Crea el fichero /etc/migasfree-server/settings.py
con el siguiente
contenido (no te olvides de sustituir la password por la del usuario
migasfree de Postgresql):
MIGASFREE_ORGANIZATION="My Organization" DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql_psycopg2", "NAME": "migasfree", "USER": "migasfree", "PASSWORD": "mipassword", "HOST": "", "PORT": "", } }
Por motivos de seguridad, dale permisos de sólo lectura al usuario www-data
:
# chmod 400 /etc/migasfree-server/settings.py # chown www-data:www-data /etc/migasfree-server/settings.py
Este es el fichero de configuración del servidor migasfree. Hay diversas variables que se pueden configurar aquí para modificar el comportamiento de migasfree.
Si necesitas cambiar la password del usuario migasfree en postgresql, haz esto:
# su postgres $ psql -c "ALTER USER migasfree WITH PASSWORD 'mipassword';" $ exit
Nota
Para una personalización más avanzada, mira los Ajustes del servidor migasfree.
Cambiando las contraseñas
- Accede a
Configuracion-Usuarios
y verás los perfiles de usuarios. - Edita el usuario
admin
. Cámbiale la contraseña y guárdalo. - Edíta el resto de perfiles de usuario y deshabilítalos o cámbiales la contraseña.
La explicación de los usuarios y sus grupos lo has visto ya en La configuración del sistema migasfree
Servicio de caché de paquetes
Montar un caché de paquetes para disminuir el tráfico de Internet es habitual. Su funcionamiento es muy sencillo. Cuando un equipo necesita descargar un paquete de Internet, lo solicita al caché. Si el servicio de caché no lo tiene ya almacenado, lo descargará de Internet, lo almacenará y se lo ofrecerá al equipo. Si otro equipo necesita ese mismo paquete, como ya está en la caché ya no se producirá tráfico Internet, sino que el servicio de caché lo ofrecerá directamente al equipo.
Puedes instalar el servicio de caché de paquetes en el equipo donde has instalado el servidor migasfree, o en otro servidor.
Por ejemplo puedes instalar apt-cacher-ng
.
# apt-get install apt-cacher-ng
Configura el usuario para la administración del servicio.
# nano /etc/apt-cacher-ng/security.conf
Descomenta la línea que empieza por AdminAuth y modifica el usuario y la contraseña:
AdminAuth: <usuario>:<contraseña>
Reinicia el servicio.
#service apt-cacher-ng restart
Por defecto el puerto del servicio apt-cacher-ng
es el 3142. Accede a la
página http:<miservidor>:3142 para la administración del servicio de caché.
Hasta aquí hemos instalado y configurado el caché en el servidor.
Para la configuración de los clientes, debes crear el fichero
/etc/apt/apt.conf.d/02proxy
con el siguiente contenido:
Acquire::http { Proxy "http://<miservidor>:3142"; };
Para hacerlo correctamente, modifica el paquete acme-migasfree-client
añadiéndo este fichero al paquete.
Otra manera de configurar los clientes es haciendo uso del ajuste
Package_Proxy_Cache
de los Ajustes del cliente migasfree. La
diferencia entre éste método y el anterior es que el primero hará uso del
servicio del caché de paquetes tanto cuando ejecutes el comando migasfree
en los clientes, como cuando ejecutes el gestor de paquetes (apt-get).
En cambio, en el segundo método sólo usará el servicio de caché al ejecutar el
comando migasfree.
Puede consultar el manual de apt-cacher-ng para una configuración más avanzada del servicio de caché.
Backups
A continuación, te sugiero un manera de hacer los backups.
Dump de la base de datos
Para hacer el dump de la base de datos, crea el fichero
/var/migasfree/dump/migasfree-dump.sh
(deberás modificar
“mipassword” por la del usuario migasfree en posgresql):
#!/bin/bash export PGPASSWORD=mipassword pg_dump migasfree -U migasfree > /var/migasfree/dump/migasfree.sql
Crea también el fichero /var/migasfree/dump/migasfree-restore.sh
para el caso que tengas que restaurar un dump de la base de datos:
#!/bin/bash if [ ! "$UID" = "0" ] ; then echo "debes ejecutar como root" fi /etc/init.d/apache2 stop echo "borrando BD..." echo "DROP DATABASE migasfree;" | su postgres -c psql - echo "creando BD migasfree..." su postgres -c "createdb -W -E utf8 -O migasfree migasfree" - echo "restore dump..." su postgres -c "psql -U migasfree -f /var/migasfree/dump/migasfree.sql" - /etc/init.d/apache2 start
Finalmente, ponemos permisos de ejecución a los scripts:
chmod 700 /var/migasfree/dump/migasfree-dump.sh chmod 700 /var/migasfree/dump/migasfree-restore.sh
Tarea periódica
Para programar una tarea que se ejecute periódicamente realizando el
dump de la base de datos y la copia de los ficheros de los
repositorios, crea el fichero /var/migasfree/dump/migasfree-backup.sh
con el siguiente contenido:
# DUMP de la BD postgresql de migasfree /var/migasfree/dump/migasfree-dump.sh # BACKUP FICHEROS # (aquí se debe programar el backup de /var/migasfree con rsync p.e.)
Cámbiale los permisos:
chmod 700 /var/migasfree/dump/migasfree-backup.sh
Edita como root crontab:
crontab -e
y programa la tarea para que se ejecute diariamente a las 23:30 p.e. añadiendo la siguiente línea a crontab:
30 23 * * * /var/migasfree/dump/migasfree-backup.sh
Etiquetando los clientes
Para facilitar la atención a los usuarios cuando tengan un problema, es conveniente imprimir y pegar físicamente la etiqueta que identifica inequívocamente a cada equipo, ejecutando desde el cliente el comando:
migasfree-label
Consulta el ajuste MIGASFREE_HELP_DESK
de los Ajustes del servidor migasfree
Nota
También puedes imprimir la
Etiqueta
desplegando el menú del ordenador en el servidor.
Creando tu propia Distro
No tratéis de guiar al que pretende elegir por sí su propio camino.
—William Shakespeare
Una Distro no es más que un conjunto de software seleccionado y preparado para instalarse fácilmente.
Existen herramientas que te permiten personalizar una Distribución Linux fácilmente sin grandes complicaciones, y también puedes crear tu Linux desde cero, eso sí, armándote de paciencia.
Pero como te decía, para crear tu Distribución personalizada debes:
- Seleccionar el software que incluirás en ella.
- Preparar un sistema sencillo para instalar todo ese software.
En este capítulo te describo diferentes opciones que he utilizado para realizar estas dos tareas.
La selección de paquetes
La idea principal al trabajar con migasfree es que todo debe ser empaquetado, incluida la personalización del software. Así que debes elegir qué software incluirá tu Distribución y crear los paquetes que la personalicen.
El método que te expongo a continuación es muy versátil, y es el de utilizar migasfree para especificar esta selección de paquetes.
Se trata de usar los campos del Repositorio
:
default preinclude packages
. Lista de paquetes que configuran repositorios externos.default include packages
: Lista de paquetes a instalar.default exclude packages
: Lista de paquetes a desinstalar.
y asignar al Repositorio
el Atributo
SET-ALL SYSTEMS
No tienes por qué indicar todos los paquetes. Como vamos a partir de una Distribución generalista como Debian, Ubuntu, RedHat, etc. indicamos sólo los paquetes que queremos añadir o eliminar a la Distro.
También puedes hacer una selección de los paquetes que compondrían unos “sabores”,
y en vez de usar el Atributo
SET-ALL SYSTEMS
, crear una Etiqueta
por sabor
y asignarla en diferentes Repositorios
La creación de etiquetas la viste en La configuración del sistema migasfree
La instalación de tu Distribución
Ahora que has elegido y creado uno o varios Repositorios
en migasfree con
los paquetes que debe llevar tu Distribución, es el momento de ver varios
métodos para instalar tu Distribución personalizada y controlada desde un
servidor migasfree.
El método de “andar por casa”
Recomendado si no quieres complicarte la vida y tienes pocos equipos en los que instalar tu Distro:
- Instala la Distribución generalista en el equipo.
- Instala y configura el cliente migasfree. Si es preciso registra el ordenador mediante
migasfree --register
.- Ejecuta
migasfree-tags --set
.
Generando un Live/CD
Es el método recomendado si la instalación la puede realizar cualquier persona. Se trata de hacer básicamente lo mismo que en el método anterior pero sustituyendo el primer paso por el empleo de un Live/CD en un entorno “chroot”.
- Prepara un entorno chroot con el Live/CD de partida.
- Instala y configura el cliente migasfree en el entorno chroot. Si es preciso registra el ordenador mediante
migasfree --register
.- Ejecuta
migasfree-tags --set
dentro del entorno.- Finalmente genera una imagen ISO del entorno
Puedes ver un ejemplo de cómo se hace en vitalinux con vx-create-iso.
Clonación de imagen
Es el método que usamos en AZLinux y está recomendado si tienes muchos equipos y eres tú quien hace las instalaciones.
- Instala la Distribución generalista en un equipo que hará de “master”.
- Instala y configura el cliente migasfree. Si es preciso registra el ordenador mediante
migasfree --register
.- Ejecuta
migasfree-tags --set
.- Prepara el equipo para clonar y crea una imagen para su clonación.
- Clona la imagen en los equipos.
Reinstalando la selección de paquetes
Una vez instalada tu Distro, en cualquier momento podrás cambiar de sabor
ejecutando otra vez migasfree-tags --set
. Observa que has podido decidir
cambiar la selección de paquetes en migasfree entre tanto, esto te permite ir
probando tu Distro fácilmente mientras aún la estás definiendo.
FAQ
Uno reconoce a las personas inteligentes por sus respuestas. A los sabios se los reconoce por sus preguntas.
—Naguib Mahfuz
Sobre el servidor migasfree
Cuando accedo al servidor web me aparece: Server error (500)
Causa
Este error puede estar motivado por múltiples causas. La más probable
es que la contraseña del usuario migasfree
en Posgresql
no sea la
misma que la que está configurada en el servidor.
Solución
Comprueba la contraseña que tienes en /etc/migasfree-server/settings.py
es la misma que la del usuario migasfree
en Postgresql. Si no existe
este fichero, la contraseña por defecto es migasfree
.
Si necesitas cambiarla, haz esto:
# su postgres # psql # ALTER USER migasfree WITH PASSWORD 'mipassword';
¿Cómo hago una propiedad para obtener el contexto LDAP de un usuario?
Necesitas que los clientes tengan instalado el paquete python-ldap
.
En el servidor tendrás que crear una nueva propiedad:
Prefijo:
CTX
Nombre:
CONTEXTO LDAP
Lenguaje:
python
Clase:
Agrega por la derecha
Código:
import sys import ldap import migasfree_client.utils LDAP_SERVER = 'ldap.miservidor.es' LDAP_BASE = '' LDAP_SCOPE = ldap.SCOPE_SUBTREE def get_ldap_property(filter_str, property_str, base = LDAP_BASE, scope = LDAP_SCOPE): global global_ldap_object try: _result = global_ldap_object.search_s(base, scope, filter_str, [property_str]) except ldap.LDAPError, e: print e sys.exit(errno.ENOMSG) # no result if _result == None or not _result: print 'No result in LDAP search' sys.exit(errno.ENOMSG) # no result if property_str == 'dn': # special case: dn is getted in other field return _result[0][0] try: _ret = _result[0][1][property_str] if len(_ret) == 1: # only one result? return _ret[0] except KeyError: return '' # empty value return _ret def get_dn(user): # cn=oXXXXx,ou=XXXX,o=XXXXXX return get_ldap_property('(cn=%s)' % user, 'dn') def get_context(user): result = get_dn(user).split(',') ret = '' for item in result[:]: tmp = item.split('=') if tmp[0] == 'ou' or tmp[0] == 'o': ret = '%s%s.' % (ret, tmp[1]) return ret[:-1] # remove trailing '.' def run(): global global_ldap_object global_ldap_object = ldap.initialize('ldap://%s:389' % LDAP_SERVER) user=migasfree_client.utils.get_current_user().split("~")[0] print get_context(user) if __name__ == '__main__': run()
¿Cómo hago una propiedad para obtener los grupos LDAP de un usuario?
Necesitas que los clientes tengan instalado el paquete python-ldap. En el servidor tendrás que crear una nueva propiedad:
Prefijo:
GRP
Nombre:
GRUPOS LDAP
Lenguaje:
python
Clase:
Lista
Código:
import sys import ldap import migasfree_client.utils LDAP_SERVER = 'ldap.miservidor.es' LDAP_BASE = '' LDAP_SCOPE = ldap.SCOPE_SUBTREE def get_ldap_property(filter_str, property_str, base = LDAP_BASE, scope = LDAP_SCOPE): global global_ldap_object try: _result = global_ldap_object.search_s(base, scope, filter_str, [property_str]) except ldap.LDAPError, e: print e sys.exit(errno.ENOMSG) # no result if _result == None or not _result: print 'No result in LDAP search' sys.exit(errno.ENOMSG) # no result if property_str == 'dn': # special case: dn is getted in other field return _result[0][0] try: _ret = _result[0][1][property_str] if len(_ret) == 1: # only one result? return _ret[0] except KeyError: return '' # empty value return _ret def get_groups(user): # TODO only groups of organization or all of them? _result = get_ldap_property('(cn=%s)' % user, 'groupMembership') if not _result: return '' # no groups found # only one result? if type(_result) is str: _result = [_result] _ret = '' for _item in _result: _t = _item.split(',') if '=' in _t[0]: _ret = '%s%s, ' % (_ret, _t[0].split('=')[1]) return _ret[:-2] # remove trailing ', def run(): global global_ldap_object global_ldap_object = ldap.initialize('ldap://%s:389' % LDAP_SERVER) user=migasfree_client.utils.get_current_user().split("~")[0] print get_groups(user), if __name__ == '__main__': run()
Sobre el cliente migasfree
El cliente migasfree devuelve el mensaje: “firma no válida”
Causa
Las claves almacenadas en el cliente no coinciden con la versión indicada
en /etc/migasfree.conf
.
Solución
Borra las claves del equipo cliente.
Para la versión de migasfree-client 4.6 ó inferior usa:
# rm /root/.migasfree-keys/*
Para la versión de migasfree-client 4.7 ó superior usa:
# rm -rf /var/migasfree-client/keys/[server]/*Nota
Si es necesario, vuelve a registrar el cliente ejecutando:
migasfree --register
.
Imposible obtener /PKGS/binary-amd64/Packages 404 Not Found
Causa
Por defecto los repositorios en el servidor se generan para la arquitectura i386.
Solución
Accede a Configuracion - p.m.s. - apt-get
y modifica el campo
crear repositorio
de esta manera:
cd %PATH% mkdir -p %REPONAME%/PKGS/binary-i386/ mkdir -p %REPONAME%/PKGS/binary-amd64/ mkdir -p %REPONAME%/PKGS/sources/ cd .. dpkg-scanpackages -m dists/%REPONAME%/PKGS /dev/null | gzip -9c > dists/%REPONAME%/PKGS/binary-i386/Packages.gz dpkg-scanpackages -m dists/%REPONAME%/PKGS /dev/null | gzip -9c > dists/%REPONAME%/PKGS/binary-amd64/Packages.gz dpkg-scansources dists/%REPONAME%/PKGS /dev/null | gzip -9c > dists/%REPONAME%/PKGS/sources/Sources.gz
No se consige ejecutar el cliente de migasfree en un cron
.
Causa
Las variables de entorno no están disponibles.
Solución
En vez de programar el cron así:
00 07 * * * root /usr/bin/migasfree --update
debemos forzar el entorno de usuario de esta forma:
00 07 * * * root su -c 'migasfree --update' --login
Resolución de problemas
Un problema deja de serlo si no tiene solución.
—Eduardo Mendoza
A menudo, puede ocurrir que migasfree no esté funcionando como se espera. Para
obtener más información y averiguar qué te puede estar ocurriendo, puedes poner
tanto al cliente como al servidor en modo DEBUG
.
Cliente en modo DEBUG
Simplemente debes poner el ajuste Debug
a True en los
Ajustes del cliente migasfree.
Cuando ejecutes migasfree --update
en este modo desde una consola, verás en
la salida estándar más información de la habitual.
También puede serte útil consultar la información que se va generando en
/var/tmp/migasfree.log
.
Servidor en modo DEBUG
Al estar el servidor realizado con Django, puedes usar el ajuste DEBUG a
True
. Este ajuste del servidor debes ponerlo en el fichero
/etc/migasfree-server/settings.py
y después reiniciar el servidor web.
Al hacer esto, la página del servidor migasfree que te está fallando te mostrará, en vez de una página de error escueta, otra página de error con información muy extensa y que te permitirá ver qué está ocurriendo.
Nota
Nunca dejes el modo DEBUG en un entorno de producción por seguridad.
Activar el sistema de logging en el servidor
El servidor utiliza el módulo de logging de Python.
Para activar el sistema de logging en el servidor de migasfree añade el ajuste LOGGING en /etc/migasfree-server/settings.py:
LOGGING = { 'version': 1, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/migasfree.log', 'formatter': 'verbose', }, 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'verbose', }, }, 'loggers': { 'migasfree': { 'handlers': ['console', 'file'], 'level': 'DEBUG', } } }
Esto hará que en el fichero indicado (/tmp/migasfree.log) se almacenen los logs.