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
- INSTALACIÓN
- ACTUALIZACIÓN
- ACTUALIZACIÓN CORE/KERNEL/SRC
- ACTUALIZACIÓN JAILS
- ACTUALIZACIÓN ZPOOL
- SECURITY
- LIMPIEZA DE LOS PAQUETES DESCARGADOS
- ELIMINAR PAQUETES
- INFORMACIÓN PAQUETES INSTALADOS
BÚSQUEDA
Paquetes binarios:
El comando básico es:
Para no mostrar la versión de los paquetes encontrados:
Para mostrar los detalles del paquete:
Para buscar dentro de las descripciones:
Ports:
Antes de utilizar los ports debemos bajarnos el árbol, extraerlo y generar el índice:
portsnap fetch extract update
cd /usr/ports
make fetchindex
Para realizar una búsqueda:
No es necesario buscar por nombre podemos hacerlo por cualquier campo:
INSTALACIÓN
Paquetes binarios:
Ports:
Actualizamos el árbol de ports:
Cambiamos al diretorio del port:
Mostramos el diálogo de opciones de compilación:
Compilamos e instalamos:
make install
Elimina temporales de este modo evitamos problemas al actualizar a versiones superiores:
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:
Si queremos conocer las opciones de compilación de un paquete podemos consultarlas:
Si queremos resetear las opciones a las que venian por defecto:
ACTUALIZACIÓN
Antes de actualizar es recomendable crear un “boot environment” como se describe en este artículo .
Paquetes binarios:
Todos los paquetes binarios:
pkg autoremove
Ports:
Actualizamos el port en cuestión:
cd /usr/ports/CATEGORY/NAME
make clean
make config
make
make reinstall
Todos los ports:
Instalamos portmaster:
cd /usr/ports/ports-mgmt/portmaster
make install clean
Listamos las actualizaciones disponibles:
Actualizamos los ports que lo precisen:
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 install
Se puede crontabear el fetch y nos avisará vía mail si hay actualizaciones:
@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 install
Reinciamos y terminamos la instalación de las actualizaciones:
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:
portmaster -af -> Ports
freebsd-update install
Si algo saliese mal tan solo debemos ejecutar el siguiente comando para revertir los cambios:
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:
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 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:
portmaster -af -> Ports
Terminamos la instalación:
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:
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:
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:
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:
Una buena opción sería crontabear un script que nos envie un Telegram diario:
#! /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:
Las notificaciones recibidas tendrán el siguiente aspecto:
LIMPIEZA DE LOS PAQUETES DESCARGADOS
Paquetes binarios:
Ports:
ELIMINAR PAQUETES
Paquetes binarios:
pkg autoremove
Ports:
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 query -e “%n=NAME” “%n-%v %Ok %Ov”