N4D viene de Network for dummies. Es un sistema desarrollado por LliureX para facilitar la comunicación entre equipos. El N4D nos permite ejecutar de manera remota aplicaciones basada en PAM, y aumentar sus funcionalidades con plugins.
En el modelo de aula de LliureX nos encontramos multiples servicios (DHCP, servidor Web, LDAP, compartición de recursos, etc...). Dentro de este modelo hemos de ser capaces de poder configurar un aula de la manera más rápida y sencilla posible.
El sistema N4D posibilita la comunicación entre clientes y servidores con autentificación, además proporciona herramientas al usuario avanzado para el desarrollo de plugins y aplicaciones cliente-servidor.
Estos plugins son Clases N4D que publicarán una serie de métodos o funciones de clase para su ejecución de manera remota.
N4D dispone de una serie de comandos que nos van a permitir interactuar con él:
n4d-client, n4d-modules, n4d-vars, n4d-create-conf, n4d-server.
N4d-client nos permite ejecutar funciones remotas desde la consola del sistema:
n4dclient -h host [-u usuario -p contraseña|-u usuario -p contraseña] -m metodo -c clase [-a ListaArgs]
Así tenemos:
Opción | Función |
---|---|
host | Dirección IP del host que servirá la función (host remoto). |
usuario | Usuario del host remoto. |
contraseña | Contraseña del host remoto. |
método y clase | Función que queremos utilizar y clase a la que pertenece. |
ListaArgs | Lista de todos los argumentos que podemos pasarle a n4d. |
De esta forma si ejecutamos en el servidor la siguiente orden:
n4d-client -h localhost -c VariablesManager -m listvars
Nos saldrá una serie de variables (algunas se han borrado) que nos permiten conocer el estado del servidor. Ten en cuenta que puedes substituir localhost por la IP de la máquina que quieras:
SRV_IP='10.2.1.254'; PROXY_HOST='proxy'; DEADTIME='15'; SLAVE_BLACKLIST= DNS_UNREG_HOSTNAME_PREFIX='host-'; OPENSYSCLONE_SQUASHFS_PROTOCOL='tftp'; LDAP_BASE_DN='dc=ma5,dc=lliurex,dc=net'; DHCP_FIRST_IP='10.2.1.13'; PROXY_HTTP_PORT='3128'; SAMBA_DOMAIN_NAME='lliurex'; NAME_SERVER_SAMBA='%h'; DNS_EXTERNAL= HTTP_PATH='/var/www/'; INTERNAL_DOMAIN='aula1'; DHCP_LAST_IP='10.2.1.242'; INTERNAL_INTERFACE='eth0'; EXTERNAL_INTERFACE='eth1'; DHCP_DENY_UNKNOWN_CLIENTS='no'; DNS_HOSTNAME_PREFIX='llx-'; INTERNAL_MASK='24'; INTERNAL_NETWORK='10.2.1.0'; STATS_ENABLED='1'; PROXY_MAX_FILE_SIZE='204800'; SAMBASID= ... ZEROCENTER= ... CLIENT_LDAP_URI_NOSSL='ldap://10.2.1.254'; DHCP_HOST_MAX='80'; DHCP_ENABLE='True'; SRV_ALIAS=... HOSTNAME='MACROHPCompaq'; PROXY_ENABLED='True'; CLIENT_LDAP_URI='ldaps://10.2.1.254'; ZEROCENTERINTERNAL='{}'; DHCP_LEASE_TIME='12'; ENABLE_NSS_LDAP='ENABLED'; LLIUREXMIRROR='{u'llx16': {u'exception_msg': u'', u'status_mirror': u'Ok', u'mirror_size': u'14.2580130817', u'progress': 100, u'last_mirror_date': u'24/01/2017'}}';
Podemos conocer todos los métodos y clases que se pueden usar en n4d con el parámetro getmethods.
n4d-client -h hostname getmethods
Siendo hostname la ip de la máquina de la que queremos conocer los métodos disponibles. Si omitimos el parámetro -h hostname, nos saca los métodos y clases de nuestra máquina:
n4d-client getmethods
La lista que nos sale son del tipo:
[Golem] send_xml_to_server : admin adm admins [FileOperations] get_file_from_server : admin admins teachers [FileOperations] send_file_to_server : admin admins teachers [SlapdManager] delete_serverid : adm admins ... [ApacheManager] backup : adm admins [ApacheManager] reboot_apache : adm admins [ApacheManager] load_exports : adm admins
La lista que nos aparece es bastante larga si se trata de un servidor, cada línea viene definida de la siguiente manera:
[Clase] Método: {lista de grupos permitidos}
Podemos ver que hay algunas funciones que sólo pueden ser ejecutadas por el grupo admin, o teachers (profesores) y otras pueden ser ejecutadas por cualquiera que tenga acceso a la máquina (anonymous). Podemos conocer todo el listado de Clases que hay en un servidor:
getmethods | cut -f1 -d " " | uniq
[Hostname] [LliurexUp] [Golem] [FileOperations] [ZeroServerWizardManager] [ZCenterVariables] [VariablesManager] [TeacherShareManager] [TeacherShare] [TaskMan] [SourcesList] [SocketManager] [SlapdManager] [SignOfLife] [Shutdowner] [ServerBackupManager] [SendFile] [SambaSIDFixer] [SambaManager] [RemoteWebGui] [RemoteGuiManager] [N4dProxy] [PmbManager] [PamnssPlugin] [OpenSysCloneRescue] [OpenSysCloneExport] [OpenSysClone] [NfsManager] [NetworkManager] [NetinstallManager] [NetShareOperations] [NetFoldersManager] [NTicketsManager] [MysqlManager] [MovingProfiles] [MountManager] [MoodleManager] [MirrorManager] [Matrix] [LtspBerryTerminal] [LmdTemplateManager] [LmdServer] [LmdNotifier] [LmdManagerClass] [LmdImageManager] [LmdClientManager] [LmdBootManager] [LlxBootManager] [LliurexVersion] [LliurexOwncloud] [LliurexOpenmeetings] [LliurexGuard] [LliurexBerry] [LessonManager] [IptablesManager] [HomeCleaner] [GuiLauncherManager] [FreeRadiusManager] [FileUtils] [EpoptesServer] [DrValentinCommon] [Dnsmasq] [DiscoverUsers] [CupsManager] [ClientManager] [ClientExeManager] [ApacheManager]
Como hemos visto n4d nos permite gestionar el conjunto de variables de un sistema. Una de las clases que nos permite gestionar las variables es VariablesManager:
n4d-client getmethods | grep VariablesManager
Nos da como salida:
[VariablesManager] restore : adm admins admin [VariablesManager] listvars : anonymous [VariablesManager] get_variable_list : anonymous [VariablesManager] init_variable : admin admins adm [VariablesManager] add_variable : admin admins adm [VariablesManager] empty_trash : admin admins adm [VariablesManager] get_variables : anonymous [VariablesManager] set_variable : admin admins adm [VariablesManager] get_variable : anonymous [VariablesManager] read_inbox : admin admins adm [VariablesManager] backup : adm admins admin
Como hemos visto, para conocer todas las variables disponibles en un sistema podemos ejecutar:
n4dclient -c VariablesManager -m listvars
Como es una función bastante utilizada, disponemos también del comando n4d-vars que nos simplifica el uso de la clase VariablesManager. Así, si ejecutamos:
n4d-vars listvars
Nos dará el mismo resultado que antes. Asimismo, podemos ver una variable concreta con el parámetro getvalues:
LLIUREXMIRROR='{u'llx16': {u'exception_msg': '', u'status_mirror': 'Ok', u'mirror_size': '14.258067918', u'progress': 100, u'last_mirror_date': '30/01/2017'}}';
Es por eso que nos facilita enormemente el uso de scripts usando la función eval, así por ejemplo podemos escribir un script:
#!/bin/bash eval $(n4d-vars getvalues LLIUREXMIRROR) echo $LLIUREXMIRROR exit 0