~sergio

LOG

crear usuario e base de datos no postresql

05-03-2024

Sempre teño que consultalo, así que queda por aquí:

sudo su postgres -
psql
CREATE USER my_username WITH ENCRYPTED PASSWORD '1234';
CREATE DATABASE new_database OWNER my_username;
	    

umask para todos

23-10-2023

O umask por defecto en Debian é 0022 o que nos crea arquivos cos permisos 644 e facíame falta que por defecto o grupo tamén tivera permisos de escritura e que esto se aplicara en todos os usuarios.

Pódese configurar en PAM, para elo, agrega a seguinte liña a /etc/pam.d/common-session:

session optional pam_umask.so umask=0002

Hai un problema cos usuarios que teñen unha Bourne Shell (sh, bash, khs, ash...)e é que esta reescribe o umask que lle chega de PAM co do profile, así que configurámolo no /etc/profile ou agregando un arquivo ós incluidos:

cat > /etc/profile.d/change_umask.sh << EOF
# Change default umask from 0022 to 0002
# changing permissions from 644 to 664
umask 0002
EOF

Así xa nos queda a mesma umask para todos os usuarios :D


Docker: configuración do log-driver

19-09-2023

O demonio do Docker non rota os logs por defecto. É moi típico que agote todo o espacio en disco.

Pódese configurar o driver dos logs no arquivo /etc/docker/daemon.json para que faiga a rotación. Unha configuración que uso normalmente é esta:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-file": "3",
    "max-size": "10m"
  }
}

Así, gardará o log ata un máximo de 10 megas de almacenamento e irá gardando ata 3 arquivos.

NOTA: A ter en conta que solo «collerán» a configuración os contenedores novos.


Asterisk: Too many open files

11-09-2023

Antes, para solventar este erro facía a ñapa de poñer en /etc/init.d/asterisk esta liña xusto despóis do shebang:

ulimit -n 2048

Ahora; a maneira é, no /etc/asterisk/asterisk.conf agregar a seguinte liña no contexto «options»:

[options]
maxfiles = 999999

Logo é necesario reiniciar o proceso do Asterisk:

host*CLI> core restart now

Así, xa podemos comprobar que o proceso ten o novo límite:

$ cat /proc/`pidof asterisk`/limits | grep "Max open files"
Max open files            999999               999999               files

Cómo accedo ó Proxmox do meu homelab

07-09-2023

En lugar de publicar na internet o acceso web ó Proxmox que teño no meu «homelab» o que decidín facer (mira que podía usar unha VPN, pero sonche así) foi usar un tunnel SSH.

Así que me creei un pequeno script de bash que teño en ~/bin/proxmox-homelab e que contén o seguinte:

#!/bin/bash

# kill ssh tunel si estaba en execución
pid=$(ps aux | grep '\-L8006:192\.168\.99\.3:8006' | awk '{print $2}')
kill -9 $pid > /dev/null 2>&1

# tunel ssh
ssh -fNT -i ~/.ssh/nas -L8006:192.168.99.3:8006 bob@foo.tr4ck.net

# Proxmox web UI
xdg-open https://localhost:8006

Desta maneira, cando me fai falta, executo «proxmox-homelab» e xa teño acceso á GUI.


Tecla 'Enter' rota

08-12-2022

Teño un macbook pro de principios do 2011, un core2duo con 4Gb de RAM que non da para moito, pero para poñer música e tal ben chega... A historia é que se lle jodeu a tecla 'Enter' o que me obligaba a usar un teclado externo pero gracias á ferramenta xmodmap puiden remapear o 'Shift dereito' para que funcione como o 'Enter'.

A maneira de facelo é volcando a configuración actual a un arquivo no home do usuario:

xmodmap -pke > .xmodmap

E logo editando o ~/.xmodmap intercambiando esas dúas teclas. Este sería un diff cos cambios:

29c29
< keycode  36 = Return NoSymbol Return
---
> keycode  36 = Shift_R NoSymbol Shift_R
55c55
< keycode  62 = Shift_R NoSymbol Shift_R
---
> keycode  62 = Return NoSymbol Return

Por último crease o arquivo .xinitrc no home do usuario co seguinte contido:

xmodmap .xmodmap

Dándolle permisos de execución:

chmod 755 ~/.xinitrc

NOTA: Así como post-data, a configuración indicada arriba sería para un GNU/Linux pero eu fíxeno en un OpenBSD cos seguintes cambios:


Dithering en imaxes

30-11-2022

Recientemente descubrín que a web Low Tech Magazine usa unha técnica nas súas imaxes chamada "dithering" que consiste en pasar a imaxen a escala de grises obtidos pola densidade de píxeles. Esto o que permite é ter unha imaxen en B/N lexible que pesa pouquiño.

Por exemplo:

telegraph operator

Usando GIMP

A maneira de facelo no GIMP é a seguinte: Primeiro instalar o módulo:

sudo pacman -S gimp-plugin-gmic

Logo no propio GIMP ir a Filtros -> G'MIC-Qt e abrirase un menú con tódolos filtros que ten ese módulo. Ahí buscar "Dithering" e o da opción "Black & White" vai ser o máis parecido ó dithering de Floyd–Steinberg

Logo xa, para o meu gusto, selecciono a cor blanca e bórroa de maneira que queda unha imaxen co "fondo" transparente.

Usando ImageMagick

Outra maneira é usar o comando "convert" que é parte de ImageMagick. Así con este comando obtemos o mesmo resultado que co GIMP:

convert orixinal.jpg -dither FloydSteinberg -remap pattern:gray50 salida.gif
imaxen de unha scooter co dith FloydSteinberg

Tamén se consiguen bos resultados con un dither ordenado, así:

convert orixinal.jpg -colorspace gray -ordered-dither o8x8 salida2.gif
imaxen de unha scooter co dith ordenado

smartd config en Debian

30-11-2022

A historia é recibir alertas no email si hai un fallo de SMART en un dos discos do nas da casa. O cal é básicamente un Debian con dous discos duros en espello.

O primeiro é instalar as ferramentas:

apt-get install smartmontools

Logo, non está de máis comprobar si teñen SMART, normalmente así é:

smartctl -i /dev/sda

A configuración está en /etc/smartd.conf. Por exemplo, as seguintes liñas establecen un escaneo corto tódolos días ás 2am e un largo o sábado ás 3am, avisando por email si detectaron algún fallo:

/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03) -m alert@tr4ck.net
/dev/sdb -a -o on -S on -s (S/../.././02|L/../../6/03) -m alert@tr4ck.net

Por último non queda máis que activar o demonio no @#~⅛£ systemd:

systemctl enable|disable smartmontools
/etc/init.d/smartmontools start|stop

I esto é todo. Aínda está por confirmar que de verdade funciona pero espero que non me teña que chegar ningunha alerta... :D


SSH inverso

13-06-2022

O obxectivo é acceder a un porto de unha máquina de maneira remota sin ter acceso ssh a esa máquina, nin posibilidade de NAT.

Desde a máquina remota (mk-remota) executamos un ssh co parámetro -R que tuneliza un porto remoto a un local, conectándonos a un servidor intermedio (srv-intermedio) ó que poidamos facer ssh, claro...

ssh -R 9980:localhost:80 user@srv-intermedio

Esto abrira o porto 9980 en srv-intermedio e estará "tunelizado" hacia o porto 80 de mk-remota.

Desta maneira conectámonos por ssh desde o noso equipo ó srv-intermedio co parámentro -L que "tunelizará" un porto local do srv-intermedio ó noso equipo:

ssh -L 3380:localhost:9980 user@srv-intermedio

Así si accedemos no noso equipo a localhost:3380 a petición irá a srv-intermedio:9980 que a levará a mk-remota:80. Accedendo a un porto sin ter que facer nat e sin ter acceso ssh en mk-remota.


23-02-2022

ProFTPd enxaula en un chroot os usuarios, polo tanto non poden seguir os symlinks que salen del. A maneira de solucionar esto é facer un "binding mount", así o directorio parecerá dentro do chroot permitíndolle ó usuario acceder.

Podese facer executando o comando directamente:

mount -o bind /orixen /destino

Ou tamén engadindoo o /etc/fstab para facelo permanente, usando a seguinte liña:

/orixen /destino none defaults,bind 0 0

Facendo a nosa web un pouco menos hostil

09-02-2022

Para axudar a facer que a web sexa menos hostil para o usuario atopeime con un par de recursos que fan que o rastreo sexa menor ou polo menos non por parte de unha megacorp.

Así por un lado temos https://matomo.org/ que é unha especie de Analytics que podemos aloxar on-premise evitando que os datos de navegación dos nosos usuarios se vaian a alimentar as IAs da "don't be evil" megacorp.

E por outro lado esta app que nos permite descargar e servir nos mesmos as famosas fontes, polas mesmas razós que o caso anterior.


FreeIPA - atributo 'mail'

21-01-2022

Hai servicios, como wiki.js, que necesitan que cando listan un usuario no LDAP mostre o atributo 'mail'. Nós estamos usando como servidor LDAP o FreeIPA por comodidade e non mostra este atributo por defecto.

Pódese facer a consulta con este comando:

ldapsearch -x -H ldap://127.0.0.1 uid=manolo.fernandez

E veremos que non aparece o atributo 'mail' por ningún lado.

A historia é que no FreeIPA ese campo está baixo o permiso 'System: Read User Addressbook Attributes' e decir, para usuarios autenticados. Para que apareza en unha consulta anónima debería estar baixo o permisos 'System: Read User Standard Attributes'.

Para facer que se mostre nas consultas anónimas hai que ir ó panel do FreeIPA e logo en ServidorIPA -> Role-Based Access Control -> Permisos buscar 'System: Read User Standard Attributes' e ahí, no listado "Atributos efectivos" verás que o atributo 'mail' non está marcado. Solo faría falta marcar a casilla e aplicar.

Así xa aparecerá cando se faiga unha consulta anónima e, no noso caso, permitiranos facer login no servicio autoaloxado wiki.js.


Logs estructurados en Nodejs

29-11-2021

Coa historia da Elastic Stack está mellor soltar os logs en JSON, así é máis sinxelo de que se procese logo.

Podemos usar a biblioteca "winston" que parece que é a máis famosa para logs en nodejs. Esta sería a maneira:

// npm install winston
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, json } = format;
 
const logger = createLogger({
  format: combine(
    timestamp(),
    json(),
  ),
  transports: [new transports.Console()]
})
 
logger.log({
  level: 'warn',
  message: 'Lore ipsum dolor...'
});
            

Esto escupe:

{"level":"warn","message":"Lore ipsum dolor...","timestamp":"2021-11-29T12:25:15.302Z"}

VIM - Configuraciós específicas por arquivo

25-11-2021

Por exemplo, cando editas un archivo de configuración de Asterisk fora do directorio "/etc/asterisk" non lle pon ben os colorinchis da sintaxis. É necesario decirlle que é un archivo do Asterisk, esto decímosllo con: "Escape" para ir a modo normal e logo con ":set filetype=asterisk".

Para non ter que teclealo cada vez que se abre ese archivo existe unha configuración chamada "modeline" e "modelines". Aquí pódense ver exemplos: https://vim.fandom.com/wiki/Modeline_magic ou no propio vim podese ver a documentación con ":help modeline". Pero básicamente é ter activas estas opciós no vimrc:

set modeline
set modelines=5

A primeira activaa e a segunda dice que a "modeline" pode estar nas 5 primeiras, ou últimas, liñas do archivo.

Así; si no archivo, ó principio de todo ou ó final, temos algo como:

; vim: filetype=asterisk cursorline

O asterisk interpretará esta liña e aplicará esas opciós: filetype e cursorline, podéndolle poñer ahí todas as necesarias. Poderédes ver polo internet que se usa bastante para especificar tabulaciós específicas.


Directorios de Usuario en NGINX

27-10-2021

Para mostrar os directorios de usuario desde NGINX na url: http://host/~usuario é necesario agregar a seguinte configuración na sección "server" do arquivo de configuración do NGINX:

# directorios de usuario
            location ~ ^/~(.+?)(/.*)?$ {
                alias /home/$1/public_html$2;
                index index.html index.htm;
                autoindex on;
            }

Así servirase o directorio "/home/usuario/public_html" na URL indicada anteriormente.


package-lock.json no repositorio git

25-10-2021

O package-lock.json está diseñado para que un equipo de programación traballe con exactamente as mesmas versiós dos módulos. A diferencia é que no package.json aparecerán símbolos antes das versiós como por exemplo "^1.2.3" ou "~1.2.3", o primeiro quere decir: "versiós superiores á 1.2.3" e o segundo quere decir "versiós mais ou menos iguais á 1.2.3". Sin embargo, no package-lock.json describe explícitamente a versión do paquete, donde descargalo e a súa suma de verificación. Exemplos:

Entonces, para asegurarnos que traballamos coa mesma versión, en vez de executar:

npm install

Será mellor executar:

npm ci

Este último comando esixe que exista o package-lock.json e instala as versiós ahí especificadas.