fedora-iot / zezere Goto Github PK
View Code? Open in Web Editor NEWZezere is a provisioning service for Fedora IoT. It can be used for deploying Fedora IoT to devices without needing a physical console.
License: MIT License
Zezere is a provisioning service for Fedora IoT. It can be used for deploying Fedora IoT to devices without needing a physical console.
License: MIT License
While the container use case with gunicorn uses environment variables from the container platform for more traditional users we should provide a zezere.conf for apache to install to /etc/httpd/conf.d with defaults and other documented options commented out to make it easier for people to get started.
In a lot of cases IoT devices won't appear on the same network/IP as the person logged into the management UX.
The ability to provide a unique generated ID on the display/console that a user can enter into the management UX to claim the device would be useful.
It might be useful to make this expandable to add different/multiple means of providing the ability to do this different ways. QCode and NFC via an app are other ideas that come to mind.
Zezere shows the device is already claimed and doesn't show any unclaimed devices.
Yet, when I boot up the device, it shows the message that this device can be claimed. Could we do a check to not show a different message if the device is already claimed vs. when its not claimed?
(Moved over from from iot-docs pagure - https://pagure.io/fedora-iot/iot-docs/issue/38)
I see that there have been no substantial commits on this project for two years. What is the status of this project's development? Is it still under development as the README claims? Is the project in need of maintainers?
While trying to set up the IOT for testing I ran into several issues with mod-wsgi and psycopg2, noticed it will be better to set up psycopg2-binary and mod-wsgi. I would like to know these changes can be made, and a developer install guide is added
I managed to compose and boot an Fedora IoT like image via osbuild (yay). When I booted it I was suprised to find that an ssh key got provisioned via zezere-ignition
. This is of course because the qemu uses one very specific mac address (52:54:00:12:34:56
) as the default if non is specified (qemu net/net.c:182).
I think it would make sense to special case that MAC address. Maybe set the root password to a well known one, or require a token for that MAC address (like in issue #54).
[ 32.379983] zezere-ignition[811]: INFO : Ignition 2.2.1
[ 32.380961] zezere-ignition[811]: INFO : Stage: fetch
[ 32.381654] zezere-ignition[811]: INFO : reading system config file "/usr/lib/ignition/base.ign"
[ 32.382636] zezere-ignition[811]: INFO : no config at "/usr/lib/ignition/base.ign"
[ 32.383773] zezere-ignition[811]: DEBUG : parsed url from cmdline: ""
[ 32.384571] zezere-ignition[811]: INFO : no config URL provided
[ 32.385354] zezere-ignition[811]: INFO : reading system config file "/usr/lib/ignition/user.ign"
[ 32.386324] zezere-ignition[811]: INFO : no config at "/usr/lib/ignition/user.ign"
[ 32.387456] zezere-ignition[811]: INFO : using config file at "/tmp/zezere-ignition-config-207rzhn4.ign"
[ 32.388618] zezere-ignition[811]: DEBUG : parsing config with SHA512: 03362215218551e13ca5128b2fc167dea1be823ff6a1b9b099a1d33b61c1e56be637fd13a47bc57966e8b76b2a1a6d8eb0d2a9e120897e1d9798b5c36ddca757
[ 32.392943] zezere-ignition[811]: INFO : GET https://provision.fedoraproject.org/netboot/x86_64/ignition/52:54:00:12:34:56: attempt #1
[ 32.771984] zezere-ignition[811]: INFO : GET result: OK
[ 32.776870] zezere-ignition[811]: DEBUG : fetched referenced config at https://provision.fedoraproject.org/netboot/x86_64/ignition/52:54:00:12:34:56 with SHA512: e1e98e22de4283245568a1cac4999f080025a2f7fae97eb8d655962c579e73bcb2b46e3a71825c64f957ab7eacc84bcef4f68d32eb7f53c3a30bf32fc5d62b84
[ 32.798113] zezere-ignition[811]: WARNING : warning at $.ignition.config.merges, line 1 col 46: Unused key merges
[ 32.823535] zezere-ignition[811]: INFO : fetch: fetch complete
[ 32.826372] zezere-ignition[811]: INFO : fetch: fetch passed
[ 32.828564] zezere-ignition[811]: INFO : Ignition finished successfully
[ 32.848494] zezere-ignition[816]: INFO : Ignition 2.2.1
[ 32.851747] zezere-ignition[816]: INFO : Stage: disks
[ 32.852989] zezere-ignition[816]: INFO : reading system config file "/usr/lib/ignition/base.ign"
[ 32.854551] zezere-ignition[816]: INFO : no config at "/usr/lib/ignition/base.ign"
[ 32.857755] zezere-ignition[816]: INFO : disks: disks passed
[ 32.859102] zezere-ignition[816]: INFO : Ignition finished successfully
[ 32.877105] zezere-ignition[821]: INFO : Ignition 2.2.1
[ 32.878287] zezere-ignition[821]: INFO : Stage: mount
[ 32.879419] zezere-ignition[821]: INFO : reading system config file "/usr/lib/ignition/base.ign"
[ 32.880970] zezere-ignition[821]: INFO : no config at "/usr/lib/ignition/base.ign"
[ 32.883847] zezere-ignition[821]: INFO : mount: mount passed
[ 32.884979] zezere-ignition[821]: INFO : Ignition finished successfully
[ 32.899478] zezere-ignition[826]: INFO : Ignition 2.2.1
[ 32.901771] zezere-ignition[826]: INFO : Stage: files
[ 32.903407] zezere-ignition[826]: INFO : reading system config file "/usr/lib/ignition/base.ign"
[ 32.904822] zezere-ignition[826]: INFO : no config at "/usr/lib/ignition/base.ign"
[ 32.909160] zezere-ignition[826]: INFO : files: createUsers: op(1): [started] creating or modifying user "root"
[ 32.910668] zezere-ignition[826]: DEBUG : files: createUsers: op(1): executing: "usermod" "--root" "/" "root"
[ 32.925344] zezere-ignition[826]: INFO : files: createUsers: op(1): [finished] creating or modifying user "root"
[ 32.927007] zezere-ignition[826]: INFO : files: createUsers: op(2): [started] adding ssh keys to user "root"
[ 32.930316] zezere-ignition[826]: INFO : files: createUsers: op(2): [finished] adding ssh keys to user "root"
[ 32.933782] zezere-ignition[826]: INFO : files: op(3): [started] relabeling 9 patterns
[ 32.935544] zezere-ignition[826]: DEBUG : files: op(3): executing: "setfiles" "-vFi0" "-r" "/" "/etc/selinux/targeted/contexts/files/file_contexts" "-f" "-"
[ 32.942152] zezere-ignition[826]: CRITICAL : files: op(3): [failed] relabeling 9 patterns: exit status 255: Cmd: "setfiles" "-vFi0" "-r" "/" "/etc/selinux/targeted/contexts/files/file_contexts" "-f" "-" Stdout: "" Stderr: "setfiles: invalid alt_rootpath: /\n"
[ 32.945206] zezere-ignition[826]: files failedFull config:
[ 32.947613] zezere-ignition[826]: {
[ 32.948520] zezere-ignition[826]: "ignition": {
[ 32.949472] zezere-ignition[826]: "config": {
[ 32.950396] zezere-ignition[826]: "replace": {
[ 32.951357] zezere-ignition[826]: "source": null,
[ 32.952294] zezere-ignition[826]: "verification": {}
[ 32.953260] zezere-ignition[826]: }
[ 32.954104] zezere-ignition[826]: },
[ 32.955167] zezere-ignition[826]: "proxy": {},
[ 32.956016] zezere-ignition[826]: "security": {
[ 32.956820] zezere-ignition[826]: "tls": {}
[ 32.958588] zezere-ignition[826]: },
[ 32.959394] zezere-ignition[826]: "timeouts": {},
[ 32.961208] zezere-ignition[826]: "version": "3.1.0-experimental"
[ 32.963560] zezere-ignition[826]: },
[ 32.964348] zezere-ignition[826]: "passwd": {
[ 32.966148] zezere-ignition[826]: "users": [
[ 32.966996] zezere-ignition[826]: {
[ 32.967749] zezere-ignition[826]: "name": "root",
[ 32.969629] zezere-ignition[826]: "sshAuthorizedKeys": [
[ 32.970569] zezere-ignition[826]: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCx0fw08yAmuQ7Ql91pzjxwDhW6jpt2/0wkWjECGVFSgSry6bxk99B35PxsKOSGXOX61fvLEyYxjmrFOhzoBl+t55ssdGdrW8ARoHWhFLWCuxwDnVcabjEIEclUkPsNZLm65ixzeZkuq051n9I2ZvrZnkPFbcx0sHrLW8PNeiw/+jdBXSG6Mt9B8ANY1teA7Oy/l9P6uqooH8HPqc7nhJGllNLCqt/leL0mtcz6/BD9i7Kr50nbqTSnHOlt/4Zt8OfdjIiAP575Vd83+JoiSBLcMvdGFhe1SdlkpMKAunjuaMr8CH70hEruga+HL0DvwDj2g0qV5lwVppyvNoUSMkr5 [email protected]"
[ 32.974133] zezere-ignition[826]: ]
[ 32.974862] zezere-ignition[826]: }
[ 32.976655] zezere-ignition[826]: ]
[ 32.977411] zezere-ignition[826]: },
[ 32.978165] zezere-ignition[826]: "storage": {},
[ 32.980002] zezere-ignition[826]: "systemd": {}
[ 32.980931] zezere-ignition[826]: }CRITICAL : Ignition failed: failed to handle relabeling: exit status 255: Cmd: "setfiles" "-vFi0" "-r" "/" "/etc/selinux/targeted/contexts/files/file_contexts" "-f" "-" Stdout: "" Stderr: "setfiles: invalid alt_rootpath: /\n"
[ 32.991349] zezere-ignition[837]: INFO : Ignition 2.2.1
[ 32.992541] zezere-ignition[837]: INFO : Stage: umount
[ 33.000340] zezere-ignition[837]: INFO : reading system config file "/usr/lib/ignition/base.ign"
[ 33.002575] zezere-ignition[837]: INFO : no config at "/usr/lib/ignition/base.ign"
[ 33.004861] zezere-ignition[837]: INFO : umount: umount passed
[ 33.005797] zezere-ignition[837]: INFO : Ignition finished successfully
[ 33.008592] zezere-ignition[809]: Running stage fetch with config file /tmp/zezere-ignition-config-207rzhn4.ign
[ 33.009857] zezere-ignition[809]: Running stage disks with config file /tmp/zezere-ignition-config-207rzhn4.ign
[ 33.012194] zezere-ignition[809]: Running stage mount with config file /tmp/zezere-ignition-config-207rzhn4.ign
[ 33.013429] zezere-ignition[809]: Running stage files with config file /tmp/zezere-ignition-config-207rzhn4.ign
[ 33.014729] zezere-ignition[809]: Running stage umount with config file /tmp/zezere-ignition-config-207rzhn4.ign
The ssh key management tab could be improved and made more generic. It should ultimately evolve into (when we move to FDO support) have the ability to specify the username that will be created and the key against the username.
This task should be the would be to improve ssh keys and generalise the tab
Describe the bug
After the install of Fedora IoT 39 and successful onboarding with Zezere, the journal (and console) have the same log message from zezere_ignition
every 1-2 minutes.
Oct 27 10:58:06 localhost.localdomain systemd[1]: Starting zezere_ignition.service - Run Ignition for Zezere...
Oct 27 10:58:06 localhost.localdomain systemd[1]: zezere_ignition.service: Deactivated successfully.
Oct 27 10:58:06 localhost.localdomain systemd[1]: Finished zezere_ignition.service - Run Ignition for Zezere.
Oct 27 10:58:06 localhost.localdomain audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=zezere_ignition comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Oct 27 10:58:06 localhost.localdomain kernel: audit: type=1130 audit(1698418686.447:307): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=zezere_ignition comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Oct 27 10:58:06 localhost.localdomain kernel: audit: type=1131 audit(1698418686.447:308): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=zezere_ignition comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Oct 27 10:58:06 localhost.localdomain audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=zezere_ignition comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
To Reproduce
Expected behavior
Less chatty messages from zezere
OS version:
$ rpm-ostree status -b
State: idle
BootedDeployment:
● fedora-iot:fedora/devel/x86_64/iot
Version: 39.20231026.0 (2023-10-26T12:27:40Z)
Commit: 0599c27fe88ed2aaeb8144c7b604aaa69e31a94cbc384c894e29b27a077bdb6a
GPGSignature: Valid signature by E8F23996F23218640CB44CBE75CF5AC418B8E74C
Additional context
It looks like zezere_ignition.timer
is configured to fire every 1 minute...these seems aggressive. Can we tune this?
$ systemctl cat zezere_ignition.timer
# /usr/lib/systemd/system/zezere_ignition.timer
[Unit]
Description=Trigger Ignition for Zezere until it finishes
[Timer]
OnActiveSec=10sec
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
More broadly, do we need to keep checking provision.fedoraproject.org for new configs? I assumed the zezere step was a one-time thing.
Currently setup.py doesn't install the templates content, and possibly some other bits
Add a nice UX using the patternfly themes engine (https://www.patternfly.org/)
Make it so that zezere-ignition will use DNS discovery without /etc/zezere-ignition-url
file.
i.e. look up the systems' primary domain, and run a DNS SRV record lookup against that.
With things like tmpfs we need a location, likely var/lib/zezere to store any local runtime data such as sqlite DBs or anything else we may need to store for data.
We also likely need a var/www/html/ or similar to store content that may be needed such as inintrd and related things that we're not pulling from other content services.
Write test suite for zezere-ignition.
/packit propose-update
As reported downstream, at one point our openQA zezere test started failing. We run our own zezere server for the test. What happened is that zezere added a new config option, and the config file we use in the test did not include this option at all. The most common way server software would usually handle this situation is to use some kind of in-built default value, but zezere doesn't do this: if a config option isn't present in the config file, it just fails (ultimately because ConfigParser.getboolean()
fails in settings_external.py
).
Ideally this mechanism should be tweaked somehow so zezere can set and use defaults for config options that aren't set in the config file at all, then adding a new config option would not require server admins to update their config files unless they need to set it to something non-default.
According to @paulwhalen it would be appreciated to show the machine’s IP address in the MOTD.
Armhfp provisioning fails:
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: INFO : files: ensureUsers: op(1): [started] creating or modifying user "root"
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: DEBUG : files: ensureUsers: op(1): executing: "usermod" "--root" "/" "root"
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: INFO : files: ensureUsers: op(1): [finished] creating or modifying user "root"
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: INFO : files: ensureUsers: op(2): [started] adding ssh keys to user "root"
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: INFO : files: ensureUsers: op(2): [finished] adding ssh keys to user "root"
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: INFO : files: op(3): [started] relabeling 12 patterns
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: DEBUG : files: op(3): executing: "setfiles" "-vF0" "-r" "/" "/etc/selinux/targeted/contexts/files/file_contexts" "-f" "-"
Oct 21 17:06:42 rpi2-1 zezere-ignition[1763]: CRITICAL : files: op(3): [failed] relabeling 12 patterns: exit status 255: Cmd: "setfiles" "-vF0" "-r" "/" "/etc/selinux/targeted/contexts/files/file_contexts" "-f" "-" Stdout: "" Stderr: "setfiles: invalid alt_rootpath: /\n"
The hostname field isn't populated in the web UX. I suspect this is dependent on #49 discovery.
Packit failed on creating pull-requests in dist-git:
dist-git branch | error |
---|---|
f30 |
The distgit repository /tmp/packit-dist-gitjpkctczf is dirty.This is not supported. |
f31 |
The distgit repository /tmp/packit-dist-gitjpkctczf is dirty.This is not supported. |
f32 |
Failed to download file from URL https://github.com/fedora-iot/zezere/archive/vv0.4.tar.gz#/zezere-v0.4.tar.gz. Reason: 'Not Found'. |
master |
The distgit repository /tmp/packit-dist-gitjpkctczf is dirty.This is not supported. |
You can re-trigger the update by adding /packit propose-update
to the issue comment.
When the FDO onboarding service receives a request to onboard a device we need to process that device and return things like the user/ssh key to provide and any other SIM details that the user has provided for the device/group.
We need to be able to authorise connections to the FDO services APIs. This needs the underlying pieces in the API code as well as an overall UX in the admin section to be able to specify an API key to use for the auth, and a place to store it in the config file/DB.
Prev work: #127
Right now there are still a few lines missing for 100% code coverage.
We should at some point get this fully covered.
Add the ability to set local user options
I'm running self-hosted Zezere with minimum settings and everything seems to work fine (I can add SSH keys etc.). I have a Fedora IoT running on Raspberry PI 4 (I know it is not officially supported, but I was able to claim the device with the official provisioning service, so I think it should work) and I change the Zezere URL by adding the configuration option to kernel command line (the support was added here: f66c0b6). By examining the logs while running self-hosted Zezere I cannot see any requests coming in from the device during ignition. I was able to confirm that it should use the newly configure provisioning server, as it is shown correctly in the MOTD.
Not sure where to go from here
A brief guide for how to get started as a developer
The FDO protocol defines a device/owner set of relationships to enable a management platform toe uniquely identify a device.
We need the ability to import the ownership vouchers into Zezere, either a single device or a block of devices. The ownership vouchers need to be imported and stored in the DB in a table.
The ownship vouchers should be displayed as part of the device list, whether they're "ghosts" AKA not onboarded, or with more details if they are. There should be the ability to be delete vouchers.
At the moment we have stable and rawhide Fedora IoT install options. Add a settings option/section to enable configuring the install options, and a section to set defaults like default keys/installs and other options.
fyi
Created a new raspberry pi install, and booted up with monitor and keyboard attached. Went to https://provision.fedoraproject.org/ claimed the device and tried to install my ssh public key, but zezere halts indefinitely with 'cancel run request' on the 'actions' button.
Am going to manually install my ssh key instead
When a user adds a new ownership voucher Zezere needs to push the new voucher to the FDO owner service so that when a device appears online the FDO owner service can claim the device as ours.
There's a manage.py utility used for various tasks, it's not installed by setup.py. We need to install it and it should also be renamed so it doesn't conflict with the world, Something like zezere-manage.py or similar.
The ssh key management could be improved.
There's only one text box which appears to be where the key should go:
But when I put my key in there it errors out with the following error so I'm not sure if that's the key itself or a name for the key:
Environment: Request Method: POST Request URL: https://provision.fedoraproject.org/portal/sshkeys/add/ Django Version: 3.0.4 Python Version: 3.6.9 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'mozilla_django_oidc', 'rest_framework', 'rules.apps.AutodiscoverRulesConfig', 'zezere'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback (most recent call last): File "/opt/app-root/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/opt/app-root/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/opt/app-root/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/opt/app-root/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view return view_func(request, *args, **kwargs) File "/opt/app-root/lib/python3.6/site-packages/django/views/decorators/http.py", line 40, in inner return func(request, *args, **kwargs) File "/opt/app-root/src/zezere/views_portal.py", line 98, in add_ssh_key key.full_clean() File "/opt/app-root/lib/python3.6/site-packages/django/db/models/base.py", line 1222, in full_clean raise ValidationError(errors) Exception Type: ValidationError at /portal/sshkeys/add/ Exception Value: {'key': ['Ensure this value has at most 255 characters (it has 402).']}
It would also be useful to be able to provide a friendly name for the key.
The FDO owner onboarding service runs as a standalone service and has an API to integrate into for both 1) advertising new devices that we now have vouchers for and 2) onboarding an actual device 3) Populating details for SIM modules
We need an initial addition client API to speak with the FDO onboaring service
Document in a README how to get started, DB options, configuration, authentication etc
When a device first starts via Zezere's netboot interface, we should send it a minimal initrd with a tool that grabs device information and then submits that.
That would enable us to support multiple MAC addresses from the same device without seeing different devices, and also allow things like device ID-based enrollment (rather than last_ip).
Running a lot of test vm deployments I have a full page of MAC addresses ready to be claimed. Most of them are no longer deployed. It would be great if we could 'forget' about devices already claimed or waiting to be claimed.
We need to have an admin page for configuring the FDO service including things like:
Similar to how cockpit displays the URL to the cockpit Web UX URL we should display a URL on the console when a device hasn't yet been provisioned so people know where to go to provision the device.
Images for cloud and devices like the Raspberry Pi often deploy a pre generated image. The ability to be able to auto provision users/keys and other post install related things is useful.
So being able to boot a device and have ignition retrieve a config and auto provision.
Running on localhost with
docker run --name zezere \
-e OIDC_RP_CLIENT_ID=<client id> \
-e OIDC_RP_CLIENT_SECRET=<client secret> \
-e OIDC_OP_AUTHORIZATION_ENDPOINT=<authorization endpoint> \
-e OIDC_OP_TOKEN_ENDPOINT=<token endpoint> \
-e OIDC_OP_USERINFO_ENDPOINT=<userinfo endpoint> \
-e OIDC_OP_JWKS_ENDPOINT=<jwks endpoint> \
-e AUTH_METHOD=oidc \
-e SECRET_KEY=<secret key> \
-e ALLOWED_HOSTS=localhost \
--detach --rm \
-p 8080:8080 \
-t quay.io/fedora-iot/zezere:latest
After successful authentication the /oidc/callback/ throws 500:
172.17.0.1 - - [10/Dec/2020:19:03:35 +0000] "GET /accounts/login/?next=/portal/ HTTP/1.1" 302 -
172.17.0.1 - - [10/Dec/2020:19:03:35 +0000] "GET /oidc/authenticate/ HTTP/1.1" 302 -
[Thu Dec 10 19:03:42.653278 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] Internal Server Error: /oidc/callback/
[Thu Dec 10 19:03:42.653306 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] Traceback (most recent call last):
[Thu Dec 10 19:03:42.653310 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
[Thu Dec 10 19:03:42.653313 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] response = get_response(request)
[Thu Dec 10 19:03:42.653316 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/django/core/handlers/base.py", line 179, in _get_response
[Thu Dec 10 19:03:42.653320 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] response = wrapped_callback(request, *callback_args, **callback_kwargs)
[Thu Dec 10 19:03:42.653323 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/django/views/generic/base.py", line 70, in view
[Thu Dec 10 19:03:42.653327 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] return self.dispatch(request, *args, **kwargs)
[Thu Dec 10 19:03:42.653330 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/django/views/generic/base.py", line 98, in dispatch
[Thu Dec 10 19:03:42.653334 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] return handler(request, *args, **kwargs)
[Thu Dec 10 19:03:42.653337 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/mozilla_django_oidc/views.py", line 99, in get
[Thu Dec 10 19:03:42.653342 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] self.user = auth.authenticate(**kwargs)
[Thu Dec 10 19:03:42.653345 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/django/contrib/auth/__init__.py", line 73, in authenticate
[Thu Dec 10 19:03:42.653350 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] user = backend.authenticate(request, **credentials)
[Thu Dec 10 19:03:42.653354 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/mozilla_django_oidc/auth.py", line 286, in authenticate
[Thu Dec 10 19:03:42.653359 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] return self.get_or_create_user(access_token, id_token, payload)
[Thu Dec 10 19:03:42.653363 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/mozilla_django_oidc/auth.py", line 307, in get_or_create_user
[Thu Dec 10 19:03:42.653367 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] user_info = self.get_userinfo(access_token, id_token, payload)
[Thu Dec 10 19:03:42.653371 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/mozilla_django_oidc/auth.py", line 243, in get_userinfo
[Thu Dec 10 19:03:42.653376 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] proxies=self.get_settings('OIDC_PROXY', None))
[Thu Dec 10 19:03:42.653380 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/requests/api.py", line 76, in get
[Thu Dec 10 19:03:42.653384 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] return request('get', url, params=params, **kwargs)
[Thu Dec 10 19:03:42.653389 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/requests/api.py", line 61, in request
[Thu Dec 10 19:03:42.653394 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] return session.request(method=method, url=url, **kwargs)
[Thu Dec 10 19:03:42.653398 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/requests/sessions.py", line 528, in request
[Thu Dec 10 19:03:42.653402 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] prep = self.prepare_request(req)
[Thu Dec 10 19:03:42.653406 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/requests/sessions.py", line 466, in prepare_request
[Thu Dec 10 19:03:42.653410 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] hooks=merge_hooks(request.hooks, self.hooks),
[Thu Dec 10 19:03:42.653414 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/requests/models.py", line 316, in prepare
[Thu Dec 10 19:03:42.653417 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] self.prepare_url(url, params)
[Thu Dec 10 19:03:42.653422 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] File "/opt/app-root/lib/python3.6/site-packages/requests/models.py", line 390, in prepare_url
[Thu Dec 10 19:03:42.653427 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] raise MissingSchema(error)
[Thu Dec 10 19:03:42.653431 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814] requests.exceptions.MissingSchema: Invalid URL 'None': No schema supplied. Perhaps you meant http://None?
[Thu Dec 10 19:03:42.653441 2020] [wsgi:error] [pid 21:tid 139663898695424] [remote 172.17.0.1:53814]
172.17.0.1 - - [10/Dec/2020:19:03:42 +0000] "GET /oidc/callback/?code=<code>&state=<state> HTTP/1.1" 500 145
General improvements for the device management tab.
Packit failed on creating pull-requests in dist-git:
dist-git branch | error |
---|---|
master |
Failed to download file from URL https://github.com/fedora-iot/zezere/archive/vv0.2.tar.gz#/zezere-v0.2.tar.gz. Reason: 'Not Found'. |
You can re-trigger the update by adding /packit propose-update
to the issue comment.
Allow a user to specify a zezere=https://iginition-config/url on the kernel command line,
Documentation on how to get a zezere instance setup
This is from an image built via osbuild so maybe I am doing something wrong but I see the following warning in the ignition logs:
[ 32.980931] zezere-ignition[826]: }CRITICAL : Ignition failed: failed to handle relabeling: exit status 255: Cmd: "setfiles" "-vFi0" "-r" "/" "/etc/selinux/targeted/contexts/files/file_contexts" "-f" "-" Stdout: "" Stderr: "setfiles: invalid alt_rootpath: /\n"
This is zezere-ignition-0.5-2.fc33.noarch.rpm
.
Add a notes/string field so a string can be added like "RPi3 running the heating"
Packit failed on creating pull-requests in dist-git:
dist-git branch | error |
---|---|
f30 |
The distgit repository /tmp/packit-dist-gitf7alcoaq is dirty.This is not supported. |
f31 |
The distgit repository /tmp/packit-dist-gitf7alcoaq is dirty.This is not supported. |
f32 |
Failed to download file from URL https://github.com/fedora-iot/zezere/archive/vv0.5.1.tar.gz#/zezere-v0.5.1.tar.gz. Reason: 'Not Found'. |
master |
The distgit repository /tmp/packit-dist-gitf7alcoaq is dirty.This is not supported. |
You can re-trigger the update by adding /packit propose-update
to the issue comment.
The following modules have coverage < 100%
Module | statements | missing | excluded | branches | partial | coverage |
---|---|---|---|---|---|---|
zezere/runreqs.py | 40 | 5 | 0 | 16 | 1 | 89% |
zezere/views_netboot.py | 96 | 22 | 0 | 28 | 24 | 63% |
zezere/views_portal.py | 79 | 11 | 0 | 16 | 3 | 81% |
zezere/settings_auth.py | 20 | 2 | 0 | 6 | 1 | 81% |
zezere/settings_external.py | 16 | 1 | 2 | 6 | 3 | 82% |
zezere/wsgi.py | 4 | 4 | 0 | 0 | 0 | 0% |
Packit failed on creating pull-requests in dist-git:
dist-git branch | error |
---|---|
f30 |
Ref 'remotes/origin/f30' did not resolve to an object |
f31 |
The distgit repository /tmp/packit-dist-gitz862_s6h is dirty.This is not supported. |
f32 |
The distgit repository /tmp/packit-dist-gitz862_s6h is dirty.This is not supported. |
master |
Failed to download file from URL https://github.com/fedora-iot/zezere/archive/vv0.5.tar.gz#/zezere-v0.5.tar.gz. Reason: 'Not Found'. |
You can re-trigger the update by adding /packit propose-update
to the issue comment.
Packit failed on creating pull-requests in dist-git:
dist-git branch | error |
---|---|
f31 |
Failed to download file from URL https://github.com/fedora-iot/zezere/archive/vv0.2.tar.gz#/zezere-v0.2.tar.gz. Reason: 'Not Found'. |
You can re-trigger the update by adding /packit propose-update
to the issue comment.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.