jueves, 6 de noviembre de 2014

Preparando el Tercer servidor

Como tenemos una nueva imagen, voy a migrar el tercer servidor del centro al nuevo sistema.
Ni que decir tiene que antes de realizar nada lo más lógico es hacer una copia de seguridad. Yo tengo automatizadas los backups, entonces ya lo tendré hecha, no obstante lo que sí tengo que copiar es el crontab.
en consola hago crontab -e y copio el contenido y lo guardo junto con las copias de seguridad. Esto es para restuararlo después.
Debido a que este tercer servidor se utiliza también como servidor ftp, repositorio, etc... necesita instalar paquetes adicionales , etc...

Lo primero, como es lógico es instalar la nueva imágen, como la imagen de momento está en pruebas voy a utilizar otro disco duro para ello.
Por otra parte, siempre tengo que tener en cuenta que debido precisamente a esto, a que el sistema se va renovando cada aproximadamente dos años, tengo otros dos discos duros en los que guardo determinados archivos. Estos dos discos después de la instalación le diré en /etc/fstab que me los monte en sus directorios correspondientes.
/var/www/ en el que tengo los contenidos del servidor apache accesible solo desde dentro del centro.
/var/imagenes donde tengo las imágenes que utilizo para clonar los equipos con clonezilla
/var/backups donde se van haciendo y guardando los backups incrementales con rsync.

Clonar la imagen con clonezilla

Lo primero que hay que hacer lógicamente es restaurar la imagen en el equipo. Como ya he dicho antes lo hago con clonezilla, y como quiero mantener los datos antiguos por si hay algún problema, desconecto la alimentación de los discos duros que tengo y engancho el otro, así la instalación se hace sólo sobre uno y al iniciar no me dará problemas.
También en este momento tenemos que tener precaución de que no se ejecuten las tareas puppet en esta máquina, ya que puede ser que se ejecuten tareas del sistema anterior (instalación de paquetes, configuraciones,...) que nos lleven a problemas. Para ello lo mejor es ponerla como nodo de pruebas en la clase-específica y comentar todas las líneas con tareas, así no se ejecutará ninguna, pero comprobaremos que puppet funciona correctamente.

Probar el equipo

Una vez restaurada la imagen, comprobamos que funciona correctamente, que nos permite autentificar los usuarios bien, que monta las carpetas del servidor nfs correctamente, que se ejecuta puppet, etc...
Una vez esto ya si que podemos poner en la clase-específica de puppet las tareas comunes a realizar y que no sean específicas de la distribución anterior, eso sí probar las tareas una a una por si dieran problemas, para no volvernos locos. En mi caso pasaría tareas de cambiar contraseña root, añadir authorized, añadir hosts, etc....
Una vez hecho esto ya podemos conectar la alimentación de los discos antiguos y en la bios le ponemos que arranque desde el disco duro nuevo.
Modificamos el /etc/fstab para que nos reconozca y nos monte los discos donde tenemos información:

# /var/backups  was on /dev/sdb1 during installation
/dev/sdc3 /var/backups          ext3    defaults        0       2

/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
#/dev/sdb1       /media/usb0     auto    rw,user,noauto  0       0
#/dev/sdb2       /media/usb1     auto    rw,user,noauto  0       0
# /var/www  was on /dev/sdb1 during installation
/dev/sdb1 /var/www            ext3    defaults        0       2
# /var/imagenes  was on /dev/sda6 during installation
/dev/sda6 /var/imagenes           ext4    defaults        0       1


Generar clave rsa

Como este servidor hace tareas en otros equipos: sistema de backups, etc. tengo que crear una relación de confianza entre él y los otros a los que tengo que acceder.
Creo la clave rsa:

 ssh-keygen -t rsa -b 1024

 Crea un fichero id_rsa.pub.
Esta es la clave rsa del servidorweb. Para acceder a otro equipo añadimos la clave al final del archivo /root/.ssh/authorized_keys.
Es decir renombro el archivo y lo envío al equipo en cuestión y 

cat id_rsa.pub.servidorweb >> /root/.ssh/authorized_keys

Al reinstalar el servidorweb, la clave ha cambiado por lo que la tengo que eliminar del resto de los equipos y poner la nuevo. En los servidores nfs y ldap lo hago a pelo y para el resto de equipo tengo tarea puppet comunes-anadir-authorized que se encarga de modificarla.

Añadir Scripts

Tengo varios scripts que realizan determinadas labores. Es por ello que los tengo que copiar desde el disco antiguo al nuevo. Los tengo en /usr/local/bin/ y entre ellos estan:
- Scripts de Copia de Seguridad
El script backup_servers.sh se ejecuta una vez a la semana ya que está metido en el crontab.
Llama a  tantos scripts, que están en carpeta backup, como equipos que se quieran hacer copias de seguridad. Para cada uno de ellos hay dos archivos:
bacup_equipo.sh el script que realiza copia incremental con rsync que se guarda en /var/backup del servidorweb
backup_equipo.excluded que contiene los directorios y archivos, de los que no hay que sacar copias seguridad.

- backupltsp.sh 
Hace copia de archivos de configuración de los servidores ltsp (por si hay que clonarlos) los pone en el propio servidorweb:/var/backups/backupltsp/$servidoraula

- quitaacentos.sh   es un script que se utiliza para eliminar las vocales acentuadas, ñ ,etc..... 
Se solía utilizar sobre el fichero xml descargado de rayuela con los datos de alumnos y profesores con los datos de importación.
Esta función también se puede realizar con el siguiente comando iconv --from-code=ISO-8859-1 --to-code=UTF-8 fichero-origen > fichero-destino.

- Scripts de inicio de Curso :
altaGeneraCSV.sh A partir del fichero xml exportado desde rayuela genera un fichero csv con los campos necesarios para dar de alta usuarios en googleDocs.
AltaGeneraMoodle.sh idem con los campos de los usuarios para darlos de alta en plataforma moodle. 
altaGeneraCSVyMoodle.sh Genera dos ficheros, uno para google y otro para moodle.

- listado_inicio_curso.sh
Hace un listado de alumnos en formato html
"Uso: listado_inicio_curso.sh <fichero xml alumnos> <fichero xml grupos> <fichero xml profesores> <fichero html salida> [<grupo a procesar>]" 
posibilidad de ordenar cada tabla de grupo por diferentes campos.
ORDENAR_POR=[apellidos|nie|password|usuario|nombre|nada]

- generacion_listados_inicio_curso_pdf.sh
Idem que el anterior pero lo exporta a formato pdf
"Uso: generacio_listados_inicio_curso.sh <fichero xml alumnos> <fichero xml grupos> <fichero xml profesores> <fichero html salida> [<grupo a procesar>]" 
posibilidad de ordenar cada tabla de grupo por diferentes campos.
ORDENAR_POR=[apellidos|nie|password|usuario|nombre|nada]

- generacion_listados_alumnos_grupos.sh
Tambien listado por grupo.
Uso: $0 <fichero xml alumnos> <fichero xml grupos> <fichero xml profesores> <fichero txt salida>

- avisos/avisos.jar
Programa creado por el compañero Juan Antonio que permite enviar avisos a pantalla de login de profesores, alumnos o cursos.

Más Configuraciones

Tenemos un montón de archivos de configuración que reescribir y/o modificar. Lógicamente los podemos copiar de la instalación anterior montando el disco antiguo en /mnt/ copiando. Entre ellos:
/etc/hosts con el dominio ip y nombre propio del servidorweb.
/etc/network/interface por si tengo alguna configuración especial: bonding, puerta de enlace predeterminada distinta, etc...
También los ficheros de la copia de seguridad de los ltsp si fueran necesarios:
/etc/udev/rules.d/70-persistent-net
/etc/hostapd/hostapd.conf
etc...

Instalar Servidor FTP

Tenemos un servidor ftp que lo utilizamos para los subir los escaneos que se hacen en las copiadoras.
Instalamos para ello el paquete proftpd-basic. Instalaremos un servidor independiente. Puedes ver un tutorial aquí:
http://www.redeszone.net/gnu-linux/proftpd/

Básicamente lo que he cambiado en el fichero de configuración /etc/proftpd/proftpd.conf únicamente es el nombre del servidor en :

ServerName                      "myftp"

y la carpeta donde se guardan los escaneos e indicarle que todos los usuarios van a esa carpeta:

DefaultRoot                     /srv/ftp/upload 

El procedimiento es el siguiente: los conserjes escanean las cosas ( las impresoras están configuradas para que lo suban a ftp) y luego los profesores son lo que tienen que acceder a ellas. Por ello utilizo un único usuario para acceder a ellas y común para todos que es el usuario ftp. Regularmente hago limpieza, es decir paso los archivos mas antiguos a otra carpeta /srv/ftp/antiguos, que no es accesible desde ftp, por si hicieran falta en otro momento. 
Hay que crear dicho usuario en el equipo. En esta ocasión me he encontrado que ya estaba creado, por lo que despues de hacer unas pruebas he tenido que borrarlo (deluser ftp), para volverlo a crear, indicándole un directorio home para que copie el skel. el home del ftp no lo vamos a utilizar así que lo podemos borrar luego sin miedo. La orden para crear el usuario es:

root@servidorweb:/# adduser ftp --home /srv/ftp/prueba

Después de esto ya solo queda reiniciar servicio y probar que funciona y logea, bien a través de un navegador o bien desde consola:

root@servidorweb:/mnt# ftp ftpiesburguillos

Vemos que conecta y nos pide usuario y contraseña. 

Connected to ftpiesburguillos.burguillosdelcerro.
220 ProFTPD 1.3.4a Server (ftpiesburguillos) [::ffff:172.17.164.30]
Name (ftpiesburguillos:jmmedinac03): ftp
331 Password required for ftp
Password:

Y como nos dice que hemos accedido correctamente.

230 User ftp logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Ya que no es un servicio que se utilice habitualmente en los servidores de aula, y yo estoy utilizando la imagen de uno de ellos, hay que tener la precaución de meter el paquete proftpd-basic dentro del fichero /etc/pkgsync/mayhave  para que no lo desinstale pkgsync al ejecutarse.

Instalar servidor http

Una de las principales funciones del tercer servidor es la de servidorweb. Allí están disponibles ficheros de uso frecuente, fotos, recursos docentes, etc. Es por ello que hay que instalar un servidor http. Puedes ver todo el proceso en :


En resumen, instalar apache2, mysql y php5.
Los archivos de configuración para los distintos host virtuales estaban en el directorio /etc/apache2/sites-available.
Como ha cambiado un poco apache, es más me ha tenido loco un par de días por que no arrancaban los host virtuales https://www.blogger.com/blogger.g?blogID=2361837138647093212#editor/target=post;postID=2411264700765579898;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=0;src=postname no he restaurado los archivos anteriores, sino que, tal y como pone en el post, he copiado el archivo /etc/apache2/sites-available/default con el nombre del resto de los hosts virtuales y he cambiado datos.
Después para que funcione hay que enlazarlo a /etc/apache2/sites-enabled, que se hace con el comando:

root@servidorweb:/etc/apache2/sites-available# a2ensite Archivo_host_virtual

reiniciamos servicio apache (service apache2 reload) y comprobamos que funcione.

Instalar repositorio adicional con reprepro

Si bien tenemos repositorios locales en el servidor ldap, tengo un repositorio adicional en el servidor web.
Este repositorio me sirve para colocar paquetes que no están incluidos en los repositorios ( firefox, java,etc.. ). Así cuando tengo que instalar algún paquete via puppet  en vez de tener que descargar paquete, simplemente lo instalo con apt-get install.
El repositorio está creado con reprepro. Puedes ver como se instala y crea en los siguientes posts de Esteban Navas:


Básicamente es instalar reprepro, crear el directorio conf, crear la clave y ponerlo en directorio principal y crear fichero con distribuciones y crear enlaces simbólicos. En esta página viene muy bien estructurado y detallado.
Por otra parte ya que estoy pasandome a wheezy añado también el repositorio de wheezy, siguiendo también las indicaciones de Esteban:


Y luego ya nada más que queda añadir los paquetes que queramos. 
Tengo un archivo en el derectorio de reprepro con nombre UsoReprepro.txt con el siguiente contenido:

root@servidorweb:/var/www/repository/iesburguillos# cat UsoReprepro.txt 
cogido de blog de esteban navas     http://enavas.blogspot.com.es/2012/10/crear-nuestro-propio-repositorio-de.html
# contraseña:mi propia contraseña
reprepro --ask-passphrase includedebAgregar paquetes binarios a nuestro repositorio
Para agregar paquetes binarios (.deb), nos situamos en la carpeta raíz del repositorio (siguiendo el ejemplo: /var/www/iesvalledeljerte3) y ejecutamos el siguiente comando:

$ reprepro --ask-passphrase includedeb [DISTRIBUCION] [PAQUETE]

Ejemplo:
$ reprepro --ask-passphrase includedeb squeeze /home/enam0000/Java-package/oracle-j2re1.7_1.7.0+update7_amd64.deb

$ reprepro --ask-passphrase includedeb squeeze /home/enam0000/Java-package/oracle-j2re1.7_1.7.0+update7_i386.deb

Nos preguntará por la frase de paso. La introducimos y al terminar incluirá nuestro paquete binario en el repositorio.

Eliminar paquetes binarios del repositorio
Eliminar un paquete de una rama de nuestro repositorio es sencillo:

$ reprepro --ask-passphrase remove [DISTRIBUCION] [PAQUETE] 

Ejemplo:
$ reprepro --ask-passphrase remove squeeze oracle-j2re1.7

indica como añadir y eliminar paquetes.

Instalar dsh

Esta, dsh, es una utilidad que nos permite ejecutar un determinado comando en varias máquinas de una sola vez, por lo que es muy interesante si hay que realizar una operación en un grupo de máquinas, ya que entre otras cosas podemos tener diferentes grupos definidos.
Pero no voy a explicar más, ya que aquí, como siempre, está mejor explicado, en la página del gran Esteban Navas:

Como yo también lo tenía en el anterior servidor, copio la carpeta antigua /etc/dsh/group y los archivos machines.list que es un fichero con el nombre de todas las máquinas por si queremos realizar un comandoa todas y un pequeño fichero de texto al que llamo LeemeUtilizacionDSH.txt con el siguiente contenido para recordar su uso:
DSH es una utilidad para ejecutar comandos por ssh a varias máquinas simultaneamente.
El archivo de configuración está en /etc/dsh/dsh.conf
En la carpeta /etc/dsh/group/ se meten los diferentes grupos que queramos hacer. Tenemos:
all: (lista con nombre de equipos)debemos meter todos los equipos para cuando ejecutemos la orden a todos los equipos
LTSP: lista con los LTSP
workstation: idem de workstation

Uso:
dsh -v -m nombre_maquina -- comando     Ejecuta un comando en una máquina
dsh -v -a --comando Ejecuta un comando en las máquinas que están en el /etc/dsh/group/all
dsh -v -g nombre_grupo --comando Ejecuta un comando en las máquinas que están en el grupo /etc/group/nombre_grupo



No hay comentarios:

Publicar un comentario