Local Image Mirrors are not reflected in MAAS UI

Issues:

I cannot get my local image mirror be reflected in MAAS UI, they stay in Queued for Download. (I also cannot delete, or reselect upstream images). Any help would be greatly appreciated, I am at a loss for what is wrong . Reference images below.

What I have Done:

I followed the Local Image Mirror documentation and downloaded a few images. I made sure to get “noble” 24.04, because it is the default image required to recognize custom images architecture. Directory pic below, and my Ubuntu server can “curl” it and see it fine.

I set Source to Custom, gave URL and Keyring filename populated automatically.

Notes:

I have no proxy set for MAAS. I have no proxy set for /etc/environment on my Ubuntu machine

maas is on 3.7/stable

maas was init with the following:

maas init region+rack --database-uri "postgres://maas:password@localhost/maas"

Output of cat /var/snap/maas/current/regiond.conf:

database_host: 127.0.0.1 database_name: maas database_pass: password database_user: maas maas_url: http://158.139.45.60:5240/MAAS

Like I said before I can’t seem to delete images, or select/deselect Streams.

Not much output from: journalctl -u snap.maas.pebble.service, it seems maas-temporal-service does have issues starting, this repeats.

Sep 30 16:06:18 myserver-Precision-Rack-7910 maas-regiond[90803]: RegionServer,36,::ffff:158.139.45.60: [info] RegionServer connection lost (HOST:IPv6Address(type='TCP', host='::ffff:158.139.45.60', port=5251, flowInfo=0, scopeID=0) PEER:IPv6Address(type='TCP', host='::ffff:158.139.45.60', port=47680, flowInfo=0, scopeID=0))
Sep 30 16:06:18 myserver-Precision-Rack-7910 maas-regiond[90731]: maasserver.ipc: [info] Worker pid:90803 lost burst connection to ('158.139.45.60', 5251).
Sep 30 16:06:18 myserver-Precision-Rack-7910 maas-rackd[90748]: ClusterClient,client: [info] ClusterClient connection lost (HOST:IPv6Address(type='TCP', host='::ffff:158.139.45.60', port=47664, flowInfo=0, scopeID=0) PEER:IPv6Address(type='TCP', host='::ffff:158.139.45.60', port=5251, flowInfo=0, scopeID=0))
Sep 30 16:06:18 myserver-Precision-Rack-7910 maas-regiond[90803]: RegionServer,35,::ffff:158.139.45.60: [info] RegionServer connection lost (HOST:IPv6Address(type='TCP', host='::ffff:158.139.45.60', port=5251, flowInfo=0, scopeID=0) PEER:IPv6Address(type='TCP', host='::ffff:158.139.45.60', port=47664, flowInfo=0, scopeID=0))
Sep 30 16:06:18 myserver-Precision-Rack-7910 maas-regiond[90731]: maasserver.ipc: [info] Worker pid:90803 lost burst connection to ('158.139.45.60', 5251).
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]: {"message": "starting region temporal-worker process", "taskName": "Task-1", "timestamp": "2026-09-30T20:06:19.322752Z", "logger": "maastemporalworker.temporal_script:108", "level": "INFO", "thread": "MainThread:136653448390464"}
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]: Traceback (most recent call last):
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/snap/maas/42453/bin/maas-temporal-worker", line 8, in <module>
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     sys.exit(run())
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:              ^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/snap/maas/42453/lib/python3.12/site-packages/maastemporalworker/temporal_script.py", line 231, in run
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     asyncio.run(main())
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     return runner.run(main)
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:            ^^^^^^^^^^^^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     return self._loop.run_until_complete(task)
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     return future.result()
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:            ^^^^^^^^^^^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/snap/maas/42453/lib/python3.12/site-packages/maastemporalworker/temporal_script.py", line 123, in main
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     msm_activity = MSMConnectorActivity(db, services_cache)
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/snap/maas/42453/lib/python3.12/site-packages/maastemporalworker/workflow/msm.py", line 92, in __init__
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     self._session = self._create_session()
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:                     ^^^^^^^^^^^^^^^^^^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/snap/maas/42453/lib/python3.12/site-packages/maastemporalworker/workflow/msm.py", line 96, in _create_session
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     context = ssl.create_default_context(cafile=SYSTEM_CA_FILE)
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:   File "/usr/lib/python3.12/ssl.py", line 708, in create_default_context
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]:     context.load_verify_locations(cafile, capath, cadata)
Sep 30 16:06:19 myserver-Precision-Rack-7910 maas-temporal-worker[96285]: FileNotFoundError: [Errno 2] No such file or directory

The configuration of your mirror looks good to me. According to the log, the issue seems to be caused by the maas-temporal-worker crashing with a FileNotFoundError because the certificates are missing (SYSTEM_CA_FILE)

Can you check whether they exist and the ca-certificates is intact?

ls -l /etc/ssl/certs/ca-certificates.crt
dpkg -s ca-certificates | grep -E 'Status|Version'
lrwxrwxrwx 1 root root 49 Jul  1 15:49 /etc/ssl/certs/ca-certificates.crt -> /usr/local/share/ca-certificates/Combined_pem.crt

 dpkg -s ca-certificates | grep -E 'Status|Version'
Status: install ok installed
Version: 20260601~24.04.1

Would this fail of maas-temporal-worker explain the image mirror not working?

Is the ca-cert owned by root a problem, what does maas expect?

Do I need to populate the env var $SYSTEM_CA_FILE before execution of maas?

It appeared that I had everything I needed for the ca-cert, but I did a: sudo update-ca-certificates,

and it said 1 added. After that the maas-temporal-worker error went away after a restart of maas. I was able to sync an image thank you so much!

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.