domingo, 12 de octubre de 2014

Cron; el programador de tareas de Linux / UNIX

Muchos administradores aún desconocen la herramienta cron, es el programador de tareas del que disponemos en todas las distribuciones de Linux, incluidas las distribuciones propietarias.

Suele ubicarse en la ruta /etc/crontab y podemos editarlo con cualquier editor de textos, normalmente usaremos vi que es la herramienta por excelencia de todos los administradores de sistemas.

En el siguiente ejemplo, vamos a programar una tarea usando el comando crontab –e, que nos permitirá editar la tabla de tareas cron, y añadiremos una línea para el sistema se sincronice a diario con un servidor NPT, como por ejemplo hora.roa.es.

Bien, una vez dentro de la lista de entradas de tareas, añadimos la siguiente línea:

1 0 * * * root ntpdate hora.roa.es >> /var/log/ntp.log

Con esta tarea, el sistema sincroniza con el servidor horario NTP a las 00:01 horas, todos los días de la semana y del mes.

A continuación, esta tabla muestra el significada de cada parámetro en la línea:

.----- Minuto [0 - 59]
|.---- Hora [0 - 23]
||.--- Día del mes [1 - 31]
|||.-- Mes [1 - 12] (o jan, feb, mar, apr ...)
||||.- Día de la semana [0 - 7] (sun, mon, tue, wed, thu, fri, sat,sun)
|||||
***** [usuario] [comando] [parametros]

lunes, 26 de mayo de 2014

Instalación y configuración de un cliente NTP

Copiamos a la máquina los paquetes necesarios.

Instalamos gcc, g++ (junto con sus dependencias), make y las librerías necesarias para poder compilar e instalar el software:

Realizamos una instalación típica:

# tar -xvzf [paquete_ntp]
# cd [directorio_descomprimido]
# ./configure --prefix=[ruta_ntp_instalado]
# make
# make install

Una vez instalado realizamos estos dos pequeños pasos:

Tras instalarlo, creamos un pequeño script que ejecute el comando  ntpdate -u [servidorNTP], el cual se conecta con un servidor NTP saltándose las restricciones de cortafuegos.

Cogemos el script que hemos creado, y lo colocamos en el cron para que se ejecute periódicamente y así mantener el reloj actualizado cada cierto tiempo (el que hayamos definido en el cron).

** Más información en http://bulma.net/body.phtml?nIdNoticia=408 **

1) Hemos creado el siguiente script, al que lo hemos llamado ntpCron:

#!/bin/bash

/opt/ntp/bin/ntpdate -u 129.132.2.21

Esta ip que hemos puesto es la del servidor swisstime.ethz.ch, pero tenemos que poner la IP porque no tenemos los DNS bien configurados.

A continuación ponemos una lista de posibles servidores:

# ntp.metas.ch (193.5.216.14)
# swisstime.ethz.ch (129.132.2.21)
# ntp0.fau.de (131.188.3.220)
# ptbtime1.ptb.de (192.53.103.103)
# hora.roa.es (150.214.94.5, este último es el más aconsejable)


2) Hay dos posibilidades:

- Poner el script en la carpeta /etc/cron.hourly, con lo que se ejecutará cada hora.

- Incluir una llamada al script en el archivo /etc/crontab para que el script se ejecute cuando se lo hayamos especificado. Como ayuda, una linea del archivo crontab tiene el siguiente formato:

1 2 3 4 5 /ruta/script

Donde cada número se sustituirá por el valor que corresponda:

1) Minutos.
2) Horas.
3) Días del mes (de 1 a 31).
4) Meses.
5) Días de la semana (de 1 a 7 ó de 0 a 6, funciona igual).

miércoles, 23 de abril de 2014

Instalar componentes de LAMP individualmente

Usaremos las siguientes versiones de los componentes, aunque podemos usar veriones superiores si lo deseamos:
 
Nucleo Linux 2.2.x 
MySql 5.x 
PHP 5.X

Vamos a instalarlo todo en la ruta /usr/local , ya que MySql se instala allí por defecto.

Ponemos los archivos comprimidos de los componentes en /usr/local, y nos situamos en dicha ruta.

Comenzamos:

Instalamos Apache

# tar -xvzf [paquete apache] 
# cd [paquete apache]
#./configure --prefix=/opt/apache2 --enable-mods-shared=all
# make
# make install

Instalamos MySQL

    Creamos el usuario y el grupo mysql:

        # groupadd mysql
        # useradd -g mysql mysql
   
    Para cambiar de usuario usamos el siguiente comando:

        # su - [nombre_usuario]

        Copiamos el tar.gz a /usr/local y lo descomprimimos.
   
        tar -xvzf [archivo_distribucion_mysql].tar.gz
   
    Creamos un enlace simbólico:
   
        ln -s /usr/local/[archivo_distribucion_mysql] mysql
   
    Ejecutamos el script mysql_install_db ubicado en la carpeta scripts.
   
    Iniciamos la base de datos con:

        #/usr/local/mysql/bin/safe_mysqld &

        *** Hay que hacerlo con el usuario mysql ***

Inicializamos la contraseña del root de base de datos. Hay dos maneras, o modificando los privilegios de la tabla "user" de la base de datos, o mediante el comando "mysqladmin".

    Mediante BBDD:

        # mysql -u root
        mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
        mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');


    Con mysqladmin:

        # mysqladmin -u root password "newpwd"
        # mysqladmin -u root -h host_name password "newpwd"


Añadir nuevo usuario: primero tenemos que crearlo en el sistema, y luego le concedemos los permisos de administrador de la siguiente manera:

Entramos en la instancia "mysql" (instancia por defecto) con el usuario root, y ejecutamos los siguientes comandos:

        mysql> GRANT ALL PRIVILEGES ON *.* TO 'nuevo_usuario'@'localhost'  IDENTIFIED BY
        'pass_del_nuevo_usuario' WITH GRANT OPTION;
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'nuevo_usuario'@'%'  IDENTIFIED BY 
        'pass_nuevo_usuario' WITH GRANT OPTION;
        mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
        mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

    Así ya nos podremos conectar a la base de datos en el nuevo_usuario.

    Poner mysql como servicio:

Copiamos el script "mysql.server" a /etc/init.d, y lo colocamos en los niveles de arranque que queramos.

Instalamos PHP, compilándolo con los parámetros especificados:

    # tar -xvzf [paquete php]
    # cd [paquete php]
    # ./configure --prefix=/opt/php5.5.26 --with-apxs2=/opt/apache2/bin/apxs --enable-magic-quotes 
    --with-zlib --enable-dba --with-gdbm --with-gd --enable-ftp --with-jpeg-dir --enable-gd-native-ttf 
    --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config 
    --enable-wddx
    # make
    # make install

miércoles, 5 de marzo de 2014

Reiniciar ORACLE remotamente de forma correcta

Seguramente alguna vez nos hemos encontrado que a la hora de reiniciar el servicio de ORACLE (10G en adelante), este no "levanta" correctamente, o bien nos da algún error.

Este problema suele ser debido a que no estamos usando el usuario correcto de ORACLE, o bien a que no estamos haciendo los pasos en el orden correcto.

Os dejo unas notas orientativas que pueden ayudar:

Conectarse a la maquina por ssh (no se puede usar el usuario root): 

usuario:XXXXXX
passwd: XXXXXX 

Reiniciar el listener:

Las variables de entorno deberan de estar ya definidas:

lsnrctl start LISTENER (El nombre de listener y el puerto de escucha, lo puedes ver en listener.ora

Reiniciar sólo la base de datos (en caso extremos):

Escribimos sqlplus "/as sysdba" una vez iniciada la sesion en SSH.

startup 

Despues de salir de sqlplus (quit), levantar el entorno web de administracion de ORACLE.

emctl start dbconsole (Levanta entorno web de admin).

Para reiniciarlo, primero hay que parar la BD:

shutdown immediate

Luego para iniciar de nuevo la base de datos:

startup