Buscar aquí

31 agosto 2022

Convertir imagenes de VM desde qemu a VirtualBox

 Convertir primero la imagen qcow2 a raw para exportarla a otro formato

qemu-img convert /pathAlArchivodelaVM/vm1.qcow2 -O raw /rutaAlDirectorioDedestino/vm1.raw && notify-send "Done convert"
 

Después la convertimos a formato vdi:

VBoxManage convertfromraw /rutadelarchivodelaVM/vm1.raw --format vdi /rutadelarchivofinal/vm1_vboxmanage.vdi && notify-send "Done convert"

 Después se compacta:

VBoxManage modifyhd /rutadelarchivofinal/vm1_vboxmanage.vdi --compact && notify-send "Done compact"

26 noviembre 2020

Problemas con redirección de ventanas en X11

Existen una serie de problemas con la redirección de ventanas en X11 donde pueden estár involucrados más de una causa.

Si se obtiene un error similar a:

Error: Can't open display:

unable to open display

Lo primero a revisar es chequear si el SSH del servidor donde estamos tratando de ejecutar la aplicación, permite la redirección de X11, cambiando en /etc/ssh/sshd_config

#X11Forwarding no

a X11Forwarding yes

reiniciar el servicio sshd:

systemctl restart sshd

con esto ya debiera responder sin problemas al comando:

ssh -X usuario@servidor

También si se quieren ejecutar algunas aplicaciones antiguas es bueno tener instalado el paquete xorg-x11-fonts-75dpi


06 octubre 2020

Cambiar brillo por consola del monitor secundario

Cambiar el brillo del monitor secundario via GUI no la he encontrado y me gusta más por consola, pues es muy fácil:

xrandr --output HDMI-1 --brightness 0.8 

Donde HDMI-1 es la salida del comando y corresponde al monitor secundario que quiero manipular.

El valor de 0.8 corresponde al valor de brillo que queremos probar.

17 julio 2020

cómo cambiar la imagen de fondo (background) de la pantalla de login en Fedora

Esto debiera ser dramáticamente simple, y lo es... a la forma de fedora claro.  La cosa es primero saber que display manager se está usando GDM? o Lightdm? GDM, es basante difícil de configurar en muchas cosas, pero lo primero es lo primero, sin importar cúal se está usando, hay que copiar la imagen que se quiera usar a algún directorio donde los demonios de linux tengan acceso, y el directorio home normal de usuario (/home), no tienen acceso, por ello, lo primero es copiar a otro directorio, por ejemplo /usr/share/backgrounds/. En este directorio está el default.png, que es el escritorio por defecto que trae fedora.

Para saber si se está usando GDM o Lightdm se puede usar una aplicación que se llama Display Manager Switching Tool, que provee el paquete system-switch-displaymanager-gnome-1.5.1-7.fc31.noarch  Con esta se obtiene una ventana que muestra cual Display Manager se está usando. 

Para Lightdm, basta editar el archivo /etc/lightdm/slick-greeter.conf y cambiar la opción de background a donde está la imagen que queremos colocar.  Entonces se cierra la sesión y debiera aparecer el nuevo background.  Si se prefiere, se puede utilizar una herramienta gtk para realizar esto, lightdm-gtk-greeter-settings.noarch, que entrega /usr/bin/lightdm-gtk-greeter-settings, esto abre una ventana donde se puede personalizar varias opciones más.

Para GDM, nunca conseguí hacerlo de manera simple.

30 mayo 2020

Archivos utilizados de un directorio

Para saber que archivos están siendo utilizados, pertenecientes a algún directorio, es posible saber utiilzando el comando lsof.

En Fedora, basta con ejecutar lsof /home/midirectorio

En RHEL se puede usar lsof +D /var/opt/ y resultado será todos los archivos utilizados de ese directorio.

29 abril 2020

cuánta memoria consume tomcat / jboss / etc... de la asignada en la JVM

Un tema bastante misterioso es cuánta memoria está utilizando tomcat o JBOSS u otro similar, para ello podemos utilizar esto en un linux:


jstat -gc 5420 | tail -n1 | awk '{printf "%.0f\n",$3+$8+$6+$4}'

con el resultado del jstat awk sumará los campos relativos al usage y entregará el HEAP utilizado.

20 marzo 2020

Cuántas veces existe un string en una línea

Para un problema simple como saber cuántas veces hay un string en una línea, no es tan simple de obtener, una manera simple con awk:

awk '{n=gsub(/patron/,"");print n;}' archivo

esto por ejemplo si tenemos un archivo con una línea:

cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;cuantas veces;pocas veces;

awk '{n=gsub(/cuantas veces;/,"");print n;}' tmp

devolverá 15.

19 junio 2019

Migrando configuraciones de máquinas virtuales KVM

Para cuando cambiamos de máquina existe una manera muy fácil de migrar las máquinas virtuales KVM, que es exportando la configuración a un archivo XML e importandola en la nueva máquina. Aquí obviamente tiene que respetarse las mismas rutas y configuraciones de red y storage, de lo contrario las máquinas no arrancarán. El procedimiento es simple y es así: virsh dumpxml > /ruta/al/archivo/xml/destino.xml Esto genera el archivo XML con toda la definición de la VM. En la máquina nueva: virsh define /ruta/al/archivo/xml Esto debiera ser hecho con root en todo caso.

16 mayo 2019

Cursor no se ve en la terminal

Este es un problema extraño y debido a alguna secuencia de teclas presionadas, el cursor se desparece de la terminal. La terminal puede ser usada con normalidad, pero el cursor no se ve ni en modo insertar o reemplazar, la forma más rápida y sin necesidad de cerrar la terminal, es lanzando el "mostrar cursor" que es asi, en la terminal que tenemos con el cursor oculto: echo -en "\e[?25h" y con esto, reaparecerá.

09 julio 2018

Agregar número serial y otros atributos a máquina virtual KVM

Es posible agregar algunos datos a la máquina virtual ejecutándose en KVM, para complementar la información del sistema operativo en la VM.  Para ello, se debe editar la configuración, con la máquina detenida:

virsh edit <nombre maquina virtual>

Agregar:

 <sysinfo type='smbios'>  
   <bios>  
    <entry name='vendor'>QEmu/KVM</entry>  
    <entry name='version'>0.13</entry>  
   </bios>  
   <system>  
    <entry name='serial'>32dfcb37-5af1-552b-357c-be8c3aa38310</entry>  
   </system>  
 </sysinfo>  
 <os>  
   <type arch='x86_64' machine='rhel5.4.0'>hvm</type>  
   <boot dev='hd'/>  
   <smbios mode='sysinfo'/>  
 </os>  

Es importante que ya existirá el tag os y se debe agregar solamente el tag smbios, para que tome en cuenta lo existente en el tag sysinfo type = 'smbios'


16 abril 2018

Acceder a un servidor remoto saltando en un servidor con ssh

Suele pasar que al tener accesos via VPNs se puede llegar a un servidor ssh y desde se debe acceder a los otros, habitualmente, puede ser necesario acceder a un servidor de base de datos, conseguir archivos via ftp o sftp por ejemplo.  Para estos casos lo mejor es usar el túnel a través de SSH.

La idea es, acceder a un servidor X saltando en el servidor A que tenemos acceso directo via SSH, la gracia de esto, que el ssh desde el servidor A hasta el X, puede ser cualquier puerto, no tiene que ser otro SSH, de ahí la flexibilidad.

El comando es así:

ssh -L Puerto_Local:IP_Servidor_X:Puerto_del_Servicio usuario@Servidor_A

  • Puerto_Local, es el puerto desde donde comenzará la comunicación entre el PC y el servidor X, puede ser cualquier número de puerto que no esté siendo utilizado.
  • IP_Servidor_X, esta IP es el servidor al que me interesa acceder.
  • Puerto_del_Servicio, es el número de puerto que necesito conectar, por ejemplo, SSH y SFTP usan el 22, bases datos como Oracle 1521, Postgresql 5432, etc...
  • usuario@Servidor_A, es el usuario y nombre de servidor o IP del servidor al que tenemos acceso vía SSH normalmente.
Por ejemplo, para conseguir los archivos vía SFTP:

ssh -L 8888:10.11.12.75:22 usuario@servidorssh

preguntará la contraseña de usuario y se abrirá una consola, eso quiere decir que se ha establecido el túnel, para confirmarlo, ejecutar:

netstat -antop | grep 8888

debiera aparecer algo similar a esto:

tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      10931/ssh            off (0.00/0/0)

el LISTEN es importante, quiere decir que está listo para ser usado.

Entonces ahora ejecuto:

sftp -P 8888 usuarioX@localhost

preguntará la contraseña del usuarioX, este es el usuario del servidor_X!! y accederá al sftp!! pudiendo descargar o transferir cosas de manera directa sin problemas!!

Si se quiere usar para conectar a un servidor de base de datos, se debe utilizar el 8888 como puerto del servidor y como nombre del servidor usar localhost, no olvidar eso para que funcione.


12 marzo 2018

cómo obtener información del disco instalado?

De las dudas más comunes, es cómo obtener información del hardware, sobre todo del disco duro, para esto, la mejor manera, es utilizando smartctl, comando que es parte del paquete smartmontools.  Para usarlo se debe:

[~]# smartctl -i /dev/sda
smartctl 6.5 2016-05-07 r4318 [x86_64-linux-4.15.6-200.fc26.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     TOSHIBA MQ01ACF050
Serial Number:    15RICDOST
LU WWN Device Id: 5 000039 603b88b2c
Firmware Version: AV0A1C
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Mar 12 18:32:15 2018 -03
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Como se ve, rápidamente se obtiene todo lo necesario, incluso, el form factor y velocidad.



20 noviembre 2017

cómo compartir carpetas entre máquinas linux

Una duda bastante habitual, es cómo compartir archivos entre dos máquinas linux, y en realidad, es algo que se hace desde hace mucho tiempo y no es complicado.  Habitualmente, utilizamos quizás un cliente sftp, o rsync o quizás scp, etc.  Pero una mejor manera es utilizando NFS un antiguo protocolo en los *NIX de muy buena performance y fácil configuración, que nos permite compartir los filesystems, dando variados ajustes de seguridad de ser necesario.


Primero, hay que levantar algunos servicios como nfs, una vez levantado, hay que agregar al firewall el puerto del servicio que es el 2049.

Después se modifica el archivo /etc/exports o se agrega un archivo al /etc/exports.d, en mi caso lo agregué al /etc/exports:

~]# cat /etc/exports
/home/nfs 10.11.13.0/24(rw,sync)

La idea aquí es compartir el directorio nfs en la carpeta /home, a todos los equipos que estén en la red 10.11.13.X, y que tengan permiso de lectura y escritura.  Además, el sync nos indica que los cambios deben ser completados en el servidor NFS antes de informar el éxito el cliente, esto es para asegurarse de que no hay problemas.
 

Una vez lista la modificación, se ejecuta

exportfs -a

y con esto queda disponible el directorio compartido.


Desde otra máquina con linux, para montar el directorio compartido, se debe tener disponible algún punto de montaje,  habitualmente es bueno dejarlos bajo /mnt, y se debiera crear una nueva carpeta:

mkdir /mnt/nfs_compartido

Finalmente, podrán montar este directorio compartido con un comando como:

mount -t nfs nombre_servidor_nfs:/home/nfs /mnt/nfs_compartido

hay un detalle importante acá en la configuración, es que si se agrega en el archivo de configuración /etc/exports el parámetro fsid=0 por ejemplo (he visto varias páginas que usan esta opción), se tendrá que montar en la máquina cliente utilizando

mount -t nfs nombre_servidor_nfs:/ /mnt/nfs_compartido

pero por simpleza y saber que se está montando, es mejor no usar el fsid.

06 noviembre 2017

Cómo reemplazar solo una parte de los textos

Habitualmente, cuando se necesita reemplazar una parte de texto pequeña, no toda una palabra, por ejemplo, en una línea se tiene la hora con formato:

HH:MI:SS

por ejemplo:
cualquier texto, 23:59:57
otro texto cualquiera, 23:58:04
un texto mas cualquiera, 23:57:39
el texto cualquiera, 23:56:37

si interesara por ejemplo dejar solo lo correspondiente a la hora, algo así
cualquier texto, 23:00:00
otro texto cualquiera, 23:00:00
un texto mas cualquiera, 23:00:00
el texto cualquiera, 23:00:00

una forma util es usando sed:

sed 's/\(.*\)\([0-9][0-9]\):[0-9][0-9]:[0-9][0-9]/\1\2:00:00/'

traduciendo esto, en la parte del patrón a buscar:
1-  \(.*\) esto hace match con cualquier cosa
2- \([0-9][0-9]\) esto hace match, con un patrón que viene con dos números entre 0 y 9 cada uno.
3- :[0-9][0-9] esto hace match, con un patrón que viene un símbolo de dos puntos (:) seguido de dos números, entre 0 y 9 cada uno.
4- :[0-9][0-9] esto hace match, con un patrón que viene un símbolo de dos puntos (:) seguido de dos números, entre 0 y 9 cada uno.

Entonces el patrón buscaría:

Cualquier cosa, seguida de dos números  entre 0 y 9 cada uno, seguido del símbolo de dos puntos, seguido de dos números entre 0 y 9, seguido del símbolo de dos puntos, seguido de dos números entre 0 y 9.

El truco aquí es que en 1 y 2, el patrón está encerrado entre \( y \), esto indica que lo que haga match en ese patrón, será posible utilizarlo después.  Por ello, después en la segunda parte del sed, donde se indica con que se reemplazará, aparecen los \1 y \2, que indica lo obtenido en 1 y 2.


31 julio 2017

cómo ejecutar una aplicación gráfica después de un su -

Pasa que al hacer un cambio de usuario normal con su - en linux, no se puede ejecutar una aplicación gráfica, sin importar si se cambia a usuario root u otro.  En mi caso por ejemplo, estaba tratando de gatillar el comando dbca de oracle, para crear una base de datos, me cambie al usuario oracle usando su - oracle, y no es posible lanzar las app graficas, a pesar de setear la variable display.  Para conseguir esto se debe ejecutar:

[usuario@linux ~]$ xauth list
linux/unix:  MIT-MAGIC-COOKIE-1  73841fb1abcd6c28d4e03e477542bf53

[usuario@linux ~]$ echo $DISPLAY
:0

Acto seguido cambiar de usuario con su - oracle por ejemplo

y ejecutar 

xauth add

Ojo que por defecto si se fijan muestra linux/unix: MIT... despues del unix: debiera ir el número de display, pero debido a que está usando el display 0 no lo muestra  y se debe agregar a mano al comando, por ello debe quedar como:

xauth add linux/unix:0  MIT-MAGIC-COOKIE-1  73841fb1abcd6c28d4e03e477542bf53

y finalmente export DISPLAY=
y con eso ya se debieran poder gatillar las aplicaciones graficas desde el usuario a pesar de pasar por su -

Un detalle, en el caso que sea necesario de pasar desde el usuario usuario -> root -> oracle , por ejemplo, hay que hacer la misma operación de xauth add en el usuario root.

04 mayo 2017

importar ovpn a Network Manager

Importar una VPN del tipo OpenVPN en Network Manager siempre tiene algún problema, entonces la manera más fácil y fluida que encontré es hacerlo a través de la consola de comados con:


nmcli connection import type openvpn file /ruta/al/archivo/ovpn

ejemploL

[root@equipo ~]# nmcli connection import type openvpn file /home/user/Documents/configuration.ovpn
Error: failed to import '/home/user/Documents/configuration.ovpn': configuration error: unsupported 1th argument remote_host to 'route' (line 6).

si se fijan, falla en la línea 6, si esa linea es quitada desde el archivo, funciona de inmediato :)

Ojo, esto se debe hacer como root o usando sudo!!

03 mayo 2017

mejorar las búsquedas con locate

Una herramienta muy buena para buscar archivos en los sistemas de archivos es el comando locate.  Una de las ventaja/desventaja es que si queremos buscar por una parte del path o nombre del archivo, funciona perfecto, por ejemplo, si se necesita saber todos los archivos que contienen la palabra que ingreso, por ejemplo:

locate iso

buscará todos los archivos que en el nombre tienen iso o directorios que su nombre contenga iso.

Ahora, para una búsqueda más precisa  puede ser usado con expresiones regulares, por ejemplo, si se quiere buscar solamente los archivos que terminan con la palabra iso, puedo buscar con:

locate --regexp iso$

/home//SOS/rhel-server-6.4-x86_64-dvd.iso
/home/ISOS/rhel-server-6.6-x86_64-dvd.iso
/home/ISOS/rhel-server-6.8-x86_64-dvd.iso
/home/ISOS/rhel-server-7.2-x86_64-dvd.iso


Cabe notar que locate se actualiza diaramente, en base a la ejecución de un comando y que tiene una base de datos desde donde muestra los resultados.  Si se quiere actualizar los resultados, debe ser ejecutado manualmente, para más detalles revisar man locate.

01 diciembre 2016

obtener como resultado la entrada pero recortada

Al momento de trabajar con texto, puede ser necesario recortar la salida de este texto, por ejemplo,

echo 12.3456789

es necesario que muestre solo 3 decimales:

echo 12.3456789 | sed -r 's/([0-9]+\.[0-9][0-9][0-9])[0-9]+/\1/g'
12.345

La magia está en el uso de paréntesis en la sección de formato y en la sección de reemplazo el \1, esto significa:

- los parentesis redondos, marcan una sección que se recordara.
- el \1 indica que se usará el primero bloque marcado en el formato.

Explicando la expresión regular va a recordar cuando venga 1 o más números entre 0 y 9, seguido por el caracter de punto, seguido de 3 números, cada uno entre 0 y 9.  Este es el bloque a recordar.  Además, la expresión contempla que debe venir seguido de un numero de 1 o más cifras entre 0 y 9, pero esto no se recuerda pues no está entre paréntesis. 

El -r en el sed es para que indicarle que use expresiones regulares extendidas, pues el uso de estos parámetros no son parte del conjunto estandard de opciones.

Cómo dejar una captura de red ejecutándose en background y generando múltiples archivos?

Muchas veces es necesario realizar capturas e idealmente que se ejecute por un periodo de tiempo largo y no depender de la VPN, hora, etc... y ahí es donde se puede aprovechar comandos de linux y las opciones de tcpdump que permite justamente generar múltiples archivos circulares.

Primero, cómo dejar corriendo en background un proceso, en este caso una captura con tcpdump.  Se puede ejecutar utilizando nohup y el simbolo de & para ejecutarlo en background y dejar el comando atado a la consola.

Segundo, parámetros de tcpdump para generar múltiples archivos y uso circular.  tcpdump incluye las opciones de -C y -W (notar que son mayúsculas!!!), cada uno:

  • -C hace referencia al tamaño del archivo con la base de 1MB, así se debe poner un número y esto significa el tamaño de MB qeu tendrá el archvo, por ejemplo, si se usa -C 10 significa la generación de archivos de 10MB.
  • -W hace referencia a la cantidad de archivos, se debe agregar un número para justamente indicar cuántos archivos se van a generar, por ejemplo, -W 10, indicamos que se generen hasta 10 archivos, cuando se creen los 10 y el último exceda el tamaño indicado en el parámetro -C se comenzará a escribir el primer archivo.
 Entonces el comando completo sería:

                    nohup tcpdump -vvvv -C 10 -W 10 -w /tmp/cap0112.cap &

¿Cómo terminar la captura?
Simple, buscamos el pid del la captura ejecutándose, por ejemplo:
             ps aux | grep tcpdump

y después kill -9

17 noviembre 2016

Buscar en comandos anteriores

Es común en linux, utilizar las teclas del cursor para buscar comandos anteriores o lanzar el history y usar la salida, pero también existe la opción de utilizar la búsqueda reversa aplicando control + r en la consola y así por ejemplo, si yo quiero buscar un ls anterior

[root@mipc ~]# man ls
(reverse-i-search)`ls': man ls

entre las comillas dice que el ultimo comando ejecutado con ls  es 'man ls'.  Si quiero uno anterior, vuelvo a presionar control +r y obtengo:

[root@lxmardones ~]#
(reverse-i-search)`ls': ls -lS

como ven una muy buena opción para buscar.