canonical / checkbox

Checkbox is a testing framework used to validate device compatibility with Ubuntu Linux. It’s the testing tool developed for the purposes of the Ubuntu Certification program.
https://checkbox.readthedocs.io
GNU General Public License v3.0
33 stars 49 forks source link

i2c/i2c-device-detect fails with Operation not pemitted #1435

Open jocave opened 2 months ago

jocave commented 2 months ago

Bug Description

The i2c/i2c-device-detect job used to be able to run on the machines testing the intel-iotg-kernel snap on UC22 and produce a "real" outcome. However, recent runs have not produced a proper test of i2c device detection because of a permissions problem.

It seems likely that this could be some problem in the way checkbox is delivered as a snap and how snapd still impacts execution even when installed in devmode

To Reproduce

Run a snap-testing job from jenkins e.g.: http://10.102.156.15:8080/job/cert-austin-charlotte-001-intel-iotg-kernel-22-beta/

This implies checkbox running using remote mode and on the DUT side checkbox installed from a snap

Environment

OS: UC22 checkbox type: snap testing: i2c

Relevant log output

https://certification.canonical.com/hardware/202310-32170/submission/387731/
https://certification.canonical.com/hardware/202110-29509/submission/387737/
https://certification.canonical.com/hardware/202109-29492/submission/387739/

Additional context

Connecting to one of these machines in the lab and running the same test using a run invocation allows the job to be run seccussfully:

ubuntu@ubuntu:~$ checkbox-iiotg.checkbox-cli run com.canonical.certification::i2c/i2c-device-detect
Skipped file: /snap/checkbox-iiotg/69/providers/plainbox-provider-checkbox/units/stress/suspend_cycles_reboot.md
===========================[ Running Selected Jobs ]============================
==============[ Running job 1 / 3. Estimated time left: 0:03:21 ]===============
-----------------------------[ Hardware Manifest ]------------------------------
ID: com.canonical.plainbox::manifest
Category: com.canonical.plainbox::info
... 8< -------------------------------------------------------------------------
Skipped file: /snap/checkbox-iiotg/69/providers/plainbox-provider-checkbox/units/stress/suspend_cycles_reboot.md
ns: com.canonical.contrib
name: checkbox-provider-ce-oem
has_button: 
has_buzzer: 
has_caam: 
has_mcrc_engine: 
has_sa2ul_engine: 
has_hardware_rng: 
has_digital_io: 
has_eeprom: 
has_tcp_multi_connection_server: 
has_tcp_echo_stress_server: 
has_gpio_slot_been_defined: 
has_iio_sensors: 
has_led_indicator: 
has_gps: 
has_ubuntu_frame: 
has_mtd: 
has_optee: 
has_otg: 
has_ptp: 
has_rpmsg: 
has_serial_ehco_server: 
has_serial_console_loopback: 
has_socket_can_fd: 
has_spi: 
has_spi_loopback: 
has_video_codec: 
has_vpu: 

ns: com.canonical.certification
name: com.canonical.certification:checkbox-provider-iiotg
has_edac_module: False
has_usb_dwc3_controller: 

ns: com.canonical.qa.intliotg
name: checkbox-provider-intliotg
has_ishtp: False
has_eclite: 
has_mei: True
has_qep: False
tgpio_loopback_capability: 
has_tgpio: 
has_tsn: 
has_usb_dwc3_controller: False
has_va_api: 

ns: com.canonical.certification
name: checkbox-provider-certification-client

ns: com.canonical.certification
name: checkbox-provider-base
has_audio_playback: True
has_audio_capture: True
has_audio_loopback_connector: False
has_line_out: 
has_line_in: 
has_headset: 
has_internal_speakers: 
has_bt_adapter: True
has_bt_smart: 
has_rpi_camera: 
has_camera: 
has_md_raid: None
has_eeprom: 
has_ethernet_adapter: True
has_fingerprint_reader: 
gpio_loopback: 
has_hdmi: 
has_dp: 
has_vga: 
has_dvi: 
has_i2c: True
has_ishtp: 
has_eclite: 
has_special_keys: 
has_led_indicator: 
has_card_reader: 
has_mei: 
has_muxpi_hdmi: 
has_dvd_bluray_inserted: 
has_qep: 
need_kernel_snap_update_test: None
need_snapd_snap_update_test: None
need_gadget_snap_update_test: None
socket_can_echo_server_running: 
has_thunderbolt: 
has_thunderbolt3: 
has_touchpad: 
has_touchscreen: 
has_tpm_chip: 
has_usbc_data: 
has_usbc_video: 
has_usb_storage: True
has_usbc_otg: 
has_va_api: 
has_hardware_watchdog: 
has_wlan_adapter: True
has_wwan_module: False

ns: com.canonical.certification
name: checkbox-provider-resource

ns: com.canonical.certification
name: checkbox-provider-tpm2
has_tpm2_chip: True

------------------------------------------------------------------------- >8 ---
Outcome: job passed
==============[ Running job 2 / 3. Estimated time left: 0:03:20 ]===============
------------------------[ Check presence of an I²C bus ]------------------------
ID: com.canonical.certification::i2c/i2c-bus-detect
Category: com.canonical.certification::i2c
... 8< -------------------------------------------------------------------------
i2c-0   i2c         i915 gmbus dpa                      I2C adapter
i2c-1   i2c         i915 gmbus dpb                      I2C adapter
i2c-2   i2c         i915 gmbus dpc                      I2C adapter
i2c-3   i2c         i915 gmbus tc1                      I2C adapter
i2c-4   i2c         i915 gmbus tc2                      I2C adapter
i2c-5   i2c         i915 gmbus tc3                      I2C adapter
i2c-6   i2c         i915 gmbus tc4                      I2C adapter
i2c-7   i2c         i915 gmbus tc5                      I2C adapter
i2c-8   i2c         i915 gmbus tc6                      I2C adapter
i2c-9   i2c         AUX USBC1/DDI TC1/PHY TC1           I2C adapter
i2c-10  i2c         AUX USBC2/DDI TC2/PHY TC2           I2C adapter
i2c-11  i2c         AUX USBC3/DDI TC3/PHY TC3           I2C adapter
i2c-12  smbus       SMBus I801 adapter at efa0          SMBus adapter

Detected bus number: 13
------------------------------------------------------------------------- >8 ---
Outcome: job passed
==============[ Running job 3 / 3. Estimated time left: 0:03:00 ]===============
------------------[ Check if any I²C devices can be detected ]------------------
ID: com.canonical.certification::i2c/i2c-device-detect
Category: com.canonical.certification::i2c
... 8< -------------------------------------------------------------------------
Detected buses: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
Checking I2C bus 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 4
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 5
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 6
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 7
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 8
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 9
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 10
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 11
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Checking I2C bus 12
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

I2C device detected
------------------------------------------------------------------------- >8 ---
Outcome: job passed
Finalizing session that hasn't been submitted anywhere: checkbox-run-2024-08-23T17.04.21
==================================[ Results ]===================================
 ☑ : Hardware Manifest
 ☑ : Check presence of an I²C bus
 ☑ : Check if any I²C devices can be detected
syncronize-issues-to-jira[bot] commented 2 months ago

Thank you for reporting us your feedback!

The internal ticket has been created: https://warthogs.atlassian.net/browse/CHECKBOX-1537.

This message was autogenerated

pieqq commented 2 months ago

After a discussion with zyga from the snapd team, I tried to deactivate journald service by issuing

$ sudo systemctl disable --now systemd-journald.service

However, the service automatically resumed because, as mentioned when running the above command:

Warning: Stopping systemd-journald.service, but it can still be activated by:
  systemd-journald-audit.socket
  systemd-journald-dev-log.socket
  systemd-journald.socket

I then tried to set Storage=none in /etc/systemd/journald.conf and restart the journald service, which in effect stopped printing out messages in journalctl, but I could still reproduce the issue:

------------------[ Check if any I²C devices can be detected ]------------------
ID: com.canonical.certification::i2c/i2c-device-detect
Category: I²C (Inter-Integrated Circuit)
--------------------------------------------------------------------------------
Error: Could not open file `/dev/i2c-0': Operation not permitted
Traceback (most recent call last):
Detected buses: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18']
Checking I2C bus 0
  File "/tmp/nest-9qunglkm.367efe782aa81d8f66378001f46e336fb16df9c444b549223998300b30c683da/i2c_driver_test.py", line 104, in <module>
    I2cDriverTest().main()
  File "/tmp/nest-9qunglkm.367efe782aa81d8f66378001f46e336fb16df9c444b549223998300b30c683da/i2c_driver_test.py", line 100, in main
    subcommands[args.subcommand]().invoked(args)
  File "/tmp/nest-9qunglkm.367efe782aa81d8f66378001f46e336fb16df9c444b549223998300b30c683da/i2c_driver_test.py", line 70, in invoked
    result = subprocess.check_output(
  File "/snap/checkbox-iiotg/69/checkbox-runtime/usr/lib/python3.10/subprocess.py", line 421, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/snap/checkbox-iiotg/69/checkbox-runtime/usr/lib/python3.10/subprocess.py", line 526, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['i2cdetect', '-y', '-r', '0']' returned non-zero exit status 1.
--------------------------------------------------------------------------------
Outcome: job failed

I will try deactivating not only journald service but also the sockets, as mentioned in the warning above.

pieqq commented 2 months ago

Anecdotally, I deactivated everything mentioned above:

$ sudo systemctl disable --now systemd-journald.service
$ sudo systemctl disable --now systemd-journald-audit.socket
$ sudo systemctl disable --now systemd-journald-dev-log.socket
$ sudo systemctl disable --now systemd-journald.socket

$ sudo systemctl status systemd-journald.service
○ systemd-journald.service - Journal Service
     Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
     Active: inactive (dead) since Mon 2024-09-02 11:01:24 UTC; 4s ago
TriggeredBy: ○ systemd-journald.socket
             ○ systemd-journald-audit.socket
             ○ systemd-journald-dev-log.socket
       Docs: man:systemd-journald.service(8)
             man:journald.conf(5)
    Process: 6421 ExecStart=/lib/systemd/systemd-journald (code=exited, status=0/SUCCESS)
   Main PID: 6421 (code=exited, status=0/SUCCESS)
     Status: "Processing requests..."
        CPU: 24ms

Sep 02 11:01:14 ubuntu systemd-journald[6421]: Journal started
Sep 02 11:01:14 ubuntu systemd-journald[6421]: Runtime Journal (/run/log/journal/8f211d74ad00459381b5dc96e752791f) is 24.0M, max 73.1M, 49.1M free.
Sep 02 11:01:24 ubuntu systemd-journald[6421]: Journal stopped

and re-run the full intliotg-ubuntucore-22-automated test plan, and this time it seems the i2c-device-detect job, which requires root access to `/dev/i2c-0', works:

---------------------------[ Running job 133 / 278 ]----------------------------
------------------[ Check if any I²C devices can be detected ]------------------
ID: com.canonical.certification::i2c/i2c-device-detect
Category: I²C (Inter-Integrated Circuit)
--------------------------------------------------------------------------------
Detected buses: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18']
Checking I2C bus 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

(...)                   

I2C device detected
--------------------------------------------------------------------------------
Outcome: job passed
baconYao commented 1 week ago

Issue can be reproduced on Genio 700 Device UC22 Image. See the submission: https://certification.canonical.com/hardware/202405-34026/submission/401341/test-results/fail/?term=i2c%2Fi2c-device-detect

For image info, please see: https://warthogs.atlassian.net/browse/PEB-733