tiny-pilot / tinypilot

Use your Raspberry Pi as a browser-based KVM.
https://tinypilotkvm.com
MIT License
3k stars 252 forks source link

Install Janus without using Ansible #1605

Closed mtlynch closed 1 year ago

mtlynch commented 1 year ago

Resolves #1599

As part of our ongoing work to get rid of Ansible in our install process, this change implements the Janus Debian package install in the bundle install script rather than in Ansible.

This is also a functional change in that we're no longer adding the whole debian-backports repo as an apt-get source. Instead, we're including the specific Janus .deb file we want in TinyPilot's install bundle.

Manual tests

For expediency, I tested builds that combined:

For the manual tests, I verified:

In these environments:

Peer tests

To test this bundle (which combines the stack of three PRs mentioned above), run:

curl \
  --silent \
  --show-error \
  --location \
  https://raw.githubusercontent.com/tiny-pilot/tinypilot/master/scripts/install-bundle | \
  sudo bash -s -- \
    https://output.circle-artifacts.com/output/job/e70104a2-0f1f-43b7-abe9-098d6eac2799/artifacts/0/bundler/dist/tinypilot-community-20230831T0151Z-1.9.0-87+de1916a.tgz
mtlynch commented 1 year ago
Automated comment from CodeApprove ➜

⏳ @db39 please review this Pull Request

mtlynch commented 1 year ago
Automated comment from CodeApprove ➜

⏳ @jdeanwallace please review this Pull Request

mtlynch commented 1 year ago

Adding @jdeanwallace as well, so whoever can review it first.

It would be good if we can get this stack merged in so that it can be part of the 2.6.1 release.

db39 commented 1 year ago

@mtlynch - I'm currently reviewing this. I'm just doing some live device tests.

db39 commented 1 year ago

In my first live device test, there was an issue with the EDID not loading. I didn't expect the changes in this PR to have an impact on the EDID tasks, so it was a little odd. In my repeat test, there were no issues, so I'm just documenting the failure here.

On a fresh install of RaspberryPi OS Bullseye 32-bit I ran:

if ! grep --silent '^dtoverlay=tc358743$' /boot/config.txt; then
  echo 'dtoverlay=tc358743' | sudo tee --append /boot/config.txt
fi

Then I ran your bundle install command:

curl \
  --silent \
  --show-error \
  --location \
  https://raw.githubusercontent.com/tiny-pilot/tinypilot/master/scripts/install-bundle | \
  sudo bash -s -- \
    https://output.circle-artifacts.com/output/job/e70104a2-0f1f-43b7-abe9-098d6eac2799/artifacts/0/bundler/dist/tinypilot-community-20230831T0151Z-1.9.0-87+de1916a.tgz

And received this error:

RUNNING HANDLER [ansible-role-ustreamer : load TC358743 EDID file] *************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Unable to start service load-tc358743-edid: Job for load-tc358743-edid.service failed because the control process exited with error code.\nSee \"systemctl status load-tc358743-edid.service\" and \"journalctl -xe\" for details.\n"}
...ignoring

RUNNING HANDLER [ansible-role-ustreamer : configure TC358743 EDID loader to run at boot] ***
changed: [localhost]

RUNNING HANDLER [ansible-role-ustreamer : restart Janus] ***********************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=16   changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1   

+ clean_up
+ umount --lazy /mnt/tinypilot-installer
+ rm -rf /opt/tinypilot-updater /mnt/tinypilot-installer

And the output from sudo systemctl status load-tc358743-edid.service:

● load-tc358743-edid.service - Load EDID for TC358743 HDMI capture chip.
     Loaded: loaded (/lib/systemd/system/load-tc358743-edid.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2023-08-31 15:38:29 BST; 2min 0s ago
    Process: 4370 ExecStart=v4l2-ctl --set-edid=file=/home/ustreamer/edids/tc358743-edid.hex --fix-edid-checksums (code=exited, status=1/FAILURE)
   Main PID: 4370 (code=exited, status=1/FAILURE)
        CPU: 6ms

Aug 31 15:38:29 raspberrypi systemd[1]: load-tc358743-edid.service: Scheduled restart job, restart counter is at 21.
Aug 31 15:38:29 raspberrypi systemd[1]: Stopped Load EDID for TC358743 HDMI capture chip..
Aug 31 15:38:29 raspberrypi systemd[1]: load-tc358743-edid.service: Start request repeated too quickly.
Aug 31 15:38:29 raspberrypi systemd[1]: load-tc358743-edid.service: Failed with result 'exit-code'.
Aug 31 15:38:29 raspberrypi systemd[1]: Failed to start Load EDID for TC358743 HDMI capture chip..

Then on my second test (same fresh OS install and process) loading the EDID worked as expected:

RUNNING HANDLER [ansible-role-ustreamer : load TC358743 EDID file] ************************************************************************************************************************************************
changed: [localhost]
mtlynch commented 1 year ago

In my first live device test, there was an issue with the EDID not loading. I didn't expect the changes in this PR to have an impact on the EDID tasks, so it was a little odd. In my repeat test, there were no issues, so I'm just documenting the failure here.

Thanks for checking! That's expected behavior.

IIRC it's failing because the TC358743 module hasn't loaded. I think we probably should have just installed it as a service and not tried to restart it and we would have avoided the error, but the issue should go away for good in #1604.