Algo de Linux

martes, 19 de junio de 2018

cambiamarca: Script para cambiar la marca de un equipo en el fichero /etc/escuela2.0

Reutilizando el código del script cambiahostname, he escrito otro script cambiamarca que permite cambiar la marca del equipo en el fichero /etc/escuela2.0:
#!/bin/bash
#
# Esteban M. Navas 
# Fecha creación:      19/07/2018
# Última modificación: 19/07/2018

# Si no hay parámetros, el script se está usando de forma interactiva
if [ -z "$1" ]; then

   DIALOG="dialog"
   tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
   trap "rm -f $tempfile" 0 1 2 5 15

   $DIALOG --title "Marca del equipo" --clear \
           --inputbox "Introduzca la marca que quiere asignar a este equipo [ ACER, APD, HP, Xtrem, ... ]:" 15 51 2> $tempfile

   retval=$?

   case $retval in
     0)
       MARCA=`cat $tempfile`
     ;;
     1) ;;
   esac
else
   MARCA=$1
fi


if [ "$MARCA" ] ; then

   grep -q '^marca=' /etc/escuela2.0 && sed -i "s/^marca=.*/marca=$MARCA/" /etc/escuela2.0 || echo "marca=$MARCA" >> /etc/escuela2.0

   /usr/sbin/sinc_puppet -f now
#  /usr/local/sbin/pkgsync -pcr

fi
En este caso:
  • Si existe, reemplazamos la definición del tipo de host en el fichero /etc/excuela2.0.
  • Si no existe, simplemente la insertamos.
Al igual que en el script cambiahostname, se puede indicar el nombre del host como parámetro del script. Y, si no se especifica, mostrará un cuadro de diálogo para que lo escribamos.

Tras cambiar el host, se ejecutará sinc_puppet (He dejado la línea que ejecutaría pkgsync comentada).

Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 18 de junio de 2018

Modificado el script musthave-build para Ubuntu Bionic Beaver

He modificado el script musthave-build para generar la lista de paquetes instalados en el sistema en Ubuntu Bionc Beaver. 

Aquí podéis ver el código:
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 13 de junio de 2018

Script auto-config-network: Configurar automáticamente las interfaces de red del equipo

El script auto-config-network es un script ideal para ejecutar en una máquina que acabamos de clonar. Su función es configurar automáticamente las interfaces de red de la máquina donde lo ejecute.

Lo primero que hace es eliminar el fichero /etc/udev/rules.d/70-persistent-rules para que no tenga datos de la máquina modelo en caso de que se hubiera clonado el equipo. Una vez eliminado, lo vuelve a regenerar detectando las interfaces de red de la máquina.


Por otro lado, hace una copia el fichero /etc/network/interfaces en /etc/network/interfaces.old y lo regenera automáticamente, haciendo lo siguiente:
  • Configura la interfaz localhost.
  • Configura con una IP estática (192.168.0.254), las interfaces configuradas para servir DHCP en el fichero /etc/default/isc-dhcp-server que tienen link.
  • Configura con una IP dinámica las interfaces que tienen link pero no se encuentran configuradas para servir DHCP.
Éste es el script que utilizaré para configurar las interfaces de red de una máquina una vez clonada.

Instalarlo es muy sencillo:
# wget --no-check-certificate -O /usr/local/sbin/auto-config-network https://raw.githubusercontent.com/algodelinux/cambiahostname/master/auto-config-network
# chmod 755 /usr/local/sbin/auto-config-network
Aquí podéis ver el código completo de auto-config-network:

Publicado por primera vez en http://enavas.blogspot.com.es

Script cambiahostname: Cambiar el nombre de una máquina y realizar un pkgsync

Escribí el script cambiahostname tan sólo para facilitar la tarea de establecer el nombre del equipo en un curso de puppet. Pero, más adelante, me di cuenta que podía resultarme muy útil en el centro si lo modificaba para que ejecutara pkgsync tras cambiar el nombre. Estos últimos días, he vuelto a modificarlo de manera que:

  • Permite introducir el nombre de la máquina como parámetro.
  • Si no se introduce el nombre como parámetro, tratará de obtenerlo consultando al DNS definido en DNSSERVER.
  • Si no se puede obtener el nombre consultando al servidor DNS, se solicita su introdución mediante teclado. 

Éste es el script que utilizo para configurar una máquina una vez clonada.

Instalarlo es muy sencillo:
# wget --no-check-certificate -O /usr/local/sbin/cambiahostname https://raw.githubusercontent.com/algodelinux/cambiahostname/master/cambiahostname
# chmod 755 /usr/local/sbin/cambiahostname
Aquí podéis ver el código completo de cambiahostname:

Por último, tan sólo comentar que el script hace uso del comando nslookup que pertenece al paquete dnsutils. Por tanto, para que el script funcione, deberéis tener instalado dicho paquete. Como se encuentra en los repositorios, resulta fácil de instalar:
# apt-get install dnsutils
Publicado por primera vez en http://enavas.blogspot.com.es

Script get-my-hostname: Obtener el nombre del equipo consultando al servidor DNS definido en DNSSERVER

El script get-my-hostname permite obtener el nombre del equipo en que se ejecuta. Para ello, realiza una consulta al servidor DNS definido en una variable llamada DSNSERVER.

Este script puede sernos muy útil cuando vamos a configurar un equipo registrado en el servidor DNS, tras una clonación, por ejemplo.

Instalarlo es muy sencillo:
# wget --no-check-certificate -O /usr/local/sbin/get-my-hostname https://raw.githubusercontent.com/algodelinux/get-my-hostname/master/get-my-hostname
# chmod 755 /usr/local/sbin/get-my-hostname
Aquí podéis ver el código completo de get-my-hostname:

Por último, tan sólo comentar que el script hace uso del comando nslookup que pertenece al paquete dnsutils. Por tanto, para que el script funcione, deberéis tener instalado dicho paquete. Como se encuentra en los repositorios, resulta fácil de instalar:
# apt-get install dnsutils
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 11 de junio de 2018

LVM: Aumentar el tamaño de un volumen lógico

Ahora que he añadido un segundo volumen físico al NAS, observo que el espacio de almacenamiento del volumen lógico que aloja backups y máquinas virtuales comienza a tener poco espacio libre:
# df -h | grep backup
/dev/mapper/openmediavault--vg-backup           1,7T   1,4T  231G  86% /export/backup
Por tanto, voy a aumentar en 500 GB el tamaño de este volumen lógico:
# lvextend -L+500G /dev/openmediavault-vg/backup 
  Size of logical volume openmediavault-vg/backup changed from 1,65 TiB (433822 extents) to 2,14 TiB (561822 extents).
  Logical volume backup successfully resized
Una vez aumentado el tamaño del volumen logico, redimensionamos el sistema de archivos alojado en dicho volumen lógico:
# resize2fs /dev/openmediavault-vg/backup 
resize2fs 1.42.12 (29-Aug-2014)
El sistema de ficheros de /dev/openmediavault-vg/backup está montado en /media/e3da494b-3f93-43f3-ad44-55c23672533f; hace falta cambiar el tamaño en línea
old_desc_blocks = 106, new_desc_blocks = 138
The filesystem on /dev/openmediavault-vg/backup is now 575305728 (4k) blocks long.
Por último, comprobamos que el tamaño del sistema de archivos se ha aumentado:
# df -h | grep backup
/dev/mapper/openmediavault--vg-backup           2,2T   1,4T  703G  66% /export/backup
Un detalle que es importante destacar es que podemos aumentar el tamaño del sistema de ficheros online, es decir, sin desmontarlo, porque el kernel 2.6 y sucesivos, soportan el redimensionado on-line para sistemas de ficheros ext3 y ext4. Sin embargo, si en lugar de aumentar el tamaño del sistema de archivos, quisiera reducirlo, tendría que hacerlo forzosamente off-line. Es decir, arrancando desde un live-cd, por ejemplo.
Publicado por primera vez en http://enavas.blogspot.com.es

pvcreate: Inicializar un disco o partición para usar con LVM

pvcreate nos permite inicializar un volumen físico (ya sea un disco o una partición) para utilizarlo con LVM.

Si lo que queremos inicializar es una partición hay dos posibilidades:
  • Si la partición es DOS, tendremos que definir el tipo de partición con el identificador 0x8e utilizando por ejemplo fdisk o cfdisk.
  • Si la partición es GPT, el identificador que tendremos que asignar a dicha partición es E6D6D379-F507-44C2-A23C-238F2A3DF928 utilizando gdisk.
Ahora bien, si lo que queremos es inicializar un disco entero, debemos eliminar la tabla de particiones. Por ejemplo, suponiendo que queremos inicializar el disco /dev/sdb:
# dd if=/dev/zero of=/dev/sdb bs=512 count=1
1+0 registros leídos
1+0 registros escritos
512 bytes (512 B) copiados, 0,526633 s, 1,0 kB/s
Una vez eliminada la tabla de particiones, podemos inicializar el disco:
# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
Y una vez creado el volúmen físico, no tenemos nada más que añadirlo al grupo de volúmenes:
# vgextend openmediavault-vg /dev/sdb
  Volume group "openmediavault-vg" successfully extended
root@nas:~# vgdisplay
  --- Volume group ---
  VG Name               openmediavault-vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  27
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                9
  Open LV               8
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               6,37 TiB
  PE Size               4,00 MiB
  Total PE              1669196
  Alloc PE / Size       709674 / 2,71 TiB
  Free  PE / Size       959522 / 3,66 TiB
  VG UUID               S8vhnq-5qyu-ma9Q-GzQ6-UfXo-u98J-NoQUDD
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 8 de junio de 2018

Simular operaciones de instalación/desinstalación/actualización de paquetes con aptitude y apt-get

Tanto aptitude como apt-get disponen de un parámetro (-s, --simulate) que nos permite simular la instalación/desinstalación/actualización de paquetes antes de realizarla. Es conveniente, sobre todo en servidores, utilizar esta opción de simulación para ver si hay algún problema antes de realizar una operación de este tipo.

Por ejemplo:
admin@bdc:~$ sudo apt-get -s upgrade
[sudo] password for admin: 
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Calculando la actualización... Hecho
Los siguientes paquetes se han retenido:
  libdrm-amdgpu1 libdrm2 libegl1-mesa libgbm1 libgl1-mesa-dri libwayland-egl1-mesa linux-generic linux-headers-generic linux-image-generic
Se actualizarán los siguientes paquetes:
  libldap-2.4-2
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 9 no actualizados.
Inst libldap-2.4-2 [2.4.42+dfsg-2ubuntu3.2] (2.4.42+dfsg-2ubuntu3.3 Ubuntu:16.04/xenial-updates [amd64])
Conf libldap-2.4-2 (2.4.42+dfsg-2ubuntu3.3 Ubuntu:16.04/xenial-updates [amd64])
Al ejecutar el comando en modo simulación en este servidor, estoy viendo que se va a instalar un paquete y que no se produce ninguna desinstalación no deseada de otros paquetes. Así que, puedo hacer tranquilamente una actualización de paquetes:
$ sudo apt-get -y upgrade
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Calculando la actualización... Hecho
Los siguientes paquetes se han retenido:
  libdrm-amdgpu1 libdrm2 libegl1-mesa libgbm1 libgl1-mesa-dri libwayland-egl1-mesa linux-generic linux-headers-generic linux-image-generic
Se actualizarán los siguientes paquetes:
  libldap-2.4-2
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 9 no actualizados.
Se necesita descargar 161 kB de archivos.
Se utilizarán 0 B de espacio de disco adicional después de esta operación.
Des:1 http://es.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libldap-2.4-2 amd64 2.4.42+dfsg-2ubuntu3.3 [161 kB]
Descargados 161 kB en 0s (492 kB/s)   
(Leyendo la base de datos ... 127182 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../libldap-2.4-2_2.4.42+dfsg-2ubuntu3.3_amd64.deb ...
Desempaquetando libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.3) sobre (2.4.42+dfsg-2ubuntu3.2) ...
Procesando disparadores para man-db (2.7.5-1) ...
Configurando libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.3) ...
Procesando disparadores para libc-bin (2.23-0ubuntu10) ...
Publicado por primera vez en http://enavas.blogspot.com.es

Estructura del mirror de Ubuntu Bionic Beaver

En un post del miércoles pasado, os mostré como crear el mirror de Ubuntu Bionic Beaver con los repositorios fundamentales. A raiz de este post, algunos compañeros me han preguntado cuáles eran los repositorios que estaba mirrorizando actualmente. Pues bien, aquí podéis verlo:
/var/spool/apt-mirror/
├── mirror
│   ├── archive.canonical.com
│   │   └── ubuntu
│   │       ├── dists
│   │       │   └── bionic
│   │       └── pool
│   │           └── partner
│   ├── desarrollo.educarex.es
│   │   └── solointranet
│   │       └── ubuntu
│   │           └── bionic
│   ├── dl.google.com
│   │   └── linux
│   │       ├── chrome
│   │       │   └── deb
│   │       └── earth
│   │           └── deb
│   ├── es.archive.ubuntu.com
│   │   └── ubuntu
│   │       ├── dists
│   │       │   ├── bionic
│   │       │   ├── bionic-backports
│   │       │   ├── bionic-proposed
│   │       │   └── bionic-updates
│   │       └── pool
│   │           ├── main
│   │           ├── multiverse
│   │           ├── restricted
│   │           └── universe
│   ├── hp.archive.canonical.com
│   │   └── updates
│   │       └── dists
│   │           └── bionic-oem
│   ├── oem.archive.canonical.com
│   │   └── updates
│   │       └── dists
│   │           └── bionic-oem
│   └── security.ubuntu.com
│       └── ubuntu
│           ├── dists
│           │   └── bionic-security
│           └── pool
│               ├── main
│               ├── multiverse
│               └── universe
├── skel
│   ├── archive.canonical.com
│   │   └── ubuntu
│   │       └── dists
│   │           └── bionic
│   ├── desarrollo.educarex.es
│   │   └── solointranet
│   │       ├── pizarras
│   │       │   └── testing
│   │       └── ubuntu
│   │           └── bionic
│   ├── dl.google.commás
│   │   └── linux
│   │       ├── chrome
│   │       │   └── deb
│   │       └── earth
│   │           └── deb
│   ├── es.archive.ubuntu.com
│   │   └── ubuntu
│   │       └── dists
│   │           ├── bionic
│   │           ├── bionic-backports
│   │           ├── bionic-proposed
│   │           └── bionic-updates
│   ├── hp.archive.canonical.com
│   │   └── updates
│   │       └── dists
│   │           └── bionic-oem
│   ├── oem.archive.canonical.com
│   │   └── updates
│   │       └── dists
│   │           └── bionic-oem
│   └── security.ubuntu.com
│       └── ubuntu
│           └── dists
│               └── bionic-security
└── var
Si echáis un vistazo al post del miércoles, veréis que es sencillo añadir más repositorios para mirrorizarlos.

No hace mucho tiempo, virtualicé el mirror de trusty en un contenedor Proxmox. Ahora, en lugar de mirrorizar bionic en el mismo contenedor, he creado el mirror de bionic en otro contenedor. De este modo, cuando deje de tener clientes trusty, tan sólo tengo que parar la máquina virtual  que contiene el mirror de trusty y eliminarla, manteniendo la copia de seguridad durante un tiempo, por si volviera a necesitarla.

Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 7 de junio de 2018

Configuración de pantallas en Xubuntu 14.04 con xfce4

En el post anterior, hemos visto cómo configurar una resolución común en pantallas que soportan distintas resoluciones a nivel de sistema en los archivos de configuración de Xorg , más concretamente en el archivo /usr/share/X11/xorg.conf.d/10-monitor.conf

Ahora bien, debéis de tener en cuenta, que al utilizar xfce4 en Xubuntu, las resoluciones establecidas por el usuario en su propia cuenta tienen prioridad sobre las establecidas por defecto a nivel de sistema.

Por tanto, si queréis establecer una serie de ajustes por defecto y que se apliquen a todos los usuarios, deberéis borrar el archivo monitors.xml almacenado en el directorio ~/.config/xfce4/xfconf/xfce-perchannel-xml/ del usuario.  Y si quisiérais borrar la configuración particular de pantallas de todos los profesores, tan sólo tendríais que ejecutar un find como el siguiente:
# find /home/profesor/ -name "displays.xml" -exec rm -f {} \;
Publicado por primera vez en http://enavas.blogspot.com.es