Páginas

lunes, 19 de diciembre de 2022

Tamaño de la fuente en el framebuffer de arranque FreeBSD

En partátiles con pantalla de 13 y 14 pulgadas se hace difícil leer los mensajes en el framebuffer de arranque en FreeBSD por la configuración predeterminada del tamaño de la fuente en FreeBSD.

Pero es posible cambiar a una fuente más pequeña modificando el parámetro screen.font en archivo /boot/loader.conf. Es cuestión de probar diferentes configuraciones para saber cual resulta más comoda. En mi caso he optado por 8x16.

$ cat /boot/loader.conf | grep screen.font


FreeBSD es genial!.

domingo, 18 de diciembre de 2022

Replicar, Recuperar Pool Root FreeBSD ZFS

NFS Sistema de Archivos en Red FreeBSD
Montaje de Sistema de Archivos NFS Usando Autofs
Replicar, Recuperar Pool Root ZFS FreeBSD

Contruir o reconstruir un sistema a partir de instantáneas (snapshot)

Replicar instantáneas en otro sistema es una característica de OpenZFS que mejora la administración de datos, proporciona un mecanismo para manejar una falla de hardware con una pérdida de datos y un tiempo de inactividad mínimos. La replicación también es una forma conveniente de transferir una copia de un sistema existente a otro, por ejemplo, implementar un laboratorio completo de sistemas similares.

Vamos a enviar una copia de seguridad al servidor vía ssh utilizando zfs send receive


Servidor: tormenta FreeBSD 13.1 NUC 11 Essential DDR4-2933 CPU 4 \
          32GB RAM M.2 NVMe PCIe 3.0
Cliente: solaris FreeBSD 13.1 Dell Latitude 7390 DDR4-2400 CPU 8 \
          16GB RAM M.2 NVMe PCIe 3.0

% cat /etc/hosts | grep tormenta
...
192.168.88.160          tormenta
...

Configurar acceso SSH

OpenZFS utiliza SSH para cifrar la replicación durante la transferencia de red.

Puede generar un par de claves con ssh-keygen y luego enviar una copia de la clave pública al servidor. Presione enter en todas las indicaciones para aceptar los valores predeterminados y no solicitar una frase de contraseña.

Dado que root enviará la replica, cambie esta línea en el archivo de configuración del demonio SSH /etc/ssh/sshd_config


#PermitRootLogin no

a


PermitRootLogin yes

Recargar la configuración del demonio SSH


service sshd reload 

Envíe una copia de la clave pública al sistema recector (tormenta)


cat .ssh/id_rsa.pub | ssh 192.168.88.160 'cat >>.ssh/authorized_keys' 
Password for root@192.168.88.160: 
exit

A continuación creamos un conjunto de datos para almacenar las instatáneas replicadas /usr/backup/poolrecovery.


tormenta # zfs create canmount=off zroot/usr/backup

tormenta # zfs get mounted zroot/usr/backup
NAME              PROPERTY  VALUE    SOURCE
zroot/usr/backup  mounted   no       -

tormenta # zfs create zroot/usr/backup/poolrecovery

# zfs get atime,compression,snapdir zroot/usr/backup
NAME              PROPERTY     VALUE           SOURCE
zroot/usr/backup  atime        off             inherited from zroot
zroot/usr/backup  compression  lz4             inherited from zroot
zroot/usr/backup  snapdir      visible         inherited from zroot

Creamos la instantánea recursiva del conjunto de datos del pool zroot que incluye los sistemas de archivos secundarios


solaris # zfs snapshot -r zroot@zroot.snap1_dell

Comprobar los recursos compartidos por el servidor tormenta


solaris % showmount -e tormenta
Exports list on tormenta:
...
/usr/backup/poolrecovery           192.168.88.0 
...

Montar el recurso compartido


# mount -o soft,intr,rw tormenta:/usr/backup/poolrecovery /mnt

Enviar la instantánea de forma recursiva, redirigimos (como archivo comprimido .gz) a la ubicación compartida para poder acceder a esta ubicación al construir el cliente


# zfs send -Rv zroot@snap1_dell | gzip > /mnt/zroot.snap1.gz

Proceso de recuperación::

Asumimos que ha realizado una instalación limpia en el sistema a restaurar eligiendo el particionado auto ZFS del instalador de FreeBSD. Es recomendable que antes de instalar y desde la shell borrar todos los errores asociados a los dispositivos virtuales del grupo y borrar los recuentos de errores de datos asociados al grupo.


# zpool labelclear -f /dev/nvd0

Iniciar con una memoria usb que contenga una img de FreeBSD 13.1 (RELEASE actual)

En la pantalla de instalacion


Install Shell Live cd

Elegir (live cd)


login: root

Intro (no necesita contrasena)

Iniciar la red con el comando


dhclient em0

Ver información de la conexión


# ifconfig

Comprobar conectividad


# ping freebsd.org

Configurar ssh

configurar un sshd único para esta sesión.


# mkdir /tmp/etc
# mount_unionfs /tmp/etc /etc
# edit /etc/ssh/sshd_config

editar /etc/ssh/sshd_config y cambiar la configuración de PermitRootLogin de no a sí y eliminar el comentario, puede utilizar Ctrl-Y para buscar "root".

Establecer una contrasena para el usuario root (no teclee root directamente, utilice passwd root)


# passwd root

Importar la import del zpool zroot


# zpool import -fR /tmp/montado zroot

Incluir la direccion IP en el archivo /etc/exports del servidor nfs tormenta

Agregar en el archivo /etc/rc.conf la línea


nfs_client_enable

# service nfsclient start
NFS access cache time=60

Montar recurso compartido NFS


# mount -o soft,intr,rw 192.168.88.51:/usr/backup/poolrecovery /mnt

ls /mnt/
zroot.snap1.gz 

Ya tenemos el archivo que utilizaremos

Lanzamos el comando


# gzcat /mnt/zroot.snap1.gz | zfs receive -Fv zroot

# umount -f /tmp/montado

Reiniciar el sistema


# reboot

Sí, ha funcionado

En este punto tenemos todo tal y como estaba en el momento en que se crearon las instantáneas

Utilizar el usuario no privilegiado carlos para el envío y recepción de instantáneas

Permisos para el envío de instantáneas


 zfs allow -u carlos create,destroy,hold,mount,receive,send,snapshot zroot

Permisos para la recepción de instantáneas


 zfs allow -u carlos \
 create,destroy,mount,mountpoint,quota,receive,send,snapdir \
 zroot
FreeBSD es genial!.

Beadm ZFS Boot Environments FreeBSD

Desarrollador: vermaden

https://vermaden.wordpress.com/2022/03/14/zfs-boot-environments-revolutions/comment-page-1/

Instalar beadm


pkg install -y beadm

Listar entornos de arranque


beadm list
BE                     Active Mountpoint  Space Created
default                -      -            2.0M 2022-12-15 12:19
pkg_update_171222      -      -            7.0G 2022-12-17 21:49

# beadm create pkg_upgrade_1712222335

Activar el be


# beadm activate pkg_upgrade_1712222335
Activated successfully

Listar boot environments


BE                     Active Mountpoint  Space Created
default                N      -            2.0M 2022-12-15 12:19
pkg_update_171222      -      -            7.0G 2022-12-17 21:49
pkg_upgrade_1712222335 R     /           34.2G 2022-12-17 23:35

N = activo ahora
R = estara activo el proximo reinicio

Reiniciar


# reboot

beadm list
BE                     Active Mountpoint  Space Created
default                -      -            2.0M 2022-12-15 12:19
pkg_update_171222      -      -            7.0G 2022-12-17 21:49
pkg_upgrade_1712222335 NR     /           34.2G 2022-12-17 23:35

mount
zroot/ROOT/pkg_upgrade_1712222335 on / (zfs, local, noatime, nfsv4acls)

Ya puede instalar los ultimos parches de FreeBSD sin estropear su sistema predeterminado.


pkg update
pkg upgrade
freebsd-update fetch
freebsd-update install

reroot reroot Utiliza la función 'reroot' del comando reboot(8) -r.

reroot sólo está presente en beadm, le dira a freebsd que vuelva a rootear su nucleo en ejecucion en el be especificado. Ahorra mucho tiempo en un un servidor o máquina física.


beadm reroot pkg_upgrade_1712202335

Genial

beadm


sage:
beadm activate <
  beadm create 
  beadm create 
  beadm destroy 
  beadm export 
  beadm import
  beadm list 
  beadm rename 
  beadm mount 
  beadm 
  beadm chroot 
  beadm 
  beadm version
FreeBSD es genial!.

viernes, 16 de diciembre de 2022

Montaje de Sistema de Archivos NFS autofs FreeBSD

NFS Sistema de Archivos en Red FreeBSD
Montaje de Sistema de Archivos NFS Usando Autofs
Replicar, Recuperar Pool Root ZFS FreeBSD

Automount NFS FreeBSD ZFS

Si utilizamos con anterioridad el método de montaje NFS usando /etc/fstab, comentamos la línea siguiente el archivo /etc/fstab


...
# nfs export servidor tormenta
#tormenta:/usr/backup/poolrecovery  /mnt/poolrecovery    nfs  rw,soft,intr    0   0
...

La opción mas interesante en el montaje de recursos compartidos NFS, es el uso del servicio autofs. Autofs usa el demonio automount para administrar puntos de montaje y montarlos solo de forma dinámica al acceder a ellos.

Autofs consulta el archivo de configuración del mapa maestro /etc/auto_master para determinar los puntos de montaje definidos. Luego, inicia un proceso de montaje automático. Cada línea del mapa maestro define un punto de montaje y un archivo de mapa independiente que define los sistemas de archivos que se montarán bajo este punto de montaje. por ejemplo, el /etc/auto.misc define puntos de montaje en el directorio /misc; esta relación se definiría en el /etc/auto_master.


Cada entrada en auto_master tiene 
1 Punto de montaje. 
2 La ubicación del archivo de mapa

Para montar el directorio compartido /usr/backup/poolrecovery del servidor tormenta en el punto de montaje /misc/poolrecovery agregamos la siguiente línea al archivo /etc/auto_master


/misc   /etc/auto.misc

Luego, agregamos esta línea al archivo /etc/auto.misc


poolrecovery    -rw,soft,intr,tcp,rsize=8192,wsize=8192 \
tormenta:/usr/backup/poolrecovery

El primer campo en /etc/auto.misc es el nombre del subdirectorio /misc y se crea dinámicamente a traves de automount. El segundo campo es las opciones de montaje y el tercer campo es la ubicación de la exportación NFS que incluye el nombre de host y el directorio.

El directorio /misc debe existir en el sistema de archivos local y no debe contener subdirectorio en /misc

Reiniciamos el servicio


# service automountd restart
Stopping automountd.
Waiting for PIDS: 37558.
Starting automountd.

Tenemos que habilitar autofs agregando autofs_enable=YES al archivo /etc/rc.conf


sysrc autofs_enable=YES

Los usuarios sin privilegios pueden montar y desmontar sistemas de archivos agregamos esta linea al archivo /etc/sysctl.conf para que los cambios sean permanentes


echo vfs.usermount=1 >> /etc/sysctl.conf

sysctl vfs.usermount=1
vfs.usermount: 0 -> 1

La salida del comando mount


% mount | grep autofs
map -hosts on /net (autofs)
map /etc/auto.misc on /misc (autofs)
map /etc/auto.mits on /mits (autofs)
map /etc/auto.mius on /mius (autofs)
map /etc/auto.mivs on /mivs (autofs)
map /etc/auto.miys on /miys (autofs)

Ahora vamos a intentar entrar en el subdirectorio poolrecovery. Tecleando /misc y pulsando la tecla tabulador, se monta automáticamente el recurso compartido al que se quiere acceder.


$ cd /misc/
solaris:~ % cd /misc/poolrecovery/

solaris:/misc/poolrecovery % ls
zroot.snap2_dell.gz  zroot.snap3_dell.gz

En este punto la salida del comando mount tendra este aspecto


.....
zroot/usr/jails on /usr/jails (zfs, local, noatime, nfsv4acls)
map -hosts on /net (autofs)
map /etc/auto.misc on /misc (autofs)
map /etc/auto.mits on /mits (autofs)
map /etc/auto.mius on /mius (autofs)
map /etc/auto.mivs on /mivs (autofs)
map /etc/auto.miys on /miys (autofs)
tormenta:/usr/backup/poolrecovery on /misc/poolrecovery (nfs, automounted)
FreeBSD es genial!.

domingo, 4 de diciembre de 2022

NFS Sistema de Archivos en Red FreeBSD ZFS

NFS Sistema de Archivos en Red FreeBSD
Montaje de Sistema de Archivos NFS Usando Autofs
Replicar, Recuperar Pool Root ZFS FreeBSD

NFS FreeBSD ZFS utilizando /etc/fstab

NFS Network File System es un protocolo de nivel de aplicación, según el modelo OSI, que permite compartir, en una red local, directorios y particiones entre sistemas tipo Unix como si se tratara de locales. NFS está incluido por defecto en los sistemas operativos UNIX.

La utilidad nfsd se ejecuta en un equipo servidor para atender las peticiones NFS de los equipos de las máquinas cliente. Para que una máquina funcione como servidor, debe ejecutarse al menos un nfsd.

Configurar el servidor NFS

Acceder al servidor a través de SSH con clave pública


% ssh carlos@tormenta
% su
Password:
root@tormenta:/home/carlos #

Active el soporte del servidor NFS con las siguientes opciones de rc.conf. Aunque no todas opciones son estrictamente necesarias para todos los entornos, activarlas todas garantiza el mayor rango de compatibilidad con NFS y un rendimiento adecuado.


sysrc nfs_server_enable="YES"
sysrc rpcbind_enable="YES"
sysrc mountd_enable="YES"
sysrc rpc_lockd_enable="YES"
sysrc rpc_statd_enable="YES"

Archivo /etc/rc.conf


...
nfs_server_enable="YES"
rpcbind_enable="YES"
mountd_enable="YES"
rpc_statd_enable="YES"
rpc_lockd_enable="YES"
...

Reiniciar el sistema.

El demonio rpcbind mapea las llamadas a procedimientos remotos (RPC) en direcciones de red locales. Cada cliente NFS pregunta al demonio rpcbind del servidor dónde puede encontrar un demonio mountd al que conectarse.

El demonio mountd escucha los puertos de alta numeración para las peticiones de montaje de los clientes. Al activar el servidor NFS también se inicia nfsd, que se encarga de la solicitud de archivos. NFS asegura el bloqueo de archivos con rpc.lockd, y rpc.statd monitoriza los clientes NFS para que el servidor NFS pueda liberar recursos cuando el host desaparezca.

Una vez que el NFS esté funcionando, la salida de sockstat mostrará rpc.lockd, rpc.statd, nfsd, mountd, y rpcbind escuchando.

El servidor NFS debería auto negociar las conexiones de forma transparente. También puede ajustar su servidor NFS nfsd para que se adapte mejor a sus clientes y esto se hace con nfsd al inicio, con la opción (/etc/rc.conf) opción nfs_server_flags.

Comprobar que los servicios están activos


# service -e | grep rpcbind
/etc/rc.d/rpcbind
# service -e | grep mountd
/etc/rc.d/mountd
# service -e | grep lockd
/etc/rc.d/lockd
# service -e | grep statd
/etc/rc.d/statd

NFS puede funcionar sobre TCP o UDP que es el protocolo de transporte tradicional de NFS.

Cuando un servidor tiene varias direcciones IP es una buena práctica indicar al servidor NFS que utilice sólo una dirección con -h y la IP del servidor.

Que NFS utilice los protocolos de transporte UDP y TCP y se enlace a la dirección IP 192.168.88.160


nfs_server_flags="nfsd -u -t -h 192.168.88.160"

Configurar NFS Exports

Determinar que puede compartir o exportar el servidor.

FreeBSD le permite configurar las exportaciones a través de:

1. Fichero /etc/exports

2. Un servidor basado en ZFS, a través de la propiedad sharenfs de cada conjunto de datos. El servidor creará el archivo de exportaciones ZFS /etc/zfs/exports en base a estas propiedades. Ambos tienen el mismo formato pero no es buena práctica usar ambos métodos al mismo tiempo. Si utiliza el método ZFS nunca edite /etc/zfs/exports manualmente.

Independientemente del método elegido /etc/exports debe existir

Crear /etc/exports


# touch /etc/exports

NFS a través de /etc/exports

Configurar una exportación

Cada entrada del exports tiene hasta tres partes la primera obligatoria


1. Directorios o particiones a exportar
2. Opciones sobre esa exportación
3. Clientes que pueden conectarse

Dispositivo de disco y clientes sólo pueden tener una línea en el archivo de exportación. De modo que si, p.e., /var/log y /var/mail están en la misma partición, para exportar a un cliente en particular, ambos dos deben aparecer en la misma línea. No puede exportar /var/log y /var/mail a un cliente con permisos diferentes.

Tampoco tiene que exportar todo el dispositivo de disco; puede exportar un directorio dentro de una partición. Si las particiones /var y /var/mail están separadas, la exportación de /var no exporta automáticamnet /var/mail

Esta línea en /etc/exports exporta el directorio /home/mycloud a todos los hosts, no tiene opciones ni restricciones de host


/usr/home/mycloud

Una vez editado el archivo /etc/exports:


# service mountd reload

En NFSv2 y NFSv3 los usuarios son identificados por UID, por ejemplo, en mi portátil el usuario carlos tiene el UID 1001. En el servidor NFS carlos también tiene el UID 1001. Los mismos privilegios en el servidor y en el portátil.

En una red pequeña se puede sincronizar /etc/master.passwd en sus sistemas o asignar el mismo UID.

Si desea que todas las peticiones desde root en un cliente se ejecuten como el usuario nfsroot (uid=10000) en el servidor. Utilizando cuidadosamente los grupos, puede permitir que este usuario tenga un acceso limitado a los archivos.

La opción maproot se usa para asignar root a otro usuario. Por ejemplo, asignar el UID 0 (root) en el cliente, al UID 10000 en el servidor


/usr/home/mycloud   -maproot=10000

Exportando múltiples directorios

Todos los directorios en la misma línea de /etc/exports separados por espacio


/var/log /usr/src/ /usr/obj -maproot=carlos

Los clientes pueden montar cualquiera de estos directorios y las peticiones de root se asignan al usuario carlos

Restricción de clientes

Sólo los clientes listados prodrán acceder a la exportación NFS.


/var/log /usr/src/ /usr/obj -maproot=carlos 192.168.88.100 192.168.88.51

Permitir que cualquier cliente con una dirección IP que empiece en 192.168.88 acceda a los recursos compartidos del servidor NFS.


/var/log /usr/src/ /usr/obj -maproot=carlos -network 192.168.88 -mask 255.255.255.0

El cliente NFS de la dirección IP 192.168.88.101 puede montar la totalidad de /usr y puede hacerlo como root


/var/log /usr/src/ /usr/obj -maproot=carlos 192.168.88.100
/usr -maproot=0 192.168.88.101

NFS a través de ZFS

sharenfs es la propiedad utilizada para activar, desactivar y configurar exportaciones NFS. Se establece en on para compartir globalmente un conjunto de datos y todos sus decendientes.

Este conjunto de datos o cualquiera de sus hijos puede ser montado por cualquier persona, sin restricciones y sin opciones, a menos que tenga control de acceso, como un cortafuegos. Crear un conjunto de datos con la propiedad canmount=off; esta propiedad controla si un conjunto de datos puede ser montado o no. Es lo que querrás hacer si no quieres romper los entornos de arranque (Boot Environments).


# zfs create -o canmount=off zroot/usr/backup
# zfs get mounted zroot/usr/backup
NAME              PROPERTY  VALUE    SOURCE
zroot/usr/backup  mounted   no       -

Ahora puede crear un conjunto de datos separados.


# zfs create zroot/usr/backup/nfsshare
# chown carlos:carlos zroot/usr/backup/nfsshare

Crear el dataset poolrecovery que será utilizado, posteriormente, para duplicar 
un sistema completo FreeBSD ZFS
# zfs create zroot/usr/backup/poolrecovery

Empezar a compartir sharenfs=on


# zfs set sharenfs=on zroot/usr/backup/nfsshare
# zfs set sharenfs=on zroot/usr/backup/poolrecovery

Para dejar de compartir el conjunto de datos, se establece sharenfs en off


# zfs set sharenfs=off zroot/dellhome

Establecer un usuario maproot y restringir los clientes a la red local


# zfs set sharenfs="-maproot=0 192.168.88.51" zroot/usr/backup/poolrecovery
# zfs set sharenfs="-network 192.168.88.0/24 -maproot=carlos" zroot/usr/backup/nfsshare

El uso de ZFS es menos flexible para la gestión de exportaciones NFS porque todos los hosts permitidos obtienen las mismas opciones.

ZFS crea automáticamnet el Fichero /etc/exports


cat /etc/zfs/exports
# !!! DO NOT EDIT THIS FILE MANUALLY !!!

/usr/backup/nfsshare    -network 192.168.88.0/24 -maproot=carlos
/usr/backup/poolrecovery     -maproot=0 192.168.88.51

Mapeos de host a IP
...
192.168.88.160          solaris
192.168.88.51           tormenta
...

habilitar el cliente NFS


Mapeos de host a IP
...
192.168.88.51           tormenta
192.168.88.160          solaris
...

Agregar al archivo /etc/rc.conf


sysrc nfs_client_enable=YES
Listar todas las exportaciones NFS disponibles para un cliente

$ showmount -e tormenta
Exports list on tormenta:
/usr/backup/poolrecovery           192.168.88.51
/usr/backup/nfsshare               192.168.88.0

Montar directorios o sistemas de ficheros exportados por el servidor NFS.


# mkdir /mnt/nfs
# mount tormenta:/nfsshare /mnt/nfs

Opciones de montaje

Para acceder a un servidor NFS utilizando sólo UDP con la opción de montaje udp (-u).

Si el servidor NFS desaparece, los programas en el cliente que intenten acceder al sistema de archivos NFS se cuelgan. Por tanto, su montaje NFS tiene que ser interrumpible con la opción intr; podrá interrumpir los procesos colgados con ctrl-C.

Utilizar un montaje suave (soft) FreeBSD notificará a los programas que el fichero ya no está disponible.

Montar Directorios con las opciones soft,intr,rw


# umount /mnt/nfs
# mount -o soft,intr,rw tormenta:/zroot/nfsshare /mnt/nfs
# mount
...
tormenta:/usr/backup/poolrecovery on /mnt/nfs (nfs)
...

Podria anadir esto a /etc/fstab para el mountaje automático


tormenta:/usr/backup/poolrecovery	/mnt/nfs   nfs  rw,soft,intr   0  0

Que versión de NFS estamos utilizando


# nfsstat -m
solaris:/rpool/nfssolaris on /media/nfs
nfsv3,tcp,resvport,nconnect=1,soft,intr,cto,lockd,sec=sys,acdirmin=3,acdirmax=60,\
acregmin=5,acregmax=60,nametimeo=60,negnametimeo=60,rsize=65536,wsize=65536,\
readdirsize=65536,readahead=1,wcommitsize=16777216,timeout=120,retrans=2

https://gnulinuxcodigo.blogspot.com/2022/12/montaje-de-sistemas-de-archivos-nfs.html


FreeBSD es genial!