martes, 9 de agosto de 2022

Al parecer esta año 2022, quieren modificar el cambio de hora de un momento a otro. Quiero respaldar una guía que hice el 2011 para hacer el cambio de hora manualmente en Linux, modificando el tzdata. Solo tienen que actualizar los parámetros para este año.

Esta guía es compatible con Redhat/Centos/Fedora o cualquier otra distribución haciendo las correcciones necesarios. En esta ocasión se utilizó Centos 5.5.

El archivo o paquete tzdata contiene todos los horarios y cambios de hora de todas las zonas del mundo

El parche para corregir el primer cambio de hora, que era para el 7 de Abril, ya está disponible en su versión tzdata2011d y se instala simplemente utilizando yum, entramos como root del sistema:

Código:
yum install tzdata
Podemos comprobar que el tzdata contiene el primer cambio de hora anunciado para el 2 de Abril.
Código:
zdump -v /etc/localtime | grep 2011
/etc/localtime  Sun Apr  3 02:59:59 2011 UTC = Sat Apr  2 23:59:59 2011 CLST isdst=1 gmtoff=-10800
/etc/localtime  Sun Apr  3 03:00:00 2011 UTC = Sat Apr  2 23:00:00 2011 CLT isdst=0 gmtoff=-14400
/etc/localtime  Sun Oct  9 03:59:59 2011 UTC = Sat Oct  8 23:59:59 2011 CLT isdst=0 gmtoff=-14400
/etc/localtime  Sun Oct  9 04:00:00 2011 UTC = Sun Oct  9 01:00:00 2011 CLST isdst=1 gmtoff=-10800
o en su defecto
Código:
zdump -v Chile/Continental | grep 2011
Chile/Continental  Sun Apr  3 02:59:59 2011 UTC = Sat Apr  2 23:59:59 2011 CLST isdst=1 gmtoff=-10800
Chile/Continental  Sun Apr  3 03:00:00 2011 UTC = Sat Apr  2 23:00:00 2011 CLT isdst=0 gmtoff=-14400
Chile/Continental  Sun Oct  9 03:59:59 2011 UTC = Sat Oct  8 23:59:59 2011 CLT isdst=0 gmtoff=-14400
Chile/Continental  Sun Oct  9 04:00:00 2011 UTC = Sun Oct  9 01:00:00 2011 CLST isdst=1 gmtoff=-10800
Para poder modificar nuevamente el cambio de hora, a mano, debemos descargar desde este sitio el código del tzdata (ahora es iana.org quien maneja los tzdata).
Código:
cd /root
mkdir tz
cd /tz
wget ftp://elsie.nci.nih.gov/pub/tzdata2011d.tar.gz
Ahora desempaquetamos y descomprimimos el archivo, para luego editar el archivo southamerica con nuestro editar favorito:
Código:
tar zxvf tzdata2011d.tar.gz
vi southamerica
Este archivo contiene las zonas y cambios de hora del continente. Buscamos Chilito, cerca del año 2011 aparecerá:
Código:
Rule    Chile   2008    only    -       Mar     30      3:00u   0       -
Rule    Chile   2009    only    -       Mar     Sun>=9  3:00u   0       -
Rule    Chile   2010    2011    -       Apr     Sun>=1  3:00u   0       -
Rule    Chile   2012    max     -       Mar     Sun>=9  3:00u   0       -
Debemos modificarlo la tercera línea y agregando 2 más:
Código:
Rule    Chile   2008    only    -       Mar     30      3:00u   0       -
Rule    Chile   2009    only    -       Mar     Sun>=9  3:00u   0       -
Rule    Chile   2010    only    -       Apr     Sun>=1  3:00u   0       -
Rule    Chile   2011    only    -       May     Sun>=2  3:00u   0       -
Rule    Chile   2011    only    -       Aug     21      4:00u   1:00    S
Rule    Chile   2012    max     -       Mar     Sun>=9  3:00u   0       -
Guardamos el documento (:x!).

Con esto le decimos al archivo que en el 2011, el primer sabado de Mayo atrase la hora, y que el sabado 20 (domingo 21 a las 00:00) adelante una hora (en realidad que en una fecha somos GTM -3 y en la otra GTM -4).

Para aplicar los cambios, usamos el comando zic (que es una herramienta tzdata):
Código:
zic southamerica
zic backward
Comprobamos el cambio:
Código:
zdump -v Chile/Continental | grep 2011
Chile/Continental  Sun May  8 02:59:59 2011 UTC = Sat May  7 23:59:59 2011 CLST isdst=1 gmtoff=-10800
Chile/Continental  Sun May  8 03:00:00 2011 UTC = Sat May  7 23:00:00 2011 CLT isdst=0 gmtoff=-14400
Chile/Continental  Sun Aug 21 03:59:59 2011 UTC = Sat Aug 20 23:59:59 2011 CLT isdst=0 gmtoff=-14400
Chile/Continental  Sun Aug 21 04:00:00 2011 UTC = Sun Aug 21 01:00:00 2011 CLST isdst=1 gmtoff=-10800
Como pueden apreciar, aparece el cambio de hora de invierno para el 7 de Mayo y el cambio de hora de verano para el 20 de Agosto.
Listo? Nooo!! Tenemos que copiar la zona al localtime
Código:
cp /usr/share/zoneinfo/Chile/Continental /etc/localtime
Finalmente comprobamos el localtime
Código:
zdump -v /etc/localtime | grep 2011
/etc/localtime  Sun May  8 02:59:59 2011 UTC = Sat May  7 23:59:59 2011 CLST isdst=1 gmtoff=-10800
/etc/localtime  Sun May  8 03:00:00 2011 UTC = Sat May  7 23:00:00 2011 CLT isdst=0 gmtoff=-14400
/etc/localtime  Sun Aug 21 03:59:59 2011 UTC = Sat Aug 20 23:59:59 2011 CLT isdst=0 gmtoff=-14400
/etc/localtime  Sun Aug 21 04:00:00 2011 UTC = Sun Aug 21 01:00:00 2011 CLST isdst=1 gmtoff=-10800
Espero sea de su agrado y también de mucha utilidad.
Lo públique en exclusiva para Chilehardware, hasta que lo suba a mi blog.

martes, 26 de mayo de 2020

Instalación y primeros pasos en Docker

Hola, ha pasado mucho tiempo desde la última vez que escribí un tema y muchas cosas han pasado. Voy a tratar de subir material nuevamente. Estos últimos años ha crecido una corriente empujando las nuevas tecnologías hacia la automatización, sobre todo enfocándose en el código y menos en la infraestructura. Es así como muchos (incluyéndome) hemos tenido que dejar de lado algunas de nuestras antiguas labores, por decirles que hace años que no piso un datacenter, enfocarnos en desarrollar nuevos procesos para automatizar la entrega de infraestructura y su puesta en marcha, con ayuda de la virtualización. También ha nacido otro "cargo", los famosos "DevOps", aunque hago mucho de eso no me considero uno.

Esta vez voy comenzar con algo relativamente sencillo, crear un contenedor docker en RHEL 7. Los contenedores nos permiten abstraernos de la infraestructura y generar "servicios" en segundos.

Requisitos:
- Centos 7.X instalado al mínimo.

Comenzamos con el primer paso:
1.- Actualizar Centos e instalar paquetes básicos necesarios

yum install -y yum-utils wget vim net-tools git
yum –y update
reboot

2.- Paso, desactivar Selinux con vi o nano.

vi /etc/selinux/config
SELINUX=disabled

3.- Bajar Firewall

systemctl stop firewalld
systemctl disable firewalld

4.- Instalar repositorio Epel.

yum -y install epel-release
sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

5.-Instalar docker y habilitar servicio.

yum -y --enablerepo=epel install docker
systemctl start docker
systemctl enable docker

6.- Máquina Nginx de ejemplo: Con el primer comando buscamos el contener de nginx en el registro (público), luego bajamos la imagen y la hacemos correr, está se llamará "nginx01".

docker search nginx
docker pull nginx
docker run --name nginx01 --detach nginx

7.- Ahora para poder usar contenido y publicar el servicio en la IP de nuestra máquina podemos hacer lo siguiente, crear un directorio y enlazarlo al contener.

docker run --name nginx01 -p 80:80 -v /root/htdocs/:/usr/share/nginx/html:ro -d nginx

Con esto podemos subir contenido a nuestro contenedor nginx, copiando archivos html en /root/htdocs.

Algunos comandos utiles:

Mostrar images descargadas

docker images

Listar contenedores en proceso

docker ps
docker ps -a

Detener un contenedor

docker stop nginx01

Eliminar un contenedor

docker rm nginx01

Espero sea útil y les haya gustado.

martes, 17 de febrero de 2015

Firewall en RHEL 7

Como sabrán hay mucho cambios en RHEL 7, Uno de ellos es la manera de gestionar nuestro seguridad, ya no trabajamos con iptables directamente sino con el servicio firewalld. Algunos tips para su uso.

Ver servicios habilitados
firewall-cmd --list-service

Ver servicios disponibles
firewall-cmd --get-services


Habilitar servicio en el momento, utilizando un nombre de los servicios disponibles.
firewall-cmd --add-service=high-availability

Habilitar servicio permanente al reiniciar
firewall-cmd --permanent --add-service=high-availability

Habilitar puerto manualmente, si es servicio no se encuentra en la lista.
firewall-cmd --zone=public --add-port=8080/tcp
firewall-cmd --zone=public --add-port=8080/tcp –-permanent

Recargar configuración
firewall-cmd --reload

lunes, 27 de octubre de 2014

Tips rápidos - Escanear Discos, Camio de hora, Liberar cache.

Tips rápidos del día.

Escanear Discos
Cuando se presentan discos desde Storage o Vmware, donde host0 es la controladora.

echo "- - -" > /sys/class/scsi_host/host0/scan

Luego buscar la unidad nueva con fdisk, crear partición, volumen y formatear

Cambiar hora manualmente
Formato AAMMDD HH:MM

date -s "20141027 12:00"

Liberar Cache
Para cache en memoria, con esto estamos forzando a nuestro kernel a liberar la pagecache, los inodos y las dentries.

sync; echo 3 > /proc/sys/vm/drop_caches

jueves, 23 de octubre de 2014

Clúster RHEL 7 con Pacemaker

Voy a compartir con ustedes una guía que nació de un proyecto realizado por mi. La instalación de un clúster activo-pasivo para aplicación web, usando la nueva versión de Red Hat Enterprise Linux 7 (RHEL 7), de más decir que es compatible con Centos 7 y Fedora. Para ello creamos un clúster con un Filesystem compartido, IP de servicios virtual, Apache, Tomcat y MariaDB. En primera instancia vamos a Tratar solo la Ip virtual y Apache. Copiaré la guía en borrador para luego hacer correcciones.

Configuración de software y nodos

En ambos nodos realizar:
Agregar nodos a tabla hosts.
10.132.42.160   nodo1 nodo1.unix.com
10.132.42.161   nodo2 nodo1.unix.com
10.132.42.162   vipmysql
10.132.42.163   vipapache
10.132.42.168   ilo_nodo1
10.132.42.169   ilo_nodo2

Deshabilitar firewalld y selinux
# systemctl stop firewalld
# systemctl disable firewalld

Instalar software Cluster
# yum install pcs fence-agents-all

Cambiar password de usuario
# passwd hacluster

Habilitar servicio
# systemctl start pcsd.service
# systemctl enable pcsd.service

Autorizar nodos y usuario (hacluster), realizar en un solo nodo
# pcs cluster auth nodo1 nodo2

Creación de Clúster y servicios

Crear clúster con el nombre “wcluster” y  habilitar cluster al iniciar maquinas
# pcs cluster setup --start --name wcluster nodo1 nodo2
# pcs cluster enable –-all

Validar estado
# pcs cluster status

Como es un clúster de 2 nodos solamente, deshabilitar quorum
# pcs property set no-quorum-policy=ignore

Configurar Fencing para los nodos
Se debe crear un dispositivo de fencing, con el fin de recuperar el servicio en nodo con fallas. Existen distintos agentes dependiendo del tipo de máquina, pueden ser ILO, SMNP, APC, Vmware, Kvm. Se debe configurar el fencing antes que los recursos para que estos inicien automáticamente o después si prefieren.

Para ver lista de agentes disponibles
# pcs stonith list

La sintaxis es:
# pcs stonith create “nombre” agente params var1=1 var2=1

Si no existen dispositivos para fencing, es posible deshabilitarlo
# pcs property set stonith-enabled=false

Ver Fencing para ejemplos.

Instalar servicio para cluster, ejemplo Apache
# yum group install web-server php

Para que el clúster pueda obtener el status de apache agregar al archivo httpd.conf

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Location>

Configuración de volumen compartido
Se toma como supuesto que existe un grupo y volumen generado en ambos nodos, indistinto del método de replicación u origen (storage, drbd, rsync,etc), llamado vgdata y lvdata respectivamente. Se debe evitar que el volumen sea activado por el sistema. En el archivo /etc/lvm/lvm.conf, descomentar la línea y agregar los grupos de volúmenes que si serán activados al inicio del SO.

Identificar vg
# vgs --noheadings -o vg_name
vg_root vg_home vgdata

Modificar /etc/lvm/lvm.conf
# volume_list = [ "vg_root", "vg_home" ]

Reconstruir initrd
# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)

Reiniciar ambos nodos y validar cluster
# pcs cluster status

Configurar recursos y grupo de servicio
Agregar grupo de volumen (opcional)
# pcs resource create my_lvm LVM volgrpname=vgdata exclusive=true --group apachegroup

Agregar volumen y montaje de filesystem
# pcs resource create w_fs Filesystem device="/dev/vgdata/lvdata" directory="/var/www" fstype="xfs" --group apachegroup

Agregar IP Virtual
# pcs resource create vipapache IPaddr2 ip=10.132.42.163 cidr_netmask=24 --group apachegroup

Agregar Apache
# pcs resource create website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroup

Configurar orden y preferencia
Los recursos están agrupados y en orden de creación, para asegurar el orden de los servicios es opcional.
# pcs constraint order w_fs then vipapache
# pcs constraint order vipapache then website

Para asignar preferencia al grupo de servicios sobre un nodo (por defecto es infinito)
# pcs constraint location apachegroup prefers nodo1=50
# pcs constraint location apachegroup prefers nodo2=0

Fencing

Es posible crear dispositivos de fencing utilizando distintos agentes.

Ejemplo fencing con vwmare
Ver lista de servidores
#  fence_vmware_soap -z -l vmwareuser -p passwd -a esxhost -o list --ssl-insecure

NODO1,564daf6c-c3d9-3089-c448-c5f70ddb6609
NODO2,564dce63-1623-c585-18a4-c48700f4104f

Crear fencing device usando nombre o UUID, host, usuario y password vmware.
# pcs stonith create fence_nodo1 fence_vmware_soap params ipaddr="esxhost" login="vmwareuser" passwd="passwd" ssl=1 port="NODO1" action="reboot" ssl_insecure=1 pcmk_host_list="nodo1"

# pcs stonith create fence_nodo2 fence_vmware_soap params ipaddr="esxhost" login="vmwareuser" passwd="passwd" ssl=1 port="NODO2" action="reboot" ssl_insecure=1 pcmk_host_list="nodo2"

Ejemplo fencing con ILO / ILO2
# pcs stonith create fence_nodo1 fence_ilo params ipaddr="ilo_nodo1" login="admin" passwd="admin123" action="reboot" pcmk_host_list=nodo1  pcmk_host_check=static-list

Ejemplo fencing con ILO3 / ILO4 usar ipmilan
pcs stonith create fence_nodo1 fence_ipmilan params ipaddr="ilo_nodo1" login="admin" passwd="admin123" action="reboot" pcmk_host_list=nodo1  pcmk_host_check=static-list

Tomcat
Agregar servicio tomcat personalizado
# pcs resource create tomcat tomcat java_home="/usr/java/default" catalina_home="/usr/share/tomcat" --group apachegroup

Como alternativa agregar servicio tomcat del sistema
# pcs resource create tomcat systemd:tomcat --group apachegroup

MySQL o MariaDB

Montar volumen manualmente y cambiar los permisos primero (suponiendo que hay un fs para MySQL)

Instalar MariaDB
# yum install mariadb-server

Configurar recursos y grupo de servicio
Agregar volumen y montaje de filesystem
# pcs resource create fs_mysql Filesystem device="/dev/vgdata/lvbase" directory="/var/lib/mysql" fstype="xfs" --group mysqlgp

Agregar IP Virtual
# pcs resource create vipmysql IPaddr2 ip=10.132.42.162 cidr_netmask=24 --group mysqlgp

Agregar MySQL del sistema
# pcs resource create mysqldb mysql config=/etc/my.cnf enable_creation=1

O MySQL como servicio del sistema
# pcs resource create mysqldb systemd:mariadb --group mysqlgp

Tips

Si el periodo de monitoreo es muy bajo, es necesario subir timeout por defecto antes de generar los recursos
# pcs resource op defaults timeout=240s
# pcs resource op defaults

Verificar configuración
# crm_verify -L

Para evitar que los servicios cambien de nodo al levantar un servidor se configura el “stickiness”, tiene que ser mayor al valor más alto de “location” (defecto 0).
# pcs resource defaults resource-stickiness=100

Fin

Finalmente, después de todo se ve más o menos así:








jueves, 19 de junio de 2014

Crear Logical Volume

Un tip rápido para crear Volúmenes Lógicos en Linux.

- Primer paso identificar el disco, para nuestro ejemplo será "sdb"

fdisk -l /dev/sdb

- Crear partición física en disco, usamos "c" para apagar DOS compatible y "u" para mostrar sectores en vez de cilindros.

fdisk -cu /dev/sdb

Dentro de "fdisk", utilizamos opción "p" para ver particiones, "n" crear nueva partición, seleccionamos nuevamente "p" para partición primaria, a continuación indicara el cilindro o sector donde comienza, presionamos "Enter", mostrará el último sector o cilindro "Enter". Luego debemos cambiar el tipo de partición con "t", seleccionando "8e" que corresponde a LVM. Con esto se creará una nueva partición física, marcada como LVM, finalmente presionamos "w" para guardar y salir de "fdisk".

- Nuestro disco y su partición se llamará /dev/sdb1, con esto creamos nuestro "volumen físico".

pvcreate /dev/sdb1

- Ahora debemos crear un nuevo "grupo de volumen". El grupo de volumen puede contener varios "volúmenes lógicos".

vgcreate vgnuevo /dev/sdb1

-Crear el "volumen lógico". Con -L indicamos el tamaño en KB, MB o GB, en este caso 20G suponiendo que el disco o espacio libre en grupo de volumen usado es mayor.

lvcreate -n lvnuevo -L 20G vgnuevo

- A continuación debemos dar formato a nuestro volumen, con el comando mkfs, puede ser en ext3 o ext4 según quieran.

mkfs -t ext4 /dev/mapper/vgnuevo-lvnuevo

- Y finalmente debemos montar nuestro volumen en algún directorio para poder utilizarlo.

mount /dev/mapper/vgnuevo-lvnuevo /datos

Recuerden que para que monte automáticamente al iniciar el sistema deben agregar la entrada en /etc/fstab

/dev/mapper/vgnuevo-lvnuevo /datos             ext4    defaults        0 0

Al principio es un poco difícil de entender. Tenga en cuenta que primero deben crear una partición física, luego volumen físico (pv), después grupo de volumen (vg), y finalmente el volumen lógico (lv). Este es el que finalmente es formateado y montado para usar.


viernes, 2 de mayo de 2014

Instalar Samba RHEL o Centos 6


A continuacion una pequeña guía para instalar samba server.

yum install samba

Configurar /etc/samba/smb.conf

workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = MYSERVER
hosts allow = 127., 192.168.0

# Directorio a compartir
[carpeta]
comment = FTP Linux
path = /data/carpeta
writable = yes
directory mask = 0755
create mask = 0644


Cliente y servidores en la red /etc/samba/lmhosts

127.0.0.1 localhost
192.168.0.10 server


Crear usuario y password samba


useradd -c "Usuario para Windows" -s /sbin/nologin usuario
smbpasswd -a usuario


Agregar servicio al inicio e iniciar

chkconfig smb on
service smb start


Probar configuración

testparm

Probar servidor localmente o desde un cliente

smbclient –L server