Esta pagina se ve mejor con JavaScript habilitado

Instalación y actualización de SO/src/paquetes/jails en FreeBSD

 ·  🎃 kr0m

FreeBSD es un sistema operativo altamente flexible y configurable, muestra de ello es el sistema de paquetería ya sea mediante binarios o ports, mediante binarios ahorraremos tiempo de compilación en máquinas antiguas y con pocos recursos mientras que con los los ports conseguiremos paquetes mas pequeños y mas seguros ya que la superficie de ataque sobre estos se reducirá.

A continuación explico de forma breve y concisa como buscar, instalar y actualizar software además de como actualizar el core/base y las fuentes. Pero antes de nada debemos tener en cuenta que no es recomendable mezclar paquetes binarios con ports ya que las opciones de compilación de unos u otros pueden ser muy distintas y causar problemas, si se decide utilizar un sistema hay que utilizarlo para todo.


BÚSQUEDA

Paquetes binarios:
El comando básico es:

pkg search NAME

Para no mostrar la versión de los paquetes encontrados:

pkg search -o NAME

Para mostrar los detalles del paquete:

pkg search -f NAME

Para buscar dentro de las descripciones:

pkg search -D NAME

Ports:
Antes de utilizar los ports debemos bajarnos el árbol, extraerlo y generar el índice:

git clone https://git.FreeBSD.org/ports.git /usr/ports
cd /usr/ports
make fetchindex

Utilizamos Git ya que PortSnap solo nos permite emplear la release HEAD, mientras que con Git podemos elegir:

git -C /usr/ports branch --list -r

  ...
  origin/2023Q2
  origin/2023Q3
  origin/HEAD -> origin/main
  origin/main

Nos aseguramos de que estamos en la correcta:

git -C /usr/ports rev-parse --abbrev-ref HEAD

main

Podemos cambiar con el comando switch:

git -C /usr/ports switch 2023Q3
git -C /usr/ports rev-parse --abbrev-ref HEAD

2023Q3

Si queremos volver a HEAD que es main:

git -C /usr/ports switch main
git -C /usr/ports rev-parse --abbrev-ref HEAD

main

Para realizar una búsqueda:

make search name=NAME

No es necesario buscar por nombre podemos hacerlo por cualquier campo:

make search key=cadena


INSTALACIÓN

Paquetes binarios:

pkg install NAME

Ports:
Actualizamos el árbol de ports:

git -C /usr/ports pull
cd /usr/ports
make fetchindex

Cambiamos al diretorio del port:

cd /usr/ports/CATEGORY/NAME

Mostramos el diálogo de opciones de compilación:

make config

Compilamos e instalamos:

make
make install

Elimina temporales de este modo evitamos problemas al actualizar a versiones superiores:

make clean

Si queremos que nos pregunte todas las opciones antes de comenzar la compilación del port y de sus dependencias debemos utilizar la opción config-recursive:

make config-recursive install clean

Si queremos conocer las opciones de compilación de un paquete podemos consultarlas:

make showconfig

Si queremos resetear las opciones a las que venian por defecto:

make rmconfig

Hay un modo de aceptar los parámetros de compilación por defecto, muy útil para instalaciones desatendidas:

export BATCH="yes"
make install clean


ACTUALIZACIÓN

Antes de actualizar es recomendable crear un “boot environment” como se describe en este artículo .


ACTUALIZACIÓN BASE: CORE/KERNEL/SRC

Las partes del SO que actualizará freebsd-update dependen de la configuración indicada en el fichero /etc/freebsd-update.conf:

Components src world kernel

En este caso actualizará el código fuente del SO, las herramientas core y el kernel.

Si nos mantenemos dentro de la misma versión bastará con:

freebsd-update fetch
freebsd-update install

Se puede crontabear el fetch y nos avisará vía mail si hay actualizaciones:

crontab -e

@daily root freebsd-update -t kr0m@alfaexploit.com cron

NOTA: Antes de pasar de una versión a otra es recomendable actualizar tanto como podamos dentro de la versión existente(freebsd-update fetch/install, pkg upgrade)

Para pasar de una versión a otra seguimos la guía  y consultamos la última RELEASE disponible.

Si es una menor update, ej: 12.0 -> 12.1:

freebsd-update -r 12.1-RELEASE upgrade
freebsd-update install

Reinciamos y terminamos la instalación de las actualizaciones:

shutdown -r now
freebsd-update install

Si es una major update ej: 12.1 -> 13.0, además de los pasos de una minor update debemos reinstalar los paquetes binarios/ports y terminar la actualización.
Si estamos funcionando con paquetes binarios:

pkg-static upgrade -f
freebsd-update install

Si estamos funcionando con ports:

git -C /usr/ports pull
cd /usr/ports
make fetchindex
for PORT in $(pkg info|awk '{print$1}'); do PORT_PATH=$(pkg info $PORT|grep Origin|awk '{print$3}') && echo PORT: $PORT - $PORT_PATH && cd /usr/ports/$PORT_PATH && export BATCH="yes" && make clean reinstall clean; done
freebsd-update install

Si algo saliese mal tan solo debemos ejecutar el siguiente comando para revertir los cambios:

freebsd-update rollback


ACTUALIZACIÓN PAQUETES/PORTS

Paquetes binarios:

pkg upgrade NAME

Todos los paquetes binarios:

pkg upgrade
pkg autoremove

Ports:
Actualizamos el port en cuestión:

git -C /usr/ports pull
cd /usr/ports
make fetchindex
cd /usr/ports/CATEGORY/NAME
make clean
make config
make
make reinstall

Todos los ports:

git -C /usr/ports pull
cd /usr/ports
make fetchindex
for PORT in $(pkg info|awk '{print$1}'); do PORT_PATH=$(pkg info $PORT|grep Origin|awk '{print$3}') && echo PORT: $PORT - $PORT_PATH && cd /usr/ports/$PORT_PATH && export BATCH="yes" && make clean reinstall clean; done


ACTUALIZACIÓN JAILS


ACTUALIZACIÓN ZPOOL

Cuando actualizamos el SO puede que haya realizado cambios sobre la versión de ZFS, en tal caso debemos actualizar los pools ZFS que tengamos.

Con un status podemos ver que el mismo sistema nos informa:

zpool status

pool: zroot  
 state: ONLINE  
status: Some supported features are not enabled on the pool. The pool can  
 still be used, but some features are unavailable.  
action: Enable all features using 'zpool upgrade'. Once this is done,  
 the pool may no longer be accessible by software that does not support  
 the features. See zpool-features(5) for details.  
config:  
  
 NAME        STATE     READ WRITE CKSUM  
 zroot       ONLINE       0     0     0  
   vtbd0p4   ONLINE       0     0     0

Upgradeamos el zpool:

zpool upgrade zroot

This system supports ZFS pool feature flags.  
Enabled the following features on 'zroot':  
  userobj_accounting  
  encryption  
  project_quota  
  resilver_defer  
  bookmark_v2  
  redaction_bookmarks  
  redacted_datasets  
  bookmark_written  
  log_spacemap  
  livelist  
  device_rebuild  
  zstd_compress  
  draid
Ahora un status ya no muestra ninguna advertencia al respecto:
zpool status
pool: zroot  
 state: ONLINE  
config:  
  
 NAME        STATE     READ WRITE CKSUM  
 zroot       ONLINE       0     0     0  
   vtbd0p4   ONLINE       0     0     0

SECURITY

Podemos consultar si alguno de los paquetes binarios/ports instalados en el sistema tiene algún problema de seguridad:

pkg audit -F

Una buena opción sería crontabear un script que nos envie un Telegram diario:

vi /root/.scripts/securityCheck.sh

#! /usr/local/bin/bash
function sendTelegram {
        message=${@:1}
        curl -s -X POST https://api.telegram.org/botAPI_KEY/sendMessage -d chat_id=CHAT_ID -d text="$message"
}

pkg audit -F
SALIDA=$(pkg audit)
sendTelegram "$HOSTNAME - Security status: $SALIDA"

Asignamos los permisos al script:

chmod 700 /root/.scripts/securityCheck.sh

Las notificaciones recibidas tendrán el siguiente aspecto:


LIMPIEZA DE LOS PAQUETES DESCARGADOS

Paquetes binarios:

pkg clean

Ports:

rm /usr/ports/distfiles/*


ELIMINAR PAQUETES

Paquetes binarios:

pkg delete NAME
pkg autoremove

Ports:

cd /usr/ports/CATEGORY/NAME
make deinstall -> Si alguna aplicación depende del port saldrá una advertencia indicándolo
make rmconfig -> Elimina además la configuración del port


INFORMACIÓN PAQUETES INSTALADOS

Los siguientes comandos son válidos tanto si utilizamos binarios como ports

pkg info NAME
pkg query -e “%n=NAME” “%n-%v %Ok %Ov”

Si te ha gustado el artículo puedes invitarme a un RedBull aquí