• About
    • Contact

/root

  • Claude’s Connector for WordPress

    February 28th, 2026

    “The WordPress.com MCP server allows AI assistants to securely interact with your WordPress.com sites. It exposes tools for listing, searching, and viewing posts, pages, and comments, managing users and site settings, and retrieving statistics. By leveraging OAuth 2.1, it ensures that agents only access resources you’ve approved, making it easy to integrate AI-driven workflows into your publishing experience.”

    You can use WordPress.com to:

    Manage Content:
    “Show me my latest blog posts” or “Search for posts about technology”

    View Analytics:
    “What are my site statistics for this month?”

    Manage Users:
    “List all users on my WordPress site”

    Site Administration:
    “Check my site settings and installed plugins”

    https://claude.com/connectors/wordpress-com

  • FreeBSD 14.4 RC1

    February 28th, 2026
  • Claude Code Security Vulnerabilities !!

    February 27th, 2026

    And I wondered why so many AUR package updates for the claude-code …

    “Cybersecurity researchers have disclosed multiple security vulnerabilities in Anthropic’s Claude Code, an artificial intelligence (AI)-powered coding assistant, that could result in remote code execution and theft of API credentials.”

    “The vulnerabilities exploit various configuration mechanisms, including Hooks, Model Context Protocol (MCP) servers, and environment variables – executing arbitrary shell commands and exfiltrating Anthropic API keys when users clone and open untrusted repositories”

    https://thehackernews.com/2026/02/claude-code-flaws-allow-remote-code.html

  • February 27th, 2026
  • iXsystems brings back SMART to TrueNAS

    February 26th, 2026

    https://forums.truenas.com/t/we-re-bringing-some-smart-options-back/64029

  • Officially member of BioArchLinux

    February 25th, 2026

    I recently added my AUR package ankiR to the BioArchLinux repository, a repo that contains the majority of R Language related packages such as r-tidyverse etc.

    https://github.com/BioArchLinux/Packages/pull/305

  • TrueNAS 25.10.2.1 available

    February 25th, 2026

    Notable changes:

    • Improves NFS performance for NFSv4 clients (NAS-139128). Adds support for STATX_CHANGE_COOKIE to properly surface ZFS sequence numbers to NFS clients via knfsd. The NFS change_info4 structure now accurately tracks directory and file changes, which reduces unnecessary server requests. Client attribute cache invalidation is also improved. Previously, the system synthesized change IDs based on ctime, which could fail to increment consistently due to kernel timer coarseness.
    • Fixes NIC bonding configuration disrupted after a system update (NAS-139889). Resolves an issue where network interface bond configurations could break after a TrueNAS 25.10.2 update. Affected systems could lose network connectivity on bonded interfaces.
    • Fixes SMB Legacy Share validation errors that broke share management UI forms (NAS-139892). Resolves an issue where SMB shares using the Legacy Share preset with certain path_suffix variable substitutions failed middleware validation. The SMB share configuration forms became unusable in the web interface as a result.
    • Fixes API result serialization failures caused by unhandled validation errors (NAS-139896). Resolves an issue where certain Pydantic validation errors were not caught during API result serialization. This caused unexpected errors to appear in the web interface instead of proper error messages.
    • Fixes SSL certificate connection failure error handling (NAS-139938). Resolves an AttributeError that occurred when an HTTPS connection failed due to a certificate error. Cloud sync tasks, replication, or other SSL-dependent network operations could surface a secondary AttributeError instead of the original connection failure message.

    https://forums.truenas.com/t/truenas-25-10-2-1-is-now-available/63998

  • Anki’s MCP Interface

    February 24th, 2026

    There’s an Anki addon called anki-mcp-server that exposes your Anki collection over MCP (Model Context Protocol). If you haven’t come across MCP yet — it’s basically a standardized way for AI assistants to interact with external tools. Connect this addon and suddenly Claude (or whatever you’re using) can search your cards, create notes, browse your decks, etc.

    Pretty cool, but there was a big gap: zero FSRS support. The assistant could see your cards but had no idea how they were being scheduled. It couldn’t read your FSRS parameters, couldn’t check a card’s memory state, couldn’t run the optimizer. For anyone who’s moved past SM-2 (which should be everyone at this point), that’s a significant blind spot.

    So I wrote a PR that adds four tools and a resource to fill that gap.

    get_fsrs_params reads the FSRS weights, desired retention, and max interval — either for all presets at once or filtered to a specific deck. get_card_memory_state pulls the per-card memory state (stability, difficulty, retrievability) for a given card ID. set_fsrs_params lets you update retention or weights on a preset. And optimize_fsrs_params runs Anki’s built-in optimizer — with a dry-run mode so you can preview the optimized weights before committing.

    There’s also an anki://fsrs/config resource that gives a quick overview of your FSRS setup without needing a tool call.

    The annoying part was version compatibility. FSRS has been through several iterations and Anki stores the parameters under different protobuf field names depending on which version you’re on. I ended up writing a fallback chain that tries fsrsParams6 first, then fsrsParams5, then fsrsParams4, and finally the old fsrsWeights field. The optimizer tool also needs to adjust its kwargs depending on the Anki point version (25.02 and 25.07 changed the interface). All of that version-detection logic lives in a shared _fsrs_helpers.py so the individual tools stay clean.

    One gotcha that took me a bit to track down: per-deck desired retention overrides are stored as 0–100 on the deck config dictionary, but the preset stores them as 0–1. Easy to miss, and you’d get nonsensical results if you didn’t normalize between the two.

    What I’m most excited about is what this enables in practice. You can now ask an AI assistant things like “run the optimizer on my medical deck in dry-run mode and tell me how the new weights compare” or “which of my presets has the lowest desired retention?” — and it can actually do it, pulling real data from your collection instead of just guessing. For someone who spends a lot of time tweaking FSRS settings across different decks, having that accessible through natural language is a nice quality-of-life improvement.

    The PR was recently merged. I tested everything locally — built the .ankiaddon, installed it in Anki, ran through all the tools against a live collection. If you’re into the Anki + AI workflow, take a look and let me know what you think.

    PR: ankimcp/anki-mcp-server-addon#14

  • Fixing a 7-Year-Old UX Bug in OpenZFS

    February 23rd, 2026

    Here’s a scenario most ZFS users have run into at least once. You reboot your server, maybe a drive didn’t spin up in time, or mdadm grabbed a partition before ZFS could — and zpool import hits you with this:

    The pool metadata is corrupted.
    Action: Destroy and re-create the pool.

    Your stomach drops. Corrupted? You start mentally cataloging your backups. Maybe you even reach for zpool destroy.

    Except… the metadata isn’t corrupted. ZFS just couldn’t see all the disks. The data is fine. The pool is fine. The error message is the problem.

    I’ve hit this myself on my TrueNAS box when a drive temporarily disappeared after a reboot. The first time I saw it I genuinely panicked. After digging into the source code, I realized that ZPOOL_STATUS_CORRUPT_POOL is basically a catch-all. Anytime the root vdev gets tagged with VDEV_AUX_CORRUPT_DATA — whether from actual corruption or simply missing devices — you get the same scary message. No distinction whatsoever.

    This has been a known issue since 2018. Seven years. Plenty of people complained about it, but nobody got around to fixing it.

    So I did. The PR is pretty straightforward — it touches four user-facing strings across the import and status display code paths. The core change:

    Before
    “The pool metadata is corrupted.”
    → Destroy and re-create the pool.
    After
    “The pool metadata is incomplete or corrupted.”
    → Check that all devices are present first.

    The recovery message also changed. Instead of jumping straight to “destroy the pool”, it now tells you to make sure your devices aren’t claimed by another subsystem (mdadm, LVM, etc.) and try the import again. You know, the thing you should actually try first before nuking your data.

    Brian Behlendorf reviewed it, said it should’ve been cleaned up ages ago, and merged it into master today. Not a glamorous contribution — no new features, no performance gains, just four strings. But if it saves even one person from destroying a perfectly healthy pool because of a misleading error message, that’s a win.

    PR: openzfs/zfs#18251 — closes #8236

  • Linux Kernel PCIe 7.0 preparation

    February 23rd, 2026

    https://www.phoronix.com/news/Linux-Early-PCIe-Gen-7-Prep

  • My first freebsd-src commit!!

    February 22nd, 2026

    https://github.com/freebsd/freebsd-src/commit/acbf7498f5e11b00ffcd6c12bdb8bd1eddeb6d7f

  • truenas-mcp – extended reporting metrics

    February 22nd, 2026

    https://github.com/truenas/truenas-mcp/commit/05447c5be59079816f73c2152cbaa34a31952bc0

  • Managing TrueNAS with AI: The TrueNAS MCP Connector

    February 21st, 2026

    How the Model Context Protocol turns your NAS into a conversational system


    What is MCP?

    The Model Context Protocol (MCP) is an open standard developed by Anthropic that allows AI assistants like Claude to connect to external tools, services, and data sources. Think of it as a universal plugin system for AI — instead of copy-pasting terminal output into a chat window, you give the AI a live, structured connection to your systems so it can query and act on them directly.

    MCP servers are small programs that speak a standardized JSON-RPC protocol. The AI client (Claude Desktop, Claude Code, etc.) spawns the server process and communicates with it over stdio. The server translates AI requests into real API calls — in this case, against the TrueNAS middleware WebSocket API.


    The TrueNAS MCP Connector

    TrueNAS Research Labs recently released an official MCP server for TrueNAS systems. It is a single native Go binary that runs on your desktop or workstation, connects to your TrueNAS over an encrypted WebSocket (wss://), authenticates with an API key, and exposes the full TrueNAS middleware API to any MCP-compatible AI client.

    Crucially, nothing is installed on the NAS itself. The binary runs entirely on your local machine.

    What it can do

    The connector covers essentially the full surface area of TrueNAS management:

    Storage — query pool health, list datasets with utilization, manage snapshots, configure SMB/NFS/iSCSI shares. Ask “which datasets are above 80% quota?” and get a direct answer.

    System monitoring — real-time CPU, memory, disk I/O, and network metrics. Active alerts, system version, hardware info. The kind of overview that normally requires clicking through several pages of the web UI.

    Maintenance — check for available updates, scrub status, boot environment management, last backup timestamps.

    Application management — list, install, upgrade, and monitor the status of TrueNAS applications (Docker containers on SCALE).

    Virtual machines — full VM lifecycle: create, start, stop, monitor resource usage.

    Capacity planning — utilization trends, forecasting, and recommendations. Ask “how long until my main pool is full at current growth rate?” and get a reasoned answer.

    Directory services — Active Directory, LDAP, and FreeIPA integration status and management.

    Safety features

    The connector includes a dry-run mode that previews any destructive operation before executing it, showing estimated execution time and a diff of what would change. Built-in validation blocks dangerous operations automatically. Long-running tasks (scrubs, migrations, upgrades) are tracked in the background with progress updates.


    Why This Matters

    Traditional NAS management is a context-switching problem. You have a question — “why is this pool degraded?” — and answering it means opening the web UI, navigating to storage, cross-referencing the alert log, checking disk SMART data, and reading documentation. Each step is manual.

    With MCP, the AI holds all of that context simultaneously. A single question like “my pool has an error, what should I do?” triggers the AI to query pool status, check SMART data, look at recent alerts, and synthesize a diagnosis — in one response, with no tab-switching.

    This is especially powerful for complex homelab setups with many datasets, containers, and services. Instead of maintaining mental models of your storage layout, you can just ask.


    Getting Started

    The setup takes about five minutes:

    1. Download the binary from the GitHub releases page and place it in your PATH.
    2. Generate an API key in TrueNAS under System Settings → API Keys.
    3. Configure your MCP client — Claude Desktop (~/.config/claude/claude_desktop_config.json) or Claude Code (claude mcp add ...).
    4. Restart the client and start asking questions.

    The binary supports self-signed certificates (pass -insecure for typical TrueNAS setups) and works over Tailscale or any network path to your NAS.

    Example queries you can use right away

    • “What is the health status of all my pools?”
    • “Show me all datasets and their current usage”
    • “Are there any active alerts I should know about?”
    • “Which of my containers are not running?”
    • “Preview creating a new dataset for backups with lz4 compression”
    • “When was the last scrub on my main pool, and did it find errors?”
    • “What TrueNAS version am I running and are updates available?”

    Current Status

    The TrueNAS MCP connector is a research preview (currently v0.0.4). It is functional and comprehensive, but not yet recommended for production-critical automation. It is well-suited for monitoring, querying, and exploratory management. Treat destructive operations (dataset deletion, VM reconfiguration) with the same care you would in the web UI — use dry-run mode first.

    The project is open source and actively developed. Given that this is an official TrueNAS Labs project, it is likely to become a supported feature in future TrueNAS releases.


    Broader Implications

    The TrueNAS MCP connector is an early example of a pattern that will become common: infrastructure that exposes a semantic API layer for AI consumption, not just a REST API for human-written scripts. The difference is significant. A REST API tells you what the data looks like. An MCP server tells the AI what operations are possible, what they mean, and how to chain them safely.

    As more homelab and enterprise tools adopt MCP, the practical vision of a conversational infrastructure layer — where you describe intent and the AI handles execution — becomes genuinely achievable, not just a demo.


    The TrueNAS MCP connector is available at github.com/truenas/truenas-mcp. Setup documentation is at the TrueNAS Research Labs page.

    Sample screenshots!!

  • Tailscale Winter Updates

    February 21st, 2026
  • rge(4) – Silicon Revision Logging in FreeBSD’s

    February 20th, 2026

    Enabling Silicon Revision Logging in FreeBSD’s rge(4) Driver

    This article describes a kernel-level patch to the FreeBSD rge(4) network driver that enables proper identification of Realtek RTL8125/8126/8127 silicon variants at attach time. The change is small but reveals an interesting idiom gap between two BSD kernels.

    The rge(4) Driver and Its Hardware

    The rge(4) driver supports a family of Realtek multi-gigabit NICs spanning three product generations. Despite sharing a common PCI device ID tree, each silicon revision has meaningfully different characteristics: different firmware images, different register maps for some functions, and different feature sets.

    Chiphwrev registerType constantGeneration
    RTL81250x60900000MAC_R252.5GbE first gen
    RTL8125B0x64100000MAC_R25B2.5GbE revised
    RTL8125D_10x68800000MAC_R25D2.5GbE third gen
    RTL8125D_20x68900000MAC_R25D2.5GbE third gen alt
    RTL8126_10x64900000MAC_R265GbE first gen
    RTL8126_20x64a00000MAC_R265GbE alt
    RTL81270x6c900000MAC_R2710GbE

    The hardware revision is detected by reading the RGE_TXCFG register and masking off the lower bits, yielding the hwrev value. This happens in rge_get_macaddr() via the attachment path in rge_attach().

    How Hardware Revision Detection Works

    The detection is a straightforward switch statement in sys/dev/rge/if_rge.c:

    hwrev = CSR_READ_4(sc, RGE_TXCFG) & RGE_TXCFG_HWREV;
    
    switch (hwrev) {
    case 0x60900000:
        sc->rge_type = MAC_R25;
        break;
    case 0x64100000:
        sc->rge_type = MAC_R25B;
        break;
    /* ... */
    }

    The rge_type field stored in the softc structure is then used throughout the driver to select chip-specific paths — for example, firmware loading, ring configuration, and certain register sequences differ between MAC_R25 and MAC_R25B.

    The Problem: Invisible Chip Identification

    Before the patch, despite detecting seven distinct silicon variants at runtime, the driver logged nothing about which one was found. All three product families produce dmesg output that looks like this:

    pci0: <network> at device 0.0 (no driver attached)
    rge0: <RTL8125> mem 0xfc400000-0xfc40ffff [...] at device 0.0 on pci2
    rge0: Using 1 MSI-X message
    rge0: CHIP: 0x00000000
    miibus0: <MII bus> on rge0

    The string <RTL8125> comes from the PCI probe function — specifically device_set_desc() — which is set once during probe based on the PCI subsystem ID, before the hardware revision register is even read. It cannot distinguish RTL8125 from RTL8125B, or RTL8126_1 from RTL8126_2. A user filing a bug report, or a developer debugging an issue specific to one silicon stepping, had no way to confirm which variant was present without writing custom code to read RGE_TXCFG manually.

    The OpenBSD Import and the Commented Code

    Examining the original import commit reveals that identification prints were always present in the source — just commented out in a non-idiomatic style:

    case 0x60900000:
        sc->rge_type = MAC_R25;
    // device_printf(dev, "RTL8125\n");
        break;
    case 0x64100000:
        sc->rge_type = MAC_R25B;
    // device_printf(dev, "RTL8125B\n");
        break;

    The use of // comments is itself a signal: the FreeBSD kernel style guide mandates /* */ C89-style comments for all kernel code. The // style is characteristic of code copied directly from another source and then quickly commented out.

    The origin is OpenBSD’s sys/dev/pci/if_rge.c, where the equivalent identification uses a different printing idiom:

    /* OpenBSD style — appends to the in-progress attach line */
    case 0x64100000:
        sc->rge_type = MAC_R25B;
        printf(": RTL8125B");
        break;

    In OpenBSD, the device attachment infrastructure prints the device name on a line and drivers call bare printf() to append chip identification to that same line, producing output like:

    rge0 at pci2 dev 0 function 0 "Realtek 8125" rev 0x00: RTL8125B, ...

    FreeBSD’s driver framework does not work this way. device_printf(dev, ...) always begins a new line prefixed with the device name — it cannot append to an existing line. A direct translation of the OpenBSD bare printf() would either produce garbled output or nothing useful. Rather than translating the idiom at import time, the prints were commented out.

    The Fix

    The correct FreeBSD idiom is device_printf() on its own line, following attach. The patch enables all seven commented prints in the proper style, and adds the raw hwrev register value alongside the human-readable name — consistent with how the re(4) driver reports chip revisions:

    switch (hwrev) {
    case 0x60900000:
        sc->rge_type = MAC_R25;
        device_printf(dev, "chip rev: RTL8125 (0x%08x)\n", hwrev);
        break;
    case 0x64100000:
        sc->rge_type = MAC_R25B;
        device_printf(dev, "chip rev: RTL8125B (0x%08x)\n", hwrev);
        break;
    case 0x64900000:
        sc->rge_type = MAC_R26_1;
        device_printf(dev, "chip rev: RTL8126_1 (0x%08x)\n", hwrev);
        break;
    case 0x64a00000:
        sc->rge_type = MAC_R26_2;
        device_printf(dev, "chip rev: RTL8126_2 (0x%08x)\n", hwrev);
        break;
    case 0x68800000:
        sc->rge_type = MAC_R25D;
        device_printf(dev, "chip rev: RTL8125D_1 (0x%08x)\n", hwrev);
        break;
    case 0x68900000:
        sc->rge_type = MAC_R25D;
        device_printf(dev, "chip rev: RTL8125D_2 (0x%08x)\n", hwrev);
        break;
    case 0x6c900000:
        sc->rge_type = MAC_R27;
        device_printf(dev, "chip rev: RTL8127 (0x%08x)\n", hwrev);
        break;
    }

    Including the raw hex value serves two purposes. First, it allows unambiguous identification even if the human-readable label ever becomes incorrect or incomplete. Second, it mirrors the diagnostic value already present in the CHIP: line printed slightly later in attach, but associates it directly with the revision identification step.

    Result: Before and After

    After the patch, a system with an RTL8125B produces:

    rge0: <RTL8125> mem 0xfc400000-0xfc40ffff [...] at device 0.0 on pci2
    rge0: chip rev: RTL8125B (0x64100000)
    rge0: Using 1 MSI-X message

    A system with RTL8126_1 (a 5GbE part that probes as <RTL8126>) produces:

    rge0: <RTL8126> mem 0xfc400000-0xfc40ffff [...] at device 0.0 on pci2
    rge0: chip rev: RTL8126_1 (0x64900000)
    rge0: Using 1 MSI-X message

    The chip revision is now permanently captured in dmesg(8) output and system logs, available without any special tools or kernel knowledge.

    Why the Raw hwrev Value Matters

    The hwrev bitmask is read from bits [31:20] of RGE_TXCFG. Realtek does not publish full public documentation for these register fields, and the driver’s variant table has been built incrementally as new silicon steppings were encountered in the wild. Including the raw value means that if a new stepping appears with an hwrev not yet in the driver’s switch statement, it will still be captured in the log — giving developers the exact value needed to add support for it.

    Note on the default case: The switch has no explicit default. An unrecognized hwrev leaves rge_type at its zero-initialized value. With the patch, the raw value is logged for all handled cases, but an unknown stepping would produce no chip rev line at all — a future improvement could add a default case that logs the unknown value explicitly.

    Diff Summary

    The complete change touches a single file, sys/dev/rge/if_rge.c:

    7 lines changed: 7 insertions(+), 7 deletions(-)
    
    - // device_printf(dev, "RTL8125\n");   (×7 variants)
    + device_printf(dev, "chip rev: RTL8125 (0x%08x)\n", hwrev);  (×7 variants)

    No logic changes. No new dependencies. No behavioral differences other than the additional log line per attach.

    Review

    The patch is under review at reviews.freebsd.org/D55402, where it will be integrated into the broader rge(4) improvement stack for the upcoming development cycle.

1 2 3 … 136
Next Page→

Blog at WordPress.com.

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Cookie Policy
 

Loading Comments...
 

    • Subscribe Subscribed
      • /root
      • Already have a WordPress.com account? Log in now.
      • /root
      • Subscribe Subscribed
      • Sign up
      • Log in
      • Report this content
      • View site in Reader
      • Manage subscriptions
      • Collapse this bar