SuperSec 2018 Almería 12-13 Mayo
Involucrado con Linux desde algo antes de comenzar los estudios universitarios y luego durante ellos, estando involucrado con las asociaciones LinUV y Valux.org.
Empecé a ‘vivir’ del software libre en 2004 y a trabajar en Red Hat en 2006 como Consultor, luego como Technical Account Manager y ahora como Software Maintenance Engineer.
Robin Černín un compañero de soporte tras una guardia de fin de semana revisando una y otra vez las mismas configuraciones en diversos hosts comenzó la idea.
Unos scripts sencillos y un ‘wrapper’ después, la herramienta fue tomando forma, poco después, Pablo Iranzo adaptó el ‘wrapper’ a python para proporcionarle características más avanzadas.
En esos primeros momentos también se mantuvieron conversaciones con ingeniería y como resultado, un nuevo diseño de los tests más sencillo fue adoptado.
citellus.html
por http se visualiza.
Actualmente hay una gran presencia de plugins de OpenStack, ya que es en ese área donde trabajamos diariamente, pero Citellus no está limitado a una tecnología o producto.
Por ejemplo, es fácil realizar comprobaciones acerca de si un sistema está configurado correctamente para recibir actualizaciones, comprobar versiones específicas con fallos (Meltdown/Spectre) y que no hayan sido deshabilitadas las protecciones, consumo excesivo de memoria por algún proceso, fallos de autenticación, etc.
Lea la guía del colaborador en : https://github.com/citellusorg/citellus/blob/master/CONTRIBUTING.md para más detalles.
XSOS: Proporciona información de datos del sistema (ram, red, etc), pero no analiza, a los efectos es un visor ‘bonito’ de información.
TripleO-validations: se ejecuta solamente en sistemas ’en vivo’, poco práctico para realizar auditorías o dar soporte.
Filosofía sencilla:
Los plugins son aún más sencillos:
$RC_OKAY
si el test es satisfactorio / $RC_FAILED
para error / $RC_SKIPPED
para los omitidos / Otro para fallos no esperados.CITELLUS_ROOT
) o si se está ejecutando en modo live (CITELLUS_LIVE
). No se necesita introducir datos vía el teclado#!/bin/bash
# Load common functions
[ -f "${CITELLUS_BASE}/common-functions.sh" ] && . "${CITELLUS_BASE}/common-functions.sh"
# description: error if disk usage is greater than $CITELLUS_DISK_MAX_PERCENT
: ${CITELLUS_DISK_MAX_PERCENT=75}
if [[ $CITELLUS_LIVE = 0 ]]; then
is_required_file "${CITELLUS_ROOT}/df"
DISK_USE_CMD="cat ${CITELLUS_ROOT}/df"
else
DISK_USE_CMD="df -P"
fi
result=$($DISK_USE_CMD |awk -vdisk_max_percent=$CITELLUS_DISK_MAX_PERCENT '/^\/dev/ && substr($5, 0, length($5)-1) > disk_max_percent { print $6,$5 }')
if [ -n "$result" ]; then
echo "${result}" >&2
exit $RC_FAILED
else
exit $RC_OKAY
fi
$RC_OKAY
(ok), $RC_FAILED
(fallo) or $RC_SKIPPED
(omitido).CITELLUS_ROOT
tiene la ruta a la carpeta del sosreport indicada.CITELLUS_LIVE
contiene 0
ó 1
si es una ejecución en vivo o no.~/~/.../plugins/core/rhev/hosted-engine.sh
chmod +x hosted-engine.sh
if [ “$CITELLUS_LIVE” = “0” ]; then
grep -q ovirt-hosted-engine-ha $CITELLUS_ROOT/installed-rpms
returncode=$?
if [ “x$returncode” == “x0” ]; then
exit $RC_OKAY
else
echo “ovirt-hosted-engine no instalado“ >&2
exit $RC_FAILED
fi
else
echo “No funciona en modo Live” >&2
exit $RC_SKIPPED
fi
# Load common functions
[ -f "${CITELLUS_BASE}/common-functions.sh" ] && . "${CITELLUS_BASE}/common-functions.sh"
if is_rpm ovirt-hosted-engine-ha; then
exit $RC_OKAY
else
echo “ovirt-hosted-engine no instalado“ >&2
exit $RC_FAILED
fi
Use tox
para ejecutar algunas pruebas UT (utf8, bashate, python 2.7, python 3)
Diga a Citellus qué plugin utilizar:
[piranzo@host citellus]$ ~/citellus/citellus.py sosreport-20170724-175510/crta02 -i hosted-engine.sh -r
_________ .__ __ .__ .__
\_ ___ \|__|/ |_ ____ | | | | __ __ ______
/ \ \/| \ __\/ __ \| | | | | | \/ ___/
\ \___| || | \ ___/| |_| |_| | /\___ \
\______ /__||__| \___ >____/____/____//____ >
\/ \/ \/
mode: fs snapshot sosreport-20170724-175510/crta02
# ~/~/.../plugins/core/rhev/hosted-engine.sh: failed
“ovirt-hosted-engine no instalado“
Por ejemplo, Galera debe comprobar el seqno entre los diversos miembros para ver cuál es el que contiene los datos más actualizados.
Viene en el mismo repositorio que Citellus y se ejecuta especificando los diversos sosreports:
[piranzo@collab-shell]$ ~/citellus/magui.py * -i seqno
_
_( )_ Magui:
(_(ø)_)
/(_) Multiple Analisis Generic Unifier and Interpreter
\|
|/
....
[piranzo@collab-shell]]$ cat magui.json:
{'~/~/.../core/openstack/mysql/seqno.sh': {'controller0': {'err': u'2b65adb0-787e-11e7-81a8-26480628c14c:285019879\n',
'out': u'',
'rc': 10},
'controller1': {'err': u'2b65adb0-787e-11e7-81a8-26480628c14c:285019879\n',
'out': u'',
'rc': 10},
'controller2': {'err': u'2b65adb0-787e-11e7-81a8-26480628c14c:285019878\n',
'out': u'',
'rc': 10}}}```
En este ejemplo (UUID and SEQNO se muestra para cada controlador y vemos que el controller2 tiene una sequencia distinta y menos actualizada.
pipeline-yaml
, policy.json
y otros (asociados a OpenStack)seqno
de galeraredhat-release
entre equiposBlog posts:
Gracias por asistir!!
Ven a #citellus en Freenode o contacta con nosotros: