<?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 魔都水滴</title>
    <link>https://blog.margrop.net/tag/ubuntu/</link>
    <description>Recent content in Ubuntu on 魔都水滴</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Wed, 29 Jul 2026 20:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/tag/ubuntu/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ubuntu 22.04 通过ufw / iptables 开放指定端口——20230715更新</title>
      <link>https://blog.margrop.net/post/ubuntu-add-port-filter-using-iptables/</link>
      <pubDate>Sun, 26 Feb 2023 20:04:53 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-add-port-filter-using-iptables/</guid>
      <description>&lt;h1 id=&#34;ubuntu2204-新增防火墙端口&#34;&gt;Ubuntu22.04 新增防火墙端口&lt;/h1&gt;&#xA;&lt;h2 id=&#34;查看防火墙状态&#34;&gt;查看防火墙状态&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;开放22端口&#34;&gt;开放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;添加完成查看防火墙状态&#34;&gt;添加完成，查看防火墙状态&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>电脑从不“突然坏掉”：看懂日志，十分钟学会像侦探一样排障</title>
      <link>https://blog.margrop.net/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/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;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;电脑很少会“毫无征兆地坏掉”。大多数时候，它早就把线索写进了日志：某个磁盘逐渐变满、某个服务先出现警告、某次 DNS 查询失败、某个进程反复启动又退出。真正的排障，不是看到红色报错就马上重装系统，而是像侦探一样回答五个问题：&lt;strong&gt;什么时候发生？谁发生了？严重程度怎样？前后还发生了什么？修好后能不能验证？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这篇文章不把日志讲成只有工程师才懂的黑话，而是把它比作电脑每天写的日记。你会看到 Windows 11、Ubuntu 26.04 和 macOS 26 的真实采集输出，拿到三套不依赖第三方服务的只读脚本，还能把同一套思路交给 Agent 自动执行。即使你是小学生，也应该能看懂其中大部分；如果你是开发者或运维人员，则可以直接把方法带回生产环境。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别急着装电脑管家：AI Agent 到底能替代桌面上的哪些软件？一次看懂清理、优化、改配置和维修的边界</title>
      <link>https://blog.margrop.net/post/ai-agent-replace-desktop-software/</link>
      <pubDate>Sun, 19 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-agent-replace-desktop-software/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI Agent 可以替代一大批“只会点按钮”的桌面工具，但它不是把所有软件图标变成一个聊天框。它真正擅长的是：先看懂问题，再组合系统自带工具，执行一连串步骤，最后把结果解释给你。&lt;/p&gt;&#xA;&lt;p&gt;在文件格式转换、垃圾扫描、性能检查、配置修改和软件故障排查这五类任务里，AI Agent 对前两类的替代程度最高，对性能优化和配置修改属于“半自动”，对硬件维修只能做诊断助手，不能代替人拆机。&lt;/p&gt;&#xA;&lt;p&gt;本文用一条简单原则贯穿全文：&lt;strong&gt;先读，再写；先备份，再改变；先验证，再宣布成功。&lt;/strong&gt; 文中的脚本不依赖第三方服务，默认只扫描和生成报告，必须加参数并再次确认才会清理。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker 拉不动别急着换 DNS：国内镜像加速源挑选、配置与避坑全指南</title>
      <link>https://blog.margrop.net/post/docker-mirror-source-selection-guide/</link>
      <pubDate>Wed, 15 Jul 2026 19:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/docker-mirror-source-selection-guide/</guid>
      <description>先说结论&#xA;国内网络环境下，Docker 拉取镜像失败，往往不是镜像不存在，也不一定是 DNS 的锅。更常见的原因是：公共仓库的访问链路拥堵、某个加速源临时故障，或者配置文件改对了却没有重启 Docker。&#xA;我的建议是：先打开 status.anye.xyz，把它当作“镜像源天气预报”，看多个源最近是否可用；再根据自己的系统改对配置文件；改完先校验 JSON，再重启 Docker，最后用一个小镜像做真实拉取验证。&#xA;一、问题背景：为什么昨天能拉，今天就超时？ 很多人第一次遇到这个问题，是在部署一个很普通的服务：nginx、redis、postgres，或者 NAS 上的媒体服务。命令可能只有一句：&#xA;docker pull nginx:alpine 但终端却出现了超时、context deadline exceeded、TLS handshake timeout、connection reset by peer，甚至长时间停在下载层。换一个镜像标签、重启路由器、修改本地 DNS，有时能暂时恢复，于是大家容易得出一个结论：Docker 太玄学。&#xA;其实 Docker 拉镜像像是“从仓库借书”：&#xA;Docker 客户端先找到仓库地址； 再通过网络连接仓库； 仓库返回镜像清单； 客户端逐层下载内容； 最后校验每一层是否完整。 这条链路中任何一段堵住，都会表现为“拉不下来”。所以，镜像加速源不是魔法按钮，而是给这条路增加一条更顺畅的入口。&#xA;二、问题表现：不要只看网页能不能打开 一个镜像源网页能打开，不等于 Docker 一定能用。选择加速源时，至少要看四件事：&#xA;1. 地址是否真的可达 浏览器打开首页，只能证明首页响应了。Docker 还要访问 Registry API、鉴权接口和镜像层下载接口。网页正常、拉取失败，是完全可能的。&#xA;2. 是否支持完整的 Docker Hub 加速链路 有些地址只是一个网页代理或搜索页面，并不是 Docker Registry mirror。配置到 registry-mirrors 后，如果 docker info 看不到它，或者 docker pull 仍然直接访问默认仓库，就要怀疑它并非真正的加速服务。&#xA;3. 是否持续稳定，而不是刚好今天在线 镜像源很像城市道路：今天通车，不代表明天不施工。稳定性比某一次测速的峰值更重要。家用 NAS 可以接受偶尔切换，CI 构建和生产环境则应该准备备用方案。</description>
    </item>
    <item>
      <title>受够远程控制被限速？我把 RustDesk 服务端搬回自己家：多合一部署、避坑与安全加固</title>
      <link>https://blog.margrop.net/post/rustdesk-all-in-one-server-guide/</link>
      <pubDate>Fri, 10 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/rustdesk-all-in-one-server-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RustDesk 是一款强调开源与自托管的远程桌面工具。客户端之间能直接连接时，画面和键鼠数据优先点对点传输；直连失败时，才由中继服务转发。把服务端部署在自己控制的机器上，最大的价值不是“完全不要服务器”，而是把设备登记、中继路径、密钥、账号和日志重新放回自己的控制范围。&lt;/p&gt;&#xA;&lt;p&gt;本文使用社区维护的 &lt;code&gt;lejianwen/rustdesk-server-s6&lt;/code&gt; 多合一镜像，把 RustDesk OSS 的 &lt;code&gt;hbbs&lt;/code&gt;、&lt;code&gt;hbbr&lt;/code&gt; 与社区 API、Web 管理功能放进一个容器。它适合家庭、实验室和小团队简化部署，但&lt;strong&gt;不是 RustDesk 官方发行的多合一服务端&lt;/strong&gt;。生产环境仍需自行评估社区镜像、固定版本或镜像摘要、备份数据，并测试升级和回滚。&lt;/p&gt;&#xA;&lt;p&gt;本文所有域名都使用 &lt;code&gt;example.com&lt;/code&gt;，没有展示真实 IP、私有域名、主机名、设备 ID、账号、密钥、Token、Cookie 或镜像仓库地址。公开截图来自项目官方页面或社区仓库公开素材。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>我把 Docker 命令行装进了“驾驶舱”：Portainer 2.39.4 从部署到避坑，一篇就够</title>
      <link>https://blog.margrop.net/post/portainer-ce-docker-deployment-guide/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/portainer-ce-docker-deployment-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portainer 不是 Docker 的替代品，它更像 Docker 主机的“驾驶舱”：底层发动机仍然是 Docker Engine，Portainer 只是把容器、镜像、网络、卷和 Compose Stack 整理成网页按钮、表格与状态卡片。&lt;/p&gt;&#xA;&lt;p&gt;我用 &lt;code&gt;portainer/portainer-ce:2.39.4&lt;/code&gt; 做了一次隔离部署，完成初始化、接入本机 Docker、查看仪表盘、筛选容器、创建演示 Stack，并记录了真实截图。部署本身只要一条 &lt;code&gt;docker run&lt;/code&gt;，真正需要认真理解的却是三件事：&lt;code&gt;/data&lt;/code&gt; 必须持久化、&lt;code&gt;/var/run/docker.sock&lt;/code&gt; 权限非常高、生产环境不要把管理页面毫无遮挡地暴露到公网。&lt;/p&gt;&#xA;&lt;p&gt;本文没有展示完整 IP 地址、真实主机名、内网域名、管理员密码、Token、Cookie、私有镜像地址或生产容器名称。截图里的实验资源使用专门的演示名称，容器地址已遮盖。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 新装机第一刀：不想被 Snap 绑架，就这样干净卸掉它</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-remove-snap-cleanly/</link>
      <pubDate>Mon, 06 Jul 2026 09:45:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-remove-snap-cleanly/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 新装系统后，如果你明确不想使用 Snap，可以卸载。正确姿势不是上来就 &lt;code&gt;rm -rf /snap&lt;/code&gt;，而是先确认系统里有哪些 Snap 应用，迁移重要数据，再按顺序 &lt;code&gt;snap remove --purge&lt;/code&gt;，最后 &lt;code&gt;apt purge snapd&lt;/code&gt; 并清理残留目录。&lt;/p&gt;&#xA;&lt;p&gt;本文给出完整背景、风险边界、人工执行方法、Agent 自动配置方法，以及 Windows 11 / Ubuntu 26.04 / macOS 26 三种一键脚本。脚本默认只预演，真正执行必须显式开启，不依赖第三方服务，也不包含任何真实内网地址、真实计算机名、私有域名或密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 关机要等 90 秒?Python asyncio 服务不肯接 SIGTERM 的排查与修复</title>
      <link>https://blog.margrop.net/post/ubuntu-shutdown-stuck/</link>
      <pubDate>Fri, 19 Jun 2026 10:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-shutdown-stuck/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这台升级到 24.04 的代理机,关机变成了一件折磨人的事:&lt;code&gt;systemctl reboot&lt;/code&gt; 之后,SSH 不掉、灯不灭,要干等 &lt;strong&gt;90 秒&lt;/strong&gt; 才进入真正的 shutdown 流程。journalctl 里很明确:&lt;code&gt;smart-proxy.service: State &#39;stop-sigterm&#39; timed out. Killing.&lt;/code&gt;——systemd 给了 SIGTERM,等 90 秒没人响应,只能 SIGKILL 强杀。&lt;/p&gt;&#xA;&lt;p&gt;根因不是 systemd 的错,也不是 Ubuntu 的错,是 &lt;strong&gt;Python 的 asyncio 服务在收到 SIGTERM 后,没有真正去结束它的子任务&lt;/strong&gt;——它正卡在某个 &lt;code&gt;socket.recv&lt;/code&gt; 上,Python 解释器根本不主动去看&amp;quot;有人叫我走&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;修复分两步,缺一不可:&lt;strong&gt;(1)&lt;/strong&gt; 给两个 Python unit 写 systemd drop-in,把 &lt;code&gt;TimeoutStopSec&lt;/code&gt; 从默认的 90s 缩到 20s;&lt;strong&gt;(2)&lt;/strong&gt; 在 Python 服务里主动遍历 &lt;code&gt;asyncio.all_tasks()&lt;/code&gt;,收到 SIGTERM 后把所有 in-flight 的 handler &lt;code&gt;cancel()&lt;/code&gt; 掉,再用 &lt;code&gt;asyncio.wait_for(self.stop(), timeout=10)&lt;/code&gt; 包一层做兜底。改完之后,同样一次 &lt;code&gt;reboot&lt;/code&gt;,从 90 秒掉到 1 秒。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>一句话让 Claude 把 Ubuntu 22.04 升级到 24.04:一次几乎不用盯屏幕的跨 LTS 实战</title>
      <link>https://blog.margrop.net/post/upgrade-ubuntu-via-agent/</link>
      <pubDate>Fri, 19 Jun 2026 10:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/upgrade-ubuntu-via-agent/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这台远端机器是家里那台 24 小时开机的代理机,系统一直停在 Ubuntu 22.04.4 LTS(jammy),内核 5.15。一句&amp;quot;帮我把 192.168.103.182 升级到 ubuntu24.04&amp;quot;,Claude 就替我拆开了旧柜子,在另一个房间装上了新柜子,过程中它自己开了 tmux 守夜、自己起了 fallback sshd 备胎、自己用 &lt;code&gt;do-release-upgrade -f DistUpgradeViewNonInteractive&lt;/code&gt; 跑完了整段流水线。25 分钟后主机回来,内核已经是 6.8.0-124,所有服务依旧在听。&lt;/p&gt;&#xA;&lt;p&gt;本文不是讲 do-release-upgrade 怎么用,那是 Ubuntu 官方文档的事;本文是讲&amp;quot;当 Agent 拿到 SSH 之后,它在做什么、为什么这么做、以及哪些坑你必须提前排&amp;quot;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>避坑指南：新装 Ubuntu 26.04 与 PVE 9.2 别急着用！Fail2Ban 无法启动与拦截失效的终极解决办法</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-pve-92-fail2ban-nftables-guide/</link>
      <pubDate>Tue, 26 May 2026 22:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-pve-92-fail2ban-nftables-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;随着 Ubuntu 26.04 LTS 与 Proxmox VE (PVE) 9.2 的相继发布，许多运维工程师与 Host 玩家在第一时间完成了系统升级或新装。然而，在进行服务器安全加固时，你会发现一个令人抓狂的现象：&lt;strong&gt;直接沿用旧版本（如 Ubuntu 20.04/22.04 或 PVE 7.x/8.x）的 Fail2Ban 配置，不仅服务可能直接报错无法启动，甚至即使显示 Running，外部恶意扫描也根本无法被成功拦截！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这并不是 Fail2Ban 软件本身出了 Bug，而是因为新版系统在底层日志架构、服务激活机制和防火墙后端上默默丢下了三颗“隐形炸弹”。本文将深度剖析这三个底层变化，并提供一套完美的、基于 &lt;code&gt;systemd-journald&lt;/code&gt; + &lt;code&gt;nftables&lt;/code&gt; 的 Fail2Ban 现代配置方案。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>新装 Ubuntu 26.04 LTS 别急着用！一步到位换上国内镜像源（阿里源与华为源 DEB822 最新格式配置教程）</title>
      <link>https://blog.margrop.net/post/ubuntu-26-apt-source-mirror-setup-guide/</link>
      <pubDate>Tue, 26 May 2026 21:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-26-apt-source-mirror-setup-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 LTS (Resolute Raccoon) 已经正式发布。如果你刚刚安装完系统，第一件事绝对不是急着安装各种软件，而是应当立即更换国内的高速 APT 镜像源（如阿里云镜像、华为云镜像）。从 Ubuntu 24.04 开始，官方已经全面启用了全新的 &lt;strong&gt;DEB822&lt;/strong&gt; 格式配置（存放于 &lt;code&gt;/etc/apt/sources.list.d/ubuntu.sources&lt;/code&gt;），传统的 &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; 文件默认已经不再生效。&lt;/p&gt;&#xA;&lt;p&gt;本文将手把手教你如何在新版 Ubuntu 26.04 中，优雅、安全地更换为阿里云与华为云镜像源，并针对可能遇到的依赖冲突、版本代号错误等“大坑”进行深度解析。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>彻底打通内网！在 Ubuntu 26.04 上完美部署 Tailscale 实现无感异地组网</title>
      <link>https://blog.margrop.net/post/seamless-homelab-networking-deploy-tailscale-ubuntu-2604/</link>
      <pubDate>Tue, 26 May 2026 14:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/seamless-homelab-networking-deploy-tailscale-ubuntu-2604/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;跨运营商、无公网 IP、多端互联，一直都是 Homelab 玩家与企业运维的核心痛点。本文将详细演示如何在最新发布的 Ubuntu 26.04 (Resolute Raccoon) 系统上，利用最新的 APT 秘钥环（Keyring）标准，优雅地安装和配置最新版的 Tailscale。我们不仅会给出干净利落的命令行安装过程，还会深入剖析 Tailscale 的网络拓扑、子网路由（Subnet Router）以及出口节点（Exit Node）的高级配置，帮助你彻底打通家里的群晖 NAS、PVE 虚拟机以及随身携带的手机与笔记本电脑。&lt;/p&gt;&#xA;&lt;p&gt;本文所有操作均在 Ubuntu 26.04 (Resolute Raccoon) 干净的环境中测试通过，所有内部 IP、密钥、令牌和主机名均已进行脱敏处理，以保障网络安全。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再用旧方法了！Ubuntu 26.04 LTS 一键搞定最新 Docker 社区版与极速镜像源配置</title>
      <link>https://blog.margrop.net/post/ubuntu-26-docker-install-guide/</link>
      <pubDate>Tue, 26 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-26-docker-install-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;写在前面&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;随着 Ubuntu 26.04 LTS（Resolute Raccoon）的正式发布，许多开发者和系统管理员都开始将他们的开发与生产环境迁移至这个最新的长期支持版本。然而，作为容器化技术的基石，Docker 在新系统上的安装与配置却给不少人带来了困扰。&lt;/p&gt;&#xA;&lt;p&gt;如果你还在使用传统的 &lt;code&gt;apt-get install docker.io&lt;/code&gt; 或者套用几年前的 Ubuntu 20.04/22.04 旧教程来配置 APT 源与镜像加速，那么你可能会面临软件包版本陈旧、源格式冲突（DEB822 新格式带来的困惑）、或者因网络阻断导致镜像无法拉取的窘境。&lt;/p&gt;&#xA;&lt;p&gt;本文将手把手带你深度剖析 Ubuntu 26.04 下 Docker 社区版（Docker CE）的正确安装姿势，并结合最新的 DEB822 源规范、非 Root 用户安全权限划分、以及在当前复杂网络环境下的极速代理与私有镜像源配置，为你奉上一份真正结构化、高可用的实战指南。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 装完别急着用：中文显示、中文输入法一次配好</title>
      <link>https://blog.margrop.net/post/ubuntu2604-desktop-chinese-language-input-method/</link>
      <pubDate>Fri, 22 May 2026 16:05:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu2604-desktop-chinese-language-input-method/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 Desktop 装好以后，中文环境不要只装一个输入法就结束。更稳的顺序是：先补齐中文语言支持和字体，再确认系统地区与格式，再添加输入源，最后决定使用 GNOME 默认集成更好的 IBus 智能拼音，还是功能更完整、可定制性更强的 Fcitx5。本文按这个顺序走一遍，尽量用图形界面完成；需要命令的地方，也只给可复现、可回滚的命令。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ubuntu 26.04 LTS 发布后，很多人第一时间装的是 Desktop 版本。系统能启动、浏览器能打开、终端能跑命令，看起来已经可以用了，但中文用户很快会遇到三个小坑：菜单里中英文混杂，网页和文档里的中文字体发虚或缺字，输入法候选词不顺手甚至根本切不出来。&lt;/p&gt;&#xA;&lt;p&gt;这三个问题不要分开乱修。Ubuntu 桌面上的“语言支持”和“输入法”不是两个完全独立的东西：语言包负责菜单翻译、区域格式、字体、拼写词典等基础资源；输入法框架负责把键盘输入转换成中文候选词；GNOME 设置面板负责把这些组件接到桌面会话里。只装 &lt;code&gt;ibus-libpinyin&lt;/code&gt; 或只装 &lt;code&gt;fcitx5&lt;/code&gt;，经常会得到一个“能输入，但体验不完整”的系统。&lt;/p&gt;&#xA;&lt;p&gt;本文写给刚装完 Ubuntu 26.04 Desktop 的普通桌面用户，也写给经常替家人、同事或新机器做初始化的人。目标不是折腾出最复杂的输入法方案，而是把一台新系统整理到“中文显示正常、中文输入稳定、英文环境仍然可用”的状态。&lt;/p&gt;&#xA;&lt;p&gt;文中所有截图都来自公开资料中的真实操作截图，已本地化保存到本站；其中一张截图在入库前裁掉了远程桌面顶部栏，避免带入任何无关地址信息。不同 Ubuntu 26.04 每日镜像、正式镜像、OEM 镜像或后续小版本的界面文案可能略有变化，但设置路径和处理逻辑基本一致。&lt;/p&gt;</description>
    </item>
    <item>
      <title>「标题党预警」换个国内镜像源，竟让我踩了这么大一个坑：Ubuntu 26.04 apt 依赖冲突全记录</title>
      <link>https://blog.margrop.net/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/post/ubuntu-26-apt-source-mirror-dependency-conflict-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;换了个国内镜像源，本以为 10 分钟搞定的事，结果折腾了两个小时。本文记录了从「镜像同步延迟导致版本撕裂」到「dpkg 强制降级」再到「apt 完全恢复正常」的全过程。核心教训：镜像源不是换上去就完事了，版本一致性才是关键。如果你的系统用了大半年突然换源，99% 会遇到依赖冲突。&lt;/p&gt;&#xA;&lt;p&gt;本文所有操作基于 Ubuntu 26.04 (Plucky)，所有 IP、主机名、路径均为脱敏示例，不包含任何内网地址或敏感信息。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 升级别乱按：Agent 一句话托管，人工路线也一次讲透</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-upgrade-agent-manual-guide/</link>
      <pubDate>Tue, 12 May 2026 07:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-upgrade-agent-manual-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 22.04 / 24.04 升级到 26.04，最重要的不是记住某一条命令，而是先搞清楚升级路径。22.04 LTS 不能直接跳到 26.04 LTS，必须先升级到 24.04 LTS，再从 24.04 LTS 进入 26.04 LTS。并且截至 2026-05-12，Ubuntu 26.04 LTS 虽然已经正式发布，但 24.04 LTS 到 26.04 LTS 的常规 LTS 升级提示通常要等 26.04.1 之后才会面向普通 LTS 用户开放；官方计划里的 26.04.1 Point Release 日期是 2026-07-09。生产机器建议等常规升级路径打开，测试机或评估机才考虑显式使用提前升级参数。&lt;/p&gt;&#xA;&lt;p&gt;如果你已经在使用 Code、Claude、OpenClaw、HermesAgent 这类 Agent，完全可以用一句话把升级任务交出去，让它先做检查、备份、升级和验证，节省大量重复操作时间。但这句话不能只写“帮我升级 Ubuntu”，而要把安全边界、升级路径、备份、业务验证和回滚要求说清楚。本文会给出可以直接复制的 Agent 提示词，也会给出完全人工执行的步骤。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文不会出现任何真实主机名、内网地址、账号、密钥、Token、业务系统名称或私人路径。所有命令都使用通用占位符，例如 &lt;code&gt;&amp;lt;HOST&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;SERVICE&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;BACKUP_DIR&amp;gt;&lt;/code&gt;。你可以把它们替换成自己的环境值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 虚拟机创建与 Ubuntu 26.04 无人值守安装实战笔记</title>
      <link>https://blog.margrop.net/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/post/pve-vm-create-and-ubuntu-26-unattended-install/</guid>
      <description>&lt;h1 id=&#34;proxmox-ve-虚拟机创建与-ubuntu-2604-无人值守安装实战笔记&#34;&gt;Proxmox VE 虚拟机创建与 Ubuntu 26.04 无人值守安装实战笔记&lt;/h1&gt;&#xA;&lt;p&gt;在日常的服务器运维工作中，虚拟机的创建与系统安装是最基础也是最频繁的操作之一。传统的通过 VNC 或 IPMI 进行交互式安装虽然直观，但效率低下，特别是在需要批量部署多台服务器时。本文将详细介绍如何利用 Proxmox VE（以下简称 PVE）平台，结合 Cloud-init 技术，实现 Ubuntu 26.04 Server 版本的无人值守自动化安装。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 中给 Ubuntu 虚拟机扩容磁盘——从 Web 界面到系统内部的完整操作</title>
      <link>https://blog.margrop.net/post/pve-ubuntu-vm-disk-resize/</link>
      <pubDate>Mon, 23 Mar 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-ubuntu-vm-disk-resize/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;写在前面&lt;/strong&gt;&#xA;在使用 Proxmox VE 管理虚拟化环境时，磁盘空间不足是迟早会遇到的问题。也许是一台跑 Docker 的 Ubuntu 镜像越拉越多，也许是数据库日志把根分区撑满了——总之，扩容是 PVE 运维的必修课。本文从 PVE Web 界面的磁盘 Resize 开始，到 Ubuntu 虚拟机内部 LVM 扩容的每一步命令，手把手带你完成整个流程。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-为什么需要扩容&#34;&gt;1 为什么需要扩容？&lt;/h2&gt;&#xA;&lt;p&gt;PVE 创建虚拟机时通常会分配一个固定大小的虚拟磁盘（比如 32GB）。随着业务发展，这个空间可能不够用了。好在 PVE 支持在线扩容虚拟磁盘，而 Ubuntu 默认安装使用的 LVM 也天然支持动态扩展逻辑卷，两者配合非常方便。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 24.04 LTS Noble Numbat Upgrade Guide</title>
      <link>https://blog.margrop.net/post/ubuntu-2404-lts-noble-numbat-upgrade/</link>
      <pubDate>Tue, 30 Apr 2024 19:55:19 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2404-lts-noble-numbat-upgrade/</guid>
      <description>&lt;p&gt;感谢ChatGPT从官网翻译，&lt;a href=&#34;https://help.ubuntu.com/community/NobleUpgrades&#34;&gt;原文入口&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;重要提示：&lt;strong&gt;&lt;a href=&#34;https://help.ubuntu.com/community/NobleUpgrades&#34;&gt;Ubuntu 22.04 LTS目前无法直接升级到 Ubuntu 24.04 LTS，请等到2024年8月再进行升级操作&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;ubuntu-2404-lts--noble-numbat-升级指南&#34;&gt;Ubuntu 24.04 LTS —— &amp;ldquo;Noble Numbat&amp;rdquo; 升级指南&lt;/h1&gt;&#xA;&lt;p&gt;Ubuntu 24.04 LTS 是2024年4月发布的Ubuntu操作系统的版本。该版本的开发代号为“Noble Numbat”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu / CentOS 磁盘根目录在线扩容 &amp; 修改分区 inode 数量</title>
      <link>https://blog.margrop.net/post/ubuntu-lv-extend-and-resize-inode/</link>
      <pubDate>Sat, 25 Mar 2023 13:42:44 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-lv-extend-and-resize-inode/</guid>
      <description>&lt;p&gt;Ubuntu 作为服务器系统使用的时候，系统盘的空间可能并不是很充裕，apt apt 着，根目录就满了。诚然，增加磁盘 / 分区并挂载是一个方案，但并不能解决所有问题（例如 apt）。同时，一些跑在云平台上的服务器并没有很好的离线操作磁盘的手段，这时候在线扩容就显得极为必要了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;数据无价！对磁盘进行任何操作前，请务必做好备份！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;0-简要操作步骤&#34;&gt;0. 简要操作步骤&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#系统分区扩容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;parted -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fdisk -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cfdisk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#扩容块（sda3）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pvresize /dev/sda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#扩容lv和vg（Ubuntu）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#扩容lv和vg（CentOS）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lvextend -l +100%FREE /dev/mapper/centos-root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resize2fs /dev/mapper/centos-root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;1-磁盘根目录在线扩容&#34;&gt;1. 磁盘根目录在线扩容&lt;/h1&gt;&#xA;&lt;p&gt;操作环境：Proxmox VE 虚拟化 / Ubuntu 22.04.5 LTS / GPT 分区表 / ext4 分区&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE下如何配置新安装的 ubuntu 20.04 server 虚拟机</title>
      <link>https://blog.margrop.net/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/post/pve-how-to-config-brand-new-ubuntu-20.04-vm/</guid>
      <description>&lt;h1 id=&#34;下载安装镜像iso&#34;&gt;下载安装镜像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;阿里云ubuntu-20.04-live-server下载&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;阿里云ubuntu-18.04-live-server下载&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu安装Frp服务端，非客户端</title>
      <link>https://blog.margrop.net/post/ubuntu-install-frp-server/</link>
      <pubDate>Sat, 23 Jan 2021 13:43:20 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-install-frp-server/</guid>
      <description>&lt;h1 id=&#34;下载并解压frp&#34;&gt;下载并解压Frp&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最新Frp下载地址：&lt;a href=&#34;https://github.com/fatedier/frp/releases/&#34;&gt;https://github.com/fatedier/frp/releases/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir frp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd frp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/fatedier/frp/releases/download/v0.35.0/frp_0.35.0_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xvzf frp_0.35.0_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd frp_0.35.0_linux_amd64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
