<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Goldbro&apos;s Blog</title><description>Think Different</description><link>https://goldbro.cn/</link><language>zh_CN</language><item><title>我有独特的 Archlinux 配置 0x01 - 使用 zram 优化内存</title><link>https://goldbro.cn/posts/use-zram-to-optimized-your-computer/</link><guid isPermaLink="true">https://goldbro.cn/posts/use-zram-to-optimized-your-computer/</guid><description>简单介绍了如何利用内存压缩技术来使得电脑拥有更多可用的内存空间。</description><pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;什么是 zram？&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.kernel.org/admin-guide/blockdev/zram.html&quot;&gt;zram&lt;/a&gt;，旧称为 compcache，是一个用于在内存中创建压缩的块设备的 Linux 内核模块，即带实时磁盘压缩的内存盘。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;通俗来讲，这是通过压缩在内存中闲置的占用，变成更小的内容储存在内存当中。不需要用的时候压缩，需要用来再解压。&lt;/p&gt;
&lt;p&gt;因为这个过程全程都是在内存中进行，不涉及到如 &lt;strong&gt;swap&lt;/strong&gt; 那样的硬盘 IO 操作，所以速度和延迟都会比 &lt;strong&gt;swap&lt;/strong&gt; 快很多，并且没有传统 &lt;strong&gt;swap&lt;/strong&gt; 那样的 IO 读写，对硬盘也更加友好（比如在树莓派那样使用 TF 卡作为储存介质的设备）。&lt;/p&gt;
&lt;p&gt;但是 zram 也有一定的缺点，整体操作都需要占用一部分的 CPU 来进行操作。&lt;/p&gt;
&lt;h1&gt;如何配置 zram？&lt;/h1&gt;
&lt;p&gt;我使用的是 ArchLinux 作为主操作系统，具体的情况如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.goldbro.top/archlinux_fastfetch_20250802.avif%22&quot; alt=&quot;archlinux_fastfetch_20250802&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们遵循 &lt;a href=&quot;https://wiki.archlinuxcn.org/wiki/Zram&quot;&gt;ArchLinux Wiki&lt;/a&gt; 来完成一步步操作。&lt;/p&gt;
&lt;p&gt;现代内核基本都已经合入了 zram 的驱动，所以本篇不再赘述如何启用 zram。&lt;/p&gt;
&lt;h2&gt;关闭 zswap&lt;/h2&gt;
&lt;p&gt;zswap 是用于与 swap 设备协同工作的压缩模块，启用 zswap 将会阻止 zram 的使用，所以第一步我们将会先关闭 zswap。&lt;/p&gt;
&lt;p&gt;此处的禁用我们会编辑内核参数部分，实现 &lt;strong&gt;永久禁用&lt;/strong&gt; zswap 功能。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/default/grub&lt;/code&gt; 文件，添加如下内容 GRUB_CMDLINE_LINUX_DEFAULT = &quot;zswap.enabled = 0&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用对应命令重新生成 grub 文件，ArchLinux 这里使用的是 &lt;code&gt;grub-mkconfig&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; sudo grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然后再次检查 zswap 是否有效关闭。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; cat /sys/module/zswap/parameters/enabled
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当输出内容为 &lt;strong&gt;N&lt;/strong&gt; 时则为关闭了 zswap。&lt;/p&gt;
&lt;h2&gt;使用 zram-generator 进行 zram 配置&lt;/h2&gt;
&lt;p&gt;根据 ArchWiki， 我们使用 &lt;a href=&quot;https://wiki.archlinuxcn.org/wiki/Zram#%E4%BD%BF%E7%94%A8_zram-generator&quot;&gt;zram-generator&lt;/a&gt; 进行配置，只需要安装对应的包即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S zram-generator -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建 &lt;code&gt;/etc/systemd/zram-generator&lt;/code&gt; 文件，并加入如下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[zram0]
zram-size = min(ram / 2) # 使用本机 RAM 的一半
compression-algorithm = zstd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后先执行 &lt;code&gt;daemon-reload&lt;/code&gt;，再启用对应的服务即可（&lt;code&gt;zramN&lt;/code&gt; 要与上面的实例编号相对应）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable --now systemd-zram-setup@zram0.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以使用 &lt;code&gt;zramctl&lt;/code&gt; 来对配置的 zram 进行查看。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zramctl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd          7.6G   4K   64B   20K         [SWAP]
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;据观测来说，zram-generator 配置的 zram 的优先度会自动高于已配置的 swap，系统会自动先使用 zram。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;补充资料&lt;/h1&gt;
&lt;p&gt;本文只是简单介绍了我的 zram 配置过程，下面贴出一些优秀博文，更加详细地解释关于 zram 的内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cnblogs.com/linhaostudy/p/18324329&quot;&gt;配置 ZRAM，实现 Linux 下的内存压缩，零成本低开销获得成倍内存扩增 - yooooooo&lt;/a&gt;：该文章更加详细的介绍了关于 zram 的压缩算法和内存使用的关系。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>搭建一个属于自己的 Tailscale 网络 0x01</title><link>https://goldbro.cn/posts/build-a-selfhosted-tailscale-network/</link><guid isPermaLink="true">https://goldbro.cn/posts/build-a-selfhosted-tailscale-network/</guid><description>简单描述了如何迈出第一步搭建一个 Tailscale 网络。</description><pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;我之前已经有了使用 &lt;a href=&quot;https://www.wireguard.com/&quot;&gt;WireGuard&lt;/a&gt; 和配套服务的经验，但是 WireGuard 要搭建一个中转服务器用于连接朋友的 NAS 实在是弄得头疼，所以在研究之后发现 Tailscale+Derp 的方案会更加简单，也会更加方便，于是便转换到以上的技术栈。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://tailscale.com/&quot;&gt;Tailscale&lt;/a&gt; 本身为开源工具，但是其控制服务器为闭源实现，其免费用户只能部署至多 32 个设备，并且服务器在国外不方便访问。&lt;/p&gt;
&lt;p&gt;基于以上这种情况，我们选择了 &lt;a href=&quot;https://headscale.net/stable/&quot;&gt;Headscale&lt;/a&gt; 作为控制服务器，并且搭建一个网页作为控制 UI。&lt;/p&gt;
&lt;h2&gt;要准备的工具&lt;/h2&gt;
&lt;p&gt;我准备了以下这些服务器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一台部署在阿里云日本东京节点的轻量云服务器作为控制节点（至多 20Mbps 上传带宽）&lt;/li&gt;
&lt;li&gt;一台部署在腾讯云国内上海节点的轻量云锐驰型云服务器作为 Derp 中转节点搭建（至多 200Mbps 带宽）&lt;/li&gt;
&lt;li&gt;尽量拥有一个自己的域名，如果没有纯IP也可以&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;搭建 Headscale 和 Headscale-UI&lt;/h2&gt;
&lt;p&gt;对于 Headscale 我没有过多要求，仅有简单的控制和设备认证需求，以及希望带有 ACL 控制功能。因此我们选择了 Headscale-UI 作为轻量的控制网页。&lt;/p&gt;
&lt;h3&gt;安装 Docker 以及 Docker Compose&lt;/h3&gt;
&lt;p&gt;如果你的服务器上还没有安装&lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;及其配套环境，可以遵照以下的步骤进行安装：&lt;/p&gt;
&lt;h4&gt;服务器在国内&lt;/h4&gt;
&lt;p&gt;在国内的服务器我们使用中科大镜像进行加速，在终端执行以下的命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sudo DOWNLOAD_URL=https://mirrors.ustc.edu.cn/docker-ce sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在安装完成后可以用以下的命令进行检查：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker --version
docker compose version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有正常的输出，则证明已经成功安装。&lt;/p&gt;
&lt;h4&gt;服务器在国外&lt;/h4&gt;
&lt;p&gt;在国外的服务器就直接使用官方脚本进行安装即可：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh &amp;amp;&amp;amp; chmod +x get-docker.sh &amp;amp;&amp;amp; ./get-docker.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查方式与国内安装方式相同。&lt;/p&gt;
&lt;h3&gt;安装 Caddy&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://caddyserver.com/&quot;&gt;Caddy&lt;/a&gt;作为 Web 服务器，配置更加简单，同时也能够自动申请 SSL 证书，于是便作为 Nginx 的替代。&lt;/p&gt;
&lt;p&gt;安装过程请遵循官方的&lt;a href=&quot;https://caddyserver.com/docs/install&quot;&gt;手册内容&lt;/a&gt;，本篇文章只展示 Debian/Ubuntu 的安装方式：&lt;/p&gt;
&lt;p&gt;请使用以下的命令安装 Caddy：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf &apos;https://dl.cloudsmith.io/public/caddy/stable/gpg.key&apos; | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf &apos;https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt&apos; | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装 Headscale&lt;/h3&gt;
&lt;p&gt;我们现在当前目录下新建&lt;code&gt;headscale&lt;/code&gt;文件夹，并且在目录下新建&lt;code&gt;config&lt;/code&gt;和&lt;code&gt;data&lt;/code&gt;两个文件夹，之后用于存放 Headscale 产生的数据。&lt;/p&gt;
&lt;p&gt;我们在当前目录新建一个&lt;code&gt;docker-compose.yml&lt;/code&gt;，并在其中键入以下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;version: &apos;3.5&apos;
services:
  headscale:
    image: headscale/headscale:stable
    container_name: headscale
    volumes: # 挂载本地文件夹，请根据对应用户修改
      - /root/headscale/config:/etc/headscale
      - /root/headscale/data:/var/lib/headscale
    ports:
      - 18080:8080 # Headscale 服务端口
    command: serve
    restart: unless-stopped
  headscale-ui:
    image: ghcr.io/gurucomputing/headscale-ui:latest
    restart: unless-stopped
    container_name: headscale-ui
    ports:
      # - 8443:8443
      - 18081:8080 # Headscale-UI 网页端口
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后我们需要获取模板配置文件，并且保存在对应的目录下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget -O ./headscale/config/config.yaml https://raw.githubusercontent.com/juanfont/headscale/refs/heads/main/config-example.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完成上面这一步后，我们要对一部分的内容进行自定义修改，具体每项对应内容请直接阅读示例配置文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server_url: https://hd.example.com:443 # 替换为自己的域名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完成这一步以后即可使用&lt;code&gt;docker compose up -d&lt;/code&gt;将对应容器上线。&lt;/p&gt;
&lt;h3&gt;配置反向代理&lt;/h3&gt;
&lt;p&gt;我们编辑&lt;code&gt;/etc/caddy/Caddyfile&lt;/code&gt;，并在其中添加以下内容，并且不要忘记将其中的&lt;code&gt;hd.example.com&lt;/code&gt;替换成自己的域名：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://hd.example.com {
	reverse_proxy /web* http://127.0.0.1:18081
	reverse_proxy * http://127.0.0.1:18080
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后我们通过输入&lt;code&gt;systemctl restart caddy&lt;/code&gt;重启 Caddy 服务，Caddy 会帮助我们自动申请证书。&lt;/p&gt;
&lt;p&gt;让我们访问&lt;code&gt;hd.example.com/web&lt;/code&gt;进入控制面板。&lt;/p&gt;
&lt;h3&gt;配置访问面板&lt;/h3&gt;
&lt;p&gt;Headscale-UI 与 Headscale 之间是通过 API Key 进行认证通讯，于是第一步我们先要为 UI 申请一个 API Key：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose exec headscale headscale apikeys create -e 720d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://img.goldbro.top/article_tailscale_builder_1.png&quot; alt=&quot;Headscale UI 管理页面&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在获得对应的 API Key 后，我们在&lt;code&gt;Headscale API Key&lt;/code&gt;这里输入，并且点击&lt;code&gt;Test Server Settings&lt;/code&gt;查看是否认证成功。如果可以，则会出现绿色对钩。&lt;/p&gt;
&lt;p&gt;不要忘记检查上方的&lt;code&gt;Headscale URL&lt;/code&gt;是否为自己的域名，如果不是请记得替换并保存。&lt;/p&gt;
</content:encoded></item></channel></rss>