Como limpiar memoria cache, inodes y dentries

Habitualmente en linux, nos encontramos que alguna aplicación denamica no funciona correctamente y es debido que no libera memoria cacheada.

Voy a explicar como liberar memoria cache, inodes y dentries y asi poder resolver este angustioso problema.

Si queremos eliminar cache ejecutaremos:

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

Si queremos eliminar inodes y dentries ejecutaremos:

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

Si queremos elimiar cache, inodes y dentries ejecutaremos:

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

Todo esto podemos incluirlo como tarea nocturna programada en el crontab y olvidarnos de este problema:

crontab -e

0 2 * * * sync; echo 3 > /proc/sys/vm/drop_caches

Cómo ajustar el uso de la memoria virtual (swap) en centos con Swappiness

Los sistemas somo muy de instalar todo por defecto y nunca miramos para estos problemas, pero se puede dar el caso de un mal ajuste de la memoria virtual (swap) y vernos en la necesidad de tener que ajustarla.

Voy a explicar como cambiar en un s.o centos.

Lo primero de todo vemos cual es el porcentaje actual utilizado:

cat /proc/sys/vm/swappiness
30

En el ejemplo vemos que esta configurado en el 30%, pongamos el caso de que nos parezca demasiado alto y lo queremos pasar al 10%.

La haremos con el siguiente comando.

sysctl vm.swappiness=10

Que nos gusta el compartimento y quremos dejar el cambio persistente, para que se utlice tras un reinicio, etc.

Pues editamos el fihero /etc/sysctl.conf y añadimos vm.swappiness=10 .

vi /etc/sysctl.conf

vm.swappiness=10

Y asi poco a poco podemos ir ajustando la memoria swap a nuestras necesidades.

Activar rc.local en CentOS 7

En las distribuciones de linux es muy habitual arrancar servicios al inicio directamente desde el archivo rc.local.
Desde la versión CentOS 7 ya no funciona de manera predefinida y tenemos que habilitar el servicio rc-local con los siguientes pasos.

Habilitamos permisos de ejecución al fichero.

chmod +x /etc/rc.d/rc.local

Activamos el servicio.

systemctl enable rc-local

Arrancamos el servicio.

systemctl start rc-local

Con estos pasos ya se arrancaran los scripts al inicio.

Corregir error yum en centos 6: YumRepo Error: All mirror URLs are not using ftp, http[s] or file

El otro dia me propuse a instalar software con yum en mi viejo centos 6 y me di cuenta que no era posible, ya que me salia este error: YumRepo Error: All mirror URLs are not using ftp, http[s] or file

Investigando di con la noticia de que el ciclo de vida de centos 6 termino el 30 de noviembre de 2020, total que me vi con la necesidad de actualizar los repositorios de yum, para poder seguir instalando software.

Para corregir el erorr basta con seguir estos pasos:

Editamos el fichero /etc/yum.repos.d/CentOS-Base.repo y sustituimos los bloques:

vi /etc/yum.repos.d/CentOS-Base.repo

[base]
[updates]
[extras]

Por los bloques:

vi /etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=https://vault.centos.org/6.10/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

# released updates
[updates]
name=CentOS-$releasever - Updates
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=https://vault.centos.org/6.10/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

# additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
baseurl=https://vault.centos.org/6.10/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Realizamos un yum clean all y ya tendemos disponible el yum para instalar todo lo que necesitemos.

Configuración de un proxy inverso en Apache

Últimamente esas apareciendo numerosos servicios web que se ejecutan en puertos diferentes de los standar 80/443, grafana por el 3000, rpimonitor 8888, o el conocido del tomcat 8080.

Pues con esta entrada voy a explicar cómo hacer una redirección de puertos de una manera muy sencilla con el apache y los módulos proxy_module y proxy_http_module.

Editamos el fichero de configuración del apache y habilitamos los módulos, para sistemas centos / red-hat.

vi /etc/apache/conf/httpd.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Para sistemas debian / ubuntu habilitamos con los comandos.

a2enmod proxy
a2enmod proxy_http

Y a continuación editamos el fichero del apache donde tengamos los host y configuramos el proxy para que apunta al puerto donde publiquemos la web (ej, grafana).

vi /etc/apache/conf/httpd.conf (centos / red-hat)
vi /etc/apache2/sites-enabled/000-default.conf (debian / ubuntu)

    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/

Reiniciamos el servidor apache y el grafana como en el ejemplo ya se publicara por el puerto 80.

Configurar DKIM para prevenir el spoofing de correo electrónico, con opendkim, postfix y centos7

DKIM (DomainKeys Identified Mail) es un método para firmar correos electrónicos utilizando una clave pública-privada.

DKIM se utiliza al recibir el servidor de correo para identificar el correo electrónico, que son enviados por servidores de correo autorizados, minimizando la posibilidad de recibir correos electrónicos SPAM.

Con este tutorial voy a explicar como realiziar en centos7 con postfix y opendkim.

Instalamos el software necesario.

yum install postfix opendkim

Ahora creamos la pareja de claves DKIM (publica y privada) utilizando el comando opendkim-genkey proporcionada por el paquete dkim-milter, con el dominio y selector a utilizar.

mkdir -p /etc/opendkim/keys/barrabinbarrabash.es
cd /etc/opendkim/keys/barrabinbarrabash.es

opendkim-genkey -r --domain=barrabinbarrabash.es --selector=barrabinbarrabash

Ahora asignamos los permisos correctos a la pareja de claves.

chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

Editamos el archivo de configuración /etc/opendkim.conf y agreguamos / actualizamos las siguientes lineas.

vim /etc/opendkim.conf
Mode     sv
Domain barrabinbarrabash.es
#KeyFile      /etc/opendkim/keys/default.private
KeyTable        /etc/opendkim/KeyTable
SigningTable   refile:/etc/opendkim/SigningTable
ExternalIgnoreList    refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

Luego edite el archivo de configuración de listas de claves de dominio /etc/opendkim/KeyTable y agregamos el dominio y la clave privada creada.

vim /etc/opendkim/KeyTable

barrabinbarrabash._domainkey.barrabinbarrabash.es barrabinbarrabash.es:barrabinbarrabash:/etc/opendkim/keys/barrabinbarrabash.es/barrabinbarrabash.private

A continuación, editamos el archivo /etc/opendkim/SigningTable añadiendo el dominio a utilizar.

vim /etc/opendkim/SigningTable

*@barrabinbarrabash.es barrabinbarrabash._domainkey.barrabinbarrabash.es

Editamos el archivo /etc/opendkim/TrustedHosts y añadimos el dominio autorizado.

vim /etc/opendkim/TrustedHosts

barrabinbarrabash.es

Ahora edite el archivo de configuración POSTFIX /etc/postfix/main.cf, habilitando el opendkim.

vim /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

Para finalizar la configuración arrancamos el servicio opendkim y reiniciamos postfix.

service opendkim start
postfix restart

Por ultimo solo nos faltaria incluir la entrada de dominio con la clave publica para validar los correos firmados.

cat /etc/opendkim/keys/barrabinbarrabash.es/barrabinbarrabash.txt
 
barrabinbarrabash._domainkey       IN      TXT     ( "v=DKIM1; k=rsa; s=email; "
          "p=dEp+wJKP+VUbhc9GigmK34ZjrSqqdKjIEWr2q9QEBAQUAA4GNADCBiQKBgQCdTtV/L65Gqm/rvBz1d6CCp8A2515DvSVp1H1bZs4t050mMA0GCSqGSIbGNADCBic9GigmK34ZjrSqqdKjIEWrQKBgQCdTtEqM8FqndiFYOderzljMMMqBdEp+wJKP+VUbhc9GigmK34ZjrIAocOD6pKDAQAB" )  ; ----- DKIM key barrabinbarrabash for barrabinbarrabash.es

Como solucionar el error al usar yum: “There was a problem importing one of the Python modules required to run yum.”

Estaba yo intentendo instalar com yum mi amado vim y me salto ese terror: “There was a problem importing one of the Python modules required to run yum.”

[root@pruebas~]# yum install vim
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   No module named yum

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.6

Total que me puse a investigar y se debia a que habia actualiza la version de python y no reconoce el modulo yum.

La solucion es bastante sencilla, buscamos con un whereis python las diferentes versiones de python instaladas.

[root@pruebas~]# whereis python
python: /usr/bin/python2.6 /usr/bin/python /usr/lib/python2.6  /usr/local/bin/python /usr/include/python2.6 /usr/share/man/man1/python.1.gz

Ahora sabiendo donde se encuentra la ruta del binario del python que necesitamos (en el ejemplo 2.6), bastara con indicarselo en el binario /usr/bin/yum .

vi /usr/bin/yum
#!/usr/bin/python2.6

Como solucionar error, Device eth0 does not seem to be present, delaying initialization

Dolores de cabeza me ha dado este error, hasta que pude dar con la solución.

Siempre me ha aparecido copiando maquinas virtuales de centos 6, pero a saber en cuantas ocasiones se puede dar.

Es debido que al copiar una maquina virtual y querer asignar otra ip, el s.o chifla con la mac de la interface de red, apareciendo el siguiente error, al hace el service network start

error Device eth0 does not seem to be present

El causante es el fichero /etc/udev/rules.d/70-persistent-net.rules , que no actualiza la mac nueva y muestra la anterior.

Fichero: /etc/udev/rules.d/70-persistent-net.rules

La solucion es tan sencilla como borrar el fichero y reiniciar el sistema operativo.

rm /etc/udev/rules.d/70-persistent-net.rules y reboot

Y con esto conseguimos que el centos pueda arrancar la interface de red

Rotar los logs de sistema en /var/log en linux

Los logs del sistemas se generan en el directorio /var/log, aquí se van guardando los accesos al sistema (secure), tareas de cron (cron), envíos de correo (maillog), eventos del sistema (messages), etc.

Y ya sea por falta de espacio, o por querer mantener un histórico, los sistemas vienen con la herramienta logrotate configurada.

En el fichero /etc/logrotate.conf , podemos ver la configuración standard, aquí un ejemplo de centos 7.

##/etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

En la configuración podemos ver como se ejecuta semanalmente (weekly), que se crea un fichero nuevo en cada rotado (create), etc

En el caso de no tener espacio con el comando /usr/sbin/logrotate -f /etc/logrotate.conf , podemos forzar la rotación y aliviar el espacio del sistema al comprimirse los ficheros generarse los nuevos.

Y en el caso de querer mantener un histórico de eventos, podemos programar en el crontab diariamente este pequeño script.

#!/bin/bash

### /home/admin/rotate_system_logs.sh

#Dia, mes anio
DAY=$(date +%d)
MONTH=$(date +%m)
YEAR=$(date +%Y)

#Directorio logs
LOGDIR="/var/log";

#Directorio historico logs
DESTDIR="/home/admin/system_logs/$YEAR/$MONTH/$DAY/";

# comprobar que existen los directorios destino y sino lo creamos
if [ ! -d $DESTDIR ]; then
        mkdir -p $DESTDIR
fi

#forzamos rotado logs
/usr/sbin/logrotate -f /etc/logrotate.conf

#mover los ficheros logs a directorio backup con fecha actual
mv -f $LOGDIR/*gz $DESTDIR

Cómo resetear contraseña root en CentOS 6 y 7

No es la primera vez que nos ha pasado (ni la ultima), que hemos olvidado la contraseña del usuario root.

Por eso con esta entrada voy a explicar a resetear la contraseña con unos sencillos pasos.

Lo primero que hareos es reiniciar el equipo y en la pantalla de seleccion de sistema operativo del grub, pulsaremos la tecla “e“, para entrar en el menu de edición.

Pulsamos “e”, en el menu del grub

Nos aparecere una pantalla como la siguiente:

Pantalla edición

Buscaremos la linea 16 donde aparece el sigueinte texto “ro

“ro” subrayado en amarillo

En este punto debemos cambiar el texto “ro” por lo siguiente:

 rw init=/sysroot/bin/sh

Debe de quedar como en la siguiente captura.

rw init=/sysroot/bin/sh subrayado en amarillo

A continuación pulsamos “ctrl + x“, para salir del menu de edición.

Accedemos al sistema con el siguiente comando:

chroot /sysroot

Y ya podemos cambiar la contraseña con el comando:

passwd root
Cambiamos contraseña root

Ahora ya tendriamos la contraseña cambiada y utilizando el comando “reboot“, ya podriamos utilizar la contraseña recien cambiada.