1 votes

Ubuntu Landscape - échec de update_security_db.sh lors d'un nouveau déploiement quickstart

J'ai installé Landscape Server 19.10 (quickstart) sur un nouveau conteneur LXC 18.04 fonctionnant sous Proxmox. L'installation n'a posé aucun problème, l'interface graphique Web a fonctionné correctement et j'ai pu connecter mes machines clientes au serveur.

Malheureusement, j'ai remarqué dans le volet des notifications de l'interface graphique web que le script update_security_db.sh échouait de manière répétée à chaque fois qu'il était exécuté (il le fait toutes les heures, d'après /etc/cron.d/landscape-server).

enter image description here

Vérification de update-security-db.log et l'exécution manuelle du script me donne l'erreur suivante :

Dec 19 16:40:36 update-security-db ERR  Traceback (most recent call last):
Dec 19 16:40:36 update-security-db ERR    File "./process-usns", line 7, in <module>
Dec 19 16:40:36 update-security-db ERR      canonical.landscape.scripts.usn.run()
Dec 19 16:40:36 update-security-db ERR    File "/opt/canonical/landscape/canonical/landscape/scripts/batch.py", line 77, in __call__
Dec 19 16:40:36 update-security-db ERR      code = self.run()
Dec 19 16:40:36 update-security-db ERR    File "/opt/canonical/landscape/canonical/landscape/scripts/usn.py", line 40, in run
Dec 19 16:40:36 update-security-db ERR      changeset = update_from_usn_tool_db(db)
Dec 19 16:40:36 update-security-db ERR    File "/opt/canonical/landscape/canonical/landscape/model/package/usn.py", line 237, in update_from_usn_tool_db
Dec 19 16:40:36 update-security-db ERR      "WHERE id = %(temp)s.pkg_id" % {"temp": temp_table})
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/store.py", line 109, in execute
Dec 19 16:40:37 update-security-db ERR      return self._connection.execute(statement, params, noresult)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/databases/postgres.py", line 306, in execute
Dec 19 16:40:37 update-security-db ERR      return Connection.execute(self, statement, params, noresult)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/database.py", line 241, in execute
Dec 19 16:40:37 update-security-db ERR      raw_cursor = self.raw_execute(statement, params)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/databases/postgres.py", line 316, in raw_execute
Dec 19 16:40:37 update-security-db ERR      return Connection.raw_execute(self, statement, params)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/database.py", line 374, in raw_execute
Dec 19 16:40:37 update-security-db ERR      self._run_execution(raw_cursor, args, params, statement)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/database.py", line 392, in _run_execution
Dec 19 16:40:37 update-security-db ERR      statement, params or (), error)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/database.py", line 454, in _check_disconnect
Dec 19 16:40:37 update-security-db ERR      return function(*args, **kwargs)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/tracer.py", line 248, in trace
Dec 19 16:40:37 update-security-db ERR      attr(*args, **kwargs)
Dec 19 16:40:37 update-security-db ERR    File "/usr/lib/python2.7/dist-packages/storm/databases/postgres.py", line 463, in connection_raw_execute_error
Dec 19 16:40:37 update-security-db ERR      statement, params, "SQL server cancelled statement")
Dec 19 16:40:37 update-security-db ERR  storm.exceptions.TimeoutError: 'SQL server cancelled statement', 'UPDATE package SET usn_id = new_package_usn_6KqW4Z.usn_id FROM new_package_usn_6KqW4Z WHERE id = new_package_usn_6KqW4Z.pkg_id', ()

Cette erreur se produit chaque fois que update_security_db.sh est exécuté. En exécutant manuellement le script, j'ai remarqué qu'il réussit à curler le fichier USN depuis les serveurs Ubuntu. Il transmet ensuite le fichier au script process_usns script. Le script s'exécute pendant plusieurs minutes avant de se terminer avec l'erreur SQL indiquée ci-dessus.

J'ai essentiellement installé landscape-server-quickstart directement sur un conteneur frais, et essayer le processus à nouveau sur un nouveau conteneur m'a donné le même problème aussi. Ce qui est étrange, c'est que le journal semble impliquer qu'il y a un problème avec le serveur SQL traitant le fichier USN nouvellement téléchargé. L'utilisation du CPU et de la mémoire était bonne pendant l'exécution du script (mon conteneur a 4 Go de RAM et 2vCPU). C'est une préoccupation pour moi, car la raison principale pour laquelle j'ai mis en place Landscape est d'effectuer la gestion des correctifs pour plusieurs ordinateurs.

UPDATE : J'ai lancé une machine virtuelle KVM aujourd'hui, sur une image fraîche d'Ubuntu Server 18.04. J'ai obtenu exactement la même erreur qu'avant (j'étais curieux de savoir si ce problème ne se produisait que s'il était exécuté dans LXC).

1voto

Après quelques débogages, j'ai compris que ce problème était dû au fait que le serveur SQL se mettait en veilleuse quand usn.py a mis à jour la base de données. Il est probable que cela soit dû au fait que mon hôte LXC fonctionne avec une charge élevée et que ses spécifications système sont inférieures à celles recommandées par Landscape. Le journal PostgreSQL mentionne clairement ce délai également lorsque l'erreur est déclenchée dans le journal de mise à jour de la sécurité.

La commande suivante dans /opt/canonical/landscape/canonical/landscape/model/package/usn.py:235 prend plus de temps que d'habitude sur ma machine et déclenche donc le timeout de la base de données.

     store.execute( 
         "UPDATE package SET usn_id = %(temp)s.usn_id FROM %(temp)s " 
         "WHERE id = %(temp)s.pkg_id" % {"temp": temp_table}) 

J'ai rapidement corrigé ce problème en ajoutant ce qui suit avant cette commande.

     store.execute("SET LOCAL statement_timeout = 10000")

Je n'ai pas d'expérience en SQL, mais cela devrait augmenter temporairement le délai d'attente à 10000ms, ce qui est plus que suffisant pour traiter la transaction de la BD. Cela fonctionne également avec des valeurs inférieures, mais je l'ai augmenté juste au cas où. Je n'ai pas réussi à trouver la valeur du délai d'attente fixée à l'origine par Landscape.

Après le patch, l'erreur a disparu et les mises à jour USN fonctionnent normalement. C'est un sale hack, mais pour autant que je sache, cela fonctionne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X