Skip to content

ci: AppArmor profile blocks pasta from receiving SIGTERM on ubuntu-26.04 runners, failing rootless E2E #2844

Description

@politerealism

User Story

As an OpenShell contributor, I need the ubuntu-26.04 E2E runner to correctly support rootless Podman container lifecycle so that CI results reflect code correctness rather than runner configuration.

Problem Statement

The pasta AppArmor profile on the ubuntu-26.04 GitHub Actions runners does not permit Podman to send SIGTERM to pasta. This causes every rootless Podman container stop to fail gracefully and fall back to SIGKILL after a 15-second timeout. Depending on test timing, this causes various tests in the E2E (rust-podman-rootless, ubuntu-26.04) job to fail with unrelated-looking errors.

The AppArmor denial appears in dmesg on every affected run:

apparmor="DENIED" operation="signal" class="signal"
profile="pasta" comm="podman"
requested_mask="receive" denied_mask="receive" signal=term peer="podman"

Impact / Why This Matters

Consequences of current behavior:

Current workaround: Re-running CI. This is insufficient because the AppArmor denial is deterministic per runner image — the SIGKILL fallback always occurs, it just doesn't always cross a test timeout on every run.

PRs confirmed affected today (2026-08-20): #2370, #2744, and likely #2822.

Acceptance Criteria

  • The pasta AppArmor profile on ubuntu-26.04 runners allows Podman to send SIGTERM to pasta (signal receive peer=podman rule added)
  • E2E (rust-podman-rootless, ubuntu-26.04) passes consistently on a re-run of an affected PR
  • No apparmor="DENIED" ... profile="pasta" ... signal=term lines appear in dmesg during E2E runs

Reproduction Steps

  1. Open any PR that touches sandbox or Podman driver code
  2. Wait for Branch E2E ChecksE2E (rust-podman-rootless, ubuntu-26.04) to complete
  3. If it fails, check the AppArmor step at the end of the job log:
    sudo dmesg | grep -E 'apparmor=.*DENIED|profile="unprivileged_userns"'
    
  4. Observe repeated denials of the form:
    apparmor="DENIED" operation="signal" profile="pasta"
    requested_mask="receive" denied_mask="receive" signal=term peer="podman"
    

Environment

  • Runner: ubuntu-26.04 (NVIDIA managed runners, nv-cpu-ubuntu-26.04 pool)
  • Podman: 5.x (rootless mode)
  • pasta: version on the runner image
  • AppArmor status: enforcing

Suggested Fix

The pasta AppArmor profile needs a rule permitting Podman to deliver SIGTERM:

signal receive set=(term) peer=podman,

This is the upstream pasta AppArmor fix for rootless Podman integration. The ubuntu-26.04 runner image may be shipping a pasta AppArmor profile that predates this rule being merged, or the rule may need to be added to the runner provisioning scripts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    state:triage-neededOpened without agent diagnostics and needs triage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions