Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

openthread_border_router: Fix start with containerd.io to 1.7.24-1 #3864

Conversation

nodamnway
Copy link
Contributor

@nodamnway nodamnway commented Dec 14, 2024

Issue

OTBR Addon fails to load with platformConfigureTunDevice() at netif.cpp:2022: Operation not permitted

I upgraded containerd.io to 1.7.24-1 on Debian 12 and this started to happen preventing the container from starting.

Logs are available here:
home-assistant/core#132124
#3826 (comment)

As a temporary solution, I downgraded to containerd.io=1.7.23-1, which worked for me and some other users.

Reason and solution

containerd/containerd#11078 (comment)

so the recommended solution is to enable the /dev/net/tun device:

devices:
  - /dev/net/tun

Testing

I only did local testing on my Home Assistant Supervised machine, such as:

  • Uninstalled OTBR addon
  • Modified /usr/share/hassio/addons/core/openthread_border_router/config.yaml by adding the /dev/net/tun to devices (and didn't bump the version, as OTBR addon won't install then)
  • Checked for updates in Add-on Store
  • installed OTBR addon again, restored config and ran it

Not sure if this is the right way to test, but it was the fastest for me and it solved my issue.

Summary by CodeRabbit

  • Bug Fixes

    • Resolved an issue preventing the OpenThread Border Router addon from starting after a containerd.io update
    • Added recovery mechanism for "radio tx timeout" errors
    • Increased mesh header fragmentation tag entries to mitigate log messages
  • Chores

    • Updated addon version from 2.12.3 to 2.12.4
    • Added device configuration for /dev/net/tun

Copy link

@home-assistant home-assistant bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @nodamnway

It seems you haven't yet signed a CLA. Please do so here.

Once you do that we will be able to review and accept this pull request.

Thanks!

@home-assistant home-assistant bot marked this pull request as draft December 14, 2024 07:02
@home-assistant
Copy link

Please take a look at the requested changes, and use the Ready for review button when you are done, thanks 👍

Learn more about our pull request process.

Copy link
Contributor

coderabbitai bot commented Dec 14, 2024

📝 Walkthrough

Walkthrough

The pull request updates the OpenThread Border Router (OTBR) addon configuration and changelog. The version has been bumped from 2.12.3 to 2.12.4, addressing an issue with the containerd.io update to version 1.7.24-1. The changelog details improvements in radio timeout recovery, mesh header fragmentation, and compile-time configurations. A new device entry for /dev/net/tun has been added to the configuration file.

Changes

File Change Summary
openthread_border_router/CHANGELOG.md Updated to version 2.12.4, added details about radio tx timeout recovery, mesh header fragmentation improvements, and compile-time configurations
openthread_border_router/config.yaml Version bumped from 2.12.3 to 2.12.4, added /dev/net/tun device entry

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 23977a6 and 641ce2a.

📒 Files selected for processing (2)
  • openthread_border_router/CHANGELOG.md (1 hunks)
  • openthread_border_router/config.yaml (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • openthread_border_router/CHANGELOG.md
  • openthread_border_router/config.yaml

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @coderabbitai title anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
openthread_border_router/CHANGELOG.md (1)

3-6: Enhance changelog entry with implementation details

While the changelog entry correctly identifies the issue, it would be helpful to include the actual fix implemented (addition of /dev/net/tun device access). This helps users and maintainers understand the solution.

Consider updating to:

 ## 2.12.3
 
-Fix OTBR addon does not start after updating containerd.io to 1.7.24-1
+Fix OTBR addon not starting after containerd.io 1.7.24-1 update by adding /dev/net/tun device access
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f0cbc23 and 8c29088.

📒 Files selected for processing (2)
  • openthread_border_router/CHANGELOG.md (1 hunks)
  • openthread_border_router/config.yaml (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
openthread_border_router/CHANGELOG.md (6)

Pattern */**(html|markdown|md): - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.

  • Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
  • In step-by-step instructions, front the location phrase in the instructional sentence.
  • In step-by-step instructions, front the 'goal' in the instructional sentence.
  • In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
  • do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

Pattern */**(html|markdown|md): - Use bold to mark UI strings.

  • If "" are used to mark UI strings, replace them by bold.

Pattern */**(html|markdown|md): - Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"


Pattern */**(html|markdown|md): - Use sentence-style capitalization also in headings.


Pattern */**(html|markdown|md): do not comment on HTML used for icons


Pattern */**(html|markdown|md): Avoid flagging inline HTML for embedding videos in future reviews for this repository.

openthread_border_router/config.yaml (6)

Pattern */**(html|markdown|md): - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.

  • Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
  • In step-by-step instructions, front the location phrase in the instructional sentence.
  • In step-by-step instructions, front the 'goal' in the instructional sentence.
  • In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
  • do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

Pattern */**(html|markdown|md): - Use bold to mark UI strings.

  • If "" are used to mark UI strings, replace them by bold.

Pattern */**(html|markdown|md): - Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"


Pattern */**(html|markdown|md): - Use sentence-style capitalization also in headings.


Pattern */**(html|markdown|md): do not comment on HTML used for icons


Pattern */**(html|markdown|md): Avoid flagging inline HTML for embedding videos in future reviews for this repository.

🔇 Additional comments (2)
openthread_border_router/config.yaml (2)

2-2: LGTM: Version bump follows semantic versioning

Appropriate patch version increment for a configuration fix.


23-24: LGTM: Device access configuration addresses the root cause

The addition of /dev/net/tun device access is the correct fix for the OTBR startup issue with containerd.io 1.7.24-1. This aligns with the containerd GitHub issue recommendation.

Let's verify if this device is required by other addons for similar functionality:

✅ Verification successful

Device access configuration is unique to OpenThread Border Router

The verification confirms that /dev/net/tun device access is only configured in the OpenThread Border Router addon and not used by other addons in the repository, making this a targeted fix specific to OTBR's networking requirements.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other addons that might use tun device
rg -l "/dev/net/tun" --type yaml

Length of output: 69

@agners agners force-pushed the platformConfigureTunDevice_operation_not_permitted branch from 23977a6 to 641ce2a Compare January 13, 2025 20:54
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
openthread_border_router/Dockerfile (1)

Line range hint 1-108: Critical: Container fails to start due to missing device configuration.

The Dockerfile changes don't address the reported issue with /dev/net/tun access that prevents the container from starting after the containerd.io update. According to the PR objectives, this device needs to be enabled in the configuration.

The container needs access to /dev/net/tun for network interface configuration. This should be configured in the addon's config.yaml as mentioned in the PR objectives:

devices:
  - /dev/net/tun

Please ensure this configuration is added to resolve the startup failure.

🧹 Nitpick comments (6)
tellstick/README.md (1)

5-6: Add comma for improved readability

Add a comma before "and" to separate independent clauses.

-years ago and it cannot be built on Alpine versions above 3.15.
+years ago, and it cannot be built on Alpine versions above 3.15.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~6-~6: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ned. Its last activity was 5 > years ago and it cannot be built on Alpine versions a...

(COMMA_COMPOUND_SENTENCE)

openthread_border_router/translations/en.yaml (1)

17-18: Enhance the warning message format.

The warning message effectively directs users to the documentation. However, consider making it more prominent by using an exclamation mark at the start.

-      over above configuration). Not recommended! See documentation for more
+      over above configuration). ⚠️ Not recommended! See documentation for more
openthread_border_router/DOCS.md (1)

70-83: Fix grammar in the warning message.

The warning message effectively explains the risks of using TCP/IP for RCP connections. However, there's a grammar issue that needs to be fixed.

-  If the TCP/IP connection fails, the OTBR will not shutdown cleanly and leave
+  If the TCP/IP connection fails, the OTBR will not shut down cleanly and leave
🧰 Tools
🪛 Markdownlint (0.37.0)

83-83: null
Blank line inside blockquote

(MD028, no-blanks-blockquote)

🪛 LanguageTool

[grammar] ~73-~73: The word “shutdown” is a noun. The verb is spelled with a space.
Context: .../IP connection fails, the OTBR will not shutdown cleanly and leave > stale routes in you...

(NOUN_VERB_CONFUSION)

openthread_border_router/Dockerfile (1)

93-94: Review the restoration settings and document their impact.

The new build flags introduce important changes:

  1. -DOT_PROJECT_CONFIG points to the new header file
  2. -DOT_RCP_RESTORATION_MAX_COUNT=2 sets a limit on restoration attempts

These settings should be documented to explain their purpose and impact on system behavior.

mariadb/rootfs/etc/s6-overlay/s6-rc.d/mariadb-core/run (1)

8-13: LGTM! Consider adding validation for the arguments.

The implementation correctly reads and applies custom MariaDB server arguments.

Consider adding validation to ensure the arguments are safe and well-formed before applying them.

mariadb/DOCS.md (1)

77-82: Enhance documentation with more examples and warnings.

While the documentation is clear, it could benefit from:

  1. More example configurations for different scenarios
  2. Warnings about potential impacts of incorrect parameters
  3. Guidelines for choosing appropriate values
🛑 Comments failed to post (1)
mariadb/rootfs/etc/s6-overlay/s6-rc.d/mariadb-core/run (1)

18-22: 🛠️ Refactor suggestion

Add quotes around array expansion.

The array expansion needs proper quoting to handle arguments containing spaces.

Apply this diff:

-  exec mysqld --datadir="${MARIADB_DATA}" --user=root "${extra_args[@]}" < /dev/null
+  exec mysqld --datadir="${MARIADB_DATA}" --user=root "${extra_args[@]+"${extra_args[@]}"}" < /dev/null
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

if [ -z "${extra_args+x}" ] || [ ${#extra_args[@]} -eq 0 ]; then
  exec mysqld --datadir="${MARIADB_DATA}" --user=root < /dev/null
else
  exec mysqld --datadir="${MARIADB_DATA}" --user=root "${extra_args[@]+"${extra_args[@]}"}" < /dev/null
fi

@agners
Copy link
Member

agners commented Jan 13, 2025

This actually got resolved with the containerd.io release 1.7.25 and the Debian package 1.7.25-1 for it. However, I think it still make sense to explicitly add permission for the tun device, just in case Docker plans to indeed go through with removing access to it by default.

Copy link
Member

@agners agners left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@agners agners changed the title Fix OTBR addon does not start after updating containerd.io to 1.7.24-1 openthread_border_router: Fix start with containerd.io to 1.7.24-1 Jan 13, 2025
@agners agners merged commit 3c663b7 into home-assistant:master Jan 13, 2025
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants