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 PAQUETES/PORTS
- ACTUALIZACIÓN BASE: 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:
Utilizamos Git ya que PortSnap solo nos permite emplear la release HEAD, mientras que con Git podemos elegir:
...
origin/2023Q2
origin/2023Q3
origin/HEAD -> origin/main
origin/main
Nos aseguramos de que estamos en la correcta:
main
Podemos cambiar con el comando switch:
git -C /usr/ports rev-parse --abbrev-ref HEAD
2023Q3
Si queremos volver a HEAD que es main:
git -C /usr/ports rev-parse --abbrev-ref HEAD
main
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:
cd /usr/ports
make fetchindex
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:
Hay un modo de aceptar los parámetros de compilación por defecto, muy útil para instalaciones desatendidas:
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 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.
Si estamos funcionando con paquetes binarios:
freebsd-update install
Si estamos funcionando con ports:
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:
ACTUALIZACIÓN PAQUETES/PORTS
Paquetes binarios:
Todos los paquetes binarios:
pkg autoremove
Ports:
Actualizamos el port en cuestión:
cd /usr/ports
make fetchindex
cd /usr/ports/CATEGORY/NAME
make clean
make config
make
make reinstall
Todos los ports:
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:
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”