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:

pkg install ca_root_nss
portsnap fetch extract update
cd /usr/ports
make fetchindex

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:

portsnap fetch update

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


ACTUALIZACIÓN

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

Paquetes binarios:

pkg upgrade NAME

Todos los paquetes binarios:

pkg upgrade
pkg autoremove

Ports:
Actualizamos el port en cuestión:

portsnap fetch update
cd /usr/ports/CATEGORY/NAME
make clean
make config
make
make reinstall

Todos los ports:
Instalamos portmaster:

portsnap fetch update
cd /usr/ports/ports-mgmt/portmaster
make install clean

Listamos las actualizaciones disponibles:

portmaster -L

Actualizamos los ports que lo precisen:

portmaster -a


ACTUALIZACIÓN CORE/KERNEL/SRC

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

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:

pkg-static upgrade -f -> Binarios
portmaster -af -> Ports
freebsd-update install

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

freebsd-update rollback


ACTUALIZACIÓN JAILS

Iocage ya genera un snapshot a nivel ZFS de la Jail antes de actualizarla de este modo podremos revertir el estado en caso de necesidad.

El software y las fuentes del SO se actualizarán de igual manera que en un FreeBSD físico pero antes de hacerlo actualizaremos la jail desde fuera como se describe a continuación para que se genere un snapshot y en caso de necesidad revertir a él, luego ya podremos actualizar el software y las fuentes del SO sin problema.

CORE/BASE
Todos los comandos iocage se ejecutarán en el padre, el resto en la jail.

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

iocage update JAILNAME

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

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

iocage upgrade JAILNAME -r 12.1-RELEASE
iocage update JAILNAME

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:

pkg-static upgrade -f -> Binarios
portmaster -af -> Ports

Terminamos la instalación:

iocage update JAILNAME


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:

portmaster –clean-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í