<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Linux on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/linux/</link>
    <description>Recent content in Linux on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Wed, 29 Jul 2026 08:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Restart Is Not Magic: Why Turning a Computer Off and On Seems to Fix 99% of Its Problems</title>
      <link>https://blog.margrop.net/en/post/why-restart-fixes-99-percent-%E9%87%8D%E5%90%AF/</link>
      <pubDate>Wed, 29 Jul 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/why-restart-fixes-99-percent-%E9%87%8D%E5%90%AF/</guid>
      <description>The short version&#xA;A restart is not magic, and it does not repair every fault. It is closer to emptying a room that has been used for months without cleaning: borrowed items are collected, people take fresh queue numbers, temporary notes disappear, and doors and appliances are initialized again. The system returns to a cleaner and more predictable starting point.&#xA;When “restart fixed it” is true, the fault is often in volatile state, not in permanently damaged hardware, a configuration that is always wrong, or an application whose root cause has disappeared.</description>
    </item>
    <item>
      <title>Stop Running rsync Blindly: Preview Differences Before a Safe Incremental Sync</title>
      <link>https://blog.margrop.net/en/post/rsync-diff-incremental-sync/</link>
      <pubDate>Sat, 11 Jul 2026 13:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/rsync-diff-incremental-sync/</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;The best rsync habit is not memorizing more switches. It is separating every risky job into two stages: &lt;strong&gt;generate a dry-run plan first, review it, and only then perform the real incremental sync&lt;/strong&gt;. Deletion should be a separate, explicit permission rather than a hidden default.&lt;/p&gt;&#xA;&lt;p&gt;The common &lt;code&gt;rsync -n -avz --delete --out-format=&amp;quot;%n&amp;quot;&lt;/code&gt; pattern can list paths that may change, but &lt;code&gt;%n&lt;/code&gt; only preserves the name. A safer machine-readable plan uses &lt;code&gt;--itemize-changes&lt;/code&gt; together with &lt;code&gt;%i&lt;/code&gt;, so each line identifies an addition, update, deletion, or metadata change.&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>Cross-Border VPS Feels Glacial? One Kernel Sysctl Speeds International Links 20×</title>
      <link>https://blog.margrop.net/en/post/bbr-fix-china-us-vps-slow-network/</link>
      <pubDate>Thu, 02 Jul 2026 20:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/bbr-fix-china-us-vps-slow-network/</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;You&amp;rsquo;re accessing your overseas VPS from within China. SSH feels snappy. &lt;code&gt;curl&lt;/code&gt; on a small JSON endpoint returns instantly. But downloading a 2 MB HTML file takes over a minute. Convinced it&amp;rsquo;s &amp;ldquo;peak-hour international link congestion&amp;rdquo;? Probably not — you&amp;rsquo;re being sabotaged by Linux&amp;rsquo;s default CUBIC congestion control. CUBIC treats every packet loss as &amp;ldquo;the road ahead is jammed&amp;rdquo; and immediately backs off. But international links have baseline 5–15% loss from physical-layer imperfections, not congestion. So your TCP flow gets permanently stuck in slow-mo. Switch to Google&amp;rsquo;s &lt;strong&gt;BBR&lt;/strong&gt; algorithm and the exact same physical path, same moment, same loss rate delivers &lt;strong&gt;15–24× more throughput&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This post walks through a real mesh-VPN investigation: pulling a 2.3 MB page from a US VPS across a Chinese home connection went from &lt;strong&gt;30 KB/s to 500–1000 KB/s&lt;/strong&gt; after four shell commands. It ships three one-shot scripts (Windows 11 / Ubuntu 26.04 / macOS 26), covering both manual execution and AI-agent-driven deployment. All internal IPs, hostnames, and public IPs have been redacted.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Windows Finally Gets Native Linux Commands: Microsoft Coreutils Replaces WSL, Cygwin, and Git Bash</title>
      <link>https://blog.margrop.net/en/post/windows-native-linux-commands-microsoft-coreutils/</link>
      <pubDate>Sat, 27 Jun 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/windows-native-linux-commands-microsoft-coreutils/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Let me ask you something:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Have you ever tried to &lt;code&gt;grep&lt;/code&gt; a log file in Windows Terminal, only to be told that &lt;code&gt;grep&lt;/code&gt; is not a recognized command? Tried to use &lt;code&gt;find&lt;/code&gt; to locate files, only to discover that Windows&amp;rsquo; &lt;code&gt;find&lt;/code&gt; is a completely different beast from Linux&amp;rsquo;s &lt;code&gt;find&lt;/code&gt;? Written a cross-platform script that works perfectly on Linux, then falls apart the moment it touches Windows?&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not your fault. It&amp;rsquo;s the &amp;ldquo;Berlin Wall&amp;rdquo; between Windows and Linux command lines.&lt;/p&gt;&#xA;&lt;p&gt;The good news? Microsoft just tore that wall down. In late 2025, Microsoft open-sourced &lt;strong&gt;coreutils&lt;/strong&gt; on GitHub — a native Windows port of the essential Linux command set. No WSL. No Cygwin. No Git Bash. Just one &lt;code&gt;winget install&lt;/code&gt; command, and your Windows terminal suddenly speaks fluent &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, and &lt;code&gt;awk&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Your Background Process Keeps Dying After Shell Exit? Stop Blaming nohup — Understand setsid and Unix Process Lifecycle</title>
      <link>https://blog.margrop.net/en/post/setsid-daemon-process-survival/</link>
      <pubDate>Mon, 01 Jun 2026 07:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/setsid-daemon-process-survival/</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;You launched a background service. You used &lt;code&gt;nohup&lt;/code&gt;. You added &lt;code&gt;&amp;amp;&lt;/code&gt;. You redirected output. Everything looked fine. But when you closed the terminal, disconnected SSH, or—more insidiously—when an automation tool finished executing its script, the process silently vanished. You checked &lt;code&gt;ps&lt;/code&gt;—nothing. You checked the port—nothing. No error in the logs. If this has happened to you, you&amp;rsquo;re not alone.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The root cause isn&amp;rsquo;t SIGHUP—at least, not entirely. The real issue is process group and session membership.&lt;/strong&gt; &lt;code&gt;nohup&lt;/code&gt; merely tells the process to ignore the SIGHUP signal, but the process still belongs to the same session and process group as the parent shell. When the shell exits and sends SIGHUP to the entire process group, &lt;code&gt;nohup&lt;/code&gt; helps—but only if the signal delivery chain stops there. If the controlling terminal is destroyed, if stdin/stdout pipes break, or if the parent&amp;rsquo;s process group is collectively reaped, the process can still die. The proper fix is &lt;code&gt;setsid&lt;/code&gt;: it creates a brand-new session, detaches from the controlling terminal, and places the process in its own process group—so SIGHUP from the parent shell never reaches it in the first place.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This post is based on a real debugging session of the CLIProxyAPI service. The service was started with &lt;code&gt;nohup&lt;/code&gt; but kept disappearing every time an automation script finished. The management panel kept showing &amp;ldquo;connection failed.&amp;rdquo; The culprit turned out to be a subtle Unix process lifecycle issue. This class of problem is common in cloud dev machines, CI runners, SSH jump hosts, and containerized workflows, but it&amp;rsquo;s often misdiagnosed because the underlying process model is poorly understood.&lt;/p&gt;&#xA;&lt;p&gt;All private details have been removed. No real internal addresses, tokens, or paths appear in this article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>You Can SSH Out, but Not Back In: A Fail2Ban False Positive That Broke Reverse Access</title>
      <link>https://blog.margrop.net/en/post/reverse-ssh-fail2ban-vpn-gateway-investigation/</link>
      <pubDate>Sat, 30 May 2026 15:45:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/reverse-ssh-fail2ban-vpn-gateway-investigation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The symptom looked simple: I could SSH from the local machine into a remote internal host, but the reverse SSH path failed when the remote host tried to connect back. &lt;code&gt;sshd&lt;/code&gt; was listening, the route table looked fine, and the failure still happened.&lt;/p&gt;&#xA;&lt;p&gt;The real root cause was not a broken SSH daemon. &lt;code&gt;Fail2Ban&lt;/code&gt; had banned the &lt;strong&gt;VPN gateway address&lt;/strong&gt; that represented the return path. From the local machine&amp;rsquo;s point of view, the incoming SSH session did not appear to come directly from the remote host. It appeared to come from the gateway, so the ban cut off the whole reverse path.&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>Stop Dragging Files Around: BaiduPCS-Go CLI and Agent Workflows for Baidu Netdisk</title>
      <link>https://blog.margrop.net/en/post/baidupcs-go-cli-agent-guide/</link>
      <pubDate>Sat, 16 May 2026 10:06:01 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/baidupcs-go-cli-agent-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;If you only download one or two files from Baidu Netdisk once in a while, the web UI and official desktop client are fine. Once you start doing batch downloads, remote server pulls, archive uploads, directory audits, or Agent-assisted workflows with Codex, Claude, OpenClaw, HermesAgent, or similar tools, the graphical UI becomes friction. &lt;code&gt;BaiduPCS-Go&lt;/code&gt; is useful not because it is a magic speed booster, but because it turns Baidu Netdisk into something scripts, terminals, and Agents can operate. This article walks through installation checks, BDUSS/STOKEN login, everyday commands, configuration, safety rules, and practical Agent integration.&lt;/p&gt;&#xA;&lt;p&gt;All accounts, cookies, paths, tasks, and settings in this article are sanitized examples. They do not contain real BDUSS, STOKEN, cookies, private directories, internal addresses, or business information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Clicking Remote Desktop: Let AI Agents SSH into Windows Instead</title>
      <link>https://blog.margrop.net/en/post/agent-ssh-windows-openssh/</link>
      <pubDate>Wed, 13 May 2026 08:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/agent-ssh-windows-openssh/</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;An AI agent does not need Remote Desktop, VNC, or a proprietary remote-control tool to operate a Windows machine. For many workstations, lab machines, development PCs, and internal servers, the cleanest path is to enable the built-in &lt;strong&gt;OpenSSH Server&lt;/strong&gt; on Windows and connect from Linux or macOS with a normal command: &lt;code&gt;ssh &amp;lt;user&amp;gt;@&amp;lt;windows-host&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There are only three things to get right. First, install and enable OpenSSH Server on Windows 10 or Windows 11. Second, generate an SSH key on Linux or macOS and place the public key on Windows. Third, if the target account belongs to the Windows Administrators group, put the public key in &lt;code&gt;C:\ProgramData\ssh\administrators_authorized_keys&lt;/code&gt; and lock down the ACL with &lt;code&gt;icacls&lt;/code&gt;. After that, an AI agent can run PowerShell, copy scripts, collect logs, install tools, and perform repeatable maintenance through the same SSH workflow it already uses for Linux.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All hostnames, addresses, usernames, screenshots, and commands in this article use generic placeholders. No real internal addresses, usernames, machine names, tokens, keys, or private paths are included. Replace placeholders such as &lt;code&gt;&amp;lt;user&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;windows-host&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;windows-ip&amp;gt;&lt;/code&gt; with values from your own environment.&lt;/p&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>[Transfer] Synology DiskStation Administration CLI Guide: Reading Notes and Command Cheatsheet</title>
      <link>https://blog.margrop.net/en/post/zhuan-synology-diskstation-administration-cli-guide/</link>
      <pubDate>Thu, 30 Apr 2026 18:14:05 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/zhuan-synology-diskstation-administration-cli-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Synology&amp;rsquo;s official CLI administration guide is not a beginner manual for the DSM web interface. It is a compact reference for scripting, automation, and system integration. The useful parts cover local users, local groups, shared folders, network configuration, service management, Windows workgroup or ADS domain settings, and DSM error numbers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This post is an English reading note and command cheatsheet based on Synology&amp;rsquo;s official PDF, &lt;em&gt;CLI Administrator Guide for Synology NAS&lt;/em&gt;. Because the original PDF is a copyrighted Synology document, this post does not reproduce or translate the full document verbatim. Instead, it reorganizes the material into a bilingual blog-friendly guide for quick reading and daily operations. For exact wording, parameter definitions, version-specific behavior, and legal notices, use the official PDF linked at the end.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use LXC containers to build V2Ray and Caddy services on Alpine Linux to provide IPv6-based SSL WebSocket proxy</title>
      <link>https://blog.margrop.net/en/post/setting-up-v2ray-and-caddy-on-alpine-linux-lxc-container/</link>
      <pubDate>Wed, 03 Jul 2024 15:32:41 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/setting-up-v2ray-and-caddy-on-alpine-linux-lxc-container/</guid>
      <description>Preface In the modern Internet environment, proxy services are becoming more and more important, especially when it is necessary to break through geographical restrictions and improve privacy protection. This article will introduce in detail how to use V2Ray and Caddy to build an SSL WebSocket proxy service provided through IPv6 and domain name on the LXC container of the Alpine Linux 3.19 operating system.&#xA;Environment preparation Make sure your LXC container is running and has an IPv6 address assigned.</description>
    </item>
    <item>
      <title>An Effective Method to Quickly Set Up Fail2ban in Proxmox VE to Prevent Multiple Failed Login Attempts</title>
      <link>https://blog.margrop.net/en/post/how-to-quickly-configure-fail2ban-in-proxmox-ve/</link>
      <pubDate>Tue, 18 Jun 2024 15:33:01 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/how-to-quickly-configure-fail2ban-in-proxmox-ve/</guid>
      <description>&lt;p&gt;This briefly introduces how to set up Fail2ban in Proxmox VE to temporarily block IP addresses with multiple failed login attempts.&lt;/p&gt;&#xA;&lt;h3 id=&#34;install-fail2ban&#34;&gt;Install Fail2ban&lt;/h3&gt;&#xA;&lt;p&gt;Execute the following commands as root on the Proxmox VE host:&lt;/p&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-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install fail2ban&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configure-basic-settings&#34;&gt;Configure Basic Settings&lt;/h3&gt;&#xA;&lt;p&gt;It is recommended to use the &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt; file, whose settings take precedence over &lt;code&gt;jail.conf&lt;/code&gt;. Use the following command to copy the template:&lt;/p&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-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Auto-Add N2N Route Table on CentOS 7 Boot</title>
      <link>https://blog.margrop.net/en/post/centos7-auto-add-route-table-for-n2n-edge/</link>
      <pubDate>Sun, 06 Feb 2022 19:50:38 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/centos7-auto-add-route-table-for-n2n-edge/</guid>
      <description>&lt;h1 id=&#34;1-edit-the-systemctl-auto-start-file&#34;&gt;1. Edit the &lt;code&gt;systemctl&lt;/code&gt; Auto-Start File&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;vim /etc/systemd/system/n2route.service&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>How to Edit GRUB2 Boot Parameters During Linux Startup</title>
      <link>https://blog.margrop.net/en/post/edit-grub2-during-the-boot-process/</link>
      <pubDate>Wed, 08 Dec 2021 09:29:58 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/edit-grub2-during-the-boot-process/</guid>
      <description>&lt;h1 id=&#34;to-edit-grub2-during-the-boot-process-try-the-following&#34;&gt;To edit Grub2 during the boot process try the following:&lt;/h1&gt;&#xA;&lt;h1 id=&#34;to-edit-grub2-during-boot-you-can-try-the-following-steps&#34;&gt;To edit GRUB2 during boot, you can try the following steps&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Immediately after the BIOS splash screen during boot, press and hold the &lt;code&gt;SHIFT&lt;/code&gt; button. This will display you &lt;code&gt;grub&lt;/code&gt; containing a list of kernels and recovery options&#xA;After the BIOS splash screen appears during the boot process, immediately press and hold the &lt;code&gt;SHIFT&lt;/code&gt; key.&#xA;This will display the &lt;code&gt;grub&lt;/code&gt; containing a list of kernels and recovery options.&#xA;&lt;img src=&#34;https://blog.margrop.net/post-images/ZlSUO.png&#34;&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Vim opens the file with Chinese garbled characters</title>
      <link>https://blog.margrop.net/en/post/vim-open-files-messy-code-solution/</link>
      <pubDate>Sat, 15 May 2021 16:27:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/vim-open-files-messy-code-solution/</guid>
      <description>Solution Edit the ~/.vimrc file (create it manually if it doesn’t exist) and add the following lines set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf-8 set encoding=utf-8 </description>
    </item>
    <item>
      <title>Java Spring Boot JNI Native Library Loader</title>
      <link>https://blog.margrop.net/en/post/java-spring-boot-jni-java-native-interface-library-loader/</link>
      <pubDate>Sat, 27 Mar 2021 16:37:31 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/java-spring-boot-jni-java-native-interface-library-loader/</guid>
      <description>&lt;p&gt;Because Java needs to stay cross-platform, I wrote a cross-platform JNI native library loader.&lt;/p&gt;&#xA;&lt;h1 id=&#34;simple-implementation&#34;&gt;Simple Implementation&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Determine whether the current system is &lt;code&gt;Windows&lt;/code&gt;, &lt;code&gt;Linux&lt;/code&gt;, or &lt;code&gt;MacOS&lt;/code&gt; from the &lt;code&gt;os.name&lt;/code&gt; environment property.&lt;/li&gt;&#xA;&lt;li&gt;If it is &lt;code&gt;Linux&lt;/code&gt;, further determine whether it is &lt;code&gt;CentOS&lt;/code&gt; or &lt;code&gt;Debian&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Read the library files inside the jar package.&lt;/li&gt;&#xA;&lt;li&gt;Filter the matching platform library files by file suffix: &lt;code&gt;dll&lt;/code&gt;, &lt;code&gt;so&lt;/code&gt;, &lt;code&gt;jnilib&lt;/code&gt;, and &lt;code&gt;dylib&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Copy the current platform&amp;rsquo;s library file to the system temporary directory &lt;code&gt;java.io.tmpdir&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Load the library using &lt;code&gt;System.load&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>How to Install Node-RED with NPM</title>
      <link>https://blog.margrop.net/en/post/how-to-install-nodered-with-npm/</link>
      <pubDate>Mon, 01 Feb 2021 09:57:07 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/how-to-install-nodered-with-npm/</guid>
      <description>&lt;h1 id=&#34;what-is-node-red&#34;&gt;What Is &lt;code&gt;Node-RED&lt;/code&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;Node-RED&lt;/code&gt; is a low-code/no-code programming tool for connecting &lt;code&gt;hardware devices&lt;/code&gt;, &lt;code&gt;APIs&lt;/code&gt;, and &lt;code&gt;online services&lt;/code&gt; in a novel and interesting way. It is especially suitable for &lt;code&gt;smart home&lt;/code&gt; scenarios.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Node-RED&lt;/code&gt; provides a browser-based flow editor, making it easy to connect various nodes in the panel. You can then deploy the flow to runtime with a single click.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Frp Client on CentOS with SSH Access</title>
      <link>https://blog.margrop.net/en/post/centos-install-frp-client-for-ssh/</link>
      <pubDate>Sat, 23 Jan 2021 17:22:58 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/centos-install-frp-client-for-ssh/</guid>
      <description>&lt;h1 id=&#34;download-and-extract-frp&#34;&gt;Download and Extract Frp&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Latest Frp download address: &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;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;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
