<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ubuntu on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/ubuntu/</link>
    <description>Recent content in Ubuntu on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Wed, 29 Jul 2026 20:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/ubuntu/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Open Specific Ports on Ubuntu 22.04 with UFW or iptables</title>
      <link>https://blog.margrop.net/en/post/ubuntu-add-port-filter-using-iptables/</link>
      <pubDate>Sun, 26 Feb 2023 20:04:53 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-add-port-filter-using-iptables/</guid>
      <description>&lt;h1 id=&#34;add-firewall-rules-on-ubuntu-2204&#34;&gt;Add firewall rules on Ubuntu 22.04&lt;/h1&gt;&#xA;&lt;h2 id=&#34;check-firewall-status&#34;&gt;Check firewall status&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ufw status&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;open-port-22&#34;&gt;Open port 22&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ufw allow 22&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;check-firewall-status-again&#34;&gt;Check firewall status again&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ufw status&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Computers Rarely Break “Out of Nowhere”: Read Logs Like a Detective</title>
      <link>https://blog.margrop.net/en/post/%E7%9C%8B%E6%97%A5%E5%BF%97-log-reading-art/</link>
      <pubDate>Wed, 29 Jul 2026 20:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/%E7%9C%8B%E6%97%A5%E5%BF%97-log-reading-art/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short conclusion&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Computers rarely fail without leaving a trace. A disk gradually fills up. A service emits warnings before it exits. A DNS lookup fails before a browser reports a timeout. A process starts and stops several times before a user sees a broken page. The practical skill is not to reinstall everything after seeing a red error. It is to ask five detective questions: &lt;strong&gt;When did it happen? Which object was involved? How serious was it? What happened before and after it? Can the result be verified after the fix?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This article explains logs as a computer’s diary instead of presenting them as mysterious engineering jargon. It uses real collection output from Windows 11, Ubuntu 26.04, and macOS 26, provides three native read-only collectors, and shows how to give the same evidence-first workflow to an Agent. A child should understand most of the story; an engineer can still reuse the commands and the reasoning pattern.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Installing Another PC Cleaner: What Desktop Software Can an AI Agent Actually Replace?</title>
      <link>https://blog.margrop.net/en/post/ai-agent-replace-desktop-software/</link>
      <pubDate>Sun, 19 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ai-agent-replace-desktop-software/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short answer&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;An AI Agent can replace many desktop utilities whose main job is clicking the same buttons over and over. It does not turn every application into a chat box, and it is not a magical “computer doctor.” Its real advantage is orchestration: it can inspect the machine, understand the goal, combine built-in tools, execute a sequence, and explain the evidence.&lt;/p&gt;&#xA;&lt;p&gt;Across five categories—file conversion, junk scanning, performance optimization, configuration changes, and computer repair—the replacement level is different. File conversion and reporting are highly automatable. Performance work and configuration changes are semi-automatic. Hardware repair remains a human job, with the Agent acting as a diagnostic assistant.&lt;/p&gt;&#xA;&lt;p&gt;The safety rule for every script in this article is simple: &lt;strong&gt;read first, write second; back up first, change second; verify before claiming success.&lt;/strong&gt; All three scripts are local-only and start in report mode. Destructive actions require an explicit flag and a second confirmation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker Pulls Keep Timing Out? How to Choose, Configure, and Verify Chinese Registry Mirrors</title>
      <link>https://blog.margrop.net/en/post/docker-mirror-source-selection-guide/</link>
      <pubDate>Wed, 15 Jul 2026 19:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/docker-mirror-source-selection-guide/</guid>
      <description>The short answer&#xA;When Docker image pulls fail on a mainland China network, the image is not necessarily missing and DNS is not always the culprit. More often, the public registry path is congested, a mirror is temporarily unavailable, or the configuration was edited but Docker was never restarted.&#xA;My practical recommendation is simple: open status.anye.xyz first and treat it as a “weather report” for Docker mirrors; select a recently healthy HTTPS endpoint; edit the correct daemon configuration for your operating system; validate the JSON; restart Docker; and finally verify with a real pull of a small image.</description>
    </item>
    <item>
      <title>Take Back Your Remote Desktop: Deploying an All-in-One RustDesk Server Safely</title>
      <link>https://blog.margrop.net/en/post/rustdesk-all-in-one-server-guide/</link>
      <pubDate>Fri, 10 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/rustdesk-all-in-one-server-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RustDesk is an open-source remote desktop application designed with self-hosting in mind. When two clients can reach each other directly, screen and input traffic can use a peer-to-peer path. When that direct path fails, a relay server forwards the encrypted traffic. Hosting the server yourself does not eliminate servers; it puts device registration, relay routing, keys, accounts, and logs back under your control.&lt;/p&gt;&#xA;&lt;p&gt;This guide uses the community-maintained &lt;code&gt;lejianwen/rustdesk-server-s6&lt;/code&gt; image to place the RustDesk OSS &lt;code&gt;hbbs&lt;/code&gt; and &lt;code&gt;hbbr&lt;/code&gt; services together with a community API and web administration layer in one container. It is a convenient option for homes, labs, and small teams, but it is &lt;strong&gt;not an official RustDesk all-in-one distribution&lt;/strong&gt;. Evaluate the community image, pin a tested tag or digest, back up its persistent data, and rehearse upgrades and rollbacks before treating it as production infrastructure.&lt;/p&gt;&#xA;&lt;p&gt;Every address in this article uses &lt;code&gt;example.com&lt;/code&gt;. No real IP address, private domain, hostname, device ID, account, key, token, cookie, or private registry is shown. The screenshots come from public official or community project pages.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>I Put Docker in a Control Room: Portainer CE 2.39.4 Deployment, Daily Use, and Real Traps</title>
      <link>https://blog.margrop.net/en/post/portainer-ce-docker-deployment-guide/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/portainer-ce-docker-deployment-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line first&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portainer does not replace Docker. It is a control room for a Docker host. Docker Engine remains the machinery; Portainer organizes containers, images, networks, volumes, and Compose stacks into a web dashboard.&lt;/p&gt;&#xA;&lt;p&gt;I ran an isolated deployment of &lt;code&gt;portainer/portainer-ce:2.39.4&lt;/code&gt;, initialized it, connected the local Docker environment, inspected the dashboard, filtered a disposable container, and created a demonstration stack. The installation is one &lt;code&gt;docker run&lt;/code&gt; command. The important lessons are broader: persist &lt;code&gt;/data&lt;/code&gt;, understand that &lt;code&gt;/var/run/docker.sock&lt;/code&gt; is highly privileged, and never expose the management interface to an untrusted network without protection.&lt;/p&gt;&#xA;&lt;p&gt;This article contains no complete IP address, real host name, private domain, administrator password, token, cookie, private registry address, or production container name. The screenshots use disposable names, and the container address is redacted.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Fresh Ubuntu 26.04 Without Snap: A Clean, Reversible Removal Guide</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-remove-snap-cleanly/</link>
      <pubDate>Mon, 06 Jul 2026 09:45:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-remove-snap-cleanly/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you are setting up a fresh Ubuntu 26.04 system and you know you do not want Snap, remove it in the right order: inspect installed snaps, save anything important, remove snaps with &lt;code&gt;snap remove --purge&lt;/code&gt;, purge the &lt;code&gt;snapd&lt;/code&gt; package with APT, clean the remaining Snap directories, and optionally block accidental reinstall.&lt;/p&gt;&#xA;&lt;p&gt;This guide explains the background, symptoms, root cause of messy removals, manual execution, AI Agent execution, and three one-click scripts for Windows 11, Ubuntu 26.04, and macOS 26. The scripts default to dry-run mode, require an explicit execution switch, depend only on built-in OS tools, and do not include private IP addresses, hostnames, private domains, tokens, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>One sentence let Claude upgrade Ubuntu 22.04 to 24.04: a near-zero-screen-time cross-LTS run</title>
      <link>https://blog.margrop.net/en/post/upgrade-ubuntu-via-agent/</link>
      <pubDate>Fri, 19 Jun 2026 10:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/upgrade-ubuntu-via-agent/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;A remote home-lab box had been sitting on Ubuntu 22.04.4 LTS (jammy, kernel 5.15) for a long time. After one sentence — &amp;ldquo;upgrade the box at 192.168.103.182 to Ubuntu 24.04&amp;rdquo; — Claude opened a tmux session to babysit the run, brought up a fallback sshd on port 1022 so a mid-upgrade sshd restart would not strand me, then drove &lt;code&gt;do-release-upgrade -f DistUpgradeViewNonInteractive&lt;/code&gt; end to end. Twenty-five minutes later the host came back: kernel 6.8.0-124, every service still listening.&lt;/p&gt;&#xA;&lt;p&gt;This is not a tutorial on &lt;code&gt;do-release-upgrade&lt;/code&gt;; the Ubuntu docs already cover that. This is about what an Agent does once it gets an SSH handle on a box, why it does each step, and which pitfalls you have to clear out of the way before letting it loose.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu shutdown stuck for 90 seconds? A Python asyncio service that won&#39;t honour SIGTERM, and how to fix it</title>
      <link>https://blog.margrop.net/en/post/ubuntu-shutdown-stuck/</link>
      <pubDate>Fri, 19 Jun 2026 10:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-shutdown-stuck/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;After upgrading my home proxy box to Ubuntu 24.04, &lt;code&gt;systemctl reboot&lt;/code&gt; stopped being fast: SSH would hang on for &lt;strong&gt;90 seconds&lt;/strong&gt; before the box actually shut down. &lt;code&gt;journalctl&lt;/code&gt; made it obvious: &lt;code&gt;smart-proxy.service: State &#39;stop-sigterm&#39; timed out. Killing.&lt;/code&gt; — systemd sent SIGTERM, waited 90 seconds, nobody reacted, and SIGKILL was the only option left.&lt;/p&gt;&#xA;&lt;p&gt;The root cause is not systemd&amp;rsquo;s fault and not Ubuntu&amp;rsquo;s fault. It is &lt;strong&gt;Python&amp;rsquo;s asyncio runtime not actually ending its child tasks when SIGTERM arrives&lt;/strong&gt; — it is parked on a &lt;code&gt;socket.recv&lt;/code&gt; and never voluntarily looks at the signal queue.&lt;/p&gt;&#xA;&lt;p&gt;The fix has two halves, both required: &lt;strong&gt;(1)&lt;/strong&gt; a systemd drop-in that lowers &lt;code&gt;TimeoutStopSec&lt;/code&gt; from the default 90s down to 20s on the affected Python units; &lt;strong&gt;(2)&lt;/strong&gt; inside the Python service itself, walk &lt;code&gt;asyncio.all_tasks()&lt;/code&gt;, &lt;code&gt;.cancel()&lt;/code&gt; the in-flight connection handlers on SIGTERM, and wrap &lt;code&gt;self.stop()&lt;/code&gt; in &lt;code&gt;asyncio.wait_for(..., timeout=10)&lt;/code&gt; as a safety net. After both halves, the same &lt;code&gt;reboot&lt;/code&gt; drops from 90 seconds to one second.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Avoiding the Trap: Why Fail2Ban Fails on Ubuntu 26.04 &amp; PVE 9.2 (And How to Fix It)</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-pve-92-fail2ban-nftables-guide/</link>
      <pubDate>Tue, 26 May 2026 22:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-pve-92-fail2ban-nftables-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Bottom Line&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;With the releases of Ubuntu 26.04 LTS and Proxmox VE (PVE) 9.2, many system administrators, DevOps engineers, and self-hosting enthusiasts have eagerly upgraded or clean-installed these latest systems. However, during the post-installation security hardening phase, you may encounter a highly frustrating scenario: &lt;strong&gt;simply copying over your legacy Fail2Ban configuration files from older versions (such as Ubuntu 20.04/22.04 or PVE 7.x/8.x) will either cause the Fail2Ban service to crash during startup or, worse, run silently in the background while completely failing to block external brute-force attacks!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This issue is not caused by a bug in Fail2Ban itself. Instead, it is the result of three &amp;ldquo;invisible bombs&amp;rdquo; hidden beneath the surface of these modern Linux distributions, namely changes in the logging architecture, service activation mechanisms, and firewall backends. This article provides an in-depth analysis of these three architectural shifts and introduces a modern, bulletproof Fail2Ban configuration guide fully integrated with &lt;code&gt;systemd-journald&lt;/code&gt; and &lt;code&gt;nftables&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Don&#39;t Rush After Installing Ubuntu 26.04 LTS! Swiftly Configure Domestic Mirrors (Huawei &amp; Alibaba Cloud APT Sources DEB822 Tutorial)</title>
      <link>https://blog.margrop.net/en/post/ubuntu-26-apt-source-mirror-setup-guide/</link>
      <pubDate>Tue, 26 May 2026 21:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-26-apt-source-mirror-setup-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 LTS (Resolute Raccoon) has officially been released. If you have just installed it, the very first thing you should do is replace the default APT sources with fast domestic mirror servers (such as Alibaba Cloud or Huawei Cloud). Note that starting from Ubuntu 24.04, the system has transitioned entirely to the new &lt;strong&gt;DEB822&lt;/strong&gt; format for APT source configurations (stored in &lt;code&gt;/etc/apt/sources.list.d/ubuntu.sources&lt;/code&gt;), making the traditional &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; inactive by default.&lt;/p&gt;&#xA;&lt;p&gt;This tutorial provides a step-by-step guide on how to safely change to Alibaba Cloud and Huawei Cloud mirrors in Ubuntu 26.04 LTS, along with deep troubleshooting analysis for potential pitfalls like dependency conflicts and version codename mismatches.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Seamless Homelab Networking: Deploying Tailscale on Ubuntu 26.04 for Effortless Remote Access</title>
      <link>https://blog.margrop.net/en/post/seamless-homelab-networking-deploy-tailscale-ubuntu-2604/</link>
      <pubDate>Tue, 26 May 2026 14:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/seamless-homelab-networking-deploy-tailscale-ubuntu-2604/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Short Version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Cross-carrier connectivity, lack of public IPv4 addresses, and multi-device connection management have always been the ultimate pain points for Homelab enthusiasts and enterprise sysadmins alike. This article provides a comprehensive, step-by-step guide on how to cleanly and securely install and configure the latest version of Tailscale on the newly released Ubuntu 26.04 (Resolute Raccoon) using the modern APT Keyring standards. Beyond a clean command-line install walkthrough, we delve into the architectural design of Tailscale, Subnet Router routing, and Exit Node proxying to establish a seamless, encrypted mesh network linking your home Synology NAS, Proxmox VE hypervisors, remote laptops, and mobile devices.&lt;/p&gt;&#xA;&lt;p&gt;All setups and commands documented here have been rigorously tested on a clean Ubuntu 26.04 (Resolute Raccoon) environment. To prioritize safety and avoid leakage, all internal IP addresses, access tokens, routing tables, and server domains have been fully masked using generic placeholders.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Using Old Methods! Deploying the Latest Docker CE on Ubuntu 26.04 LTS with Ultra-fast Mirror Setup</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-docker-install-guide/</link>
      <pubDate>Tue, 26 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-docker-install-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Foreword&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;With the official release of Ubuntu 26.04 LTS (Resolute Raccoon), developers and system administrators worldwide are upgrading their development, testing, and production environments to this long-term support version. However, setting up Docker—the cornerstone of modern containerization and microservices architecture—on a brand-new LTS release can sometimes present unexpected friction.&lt;/p&gt;&#xA;&lt;p&gt;If you are still relying on legacy commands like &lt;code&gt;apt-get install docker.io&lt;/code&gt;, or copy-pasting outdated tutorials meant for Ubuntu 20.04 or 22.04, you are likely to run into issues. These issues range from outdated software packages to APT repository format mismatches (especially with the widespread adoption of the new DEB822 format), or network timeouts when pulling images from container registries in restricted environments.&lt;/p&gt;&#xA;&lt;p&gt;This article provides a comprehensive, step-by-step, and highly detailed guide to installing Docker Community Edition (Docker CE) on Ubuntu 26.04 LTS. We will delve into modern DEB822 repository configurations, non-root system privilege separation, systemd service tweaks, and advanced network acceleration (both HTTP/HTTPS proxies and private registry mirrors).&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 After Install: Set Up Chinese Display and Chinese Input the Right Way</title>
      <link>https://blog.margrop.net/en/post/ubuntu2604-desktop-chinese-language-input-method/</link>
      <pubDate>Fri, 22 May 2026 16:05:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu2604-desktop-chinese-language-input-method/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;After installing Ubuntu 26.04 Desktop, do not treat Chinese support as “just install one input method package.” The stable sequence is: update the system, install full Chinese language support, install CJK fonts, decide whether the desktop UI itself should be Chinese, add a Chinese input source, and only then choose between the GNOME-friendly IBus Intelligent Pinyin path and the more customizable Fcitx5 path.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ubuntu 26.04 LTS is a very usable desktop system out of the box, but Chinese users usually hit the same three issues soon after installation: the interface is partly translated or not translated at all, Chinese text looks thin or falls back to poor fonts, and the input method either does not appear or cannot be switched reliably.&lt;/p&gt;&#xA;&lt;p&gt;Those issues should not be fixed separately. On Ubuntu Desktop, language support and input methods are connected. Language packages provide translations, regional formats, fonts, dictionaries, and related desktop resources. The input method framework converts keyboard events into Chinese candidates. GNOME Settings connects those engines to the active desktop session. If you only install &lt;code&gt;ibus-libpinyin&lt;/code&gt; or only install &lt;code&gt;fcitx5&lt;/code&gt;, you may end up with a system that can technically type Chinese but still feels unfinished.&lt;/p&gt;&#xA;&lt;p&gt;This article is for users who have just installed Ubuntu 26.04 Desktop, and also for people who routinely prepare Linux laptops or desktops for family, coworkers, or new machines. The goal is not to build the most complicated input method setup. The goal is a clean baseline: Chinese text displays correctly, Chinese input switches reliably, and the English desktop can remain available if you prefer it.&lt;/p&gt;&#xA;&lt;p&gt;All screenshots in this article are real operation screenshots from public references and are stored locally on this site. One screenshot was cropped before being included to remove an unrelated remote-desktop title bar. Ubuntu 26.04 daily images, final release images, OEM builds, and later point releases may use slightly different labels, but the workflow and troubleshooting logic are the same.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Clickbait Alert] Switching to a Chinese Mirror Nearly Broke My Ubuntu: A Real Story of apt Dependency Hell</title>
      <link>https://blog.margrop.net/en/post/ubuntu-26-apt-source-mirror-dependency-conflict-fix/</link>
      <pubDate>Sun, 17 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-26-apt-source-mirror-dependency-conflict-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I switched to a domestic Chinese mirror for Ubuntu and thought it would take 10 minutes. It took two hours. This article documents the entire journey from &amp;ldquo;mirror sync delay causing version mismatch&amp;rdquo; to &amp;ldquo;dpkg forced downgrade&amp;rdquo; to &amp;ldquo;apt fully restored.&amp;rdquo; The core lesson: switching a mirror is not a one-click fix—version consistency is everything. If you swap mirrors on a system that&amp;rsquo;s been running for months, you have a 99% chance of hitting dependency conflicts.&lt;/p&gt;&#xA;&lt;p&gt;All operations in this article are based on Ubuntu 26.04 (Plucky). All IPs, hostnames, and paths are sanitized examples and contain no internal network addresses or sensitive information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 Upgrade Guide: Let an Agent Do It, or Run It by Hand</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-upgrade-agent-manual-guide/</link>
      <pubDate>Tue, 12 May 2026 07:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-upgrade-agent-manual-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Upgrading Ubuntu 22.04 or 24.04 to Ubuntu 26.04 is not about memorizing one command. It is about following the supported upgrade path. Ubuntu 22.04 LTS should not be jumped directly to Ubuntu 26.04 LTS. Upgrade 22.04 LTS to 24.04 LTS first, then move from 24.04 LTS to 26.04 LTS. As of 2026-05-12, Ubuntu 26.04 LTS has already been released, but the normal LTS-to-LTS upgrade prompt from 24.04 LTS to 26.04 LTS is typically enabled after the first point release. The official 26.04 schedule lists the 26.04.1 point release on 2026-07-09. Production systems should usually wait for the regular upgrade path; test systems can evaluate an early upgrade only with explicit risk acceptance.&lt;/p&gt;&#xA;&lt;p&gt;If you already use agents such as Code, Claude, OpenClaw, HermesAgent, Codex, or OpenCode, this is a good task to delegate. But do not just say “upgrade Ubuntu.” Give the agent a bounded job: inspect first, back up, follow the supported path, keep logs, ask before risky choices, reboot, verify services, and report evidence. This article gives both a ready-to-copy agent prompt and a manual procedure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All examples in this article are generic. No private hostnames, internal addresses, accounts, credentials, tokens, business system names, or personal paths are included. Replace placeholders such as &lt;code&gt;&amp;lt;HOST&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;SERVICE&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;BACKUP_DIR&amp;gt;&lt;/code&gt; with values from your own environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox VE VM Creation and Ubuntu 26.04 Unattended Installation: A Practical Guide</title>
      <link>https://blog.margrop.net/en/post/pve-vm-create-and-ubuntu-26-unattended-install/</link>
      <pubDate>Sat, 25 Apr 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/pve-vm-create-and-ubuntu-26-unattended-install/</guid>
      <description>&lt;h1 id=&#34;proxmox-ve-vm-creation-and-ubuntu-2604-unattended-installation-a-practical-guide&#34;&gt;Proxmox VE VM Creation and Ubuntu 26.04 Unattended Installation: A Practical Guide&lt;/h1&gt;&#xA;&lt;p&gt;Creating virtual machines and installing operating systems are among the most fundamental and frequent tasks in server operations and maintenance. While traditional interactive installation via VNC or IPMI is intuitive, it is inefficient—especially when deploying multiple servers in batches. This article provides a detailed walkthrough of how to leverage Proxmox VE (PVE) combined with Cloud-init technology to achieve fully automated unattended installation of Ubuntu 26.04 Server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resize the disk of an Ubuntu VM in PVE — the complete workflow from Web UI to guest OS</title>
      <link>https://blog.margrop.net/en/post/pve-ubuntu-vm-disk-resize/</link>
      <pubDate>Mon, 23 Mar 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/pve-ubuntu-vm-disk-resize/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Preface&lt;/strong&gt;&#xA;When you manage a virtualized environment with Proxmox VE, running out of disk space is only a matter of time. Maybe your Ubuntu VM keeps pulling more Docker images, or maybe database logs fill up the root partition. In short, disk expansion is a must-have skill for PVE operations. This article walks through the entire process, from resizing the virtual disk in the PVE Web UI to expanding LVM inside the Ubuntu guest, step by step.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-why-do-we-need-to-resize&#34;&gt;1 Why do we need to resize?&lt;/h2&gt;&#xA;&lt;p&gt;PVE usually allocates a fixed-size virtual disk when a VM is created, for example 32 GB. As the workload grows, that space may no longer be enough. Fortunately, PVE supports online disk expansion, and Ubuntu&amp;rsquo;s default LVM setup also supports dynamic logical volume expansion. Together, they make the process very convenient.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 24.04 LTS Noble Numbat Upgrade Guide</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2404-lts-noble-numbat-upgrade/</link>
      <pubDate>Tue, 30 Apr 2024 19:55:19 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2404-lts-noble-numbat-upgrade/</guid>
      <description>Thanks to ChatGPT for translating from the official website, 原文入口&#xA;IMPORTANT: Ubuntu 22.04 LTS目前无法直接升级到 Ubuntu 24.04 LTS，请等到2024年8月再进行升级操作&#xA;Ubuntu 24.04 LTS - &amp;ldquo;Noble Numbat&amp;rdquo; Upgrade Guide Ubuntu 24.04 LTS is the version of the Ubuntu operating system released in April 2024. The development code name for this version is &amp;ldquo;Noble Numbat&amp;rdquo;.&#xA;Before you begin You can upgrade directly to Ubuntu 24.04 LTS (&amp;ldquo;Noble Numbat&amp;rdquo;) from Ubuntu 22.04 LTS (&amp;ldquo;Jammy Jellyfish&amp;rdquo;) or Ubuntu 23.</description>
    </item>
    <item>
      <title>Online expansion of Ubuntu/CentOS disk root directory &amp; modification of partition inode number</title>
      <link>https://blog.margrop.net/en/post/ubuntu-lv-extend-and-resize-inode/</link>
      <pubDate>Sat, 25 Mar 2023 13:42:44 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-lv-extend-and-resize-inode/</guid>
      <description>When Ubuntu is used as a server system, the system disk may not have enough space. If apt apt is used, the root directory will be full. Granted, adding a disk/partition and mounting it is a solution, but it doesn&amp;rsquo;t solve all problems (like apt). At the same time, some servers running on cloud platforms do not have good means of operating disks offline. At this time, online expansion is extremely necessary.</description>
    </item>
    <item>
      <title>How to Configure a Freshly Installed Ubuntu 20.04 Server VM on PVE</title>
      <link>https://blog.margrop.net/en/post/pve-how-to-config-brand-new-ubuntu-20.04-vm/</link>
      <pubDate>Sat, 30 Jan 2021 15:33:44 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/pve-how-to-config-brand-new-ubuntu-20.04-vm/</guid>
      <description>&lt;h1 id=&#34;download-the-installation-iso&#34;&gt;Download the Installation ISO&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mirrors.aliyun.com/ubuntu-releases/focal/ubuntu-20.04.2-live-server-amd64.iso&#34;&gt;Aliyun Ubuntu 20.04 live server download&lt;/a&gt;&#xA;&lt;a href=&#34;https://mirrors.aliyun.com/ubuntu-releases/bionic/ubuntu-18.04.5-live-server-amd64.iso&#34;&gt;Aliyun Ubuntu 18.04 live server download&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu installs Frp server, non-client</title>
      <link>https://blog.margrop.net/en/post/ubuntu-install-frp-server/</link>
      <pubDate>Sat, 23 Jan 2021 13:43:20 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-install-frp-server/</guid>
      <description>Download and extract FRP Latest FRP release: https://github.com/fatedier/frp/releases/ cd ~ mkdir frp cd frp wget https://github.com/fatedier/frp/releases/download/v0.35.0/frp_0.35.0_linux_amd64.tar.gz tar -xvzf frp_0.35.0_linux_amd64.tar.gz cd frp_0.35.0_linux_amd64 Configure FRP Remove the default client configuration file&#xA;Create the server configuration file&#xA;cd ~/frp/frp_0.35.0_linux_amd64/ rm frpc rm frpc.ini rm frpc_full.ini ls -a sudo su rm frps.ini cat&amp;gt;/etc/frps.ini&amp;lt;&amp;lt;EOF [common] # FRP server bind port bind_port = 1000 # Set the HTTP access port to 1001 vhost_http_port = 1001 # Set the domain name (make sure it is reachable) subdomain_host = frp.</description>
    </item>
  </channel>
</rss>
