Páginas

miércoles, 21 de septiembre de 2022

Freebsd tar Excluir Directorios

Fuente:
https://www.gnu.org/software/tar/manual/html_node/exclude.html#exclude

Ciertas opciones para tar le permite especificar un nombre para su archivo. Otras opciones le permiten decidir qué archivos incluir o excluir del archivo, en función de cuándo o si se modificaron los archivos, si los nombres de los archivos coinciden o no con los patrones especificados, o si los archivos están en directorios especificados.

Realizar copias con tar excluyendo directorios listados dentro de un archivo, utilizando la opción --exclude-from

Importamos el zpool copias

# zpool import copias
# zpool status
  pool: copias
 state: ONLINE
config:

	NAME        STATE     READ WRITE CKSUM
	copias      ONLINE       0     0     0
	  da0p1     ONLINE       0     0     0

errors: No known data errors

  pool: zroot
 state: ONLINE
config:

	NAME        STATE     READ WRITE CKSUM
	zroot       ONLINE       0     0     0
	  nvd0p4    ONLINE       0     0     0

errors: No known data errors

Creamos el archivo excluir_dirs.txt donde incluiremos todos los directorios a excluir de la copia

carlos@foo:~ % pwd

/usr/home/carlos

carlos@foo:~ % touch excluir_dirs.txt

Tenga en cuenta que las líneas del archivo se leen palabra por palabra. Uno de los los errores frecuentes es dejar espacios en blanco adicionales después de un nombre de archivo, que es difícil de detectar usando editores de texto. Sin embargo, las líneas vacías están bien

carlos@foo:~ % cat excluir_dirs.txt

./.ssh
./.dbus
./.mozilla
./.cache
./Descargas
./DevOps_Bootcamp
./Musica
# tar cfCv - /usr/home/carlos/ --exclude-from excluir_dirs.txt . | \
tar xpfC - /copias/tar_home_fbsd

-c Crear un nuevo archivo que contenga los elementos especificados

-f Leer el archivo desde o escribir el archivo en el fichero especificado

-C directorio, --cd directorio. En el modo c y r, esto cambia el directorio antes de añadir los siguientes archivos.

-v Produce una salida detallada. En los modos de creación y extracción, tar enumerará cada nombre de archivo a medida que se lea o escriba en el archivo.

-x Extraer al disco desde el archivo. Si un archivo con el mismo nombre aparece más de una vez en el archivo, cada copia será extraído, y las copias posteriores sobrescribirán las anteriores copias.

-p --preserve-permissions (sólo en modo x) Preserva los permisos de los archivos. Intenta restaurar los permisos completos

Exportar el zpool copias

# zpool export copias

carlos@foo:~ % ls -Fa

...
.ssh/
.cache/
.dbus/
.mozilla
Avanzado/
bhyve/
Dell-7390/
Descargas/
DevOps_Bootcamp/
docs/
Documentos/
Ebooks/
Escritorio/
excluir_dirs.txt
Imagenes/
Musica/
Plantillas/
Publico/
scripts/
Videos/

FreeBSD es genial!.

sábado, 3 de septiembre de 2022

Virtual Machine Linux en FreeBSD 13.1 con bhyve UEFI

Instalar Debian en una máquina virtual en FreeBSD 13.1 bhyve

Levantar (up) el dispositivo de túnel tap por defecto, agregando la siguiente línea al archivo /etc/sysctl.conf

echo "net.link.tap.up_on_open=1" >> /etc/sysctl.conf
sysctl net.link.tap.up_on_open=1

Firewall reglas pf

# Reglas para vm bhyve
pass in quick on bridge0 all keep state
pass in quick on tap0 all keep state
pass out quick on bridge0 all keep state
pass out quick on tap0 all keep state

Reiniciar pf

service pf restart

Cargar el controlador como módulo en el momento del arranque

# /boot/loader.conf
echo 'vmm_load="YES"' >> /boot/loader.conf
echo 'nmdm_load="YES"' >> /boot/loader.conf
echo 'if_tap_load="YES"' >> /boot/loader.conf
echo 'if_bridge_load="YES"' >> /boot/loader.conf

Crear un bridge

ifconfig bridge create
bridge0

Añadir como miembro del puente la interfaz em0

ifconfig bridge0 addm em0

Cambiar el nombre de la interfaz bridge0

ifconfig bridge0 name em0bridge
em0bridge

Activar la interfaz

ifconfig em0bridge up

Crear una nueva interfaz de tap de nombre tap0

ifconfig tap0 create

Agregar la interfaz a em0bridge0

ifconfig em0bridge0 addm tap0

Activar la interfaz tap0

ifconfig tap0 up

Habilitar los dispositivos de red para su arranque automático

# byhve /etc/rc.conf
cloned_interfaces = "bridge0 tap0"
ifconfig_bridge0_name = "em0bridge"
ifconfig_em0bridge = "addm em0 addm tap0 up"

Crear un volumen de 20 Gb zfs

zfs create -V20G -o volmode=dev zroot/debianvm

Descargar la imagen debian-11.4.0

cd /tmp/
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.4.0-amd64-netinst.iso

Instalar paquetes necesarios y sus dependencias

pkg install grub2-bhyve bhyve-firmware
New packages to be INSTALLED:
	bhyve-firmware: 1.0_1
	edk2-bhyve: g202202_1
	grub2-bhyve: 0.40_8
	uefi-edk2-bhyve-csm: 0.2_3,1

Instalar la VM debian 11.4.0 bajo FreeBSD

bhyve -c 4 -m 1G -w -H \
-s 0,hostbridge \
-s 3,ahci-cd,/tmp/debian-11.4.0-amd64-netinst.iso \
-s 4,virtio-blk,/dev/zvol/zroot/debianvm \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
-s 30,xhci,tablet \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd debianvm

man bhyve

-m memsize[K|k|M|m|G|g|T|t] Establece el tamaño de la memoria física del huésped

-H: sistema de archivos host para exportar al cargador

-l: el cargador del sistema operativo que se utilizará - uefi

-s: configure una ranura PCI virtual y otras funciones, como disco duro, cdrom y otros dispositivos.

-c Número de CPUs virtuales invitadas y/o la topología de la CPU. El valor por defecto de para cada uno de numcpus, sockets, cores y hilos es 1

-W Forzar las emulaciones de dispositivos PCI de virtio para que usen las interrupciones MSI en lugar de las interrupciones MSI-X.

-l lpcdev,conf Permite configurar los dispositivos detrás del puente LPC PCI-ISA. Los únicos dispositivos soportados son los de clase TTY com1, com2, com3 y com4

-l help Imprimir una lista de dispositivos LPC soportados.

bhyve -l help
bootrom
com1
com2
com3
com4
pc-testdev

-s help Imprimir una lista de dispositivos PCI soportados.

bhyve -s help
ahci
ahci-hd
ahci-cd
e1000
dummy
hda
fbuf
amd_hostbridge
hostbridge
lpc
nvme
passthru
virtio-9p
virtio-blk
virtio-console
virtio-net
virtio-rnd
virtio-scsi
uart
xhci

Instalar un cliente vnc

pkg install tigerviewer

Script que inicia la vm debian

#!/bin/sh
#
bhyve -c 1 -m 1G -w -H \
-s 0,hostbridge \
-s 4,virtio-blk,/dev/zvol/zroot/debianvm \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=1024,h=768 \
-s 30,xhci,tablet \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd debianvm

Llegados a este punto accedemos al instalador de Debian 11 Linux, iniciando la máquina virtual y el cliente VNC TigerVnc viewer. Escriba la dirección del servidor y el puerto, en mi caso

192.168.88.51:5900

clic en Conectar para empezar con la instalación

Al finalizar la instalación haga clic en Retroceder y

ejecute un shell para instalar el cargador de arranque uefi

sino la vm no se iniciará y eso no es lo que quiere

Ejecutar un shell

Crear el directorio BOOT

mkdir /target/boot/efi/EFI/BOOT/

Copiar grubx64.efi a /targe/boot/efi/EFI/BOOT/bootx64.efi

cp /target/boot/efi/EFI/debian/grubx64.efi /target/boot/efi/EFI/BOOT/bootx64.efi
exit

Terminar la instalación

Continuar

Iniciar la vm debian

Usando un script para iniciar la VM

#!/bin/sh
bhyve -c 4 -m 1G -w -H \
-s 0,hostbridge \
-s 3,ahci-cd,/tmp/debian-11.4.0-amd64-netinst.iso \
-s 4,virtio-blk,/dev/zvol/zroot/debianvm \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
-s 30,xhci,tablet \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
debianvm
chmod +x /usr/home/carlos/scripts/startdebian.sh
cd /usr/home/carlos/scripts
./startdebian.sh

Permitir acceso ssh a la vm debian

Archivo de configuracion de ssh /etc/ssh/sshd_conf

PermitRootLogin no
AllowUsers carlos@192.168.88.*
Reiniciar servicio
systemctl restart sshd

Acceder via ssh a la vm debian

% ssh carlos@192.168.88.101
The authenticity of host '192.168.88.101 (192.168.88.101)' can't be established.
ED25519 key fingerprint is SHA256:/vYJensJh11xpGCdbwe2pLNGTPtRlkw1y0bsABU3XtE.
No matching host key fingerprint found in DNS.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

FreeBSD es genial!.

jueves, 1 de septiembre de 2022

ZFS Freebsd no Arranca Reparar Sistema

Propiedad canmount zroot/ROOT/default

 zfs get -r -s local -o name,property,value all zroot|grep canmount
 zroot/ROOT/be_28082022      canmount              noauto
 zroot/ROOT/default          canmount              noauto
 zroot/usr                   canmount              off
 zroot/var                   canmount              off

Cuando se establece el valor noauto, un conjunto de datos sólo puede ser montado y desmontado explícitamente. El conjunto de datos no se monta automáticamente cuando se crea o se importa, ni se monta mediante el comando "zfs mount -a" ni se desmonta con el comando "zfs umount -a".

Esta propiedad no se hereda.

Iniciar con el cd de instalacion de FreeBSD 13

Cuando vea en pantalla Install Shell Livecd

Entrar en el shell

Ir a /tmp

cd /tmp

Crear un directorio

 mkdir /tmp/montado

Importar zroot

 zpool import -f -R /tmp/montado zroot

Enumerar la información de las propiedades de los conjuntos de datos en forma de tabla

 zfs list

Montar el conjunto de datos zroot/ROOT/default

 zfs mount zroot/ROOT/default
 mount -a

Entrar en /tmp/montado.

 cd /tmp/montado

Restaurar Cargador de Arranque


Llegados a este punto, el sistema es accesible. Si realizó una instalación utilizando el asistente de FreeBSD

Montar boot para restablecer boot loader

 mount -t msdosfs /dev/gpt/efiboot0 /tmp/montado/boot/efi
 cp /boot/loader.efi /tmp/montado/boot/efi/efi/boot/bootx64.efi

Si ha realizado un particionado manual añadiendo particiones con etiquetas (-l label) para acceder a ellas por su nombre:

Montar boot explícitamente, particionado manual

 mount -t msdosfs /dev/gpt/efi0 /tmp/montado/boot/efi0
 cp /boot/loader.efi /tmp/montado/boot/efi0/efi/boot/bootx64.efi

Ahora tiene acceso a todo el sistema

Por ejemplo puede editar el archivo rc.conf utilizando ruta absoluta

 vi /tmp/montado/etc/rc.conf

O utilizando ruta relativa

 pwd
/tmp/montado
 ee boot/loader.conf
 cd
 umount /tmp/montado
 zfs umount zroot/ROOT/default
 zpool export zroot
  o
 zpool export -f zroot
 zfs list
no datasets available

Reiciniar el sistema

 reboot

FreeBSD es genial!.

domingo, 26 de junio de 2022

FreeBSD cliente ntpd

Si tiene una máquina cliente deberá escuchar un servidor NTP para obtener la hora

ntp viene instalado por defecto

Configurar ntpd

/etc/rc.conf

# ntpd_enable="YES"
# ntpd_config="/etc/ntp.conf"
# netwait_enable="YES"

Archivo por defecto:

% sed -e '/^[ ]*#/d' -e '/^$/d' /etc/ntp.conf

tos minclock 3 maxclock 6
pool 0.freebsd.pool.ntp.org iburst
restrict default limited kod nomodify notrap noquery nopeer
restrict source  limited kod nomodify notrap noquery
restrict 127.0.0.1
restrict ::1
leapfile "/var/db/ntpd.leap-seconds.list"

Agregar un servidor NTP cercano (España)

tos minclock 3 maxclock 6
# pool 0.freebsd.pool.ntp.org iburst
#
# Servidor NTP
pool 0.es.pool.ntp.org iburst
#
restrict default limited kod nomodify notrap noquery nopeer
restrict source  limited kod nomodify notrap noquery
restrict 127.0.0.1
restrict ::1
leapfile "/var/db/ntpd.leap-seconds.list"

Modificar la hora sin cambiar la fecha

Por ejemplo, actualizar hora a 13 horas y 22 minutos

# date 1322

Iniciar el servicio

# service ntpd start

Solucionar error ntpd: error resolving pool 0.freebsd.pool

ntp esperará que nuestro equipo tenga conexión a internet

# sysrc netwait_enable=YES
netwait_enable: NO -> YES

Comprobar que funciona

# ntpq -pn
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.freebsd.pool. .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 0.es.pool.ntp.o .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 -51.195.26.118   90.187.148.77    2 u   69   64  377   34.733   -1.417   0.259
#193.145.15.15   193.147.107.33   2 u   61   64  377   10.797   -0.456   0.831
-162.159.200.123 10.19.9.88       3 u   66   64  377   19.087   -0.709   0.719
*185.179.104.12  .GPS.            1 u   57   64  377   28.571   -0.880   0.429
#185.132.136.116 130.206.0.1      2 u   63   64  367   56.016  +11.404   1.522
-5.56.160.3      178.32.88.247    3 u   58   64  377   30.043   -0.500   0.904
#185.90.148.209  150.214.94.5     2 u   62   64  377   36.419   -0.867   0.528
+92.222.150.77   192.168.100.15   2 u   53   64  377   29.147   -0.891   0.325
+51.195.26.119   90.187.148.77    2 u   59   64  377   34.076   -1.644   0.533
 

FreeBSD es genial!.

lunes, 3 de enero de 2022

FreeBSD intercambio cifrado con GELI en un gmirror y un grupo root cifrado con GELI.

https://wiki.freebsd.org/MasonLoringBliss/ZFSandGELIbyHAND

Paso a paso - Particionar e instalar FreeBSD 13.0

Duplicación

Duplicación es la técnica de escribir los mismos datos en mas de una unidad de disco. Cada unidad de un mirror (espejo) contiene una copia idéntica de los datos. Cuando falla una unidad individual, el mirror continua funcionando y el administrador tiene tiempo para reemplazar la unidad defectuosa sin interrupción.

Mirror

Las dos unidades en un espejo pueden ser idénticas en modelo y capacidad, pero gmirror(8) no lo requiere. Los espejos creados con diferentes discos tendrán una capacidad igual a la del disco mas pequeño del mirror. Este ejemplo asume FreeBSD 13, un par de discos y el deseo de reflejar todo.  Se adapta tanto a UEFI como a instalaciones heredadas, y tiene un esquema de partición predeterminado que puede tener ambas instalaciones a la vez. FreeBSD no automatiza la actualización del código de arranque y este es el enfoque adoptado por la versión actual de esta guía. Este conjunto de instrucciones configura un par de particiones freebsd-boot, un par de particiones ESP, intercambio cifrado con GELI en un gmirror y un grupo raíz cifrado con GELI.

Fuerza la destrucción de la tabla de particiones

# gpart destroy -F ada0
# gpart destroy -F ada1

Nueva tabla de particiones GPT

# gpart create -s gpt ada0
# gpart create -s gpt ada1

Particiones de arranque, primero legacy y luego UEFI/ESP

# gpart add -t freebsd-boot -s 512k -l boot0 ada0
# gpart add -t freebsd-boot -s 512k -l boot1 ada1
# gpart add -t efi -s 1m -l efi0 ada0
# gpart add -t efi -s 1m -l efi1 ada1

ESP debe ser vfat/fat32:

# newfs_msdos /dev/gpt/efi0
# newfs_msdos /dev/gpt/efi1

Swap - estos entrarán en un geom_mirror

# gpart add -t freebsd-swap -l swap0 -a 1m -s 4096m ada0
# gpart add -t freebsd-swap -l swap1 -a 1m -s 4096m ada1

Si tienes discos que no coinciden, deberás hacer que estos tengan un tamaño coincidente:

# gpart add -t freebsd-zfs -l tank0 -a 1m ada0
# gpart add -t freebsd-zfs -l tank1 -a 1m ada1
# gmirror label -v swap gpt/swap0 gpt/swap1

Establecer GELI - Configurar claves en lugar de frases de paso para GELI

# geli init -s 4096 -b -g gpt/tank0
# geli init -s 4096 -b -g gpt/tank1
# geli attach gpt/tank0
# geli attach gpt/tank1

Crear el pool root.

# zpool create -R /mnt -o cachefile=/tmp/zpool.cache -O mountpoint=/ \
    -O atime=off -O canmount=off -O compression=on \
    tank mirror gpt/tank0.eli gpt/tank1.eli
    
# zfs create -o canmount=off -o mountpoint=none tank/ROOT
# zfs create -o mountpoint=/ tank/ROOT/default
# zpool set bootfs=tank/ROOT/default tank
# zfs create tank/home
# zfs create -o canmount=off tank/usr
# zfs create tank/usr/local
# zfs create tank/usr/obj
# zfs create tank/usr/src
# zfs create tank/usr/ports
# zfs create tank/usr/ports/distfiles
# zfs create -o canmount=off tank/var
# zfs create tank/var/jail
# zfs create tank/var/log
# zfs create tank/var/tmp
# zfs create tank/tmp

# zfs set setuid=off tank/tmp
# zfs set setuid=off tank/var
# zfs set exec=off tank/var

Copiar el caché de zpool para tenerlo en el sistema en funcionamiento

# mkdir -p /mnt/boot/zfs
# cp /tmp/zpool.cache /mnt/boot/zfs

No olvide elegir la opción Shell para terminar la configuración.

# exit
cat >> /boot/loader.conf <<EOF
zfs_load="YES"

geom_eli_load="YES"
geom_mirror_load="YES"

zpool_cache_load="YES"
zpool_cache_name="/boot/zfs/zpool.cache"
zpool_cache_type="/boot/zfs/zpool.cache"

vfs.root.mountfrom="zfs:tank/ROOT/default"
EOF

cat >> /etc/rc.conf <<EOF
zfs_enable="YES"
zfsd_enable="YES"
EOF

cat >> /etc/fstab <<EOF
/dev/gpt/efi0 /boot/efi0 msdosfs rw,late 0 0
/dev/gpt/efi1 /boot/efi1 msdosfs rw,late 0 0
/dev/mirror/swap.eli none swap sw 0 0
EOF
# exit

Reiniciar

 reboot

Consoles: EFI console
GELI Passphrase for disk0p4:

# geli status
Name  Status  Components
     ada0p4.eli  ACTIVE  ada0p4
     ada1p4.eli  ACTIVE  ada1p4
mirror/swap.eli  ACTIVE  mirror/swap

# zpool status

  pool: tank
 state: ONLINE
config:

	NAME            STATE     READ WRITE CKSUM
	tank            ONLINE       0     0     0
	  mirror-0      ONLINE       0     0     0
	    ada0p4.eli  ONLINE       0     0     0
	    ada1p4.eli  ONLINE       0     0     0

errors: No known data errors

FreeBSD es genial!
.