<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Tony&#39;s Blog</title>
  
  
  <link href="https://blog.iamsjy.com/atom.xml" rel="self"/>
  
  <link href="https://blog.iamsjy.com/"/>
  <updated>2026-03-21T14:43:01.000Z</updated>
  <id>https://blog.iamsjy.com/</id>
  
  <author>
    <name>Tony</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>基于 Roothide Bootstrap 环境在 iOS 原生运行 Java 21 与 MC 服务端</title>
    <link href="https://blog.iamsjy.com/2026/03/21/run-java-21-and-mc-server-natively-on-ios-based-on-roothide-bootstrap/"/>
    <id>https://blog.iamsjy.com/2026/03/21/run-java-21-and-mc-server-natively-on-ios-based-on-roothide-bootstrap/</id>
    <published>2026-03-21T07:18:00.000Z</published>
    <updated>2026-03-21T14:43:01.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>一直以来，由于受 iOS 系统封闭性限制，在 iPhone、iPad 上运行原生 Java 环境、部署 Minecraft Java 版服务端，近乎是不可能的。如今，得益于 TrollStore 和 Roothide Bootstrap 环境，我们完全可以绕开这些限制，把手里闲置的 iOS 设备真正变成一台便携的服务器。</p><p><strong>本文方案仅支持 iOS 14.0-17.0 系统的旧款设备，17.0.1 及以上版本无适配可能性。</strong></p><h2 id="底层逻辑"><a href="#底层逻辑" class="headerlink" title="底层逻辑"></a>底层逻辑</h2><p>本教程依赖 <a href="https://github.com/opa334/TrollStore">TrollStore（巨魔商店）</a>和 <a href="https://github.com/roothide/Bootstrap">Roothide Bootstrap</a>。TrollStore 利用 CoreTrust 漏洞打破限制实现提权，Bootstrap 则在此之上构建了隐蔽的无根（Rootless）运行环境。</p><p>但在该环境下，受 iOS 严格的代码签名机制（AMFI）限制，直接执行未经签名的二进制文件会被系统强制终止（终端会提示 <code>Killed</code>）。</p><p>因此，我们需要将其构建为标准的 deb 软件包，然后使用 ldid 进行签名，再通过 Roothide Patcher 进行架构转换，最后使用 Sileo 完成安装。</p><h2 id="部署环境及所需工具"><a href="#部署环境及所需工具" class="headerlink" title="部署环境及所需工具"></a>部署环境及所需工具</h2><ul><li>一台已安装 <a href="https://github.com/opa334/TrollStore">TrollStore（巨魔商店）</a>和 <a href="https://github.com/roothide/Bootstrap">Roothide Bootstrap</a> 的 iPhone、iPad 或 iPod touch（受支持的系统版本为 iOS/iPadOS 14.0-16.6.1 以及 16.7 RC 和 17.0）</li><li>确保 Bootstrap 处于已引导状态（每次重启后需重新引导）</li><li>在 Sileo 中安装 NewTerm、Filza、RootHide Patcher、wget、unzip、tar、xz-utils</li><li>良好的访问国际互联网的环境</li></ul><blockquote class="blockquote-note blockquote-note__important"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></div>注意</div><div class="blockquote-note__content"><p>正常安装 TrollStore 不会影响或清除个人数据，但涉及底层折腾，强烈建议在动手前先做好备份，以防万一。</p></div></blockquote><p>我所用的设备为搭载 A10 处理器的  iPad 7，系统版本为 iPadOS 16.3。</p><p><img src="https://img-cdn.boochi.cn/i/2026/03/21/69be4e997b3e8.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/03/21/69be4e997b3e8.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="49106BB4-C4BA-47F6-9CFE-85C86ED9A942"></p><h2 id="打包-deb-软件包"><a href="#打包-deb-软件包" class="headerlink" title="打包 deb 软件包"></a>打包 deb 软件包</h2><blockquote class="blockquote-note blockquote-note__tip"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></div>提示</div><div class="blockquote-note__content"><p>打包好的 deb 包可在此处下载：<a href="https://iamsjy.lanzoul.com/iTXmS3l6ln5a">jre21_rootless-build.deb</a></p></div></blockquote><blockquote class="blockquote-note blockquote-note__important"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></div>注意</div><div class="blockquote-note__content"><p>本步骤中的命令均在 NewTerm 中执行！</p></div></blockquote><p>首先，下载编译好的 Java 21 二进制包并解压（Java 压缩包来自 <a href="https://github.com/AngelAuraMC/Amethyst-iOS">Amethyst-iOS</a> 项目）：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">mkdir</span> <span class="token parameter variable">-p</span> /var/mobile/Documents/jre21<span class="token builtin class-name">cd</span> /var/mobile/Documents<span class="token function">wget</span> https://crystall1ne.dev/cdn/amethyst-ios/jre21-ios-aarch64.zip<span class="token function">unzip</span> jre21-ios-aarch64.zip<span class="token function">tar</span> <span class="token parameter variable">-xvJf</span> jre21-ios-arm64-20250915-release.tar.xz <span class="token parameter variable">-C</span> jre21/<span class="token function">rm</span> jre21-ios-aarch64.zip jre21-ios-arm64-20250915-release.tar.xz<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>建立软件包框架：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">mkdir</span> <span class="token parameter variable">-p</span> my_java/DEBIAN<span class="token function">mkdir</span> <span class="token parameter variable">-p</span> my_java/var/jb/usr/lib/jvm/java-21<span class="token function">mkdir</span> <span class="token parameter variable">-p</span> my_java/var/jb/usr/bin<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>写入标准的 Control 文件：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> <span class="token operator">&lt;&lt;</span> <span class="token string">'EOF'<span class="token bash punctuation"> <span class="token operator">></span> my_java/DEBIAN/control</span>Package: com.java.jre21Name: Java 21 RuntimeVersion: 21.0.8Architecture: iphoneos-arm64Maintainer: RootHide HackerAuthor: OpenJDKSection: UtilitiesDescription: A natively packaged Java for RootHide.EOF</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>复制 Java 核心文件：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cp</span> <span class="token parameter variable">-r</span> /var/mobile/Documents/jre21/* my_java/var/jb/usr/lib/jvm/java-21/<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>由于 iOS 限制，必须关闭 Java 的指针压缩才能运行。为避免每次执行都要加上参数，可以对 Java 命令进行封装：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> <span class="token operator">&lt;&lt;</span> <span class="token string">'EOF'<span class="token bash punctuation"> <span class="token operator">></span> my_java/var/jb/usr/bin/java</span>#!/bin/shexec /var/jb/usr/lib/jvm/java-21/bin/java -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8 -XX:-UseCompressedOops -XX:-UseCompressedClassPointers "$@"EOF</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><p>创建软链接：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ln</span> <span class="token parameter variable">-s</span> /var/jb/usr/lib/jvm/java-21/bin/<span class="token punctuation">&#123;</span>jfr,jrunscript,jwebserver,keytool,rmiregistry<span class="token punctuation">&#125;</span> my_java/var/jb/usr/bin/<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>生成权限文件：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> <span class="token operator">&lt;&lt;</span> <span class="token string">'EOF'<span class="token bash punctuation"> <span class="token operator">></span> /var/mobile/Documents/ent.xml</span>&lt;?xml version="1.0" encoding="UTF-8"?>&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">&lt;plist version="1.0">&lt;dict>    &lt;key>com.apple.private.security.no-sandbox&lt;/key>    &lt;true/>    &lt;key>com.apple.private.security.no-container&lt;/key>    &lt;true/>    &lt;key>platform-application&lt;/key>    &lt;true/>    &lt;key>com.apple.developer.dynamic-codesigning&lt;/key>    &lt;true/>&lt;/dict>&lt;/plist>EOF</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>对可执行文件和动态库进行批量签名：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">find</span> /var/mobile/Documents/my_java/var/jb/usr/lib/jvm/java-21 <span class="token parameter variable">-type</span> f <span class="token punctuation">\</span><span class="token punctuation">(</span> <span class="token parameter variable">-path</span> <span class="token string">"*/bin/*"</span> <span class="token parameter variable">-o</span> <span class="token parameter variable">-name</span> <span class="token string">"*.dylib"</span> <span class="token punctuation">\</span><span class="token punctuation">)</span> <span class="token parameter variable">-exec</span> ldid -S/var/mobile/Documents/ent.xml <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span> <span class="token punctuation">\</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>最后，赋予可执行权限并完成打包：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">chmod</span> <span class="token parameter variable">-R</span> <span class="token number">755</span> my_java/var/jb/usr/lib/jvm/java-21/bin<span class="token function">chmod</span> <span class="token parameter variable">-R</span> <span class="token number">755</span> my_java/DEBIANdpkg-deb <span class="token parameter variable">-Zzstd</span> <span class="token parameter variable">-b</span> my_java jre21_rootless.deb<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="通过-Roothide-Patcher-转换"><a href="#通过-Roothide-Patcher-转换" class="headerlink" title="通过 Roothide Patcher 转换"></a>通过 Roothide Patcher 转换</h2><p>打开 Filza，进入<code>[jbroot]</code> 中的 <code>/var/mobile/Documents</code> 目录，找到我们刚刚打包好的 deb 文件。长按并选择 <strong>使用 App 打开</strong>，在更多 App 中选择 Patcher。点击 <strong>Convert .deb</strong>，并等待转换完成。</p><p><img src="https://img-cdn.boochi.cn/i/2026/03/21/69be4ebd61ca3.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/03/21/69be4ebd61ca3.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_3387"></p><p>等待转换完成后，点击 <strong>-&gt;Sileo</strong>，会自动打开安装界面。</p><h2 id="使用-Sileo-安装"><a href="#使用-Sileo-安装" class="headerlink" title="使用 Sileo 安装"></a>使用 Sileo 安装</h2><p>点击 <strong>获取</strong>，然后点击右下角的 <strong>队列</strong> ，点击 <strong>确认</strong> 进行安装即可。</p><p><img src="https://img-cdn.boochi.cn/i/2026/03/21/69be4ecdeaece.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/03/21/69be4ecdeaece.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_3388"></p><h2 id="运行-Minecraft-Java-服务端"><a href="#运行-Minecraft-Java-服务端" class="headerlink" title="运行 Minecraft Java 服务端"></a>运行 Minecraft Java 服务端</h2><p>实测原版 MC 服务端可以正常运行，并且可以成功进入游戏。在跑图等高负载场景下，服务器表现稳定，未出现明显的掉帧或卡顿。（注：本次仅针对原版纯净服，模组服的实际表现暂未测试。）</p><p>由于 Java 官方不支持 iOS 系统，程序会误以为自己运行在  macOS  上。这不影响正常使用，直接忽略即可。</p><p>成果展示：</p><p><img src="https://img-cdn.boochi.cn/i/2026/03/21/69be4ee321f23.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/03/21/69be4ee321f23.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_3378"></p><p><img src="https://img-cdn.boochi.cn/i/2026/03/21/69be4f0689972.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/03/21/69be4f0689972.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20260307_221804"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;一直以来，由于受 iOS 系统封闭性限制，在 iPhone、iPad 上运行原生 Java 环境、部署 Minecraft Java 版服务</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="MC" scheme="https://blog.iamsjy.com/tags/MC/"/>
    
    <category term="巨魔" scheme="https://blog.iamsjy.com/tags/%E5%B7%A8%E9%AD%94/"/>
    
    <category term="TrollStore" scheme="https://blog.iamsjy.com/tags/TrollStore/"/>
    
    <category term="iOS" scheme="https://blog.iamsjy.com/tags/iOS/"/>
    
    <category term="Java" scheme="https://blog.iamsjy.com/tags/Java/"/>
    
  </entry>
  
  <entry>
    <title>Umami 跨版本升级踩坑记录：从 v1.38 到 v3.0</title>
    <link href="https://blog.iamsjy.com/2026/01/25/upgrade-umami-from-v1-to-v3/"/>
    <id>https://blog.iamsjy.com/2026/01/25/upgrade-umami-from-v1-to-v3/</id>
    <published>2026-01-25T06:56:00.000Z</published>
    <updated>2026-01-31T06:20:00.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Umami 是一款轻量、简洁、隐私友好的开源统计系统，我从 2022 年开始就一直在使用。之前其实尝试过升级，但一直没搞定，索性就一直停在 1.38 没再动。拖久了版本差得越来越多，最近才重新把这件事捡起来，一路更新到 3.0。于是就把这次升级过程中遇到的坑和解决办法顺手记下来，方便以后回看。</p><h2 id="备份数据库"><a href="#备份数据库" class="headerlink" title="备份数据库"></a>备份数据库</h2><p>每次更新前都建议备份数据库文件，就算操作失误还能回滚。</p><p>安装 PostgreSQL</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> postgresql-common ca-certificates<span class="token function">sudo</span> /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh<span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> postgresql-client<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>备份数据库文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">pg_dump postgresql://postgres.<span class="token punctuation">[</span>项目ID<span class="token punctuation">]</span>:<span class="token punctuation">[</span>数据库密码<span class="token punctuation">]</span>@<span class="token punctuation">[</span>区域 ID<span class="token punctuation">]</span>.pooler.supabase.com:5432/postgres <span class="token operator">></span> umami_dump_<span class="token variable"><span class="token variable">$(</span><span class="token function">date</span> +<span class="token string">"%Y-%m-%d--%H-%M-%S"</span><span class="token variable">)</span></span>.sql<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如果需要恢复备份，比较稳妥的方案是在 Supabase 新建一个项目再导入备份。</p><p>导入备份命令如下：</p><pre class="line-numbers language-none"><code class="language-none">psql postgresql:&#x2F;&#x2F;postgres.[项目ID]:[数据库密码]@[区域 ID].pooler.supabase.com:5432&#x2F;postgres -f umami_dump_xxxx.sql<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><blockquote class="blockquote-note blockquote-note__warning"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></div>警告</div><div class="blockquote-note__content"><p>清空数据库是一个非常危险的操作，请确保有完整的备份再操作！</p></div></blockquote><p>也可以清空数据库再导入</p><pre class="line-numbers language-sql" data-language="sql"><code class="language-sql"><span class="token keyword">do</span> $$ <span class="token keyword">declare</span>    r record<span class="token punctuation">;</span><span class="token keyword">begin</span>    <span class="token keyword">for</span> r <span class="token operator">in</span> <span class="token punctuation">(</span><span class="token keyword">select</span> tablename <span class="token keyword">from</span> pg_tables <span class="token keyword">where</span> schemaname <span class="token operator">=</span> <span class="token string">'public'</span><span class="token punctuation">)</span> <span class="token keyword">loop</span>        <span class="token keyword">execute</span> <span class="token string">'drop table if exists '</span> <span class="token operator">||</span> quote_ident<span class="token punctuation">(</span>r<span class="token punctuation">.</span>tablename<span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token string">' cascade'</span><span class="token punctuation">;</span>    <span class="token keyword">end</span> <span class="token keyword">loop</span><span class="token punctuation">;</span><span class="token keyword">end</span> $$<span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="升级到-v1-40"><a href="#升级到-v1-40" class="headerlink" title="升级到 v1.40"></a>升级到 v1.40</h2><p>由于官方给的 v2 的迁移脚本是根据 v1 最终版本写的，所以先要升级到 v1.40。</p><h3 id="修改-Vercel-项目配置"><a href="#修改-Vercel-项目配置" class="headerlink" title="修改 Vercel 项目配置"></a>修改 Vercel 项目配置</h3><p>由于 Node.js 18.x 已不受支持，部署前需要先将 Node.js 版本更改为 20.x。</p><p>另外，需要检查一下 <code>DATABASE_URL</code> 这个环境变量。它应该是一个标准的 PostgreSQL 连接字符串，格式如下： </p><pre class="line-numbers language-none"><code class="language-none">postgresql:&#x2F;&#x2F;postgres:[数据库密码]@[数据库服务器]:5432&#x2F;postgres<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><blockquote class="blockquote-note blockquote-note__important"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></div>注意</div><div class="blockquote-note__content"><p>密码中如果包含特殊字符（如 <code>@</code>, <code>:</code>, <code>$</code>），需要进行 URL 编码。例如，<code>mypass@123</code> 应该写成 <code>mypass%40123</code>。否则会出现数据库连接错误。</p></div></blockquote><p>常见特殊字符的 URL 编码如下表：</p><table><thead><tr><th align="center">字符</th><th align="center">编码</th><th align="center">字符</th><th align="center">编码</th></tr></thead><tbody><tr><td align="center">,</td><td align="center">%2C</td><td align="center">空格</td><td align="center">%20</td></tr><tr><td align="center">@</td><td align="center">%40</td><td align="center">[</td><td align="center">%5B</td></tr><tr><td align="center">:</td><td align="center">%3A</td><td align="center">]</td><td align="center">%5D</td></tr><tr><td align="center">/</td><td align="center">%2F</td><td align="center">“</td><td align="center">%22</td></tr><tr><td align="center">?</td><td align="center">%3F</td><td align="center">#</td><td align="center">%23</td></tr><tr><td align="center">&amp;</td><td align="center">%26</td><td align="center">$</td><td align="center">%24</td></tr><tr><td align="center">=</td><td align="center">%3D</td><td align="center">+</td><td align="center">%2B</td></tr><tr><td align="center">!</td><td align="center">%21</td><td align="center">‘</td><td align="center">%27</td></tr></tbody></table><h3 id="更新程序代码"><a href="#更新程序代码" class="headerlink" title="更新程序代码"></a>更新程序代码</h3><p>克隆 Fork 的仓库到本地</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> clone https://github.com/<span class="token punctuation">[</span>你的用户名<span class="token punctuation">]</span>/umami.git<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>添加上游</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> remote <span class="token function">add</span> upstream https://github.com/umami-software/umami.git<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>拉取上游提交</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> fetch upstream <span class="token parameter variable">--tags</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>从上游创建 v1 分支</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> checkout v1<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>推送到 GitHub 仓库</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> push <span class="token parameter variable">-u</span> origin v1<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Vercel 构建的时候有个报错：</p><pre class="line-numbers language-none"><code class="language-none">Attempted import error: &#39;si&#39; is not exported from &#39;date-fns&#x2F;locale&#39; (imported as &#39;si&#39;).<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>不过不影响正常使用，就不管了。</p><h3 id="数据库升级"><a href="#数据库升级" class="headerlink" title="数据库升级"></a>数据库升级</h3><p>由于 Umami v1.40 版本中，数据库的表结构有所变化。如果不更新数据库，尝试登录时，后端会报错。</p><p>查询资料后发现，在 Supabase 的 SQL Editor 中运行一段更新脚本即可。</p><pre class="line-numbers language-sql" data-language="sql"><code class="language-sql"><span class="token comment">-- AlterTable</span><span class="token keyword">ALTER</span> <span class="token keyword">TABLE</span> <span class="token string">"account"</span> <span class="token keyword">ADD</span> <span class="token keyword">COLUMN</span> <span class="token string">"account_uuid"</span> UUID <span class="token boolean">NULL</span><span class="token punctuation">;</span><span class="token comment">-- Backfill UUID</span><span class="token keyword">UPDATE</span> <span class="token string">"account"</span> <span class="token keyword">SET</span> account_uuid <span class="token operator">=</span> gen_random_uuid<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- AlterTable</span><span class="token keyword">ALTER</span> <span class="token keyword">TABLE</span> <span class="token string">"account"</span> <span class="token keyword">ALTER</span> <span class="token keyword">COLUMN</span> <span class="token string">"account_uuid"</span> <span class="token keyword">SET</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span><span class="token punctuation">;</span><span class="token comment">-- CreateIndex</span><span class="token keyword">CREATE</span> <span class="token keyword">UNIQUE</span> <span class="token keyword">INDEX</span> <span class="token string">"account_account_uuid_key"</span> <span class="token keyword">ON</span> <span class="token string">"account"</span><span class="token punctuation">(</span><span class="token string">"account_uuid"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- AlterTable</span><span class="token keyword">ALTER</span> <span class="token keyword">TABLE</span> <span class="token string">"event"</span> <span class="token keyword">ADD</span> <span class="token keyword">COLUMN</span> <span class="token string">"event_uuid"</span> UUID <span class="token boolean">NULL</span><span class="token punctuation">;</span><span class="token comment">-- Backfill UUID</span><span class="token keyword">UPDATE</span> <span class="token string">"event"</span> <span class="token keyword">SET</span> event_uuid <span class="token operator">=</span> gen_random_uuid<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- AlterTable</span><span class="token keyword">ALTER</span> <span class="token keyword">TABLE</span> <span class="token string">"event"</span> <span class="token keyword">ALTER</span> <span class="token keyword">COLUMN</span> <span class="token string">"event_uuid"</span> <span class="token keyword">SET</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span><span class="token punctuation">;</span><span class="token comment">-- CreateIndex</span><span class="token keyword">CREATE</span> <span class="token keyword">UNIQUE</span> <span class="token keyword">INDEX</span> <span class="token string">"event_event_uuid_key"</span> <span class="token keyword">ON</span> <span class="token string">"event"</span><span class="token punctuation">(</span><span class="token string">"event_uuid"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- CreateIndex</span><span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> <span class="token string">"account_account_uuid_idx"</span> <span class="token keyword">ON</span> <span class="token string">"account"</span><span class="token punctuation">(</span><span class="token string">"account_uuid"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- CreateIndex</span><span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> <span class="token string">"session_session_uuid_idx"</span> <span class="token keyword">ON</span> <span class="token string">"session"</span><span class="token punctuation">(</span><span class="token string">"session_uuid"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- CreateIndex</span><span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> <span class="token string">"website_website_uuid_idx"</span> <span class="token keyword">ON</span> <span class="token string">"website"</span><span class="token punctuation">(</span><span class="token string">"website_uuid"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">-- CreateIndex</span><span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span> <span class="token string">"event_event_uuid_idx"</span> <span class="token keyword">ON</span> <span class="token string">"event"</span><span class="token punctuation">(</span><span class="token string">"event_uuid"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="验证更新"><a href="#验证更新" class="headerlink" title="验证更新"></a>验证更新</h3><p>登录后台，可以看到版本号为 v1.40.0。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c214776fa.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c214776fa.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260123201619966"></p><p>在 Vercel 上，除默认分支外的构建都会部署到预览环境。没问题的话，就可以手动推送到生产环境了。</p><h2 id="升级到-v2"><a href="#升级到-v2" class="headerlink" title="升级到 v2"></a>升级到 v2</h2><p>更新前先备份数据库文件。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">pg_dump postgresql://postgres.<span class="token punctuation">[</span>项目ID<span class="token punctuation">]</span>:<span class="token punctuation">[</span>数据库密码<span class="token punctuation">]</span>@<span class="token punctuation">[</span>区域 ID<span class="token punctuation">]</span>.pooler.supabase.com:5432/postgres <span class="token operator">></span> umami_dump_<span class="token variable"><span class="token variable">$(</span><span class="token function">date</span> +<span class="token string">"%Y-%m-%d--%H-%M-%S"</span><span class="token variable">)</span></span>.sql<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="修改环境变量"><a href="#修改环境变量" class="headerlink" title="修改环境变量"></a>修改环境变量</h3><p>如果设置过自定义 JS 名称（ <code>TRACKER_SCRIPT_NAME</code> )，更新 v2.2.0 之后，需要在这个脚本名后加个 <code>.js</code> 才能正常运行。</p><p>我之前设置的是这样的：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token assign-left variable">TRACKER_SCRIPT_NAME</span><span class="token operator">=</span>script<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>需要到 Vercel 里把这个环境变量改为：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token assign-left variable">TRACKER_SCRIPT_NAME</span><span class="token operator">=</span>script.js<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="更新程序代码-1"><a href="#更新程序代码-1" class="headerlink" title="更新程序代码"></a>更新程序代码</h3><p>从上游创建 v2 分支：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> fetch upstream <span class="token parameter variable">--tags</span><span class="token function">git</span> checkout v2<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>推送到 GitHub 仓库</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> push <span class="token parameter variable">-u</span> origin v2<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="数据库升级-1"><a href="#数据库升级-1" class="headerlink" title="数据库升级"></a>数据库升级</h3><p>更新前先备份数据库文件。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">pg_dump postgresql://postgres.<span class="token punctuation">[</span>项目ID<span class="token punctuation">]</span>:<span class="token punctuation">[</span>数据库密码<span class="token punctuation">]</span>@<span class="token punctuation">[</span>区域 ID<span class="token punctuation">]</span>.pooler.supabase.com:5432/postgres <span class="token operator">></span> umami_dump_<span class="token variable"><span class="token variable">$(</span><span class="token function">date</span> +<span class="token string">"%Y-%m-%d--%H-%M-%S"</span><span class="token variable">)</span></span>.sql<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>使用官方的升级脚本，进行数据库升级。</p><p>首先克隆项目并安装。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> clone https://github.com/umami-software/migrate-v1-v2.git<span class="token builtin class-name">cd</span> migrate-v1-v2<span class="token function">yarn</span> <span class="token function">install</span><span class="token function">yarn</span> build<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><p>创建一个 .env 文件，内容如下：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token assign-left variable">DATABASE_URL</span><span class="token operator">=</span>postgresql://postgres.<span class="token punctuation">[</span>项目ID<span class="token punctuation">]</span>:<span class="token punctuation">[</span>数据库密码<span class="token punctuation">]</span>@<span class="token punctuation">[</span>区域 ID<span class="token punctuation">]</span>.pooler.supabase.com:5432/postgres<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后运行迁移脚本。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">yarn</span> start<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>ps：不要使用 GitHub Codespaces 运行迁移脚本，会触发 Segmentation fault。使用 WSL 可以正常运行。</p><p>可以看到前面的操作都是正常的。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c21db4a25.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c21db4a25.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260124140059716"></p><p>最后一步报错了：</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c22880b19.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c22880b19.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260124132608925"></p><p>解决方法很简单：</p><p>打开 Supabase 的 Table Editor，在 <code>v1_event</code> 表中插入一列，名称为 <code>event_name</code>，类型为 text。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c22fad425.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c22fad425.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260125112457790"></p><p>然后重新执行迁移命令即可。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c2377067a.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c2377067a.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260124132043394"></p><p>更新成功，可以看到版本是 v2.20.2。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c2414608c.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c2414608c.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260124132920989"></p><h3 id="更新后的一些问题"><a href="#更新后的一些问题" class="headerlink" title="更新后的一些问题"></a>更新后的一些问题</h3><h4 id="问题-1：FATAL-MaxClientsInSessionMode-max-clients-reached"><a href="#问题-1：FATAL-MaxClientsInSessionMode-max-clients-reached" class="headerlink" title="问题 1：FATAL: MaxClientsInSessionMode: max clients reached"></a>问题 1：FATAL: MaxClientsInSessionMode: max clients reached</h4><p>隔一段时间就会遇到图表加载缓慢，甚至登录报错的情况，“实时”页面打开就报错。其实这个问题在 v1 的时候就有了，我当时没找到原因就一直没管。</p><p>查看 Vercel 日志后发现有一大堆如下报错：</p><pre class="line-numbers language-none"><code class="language-none">FATAL: MaxClientsInSessionMode: max clients reached - in Session mode max clients are limited to pool_size<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>问 AI 后得知，Supabase 会话池（Session pooler）不适合多并发，容易导致连接终端超限。对于 Vercel 这种 Serverless 服务，应采用事务池（Transaction pooler）。</p><h5 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h5><p>在 Vercel 项目中，</p><p>修改 <code>DATABASE_URL</code> 环境变量：</p><pre class="line-numbers language-none"><code class="language-none">DATABASE_URL&#x3D;postgresql:&#x2F;&#x2F;[数据库用户名].[项目ID]:[数据库密码]@aws-0-[区域ID].pooler.supabase.com:6543&#x2F;[db-name]?pgbouncer&#x3D;true&amp;connection_limit&#x3D;1<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>添加 <code>DIRECT_DATABASE_URL</code> 环境变量：</p><pre class="line-numbers language-none"><code class="language-none">DIRECT_DATABASE_URL&#x3D;postgresql:&#x2F;&#x2F;postgres.[项目ID]:[数据库密码]@aws-0-[区域ID].pooler.supabase.com:5432&#x2F;postgres<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后重新部署。</p><h4 id="问题-2：数据库检查成功后，部署长时间卡住"><a href="#问题-2：数据库检查成功后，部署长时间卡住" class="headerlink" title="问题 2：数据库检查成功后，部署长时间卡住"></a>问题 2：数据库检查成功后，部署长时间卡住</h4><p>重新部署时，遇到了一个新问题。数据库检查成功后，构建就卡住不动了。甚至构建了 45 分钟都没完成，达到 Vercel 超时时长了。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c2483e147.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c2483e147.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260124183312581"></p><h5 id="解决方案-1"><a href="#解决方案-1" class="headerlink" title="解决方案"></a>解决方案</h5><p>修改 <code>package.json</code>，把 <code>scripts.build</code> 中的 <code>check-db</code> 去掉，改为：</p><pre class="line-numbers language-none"><code class="language-none">&quot;build&quot;: &quot;npm-run-all check-env build-db build-tracker build-geo build-app&quot;,<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后重新部署即可。</p><h2 id="升级到-v3"><a href="#升级到-v3" class="headerlink" title="升级到 v3"></a>升级到 v3</h2><h3 id="更新程序代码-2"><a href="#更新程序代码-2" class="headerlink" title="更新程序代码"></a>更新程序代码</h3><p>Fork 同步上游最新代码。</p><p>修改 <code>package.json</code>，把 <code>scripts.build</code> 中的 <code>check-db</code> 去掉，改为：</p><pre class="line-numbers language-none"><code class="language-none">&quot;build&quot;: &quot;npm-run-all check-env build-db build-tracker build-geo build-app&quot;,<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>在项目目录下添加环境变量 <code>.env</code> 如下：</p><pre class="line-numbers language-none"><code class="language-none">DATABASE_URL&#x3D;postgresql:&#x2F;&#x2F;postgres.[项目ID]:[数据库密码]@aws-0-[区域ID].pooler.supabase.com:5432&#x2F;postgres<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>这里必须要使用会话池地址（即 5432 端口的地址），使用事务池连接会遇到上面长时间卡住的问题。</p><h3 id="数据库迁移"><a href="#数据库迁移" class="headerlink" title="数据库迁移"></a>数据库迁移</h3><p>在本地进行数据库迁移：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">pnpm</span> prisma migrate deploy<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后在 Vercel 重新部署即可。</p><h3 id="验证更新-1"><a href="#验证更新-1" class="headerlink" title="验证更新"></a>验证更新</h3><p>进入后台，打开分享链接，可以看到游戏机版本号为 v3.0.3。</p><p><img src="https://img-cdn.boochi.cn/i/2026/01/25/6975c24fe2340.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2026/01/25/6975c24fe2340.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20260125100932921"></p><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ol><li><p><a href="https://zhul.in/2024/02/01/backup-umami-database-and-send-it-by-tg-bot/">备份 umami 数据库，并使用 TG Bot 保存 dump 文件 - 竹林里有冰的博客</a></p></li><li><p><a href="https://wiki.postgresql.org/wiki/Apt">Apt - PostgreSQL wiki</a></p></li><li><p><a href="https://www.libmbr.com/archives/482/">更新 Umami 至 v2 - MBRjun-Blog</a></p></li><li><p><a href="https://github.com/umami-software/umami/issues/1583#issuecomment-1289988255">Cannot log in after updated to the 1.39.1 · Issue #1583 · umami-software/umami</a></p></li><li><p><a href="https://github.com/umami-software/umami/issues/2475#issuecomment-1902864570">✗ Failed to run sql file /db/postgresql/data-migration-v2.sql · Issue #2475 · umami-software/umami</a></p></li><li><p><a href="https://github.com/umami-software/umami/issues/3914#issuecomment-3678790012">Vercel build and local build do not work with 3.0.3 · Issue #3914 · umami-software/umami</a></p></li><li><p><a href="https://umami.is/docs/guides/running-on-supabase">Running on Supabase – Docs - Umami</a></p></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;Umami 是一款轻量、简洁、隐私友好的开源统计系统，我从 2022 年开始就一直在使用。之前其实尝试过升级，但一直没搞定，索性就一直停在 </summary>
      
    
    
    
    <category term="技术" scheme="https://blog.iamsjy.com/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="umami" scheme="https://blog.iamsjy.com/tags/umami/"/>
    
  </entry>
  
  <entry>
    <title>使用 Caddy 反代 APT 仓库</title>
    <link href="https://blog.iamsjy.com/2026/01/06/use-caddy-to-reverse-proxy-an-apt-repo/"/>
    <id>https://blog.iamsjy.com/2026/01/06/use-caddy-to-reverse-proxy-an-apt-repo/</id>
    <published>2026-01-06T11:26:00.000Z</published>
    <updated>2026-01-06T11:37:31.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>部分 APT 仓库位于国外，国内缺乏可用镜像，导致访问速度缓慢。</p><p>我曾使用 Cloudflare Workers 进行反向代理，但由于 Cloudflare 在国内的访问速度不稳定，因此转而选用一台线路较好的境外 VPS 作为反向代理节点以实现加速。</p><p>Caddy 以其配置简便而闻名，本文将介绍 Caddy 反代 APT 仓库的三种类型。</p><h2 id="类型一：透明反代"><a href="#类型一：透明反代" class="headerlink" title="类型一：透明反代"></a>类型一：透明反代</h2><p>对 <code>https://pkgs.tailscale.com</code> 进行反代，反代后的域名为 <code>tailscale-pkgs.example.com</code>。</p><p>访问时不对路径做任何修改。</p><pre class="line-numbers language-none"><code class="language-none">tailscale-pkgs.example.com &#123;    encode zstd gzip    reverse_proxy https:&#x2F;&#x2F;pkgs.tailscale.com &#123;        header_up Host &#123;upstream_hostport&#125;    &#125;&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="类型二：显式重定向"><a href="#类型二：显式重定向" class="headerlink" title="类型二：显式重定向"></a>类型二：显式重定向</h2><p>对 <code>https://sky1-linux.github.io</code> 进行反代，反代后的域名为 <code>sky1-linux.example.com</code>。</p><p>访问时自动重定向到 <code>/apt/</code> 子目录。</p><pre class="line-numbers language-none"><code class="language-none">sky1-linux.example.com &#123;    encode zstd gzip    redir &#x2F; &#x2F;apt&#x2F;    reverse_proxy https:&#x2F;&#x2F;sky1-linux.github.io &#123;        header_up Host &#123;upstream_hostport&#125;    &#125;&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="类型三：内部重写"><a href="#类型三：内部重写" class="headerlink" title="类型三：内部重写"></a>类型三：内部重写</h2><p>对 <code>https://ryanfortner.github.io</code> 进行反代，反代后的域名为 <code>box64-debs.example.com</code>。</p><p>为了保持 URL 简洁美观，访问时隐藏 <code>/box64-debs/</code> 子目录，实际显示的还是 <code>/box64-debs/</code> 子目录下的资源。</p><pre class="line-numbers language-none"><code class="language-none">box64-debs.example.com &#123;    encode zstd gzip    handle &#x2F;box64-debs&#x2F;* &#123;        reverse_proxy https:&#x2F;&#x2F;ryanfortner.github.io &#123;            header_up Host &#123;upstream_hostport&#125;        &#125;    &#125;    handle &#123;        rewrite * &#x2F;box64-debs&#123;uri&#125;        reverse_proxy https:&#x2F;&#x2F;ryanfortner.github.io &#123;            header_up Host &#123;upstream_hostport&#125;                        header_down Location &#x2F;box64-debs&#x2F; &#x2F;        &#125;    &#125;&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;部分 APT 仓库位于国外，国内缺乏可用镜像，导致访问速度缓慢。&lt;/p&gt;
&lt;p&gt;我曾使用 Cloudflare Workers 进行反向代理</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Caddy" scheme="https://blog.iamsjy.com/tags/Caddy/"/>
    
    <category term="反代" scheme="https://blog.iamsjy.com/tags/%E5%8F%8D%E4%BB%A3/"/>
    
  </entry>
  
  <entry>
    <title>解决 Magisk Alpha 下 Termux 无法 sudo/tsu 提权的问题</title>
    <link href="https://blog.iamsjy.com/2025/10/30/solve-termux-sudo-tsu-privilege-escalation-issue-under-magisk-alpha/"/>
    <id>https://blog.iamsjy.com/2025/10/30/solve-termux-sudo-tsu-privilege-escalation-issue-under-magisk-alpha/</id>
    <published>2025-10-30T12:07:00.000Z</published>
    <updated>2025-10-30T13:03:21.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>起因是群友在 Termux 中安装 chroot 容器时，tsu 命令无法正常提权，导致安装失败。</p><p>经确认，已经赋予了 Termux root 权限，su 命令是能够成功提权的，但 sudo 和 tsu 不行。</p><p><img src="https://img-cdn.boochi.cn/i/2025/10/30/690352cf2735f.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/10/30/690352cf2735f.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_2025-10-29-19-04-09-047_com.termux"> </p><h2 id="大致思路"><a href="#大致思路" class="headerlink" title="大致思路"></a>大致思路</h2><p>我的 K30 Pro 也是通过 Magisk Alpha 获取 root 权限的，同样遇到了这个问题。正当我一筹莫展的时候，酷安上的 <a href="https://www.coolapk.com/feed/67158591?s=M2M2MzdkYzMxY2ZiNzgyZzY5MDFmOGY3ega1571">这个帖子</a> 给了我思路。tsu 有一个配置文件，从指定路径搜索 su 的二进制文件，来进行提权。</p><p>如果指定路径里找不到 su 的二进制文件，就会提权失败。既然手机已经 root 了，说明 su 这个文件肯定是存在的，只是在其他路径中，只要把这配置文件中把这个路径加上就行了。</p><h2 id="如何解决"><a href="#如何解决" class="headerlink" title="如何解决"></a>如何解决</h2><ol><li><p>首先需要安装 tsu</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">pkg <span class="token function">install</span> tsu<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>等待安装完成。</p></li><li><p>切换到 root 环境中，查找 su 二进制文件的位置</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">su</span><span class="token function">which</span> <span class="token function">su</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>可以得知 su 的二进制文件其实是在 <code>/debug_ramdisk/su</code> 下。</p></li></ol><p><img src="https://img-cdn.boochi.cn/i/2025/10/30/690352e205c8e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/10/30/690352e205c8e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1761734880316"></p><ol start="3"><li><p>编辑 tsu 文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">nano</span> <span class="token variable">$PREFIX</span>/bin/tsu<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>找到 <code>SU_BINARY_SEARCH=(&quot;/system/xbin/su&quot; &quot;/system/bin/su&quot;)</code>这一行，并将其改为 <code>SU_BINARY_SEARCH=(&quot;/system/xbin/su&quot; &quot;/system/bin/su&quot; &quot;/debug_ramdisk/su)&quot;</code>。</p></li></ol><p><img src="https://img-cdn.boochi.cn/i/2025/10/30/6903530db344e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/10/30/6903530db344e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_2025-10-30-19-55-47-472_com.termux"></p><p>如果你不习惯命令行编辑器，也可以用 MT 管理器修改。</p><p>修改前：</p><p><img src="https://img-cdn.boochi.cn/i/2025/10/30/69035316809c1.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/10/30/69035316809c1.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1761825152360"></p><p>修改后：</p><p><img src="https://img-cdn.boochi.cn/i/2025/10/30/6903531d6c165.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/10/30/6903531d6c165.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1761825152356"></p><p>可以看到，现在 sudo 能正常提权了。</p><p><img src="https://img-cdn.boochi.cn/i/2025/10/30/690353273092a.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/10/30/690353273092a.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1761734880319"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;起因&quot;&gt;&lt;a href=&quot;#起因&quot; class=&quot;headerlink&quot; title=&quot;起因&quot;&gt;&lt;/a&gt;起因&lt;/h2&gt;&lt;p&gt;起因是群友在 Termux 中安装 chroot 容器时，tsu 命令无法正常提权，导致安装失败。&lt;/p&gt;
&lt;p&gt;经确认，已经赋予了 Ter</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Termux" scheme="https://blog.iamsjy.com/tags/Termux/"/>
    
    <category term="root" scheme="https://blog.iamsjy.com/tags/root/"/>
    
    <category term="Magisk" scheme="https://blog.iamsjy.com/tags/Magisk/"/>
    
  </entry>
  
  <entry>
    <title>2025 西安之行</title>
    <link href="https://blog.iamsjy.com/2025/07/06/2025-xian-trip/"/>
    <id>https://blog.iamsjy.com/2025/07/06/2025-xian-trip/</id>
    <published>2025-07-06T06:45:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<blockquote class="blockquote-note blockquote-note__info"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></div>注意</div><div class="blockquote-note__content"><p>本文有大量图片，可能会消耗较多流量，请知悉。</p></div></blockquote><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>一直想去西安看看。想触摸古老的城墙，感受千年时光的沉淀。想亲眼瞧瞧，那段光辉灿烂的历史，究竟留下的什么痕迹。十三朝古都西安，我来了。</p><h2 id="行程"><a href="#行程" class="headerlink" title="行程"></a>行程</h2><p>出行时间：2025.6.19-2025.6.23</p><table><thead><tr><th>日期</th><th>行程</th></tr></thead><tbody><tr><td>Day 1</td><td>钟楼 鼓楼 回民街 古城墙</td></tr><tr><td>Day 2</td><td>兵马俑 丽山园 半坡遗址</td></tr><tr><td>Day 3</td><td>西安博物院 小寨银泰城 大唐不夜城</td></tr><tr><td>Day 4</td><td>碑林博物馆</td></tr><tr><td>Day 5</td><td>陕西历史博物馆 大慈恩寺</td></tr></tbody></table><h2 id="费用"><a href="#费用" class="headerlink" title="费用"></a>费用</h2><p>不少景区学生票半价，省不少钱。学生证是一定要带在身边的，检票时会检查。如果实在没带也没关系，用学信网证明也行。</p><p>夏季紫外线很强，防晒衣、防晒霜和遮阳帽是必备的，需要提前准备好。这些我已经有了，就不算在费用里面了。</p><ul><li>火车票：307+261.5=568.5 元（往返）</li><li>民宿：370.7 元（平均每人）</li><li>门票及讲解：268.5 元<ul><li>西安城墙门票：27 元（学生票）</li><li>兵马俑门票：60 元（学生票）</li><li>半坡遗址门票：27.5 元（学生票）</li><li>碑林博物馆门票：42 元（半价票）</li><li>陕西历史博物馆讲解：92 元（门票免费）</li><li>大慈恩寺门票：20 元（学生票）</li></ul></li><li>吃饭及饮料：总计约 220 元</li><li>打车及地铁： 约 100 元（平均每人）</li></ul><p>我比较省，总开销不到 1600 元。</p><h2 id="Day-1：钟楼-鼓楼-回民街-古城墙"><a href="#Day-1：钟楼-鼓楼-回民街-古城墙" class="headerlink" title="Day 1：钟楼 鼓楼 回民街 古城墙"></a>Day 1：钟楼 鼓楼 回民街 古城墙</h2><p>前一天晚上，和朋友一行三人从南京出发，乘动车（卧铺）历时 12 小时抵达西安。睡一觉就到了，住宿费都省了。高铁、飞机固然快，但是价格相比动车翻倍，有点承担不起。</p><p>民宿订在西安钟楼附近，地段相当不错，交通便利，去各个景点都很方便。三室一厅，设施齐全，性价比很高，不到 300 元/天。</p><p>九点多到西安，寄存了一下行李就去吃饭了。午饭吃了传统小吃岐山臊子面，外加一瓶酸梅汤。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a1fcca27dc.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a1fcca27dc.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_103202"></p><h3 id="鼓楼"><a href="#鼓楼" class="headerlink" title="鼓楼"></a>鼓楼</h3><p>西安的标志性建筑——鼓楼。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a1ffb8ffa5.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a1ffb8ffa5.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_105909"></p><p>钟楼那个位置是一个转盘，没有人行横道，行人过街必须走地下通道。这地下通道有 9 个出口，导航还不准，容易绕晕。</p><h3 id="回民街"><a href="#回民街" class="headerlink" title="回民街"></a>回民街</h3><p>比较热闹的街道，有不少小吃和特产出售。去的时候刚吃完午饭，就简单地逛了一圈，啥也没买。出来旅游，防晒用品是必须带的，即使是阴天，紫外线也很强。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a20152b1b9.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a20152b1b9.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_110506"></p><p>小巷子里纪念品价格比较亲民，相比主街便宜得多。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2028b2c35.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2028b2c35.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_111134"></p><p>朋友来西安前就心心念念要穿汉服，于是中午回去收拾一下就跟着去了。汉服是在钟楼附近是一家店租的，化妆完跟着摄影师去拍照。（后来他还穿女装了，但是照片我就不放了）</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a203969159.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a203969159.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_141732"></p><h3 id="古城墙"><a href="#古城墙" class="headerlink" title="古城墙"></a>古城墙</h3><p>从永宁门上，在安定门下，全程步行约三公里。城墙上可以租自行车，但有一个朋友穿着汉服不方便骑，于是作罢。城墙上有售货机，饮料是景区的价格，较贵。相比之下蜜雪冰城是真的划算，景区只比正常价贵一块钱，可这边没有。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a207f71183.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a207f71183.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_160636"></p><p>向前看去，一眼望不到头。走到下一个门少说也有两公里，于是从安定门就下了。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a208ef3897.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a208ef3897.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_163358"></p><p>回去坐的是电动三轮车，收我们 15 块，还可以接受。</p><p>晚上吃了当地的特色𰻝𰻝面，还有肉夹馍（忘记拍了）。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a20d4dd818.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a20d4dd818.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250619_175419"></p><p>一天走下来还挺累的，腿脚都是酸的，回去好好休息了。</p><h2 id="Day-2：兵马俑-丽山园-半坡遗址"><a href="#Day-2：兵马俑-丽山园-半坡遗址" class="headerlink" title="Day 2：兵马俑 丽山园 半坡遗址"></a>Day 2：兵马俑 丽山园 半坡遗址</h2><p>主要去了兵马俑和周边景点。一天逛下来，时间还有得多，本来还有考虑去华清宫，看网上说没意思，就没去。</p><h3 id="兵马俑"><a href="#兵马俑" class="headerlink" title="兵马俑"></a>兵马俑</h3><p>世界第八大奇迹秦兵马俑，是来西安必去的一个景点。兵马俑在临潼区，离主城区有 40 公里，我们是打车过去的，100 块左右。</p><p>见到不少外国游客，有欧洲的，也有中亚、中东的。西安不愧是世界历史名城，我在南京从未看到如此多的外国游客。</p><p>仔细观察，陶俑面部表情栩栩如生，仿佛在诉说自己的故事。而且，确实没有两个陶俑是相同的。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2100667ce.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2100667ce.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_101318"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21103c904.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21103c904.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_101415"></p><p>保护修复区内，工作人员正在讨论修复兵马俑。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a211d7c283.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a211d7c283.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_102353"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a212a4e6aa.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a212a4e6aa.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_103040"></p><p>跪射俑——唯一一个完整出土，没有拼接过的俑。其他兵马俑出土时都是碎片，考古工作者一片片拼接来修复的。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a213a9e700.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a213a9e700.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_104005"></p><h3 id="丽山园"><a href="#丽山园" class="headerlink" title="丽山园"></a>丽山园</h3><p>从兵马俑出来，走过一条小吃街，在游客中心对面，有免费的摆渡车直达丽山园。车程 10 分钟左右。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a214802e98.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a214802e98.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_121344"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21549b772.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21549b772.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_130224"></p><h3 id="半坡遗址"><a href="#半坡遗址" class="headerlink" title="半坡遗址"></a>半坡遗址</h3><p>算是比较冷门的景点，游客不多。空荡荡的，只有少数跟团的游客前来参观。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21607f50e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21607f50e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_152835"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2176284ab.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2176284ab.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_152910"></p><p>有钻木取火的实践活动，但仅对团队游开放，有点可惜。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a218707df9.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a218707df9.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_154754"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2195c10f8.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2195c10f8.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250620_154437"></p><h2 id="Day-3：西安博物院-小寨银泰城-大唐不夜城"><a href="#Day-3：西安博物院-小寨银泰城-大唐不夜城" class="headerlink" title="Day 3：西安博物院 小寨银泰城 大唐不夜城"></a>Day 3：西安博物院 小寨银泰城 大唐不夜城</h2><h3 id="西安博物院"><a href="#西安博物院" class="headerlink" title="西安博物院"></a>西安博物院</h3><p>去西安博物院没有地铁，我们又不想坐公交，于是打车过去。博物馆较小，展品数量不算多，两个小时不到就参观完了，感觉有点不够看。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21a996338.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21a996338.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_093238"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21c82cf57.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21c82cf57.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_093656"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21d2f1935.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21d2f1935.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_100007"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21df3b36e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21df3b36e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_100233"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21ea4a715.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21ea4a715.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_100548"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a21f73e76c.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a21f73e76c.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_101918"></p><p>残破的小雁塔，塔顶在 1556 年大地震时被毁，现存 13 层。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a223dda5a3.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a223dda5a3.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_103833"></p><h3 id="小寨银泰城"><a href="#小寨银泰城" class="headerlink" title="小寨银泰城"></a>小寨银泰城</h3><p>下午陪朋友去逛小寨银泰城——一个二次元的聚集地，和南京的水游城差不多。有不少 coser 在现场，还原度还挺高，不过我不认识。</p><h3 id="大唐不夜城"><a href="#大唐不夜城" class="headerlink" title="大唐不夜城"></a>大唐不夜城</h3><p>我们去得比较早，坐在路边石阶上休息。身边的矿泉水喝完了有点口渴，打开地图一看，距离最近的蜜雪冰城只有 100 多米，于是给大家每人点了杯蜜雪。</p><p>正常时段，大唐不夜城演出从晚上七点开始，一直到十点多才结束。受西安中考影响，晚上 8:30 以后除大雁塔音乐喷泉以外的节目都取消了。我们只看到少数几个节目，有点可惜。</p><p>盛唐密盒演出，可惜看的时候快结束了。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2250f1e8e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2250f1e8e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_192855"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a225b611ef.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a225b611ef.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_194622"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22687140b.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22687140b.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_195126"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22822d190.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22822d190.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_200707"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2299ba1a3.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2299ba1a3.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_200749"></p><p>傍晚的大唐不夜城人山人海。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22af0ae14.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22af0ae14.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250621_202616"></p><p>第一场音乐喷泉表演时天还没黑，灯光效果比较一般，我们临走前又去看了最后一场（9 点场）。这一场我们从头至尾完整看完了，场面很是壮观。</p><p>这是一场水与光的交响史诗——水柱是跃动的五线谱，霓虹是流淌的音符，在千年雁塔的指挥棒下，恢弘乐章自地脉深处奔涌而出。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22bf481cd.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22bf481cd.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="音乐喷泉"></p><p>完整录像已上传 B 站：<a href="https://www.bilibili.com/video/BV1aAGFzeEU4">https://www.bilibili.com/video/BV1aAGFzeEU4</a></p><h2 id="Day-4：碑林博物馆"><a href="#Day-4：碑林博物馆" class="headerlink" title="Day 4：碑林博物馆"></a>Day 4：碑林博物馆</h2><p>本来这天计划去华山，前一天才发现华山不在西安，过去要两个多小时。于是作罢，改去碑林博物馆。</p><p>我们住在西木头市，距离景点一公里多一点，就直接步行去了。主要展出一些古代的石碑，我其实不大感兴趣。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22cdc33a0.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22cdc33a0.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250622_153606"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22e032548.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22e032548.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250622_154642"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a22f2a9e16.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a22f2a9e16.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250622_155940"></p><p>关于北魏孝文帝改革的石碑，历史课本上有学过。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a230e118d2.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a230e118d2.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250622_161228"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2316ef284.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2316ef284.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250622_161310"></p><p>由于天气原因，有一个展馆没有看完就回去了。回去也没事干，朋友给我推荐罗小黑战记，于是我一口气全看完了。</p><h2 id="Day-5：陕西历史博物馆-大慈恩寺"><a href="#Day-5：陕西历史博物馆-大慈恩寺" class="headerlink" title="Day 5：陕西历史博物馆 大慈恩寺"></a>Day 5：陕西历史博物馆 大慈恩寺</h2><p>在西安的最后一天，真正呆在西安的其实只有半天，下午就去车站了。离地铁站有点远，往返都是打车。</p><h3 id="陕西历史博物馆"><a href="#陕西历史博物馆" class="headerlink" title="陕西历史博物馆"></a>陕西历史博物馆</h3><p>热门景点，虽然门票免费，但很难抢到。我们预约时早已无票了，只好买了带讲解的套餐。讲解的价格是 92 元/人，提供无线耳麦。</p><p>导游带我们参观了整个博物馆（除单独收费的区域），向我们讲解了馆内的重要文物。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23306963a.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23306963a.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_123432"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23452d1b5.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23452d1b5.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_094939"></p><p>镶金兽首玛瑙杯，乃镇馆之宝。由一整块完整的玛瑙雕刻而成，做工极为精湛。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a235670d43.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a235670d43.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_095715"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23698d750.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23698d750.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_100613"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23a67337a.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23a67337a.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_104127"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23beb4fe0.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23beb4fe0.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_104802"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23cd50e20.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23cd50e20.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_111342"></p><p>曾出现在高考数学题上的西魏独孤信多面体煤精组印（26 面体）。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23e722dea.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23e722dea.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_112609"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a23fcb6ffe.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a23fcb6ffe.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_113725"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a2413d5581.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a2413d5581.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_114446"></p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a242a96913.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a242a96913.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_115415"></p><h3 id="大慈恩寺"><a href="#大慈恩寺" class="headerlink" title="大慈恩寺"></a>大慈恩寺</h3><p>本来是计划第三天去的，到的时候已经停止入园了，没去成，改到最后一天去了。</p><p>大雁塔在大慈恩寺内，参观大雁塔要先买大慈恩寺的门票。大雁塔单独收费，我们并没有上去看。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a243c29910.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a243c29910.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_130528"></p><p>财神爷还是要拜的，希望财源广进。找人换完现金，才发现功德箱上还贴了收款码，也是与时俱进了。</p><p><img src="https://img-cdn.boochi.cn/i/2025/07/06/686a244de99f0.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/07/06/686a244de99f0.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20250623_131314"></p><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>比较满意的一次旅行。我们去得早，天气还不算炎热。虽然规划比较匆忙，考虑也不够周全，但好在大部分景点都去过了，没有留下多少遗憾。</p><p>西安的城市建设很不错，规划有致，底蕴深厚，有一种大都市的感觉，完全颠覆了我对西北城市的传统印象。以后有机会可能还会去看看。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote class=&quot;blockquote-note blockquote-note__info&quot;&gt;&lt;div class=&quot;blockquote-note__header&quot;&gt;&lt;div class=&quot;blockquote-note__icon&quot;&gt;&lt;svg xmlns</summary>
      
    
    
    
    <category term="旅行" scheme="https://blog.iamsjy.com/categories/%E6%97%85%E8%A1%8C/"/>
    
    
    <category term="西安" scheme="https://blog.iamsjy.com/tags/%E8%A5%BF%E5%AE%89/"/>
    
    <category term="旅行" scheme="https://blog.iamsjy.com/tags/%E6%97%85%E8%A1%8C/"/>
    
    <category term="游记" scheme="https://blog.iamsjy.com/tags/%E6%B8%B8%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>在 macOS 上部署 DeepSeek R1</title>
    <link href="https://blog.iamsjy.com/2025/03/24/deploy-deepseek-r1-on-macos/"/>
    <id>https://blog.iamsjy.com/2025/03/24/deploy-deepseek-r1-on-macos/</id>
    <published>2025-03-24T12:56:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>前一段时间，我所在省份国补和教育优惠也能叠加使用了，遂跟风买了一台丐版 2024 款 Mac mini。最近 DeepSeek 比较火，M4 高达 38TOPS 的 AI 算力跑点比较轻量的 AI 模型不成问题。博客鸽了这么久没更新，也该水一篇文章了。</p><h2 id="安装-Ollama-并运行"><a href="#安装-Ollama-并运行" class="headerlink" title="安装 Ollama 并运行"></a>安装 Ollama 并运行</h2><p>Ollama 是一款常用的大模型部署工具，很容易上手。</p><p>首先打开 <a href="https://ollama.com/download">Ollama 官网</a>，选择 macOS 下载安装包，双击解压。然后把解压得到的 Ollama 应用拖到访达侧边栏的“应用程序”中即可。然后打开启动台就能看到 Ollama 的图标了，单击运行即可启动。</p><p>在 <a href="https://ollama.com/search">Ollama 模型库</a> 中搜索你想要的模型。模型的参数量越大就越聪明，但也需要更多的内存。一般来说，选择参数量小于内存大小的模型即可。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e15276eb8cc.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e15276eb8cc.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="屏幕截图 2025-03-23 160942"></p><p>由于我的 2024 款 Mac mini 内存只有 16G，最高只能运行 DeepSeek R1 14b 模型。如果你的设备又有更大的内存，完全可以运行更高参数的模型。</p><p>打开终端并执行以下命令：</p><ul><li><p>运行无审查版（越狱版） DeepSeek R1 模型：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ollama run huihui_ai/deepseek-r1-abliterated:14b<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>（或）如果你想使用官方版 DeepSeek R1，使用以下命令即可：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ollama run deepseek-r1:14b<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><p>然后就可以在命令行上和 AI 交互了。实测输出速度在 11 tokens/s，考虑到 M4 芯片功耗极低，这个速度还是可以的。如需退出，输入 <code>/bye</code> 即可。</p><blockquote class="blockquote-note blockquote-note__info"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></div>提示</div><div class="blockquote-note__content"><p>当然你也可以尝试其他模型，比如谷歌新发布的 Gemma 3，实测运行 12b 参数的模型完全没问题。</p></div></blockquote><p>但是这种命令行式的对话体验并不友好，所以建议使用第三方工具进行调用。</p><h2 id="安装可视化聊天界面"><a href="#安装可视化聊天界面" class="headerlink" title="安装可视化聊天界面"></a>安装可视化聊天界面</h2><p>浏览器插件 <strong>Page Assist</strong> 是我比较常用的 Ollama Web UI，可以给本地部署的大模型提供一个直观的界面。</p><p>根据你使用的浏览器进行下载：</p><ul><li><a href="https://microsoftedge.microsoft.com/addons/detail/page-assist-a-web-ui-fo/ogkogooadflifpmmidmhjedogicnhooa">Edge</a></li><li><a href="https://chromewebstore.google.com/detail/page-assist-a-web-ui-for/jfgfiigpkhlkbnfnbobbkinehhfdhndo">Chrome</a></li><li><a href="https://addons.mozilla.org/zh-CN/android/addon/page-assist/">Firefox</a></li></ul><p>安装后可以将其固定到工具栏，更方便打开。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e1527ed72c7.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e1527ed72c7.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-22 23.20.56"></p><p>点击右上角的设置按钮，可以更改语言。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152837ab44.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152837ab44.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-22 23.21.27"></p><p>然后在顶部选择之前下载的模型，即可开始使用。另外，底部聊天框处可开启联网搜索功能，回答更精准。默认搜索引擎为 DuckDuckGo，可在设置页面进行修改。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e15286b4e61.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e15286b4e61.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-22 23.35.57"></p><h3 id="其他工具推荐"><a href="#其他工具推荐" class="headerlink" title="其他工具推荐"></a>其他工具推荐</h3><ul><li><a href="https://chatboxai.app/zh">Chatbox AI</a>（支持桌面端、移动端、网页端）</li><li><a href="https://cherry-ai.com/">Cherry Studio</a>（仅支持桌面端）</li></ul><h2 id="设置环境变量"><a href="#设置环境变量" class="headerlink" title="设置环境变量"></a>设置环境变量</h2><p>使用以下命令设置两个环境变量，允许局域网内的其他设备访问 Ollama  API。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">launchctl setenv OLLAMA_HOST <span class="token string">"0.0.0.0"</span>launchctl setenv OLLAMA_ORIGINS <span class="token string">"*"</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="设置开机自启动及局域网访问"><a href="#设置开机自启动及局域网访问" class="headerlink" title="设置开机自启动及局域网访问"></a>设置开机自启动及局域网访问</h2><p>我们在上一步手动设置了环境变量，但是在重启或退出登录后会失效。因此我们需要创建一个启动脚本，在登录系统时自动设置环境变量并启动 Ollama，同时删除安装时生成的“Ollama”的登录项。</p><p>以下为详细步骤：</p><p>首先打开“系统设置”-“通用”-“登录项与扩展”，删除“登录时打开”中名为“Ollama”的登录项，我这边就不放图了。</p><p>然后打开“自动操作” App</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e1528f6a16a.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e1528f6a16a.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.26.52 - 副本"></p><p>点击“新建文稿”</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e1529527b96.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e1529527b96.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.29.44"></p><p>选择“应用程序”，并点击“选取”</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e1529dae23c.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e1529dae23c.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-22 21.45.48"></p><p>找到“运行 Shell 脚本”这个项目，并将其拖到右侧空白处。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152a70e19f.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152a70e19f.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-22 22.02.49"></p><p>删除原有内容，并粘贴以下内容：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">launchctl setenv OLLAMA_HOST <span class="token string">"0.0.0.0"</span>launchctl setenv OLLAMA_ORIGINS <span class="token string">"*"</span><span class="token function">open</span> /Applications/Ollama.app<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152a22272e.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152a22272e.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.33.13"></p><p>然后点击左上角菜单栏的“文件”-“存储”。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152b07c197.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152b07c197.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.37.40"></p><p>指定文件名和保存位置，例如：</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152b4b6744.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152b4b6744.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.39.08"></p><p>然后打开“系统设置”-“通用”-“登录项与扩展”，点击“登录时打开”中的加号，选择刚刚创建的脚本，点击“打开”。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152bb8ec02.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152bb8ec02.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.41.09"></p><p>添加完成。</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152c15838e.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152c15838e.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="截屏2025-03-21 23.41.31 - 副本"></p><p>然后重新登录或重启 macOS ，Ollama 就会自动启动了。</p><p>然后我们可以在局域网内的其他设备上安装第三方工具进行调用，仅需指定 API 地址即可。</p><p>Page Assist:</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152c54cab8.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152c54cab8.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="屏幕截图 2025-03-22 235044"></p><p>Cherry Studio:</p><p><img src="https://img-cdn.boochi.cn/i/2025/03/24/67e152cb386fe.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2025/03/24/67e152cb386fe.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20250323161141893"></p><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ol><li><a href="https://github.com/ollama/ollama/blob/main/docs/faq.md">Ollama FAQ</a></li><li><a href="https://blog.csdn.net/sunnyfirefox/article/details/131257061">Mac Ventura 13设置开机启动执行Shell脚本</a></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;前一段时间，我所在省份国补和教育优惠也能叠加使用了，遂跟风买了一台丐版 2024 款 Mac mini。最近 DeepSeek 比较火，M4</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="DeepSeek" scheme="https://blog.iamsjy.com/tags/DeepSeek/"/>
    
    <category term="Ollama" scheme="https://blog.iamsjy.com/tags/Ollama/"/>
    
    <category term="macOS" scheme="https://blog.iamsjy.com/tags/macOS/"/>
    
  </entry>
  
  <entry>
    <title>给龙芯久久派交叉编译 Cloudreve</title>
    <link href="https://blog.iamsjy.com/2024/11/09/cross-compile-cloudeve-for-loongson-2k0300/"/>
    <id>https://blog.iamsjy.com/2024/11/09/cross-compile-cloudeve-for-loongson-2k0300/</id>
    <published>2024-11-09T14:56:30.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>龙芯有新世界和旧世界之分，两个世界的软件不通用，更多细节请参考<a href="https://areweloongyet.com/docs/old-and-new-worlds/">这篇文章</a>。本文编译的 Cloudreve 仅适用于龙芯新世界。截至本文撰写时，适配久久派的新世界系统仅有 Buildroot。</p><blockquote class="blockquote-note blockquote-note__info"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></div>提示</div><div class="blockquote-note__content"><p>如果你只是想要一个编译好的可执行文件，可直接前往<a href="https://lanzoui.com/isToC2eo3zpe">此处</a>下载。</p></div></blockquote><p>本文编译所用系统为 Ubuntu 22.04 LTS amd64，其他系统大同小异。以下为详细步骤。</p><h2 id="安装-Golang-环境"><a href="#安装-Golang-环境" class="headerlink" title="安装 Golang 环境"></a>安装 Golang 环境</h2><p>下载 Golang 压缩包</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">wget</span> https://golang.google.cn/dl/go1.23.3.linux-amd64.tar.gz<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>解压</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">rm</span> <span class="token parameter variable">-rf</span> /usr/local/go <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token function">tar</span> <span class="token parameter variable">-C</span> /usr/local <span class="token parameter variable">-xzf</span> go1.23.3.linux-amd64.tar.gz<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>添加到环境变量（全局）</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token builtin class-name">echo</span> <span class="token string">"export PATH=<span class="token environment constant">$PATH</span>:/usr/local/go/bin"</span> <span class="token operator">>></span> /etc/profile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>使环境变量生效</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">source</span> /etc/profile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="安装-Node-js-环境"><a href="#安装-Node-js-环境" class="headerlink" title="安装 Node.js 环境"></a>安装 Node.js 环境</h2><p>如果你使用自己的电脑或国内服务器进行编译，建议配置 Node.js 镜像进行加速。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">export</span> <span class="token assign-left variable">NODE_MIRROR</span><span class="token operator">=</span>https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后安装 Node.js。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://raw.githubusercontent.com/tj/n/master/bin/n <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">bash</span> <span class="token parameter variable">-s</span> <span class="token function">install</span> lts<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>配置 npm 镜像（可选）</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">npm</span> config <span class="token builtin class-name">set</span> registry https://registry.npmmirror.com<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装 yarn</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-g</span> <span class="token function">yarn</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>配置 yarn 镜像（可选）</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">yarn</span> config <span class="token builtin class-name">set</span> registry https://registry.npmmirror.com<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="下载-Cloudreve-源码"><a href="#下载-Cloudreve-源码" class="headerlink" title="下载 Cloudreve 源码"></a>下载 Cloudreve 源码</h2><p>安装 <code>git</code> 和 <code>zip</code>，如果已安装请跳过</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> update<span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> <span class="token function">git</span> <span class="token function">zip</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>克隆 Cloudreve 仓库到本地，同时拉取子模块</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>进入仓库目录，并切换到目前最新的 <code>3.8.3</code> 版本分支</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">cd</span> Cloudreve<span class="token function">git</span> checkout <span class="token number">3.8</span>.3<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="编译-Cloudreve"><a href="#编译-Cloudreve" class="headerlink" title="编译 Cloudreve"></a>编译 Cloudreve</h2><p>如果你使用自己的电脑或国内服务器进行编译，建议配置 Go 模块代理进行加速。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">go <span class="token function">env</span> <span class="token parameter variable">-w</span> <span class="token assign-left variable">GO111MODULE</span><span class="token operator">=</span>ongo <span class="token function">env</span> <span class="token parameter variable">-w</span> <span class="token assign-left variable">GOPROXY</span><span class="token operator">=</span>https://goproxy.cn,direct<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>安装 GoReleaser</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">go <span class="token function">install</span> github.com/goreleaser/goreleaser@latest<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>修改 <code>.goreleaser.yaml</code>，删除 <code>goos</code> 中的 <code>windows</code> 和 <code>darwin</code>，以及 <code>goarch</code> 中的所有架构，并添加 <code>loong64</code> 架构。为减少构建出二进制文件的体积，可在 <code>ldflags</code> 的参数最后加上 <code>-s -w</code>（去除符号表信息和调试信息）。</p><p>修改后的结果如下：</p><pre class="line-numbers language-none"><code class="language-none">此处省略...   ldflags:      - -X &#39;github.com&#x2F;cloudreve&#x2F;Cloudreve&#x2F;v3&#x2F;pkg&#x2F;conf.BackendVersion&#x3D;&#123;&#123;.Tag&#125;&#125;&#39; -X &#39;github.com&#x2F;cloudreve&#x2F;Cloudreve&#x2F;v3&#x2F;pkg&#x2F;conf.LastCommit&#x3D;&#123;&#123;.ShortCommit&#125;&#125;&#39; -s -w          goos:      - linux    goarch:      - loong64此处省略...<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>由于依赖版本过低，直接编译会报错。需要先更新两个模块。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">go get modernc.org/libc@v1.61.0go get modernc.org/sqlite@v1.33.1<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>然后即可编译</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">~/go/bin/goreleaser build <span class="token parameter variable">--clean</span> <span class="token parameter variable">--snapshot</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>编译出的可执行文件在 <code>dist/Cloudreve_linux_loong64/</code> 中。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;龙芯有新世界和旧世界之分，两个世界的软件不通用，更多细节请参考&lt;a href=&quot;https://areweloongyet.com/docs</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Cloudreve" scheme="https://blog.iamsjy.com/tags/Cloudreve/"/>
    
    <category term="龙芯" scheme="https://blog.iamsjy.com/tags/%E9%BE%99%E8%8A%AF/"/>
    
    <category term="久久派" scheme="https://blog.iamsjy.com/tags/%E4%B9%85%E4%B9%85%E6%B4%BE/"/>
    
    <category term="2K0300" scheme="https://blog.iamsjy.com/tags/2K0300/"/>
    
  </entry>
  
  <entry>
    <title>使用 Docker Compose 部署 OneManager</title>
    <link href="https://blog.iamsjy.com/2024/11/06/deploy-onemanager-with-docker-compose/"/>
    <id>https://blog.iamsjy.com/2024/11/06/deploy-onemanager-with-docker-compose/</id>
    <published>2024-11-06T15:05:56.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<p>一直以来，我都倾向于通过 Docker Compose 部署程序。相比手动安装，这种方法更为方便快捷。相比直接通过 Docker 部署，这种方法更易于管理与维护。本文简述使用 Docker Compose 部署 OneManager 的具体步骤。</p><p>阅读本文前，请自行安装好 Caddy，后文中会使用到。</p><h2 id="部署程序"><a href="#部署程序" class="headerlink" title="部署程序"></a>部署程序</h2><p>首先创建程序目录</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">mkdir</span> /opt/onemanager <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">cd</span> /opt/onemanager<span class="token function">sudo</span> <span class="token function">mkdir</span> data <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">cd</span> data<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>然后创建 OneManager 配置文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">cat</span> <span class="token operator">></span> config.php <span class="token operator">&lt;&lt;</span> <span class="token string">EOF&lt;?php <span class="token variable">$configs</span> = '&#123;&#125;';EOF</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>修改文件所有者为 <code>www-data</code></p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">chown</span> www-data:www-data config.php<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>创建容器配置文件。（为提高安全性，此处不允许直接通过 IP + 端口格式访问，而是使用 Caddy 反代后访问。）</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">cat</span> <span class="token operator">></span> docker-compose.yaml <span class="token operator">&lt;&lt;</span> <span class="token string">EOFservices:    onemanager:        image: zhullyb/onemanager-php:latest        container_name: onemanager        restart: unless-stopped        volumes:            - <span class="token environment constant">$PWD</span>/data:/var/www/html/.data/        ports:            - '127.0.0.1:8016:80'EOF</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>启动容器</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">docker</span> compose up <span class="token parameter variable">-d</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="域名访问"><a href="#域名访问" class="headerlink" title="域名访问"></a>域名访问</h2><p>编辑 Caddy 配置文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">nano</span> /etc/caddy/Caadyfile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如果你首次安装 Caddy，请删除次配置文件中的所有内容，粘贴以下内容并保存。根据注释修改对应的配置项。</p><pre class="line-numbers language-none"><code class="language-none">od.example.com &#123;                 # 替换为自己的域名（请提前做好 DNS 解析）         tls i@example.com       # 替换为你的任意邮箱         encode gzip         reverse_proxy localhost:8016&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>重载 Caddy 配置文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> systemctl reload caddy<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><p>以下命令需要在容器配置文件目录下执行（本文中为 <code>/opt/onemanager</code>）。</p><ul><li><p>停止 OneManager 服务</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">docker</span> compose stop<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>启动 OneManager 服务</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">docker</span> compose start<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>重启 OneManager 服务</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">docker</span> compose restart<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>完全删除 OneManager 服务及 Docker 镜像</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">docker-compose</span> down <span class="token parameter variable">--volumes</span> <span class="token parameter variable">--rmi</span> all<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><ul><li><a href="https://zhul.in/2024/02/11/how-to-deploy-onemanager-with-docker/">如何使用 docker 部署 onemanager - 竹林里有冰的博客</a></li><li><a href="https://github.com/zhullyb/OneManager-php-docker">zhullyb/onemanager-php-docker</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;一直以来，我都倾向于通过 Docker Compose 部署程序。相比手动安装，这种方法更为方便快捷。相比直接通过 Docker 部署，这种方法更易于管理与维护。本文简述使用 Docker Compose 部署 OneManager 的具体步骤。&lt;/p&gt;
&lt;p&gt;阅读本文前，</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="OneManager" scheme="https://blog.iamsjy.com/tags/OneManager/"/>
    
    <category term="Docker" scheme="https://blog.iamsjy.com/tags/Docker/"/>
    
    <category term="VPS" scheme="https://blog.iamsjy.com/tags/VPS/"/>
    
  </entry>
  
  <entry>
    <title>Debian 通过蓝牙命令行和手机互传文件</title>
    <link href="https://blog.iamsjy.com/2024/10/28/transfers-files-with-mobile-phones-via-bluetooth-command-line-on-debian/"/>
    <id>https://blog.iamsjy.com/2024/10/28/transfers-files-with-mobile-phones-via-bluetooth-command-line-on-debian/</id>
    <published>2024-10-28T15:47:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>这篇文章其实是为了测试 RK3399 主板的蓝牙功能而写的。理论上对其他 Linux 发行版同样适用，具体做法大同小异。本文记录一下相关步骤。</p><h2 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h2><p>更新软件包索引：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> update<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装依赖：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> bluetooth bluez-tools bluez-obexd<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="连接设备"><a href="#连接设备" class="headerlink" title="连接设备"></a>连接设备</h2><blockquote class="blockquote-note blockquote-note__caution"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></div>注意</div><div class="blockquote-note__content"><p>以 <code>[bluetooth]#</code> 开头的命令均要在蓝牙终端下执行，且仅执行 <code>#</code> 之后的内容。本文中所有的 <code>[目标设备的蓝牙地址]</code> 都要替换为目标设备实际的蓝牙地址。</p></div></blockquote><h3 id="进入蓝牙命令行"><a href="#进入蓝牙命令行" class="headerlink" title="进入蓝牙命令行"></a>进入蓝牙命令行</h3><p>执行以下命令：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ bluetoothctl<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>输出：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">Agent registered<span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Controller B0:F1:EC:65:42:2D Pairable: <span class="token function">yes</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h3 id="扫描设备"><a href="#扫描设备" class="headerlink" title="扫描设备"></a>扫描设备</h3><p>执行以下命令：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># scan on</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>输出：</p><pre class="line-numbers language-none"><code class="language-none">[CHG] Controller B0:F1:EC:65:42:2D Discovering: yes[NEW] Device 53:65:DE:CC:85:16 53-65-DE-CC-85-16[NEW] Device 9C:28:F7:97:AB:DF Redmi K30 Pro Zoom Edition<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>其中 <code>Device</code> 后以 5 个冒号隔开的一串字符就是设备的蓝牙地址，紧接着的是设备名称。</p><h3 id="配对设备"><a href="#配对设备" class="headerlink" title="配对设备"></a>配对设备</h3><h4 id="执行配对"><a href="#执行配对" class="headerlink" title="执行配对"></a>执行配对</h4><p>执行以下命令：</p><p><code>pair</code> 后面为目标设备的蓝牙地址，在上一步扫描设备的结果中获取。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># pair 9C:28:F7:97:AB:DF</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>输出：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">Attempting to pair with 9C:28:F7:97:AB:DF<span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF Connected: <span class="token function">yes</span>Request confirmation<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h4 id="确认配对"><a href="#确认配对" class="headerlink" title="确认配对"></a>确认配对</h4><p>输入 <code>yes</code> 回车，并在手机上确认。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>agent<span class="token punctuation">]</span> Confirm passkey <span class="token number">334486</span> <span class="token punctuation">(</span>yes/no<span class="token punctuation">)</span>: <span class="token function">yes</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p><img src="https://img-cdn.boochi.cn/i/2024/10/28/671fb3718905d.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/10/28/671fb3718905d.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_20241028-222141_设置.png"></p><p>输出：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF Bonded: <span class="token function">yes</span><span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF Modalias: bluetooth:v001Dp1200d1436<span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF UUIDs: 00001105-0000-1000-8000-00805f9b34fb<span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF UUIDs: 0000110a-0000-1000-8000-00805f9b34fb<span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF UUIDs: 0000110c-0000-1000-8000-00805f9b34fb<span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF ServicesResolved: <span class="token function">yes</span><span class="token punctuation">[</span>CHG<span class="token punctuation">]</span> Device 9C:28:F7:97:AB:DF Paired: <span class="token function">yes</span>Pairing successful<span class="token punctuation">[</span>DEL<span class="token punctuation">]</span> Device <span class="token number">53</span>:65:DE:CC:85:16 <span class="token number">53</span>-65-DE-CC-85-16<span class="token punctuation">[</span>NEW<span class="token punctuation">]</span> Device <span class="token number">53</span>:65:DE:CC:85:16 <span class="token number">53</span>-65-DE-CC-85-16<span class="token punctuation">[</span>Redmi K30 Pro Zoom Edition<span class="token punctuation">]</span><span class="token comment">#</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>然后执行 <code>exit</code>  退出蓝牙命令行。</p><h2 id="发送文件"><a href="#发送文件" class="headerlink" title="发送文件"></a>发送文件</h2><p>由于是首次配对，已经默认连接上，就不需要再次连接了，后续使用需要进入蓝牙命令行，并执行 <code>connect [目标设备的蓝牙地址]</code> 进行连接。</p><p>执行：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ bt-obex <span class="token parameter variable">-p</span> 9C:28:F7:97:AB:DF ./test.txt<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>输出：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>Transfer<span class="token comment">#test.txt] Waiting...</span><span class="token punctuation">[</span>Transfer<span class="token comment">#test.txt] Completed</span><span class="token punctuation">(</span>bt-obex:38280<span class="token punctuation">)</span>: GLib-CRITICAL **: <span class="token number">14</span>:23:50.652: g_atomic_ref_count_dec: assertion <span class="token string">'old_value > 0'</span> failed<span class="token punctuation">(</span>bt-obex:38280<span class="token punctuation">)</span>: GLib-CRITICAL **: <span class="token number">14</span>:23:50.654: g_atomic_ref_count_dec: assertion <span class="token string">'old_value > 0'</span> failed<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>手机上确认接收即可。</p><p><img src="https://img-cdn.boochi.cn/i/2024/10/28/671fb392c0f14.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/10/28/671fb392c0f14.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_20241028-222428_蓝牙.png"></p><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><p>首先进入蓝牙命令行：</p><pre class="line-numbers language-none"><code class="language-none">$ bluetoothctl<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ul><li><p>开始扫描设备：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># scan on</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>停止设备扫描：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># scan off</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>使本机对其他设备可见：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># discoverable on</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>使本机对其他设备不可见：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># discoverable off</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>连接蓝牙设备：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># connect [目标设备的蓝牙地址]</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>信任蓝牙设备：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># trust [目标设备的蓝牙地址]</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>显示设备信息：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>bluetooth<span class="token punctuation">]</span><span class="token comment"># info [目标设备的蓝牙地址]</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><p>以上命令等同于在 bash 终端下执行 <code>bluetoothctl</code> + 具体命令。如：在蓝牙终端中执行 <code>discoverable on</code> 等同于在 bash 终端下执行  <code>bluetoothctl discoverable on</code> 。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;这篇文章其实是为了测试 RK3399 主板的蓝牙功能而写的。理论上对其他 Linux 发行版同样适用，具体做法大同小异。本文记录一下相关步骤</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Linux" scheme="https://blog.iamsjy.com/tags/Linux/"/>
    
    <category term="Debian" scheme="https://blog.iamsjy.com/tags/Debian/"/>
    
    <category term="蓝牙" scheme="https://blog.iamsjy.com/tags/%E8%93%9D%E7%89%99/"/>
    
  </entry>
  
  <entry>
    <title>免实名境外 eSIM 卡分享</title>
    <link href="https://blog.iamsjy.com/2024/09/03/overseas-esim-cards-without-kyc-requirements/"/>
    <id>https://blog.iamsjy.com/2024/09/03/overseas-esim-cards-without-kyc-requirements/</id>
    <published>2024-09-03T09:28:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>阅读本文前，请确保你有原生支持 eSIM 卡的手机或 eSTK.me / 5ber.eSIM 等实体 eSIM 卡，否则无法使用本文介绍的服务。另外，请确保你有一张 VISA / MasterCard 借记卡或信用卡，微信、支付宝等国内支付方式在很多地方不受支持，运通卡很多时候也不行。</p><p>本文仅讨论免实名的 eSIM 卡，它们较易申请。有严格实名要求的卡通常需要护照等资料，申请门槛较高，不在本文的讨论范围内。</p><h2 id="号卡"><a href="#号卡" class="headerlink" title="号卡"></a>号卡</h2><p>收短信免费，适合用于注册海外 App。部分卡可开流量，但流量费昂贵（按 MB 计费），不建议开启移动数据。在卡内有话费的情况下，部分卡可以拨打/接听电话，但漫游资费昂贵，非必要不建议使用。</p><p>以下按保号成本排序：</p><table><thead><tr><th align="center">国家/地区<div style="width:100px"></th><th align="center">运营商<div style="width:100px"></th><th>开卡费<div style="width:140px"></th><th>保号方法<div style="width:120px"></th><th>保号成本<div style="width:100px"></th><th>漫游资费（中国）<div style="width:150px"></th><th>eSIM 转移<div style="width:100px"></th><th>备注<div style="width:200px"></th></tr></thead><tbody><tr><td align="center">🇬🇧 英国（+44）</td><td align="center">giffgaff</td><td>充值 10 英镑余额（约 93 元）激活，走邀请链接注册可得 15 英镑</td><td>每 6 个月发一次短信，或开关一次流量；发短信保号可保 50 年</td><td>后续 50 年 0 成本</td><td>发送短信 0.3 英镑 /条，（约 2.8 元）；流量 0.2 英镑/MB（约 1.9 元）</td><td>支持，App 申请或抓包申请（参考备注）</td><td>莫奈卡可付款；非原生 eSIM 手机需抓包获取二维码（<a href="https://blog.mykeyvans.com/article/giffgaff-esim-diy">方法</a>）；可免费换 2 次号码；首次充值需外币借记卡，后续可用 PayPal</td></tr><tr><td align="center">🇳🇱 荷兰（+31）</td><td align="center">Simyo</td><td>充值 5 欧元（约 39.3 元），走邀请链接注册可得 12.5 欧元</td><td>每 6 个月发一条短信，或开关一次流量；发短信保号可保 12 年</td><td>后续 12 年 0 成本</td><td>发送短信 0.51 欧元/条（约 4 元）；流量 5 欧元/MB（（约 39.3 元）</td><td>支持，在 App 内获取新二维码</td><td>非原生 eSIM 手机需抓包获取二维码（<a href="https://www.nodeseek.com/post-97478-1">方法</a>）</td></tr><tr><td align="center">🇲🇩 摩尔多瓦（+373）</td><td align="center">Moldtelecom</td><td>40 列伊（约 16.4 元）</td><td>每 6 个月充值 1 列伊（约 0.4 元）</td><td>2 列伊/年（约 0.8 元）</td><td>发送短信 2 列伊/条（约 0.8元）</td><td>支持，在 App 内获取新二维码</td><td>莫奈卡可付款</td></tr><tr><td align="center">🇵🇭 菲律宾（+63）</td><td align="center">Globe</td><td>99 比索（约 12.5 元）</td><td>每 12 个月充值 20 比索（约 2.5 元）</td><td>20 比索/年（约 2.5 元）</td><td>发送短信 20 比索/条（约 2.5 元）</td><td>支持，联网删除并扫描原先的二维码</td><td>莫奈卡可付款；伪实名，上传白纸都能过；<strong>回收号较多</strong></td></tr><tr><td align="center">🇺🇦 乌克兰（+380）</td><td align="center">Lifecell</td><td>50 格里夫纳（约 8.6 元）</td><td>开卡有效期 180 天，充值 10 格里夫纳（约 1.7 元）延长至一年</td><td>20 格里夫纳/年（约 3.4 元）</td><td>发送短信  10 格里夫纳/条（约 0.9 元）</td><td>联网删除并扫描原先的二维码</td><td>很挑卡，莫奈卡付不了</td></tr><tr><td align="center">🇹🇭 泰国（+66）</td><td align="center">AIS SIM2fly</td><td>5.11 美元（约 36.4 元）</td><td>每月充值 10 泰铢（约 2.1 元）</td><td>120 泰铢/年（约 25 元）</td><td>发送短信 16.05 泰铢/条（约 3.3 元）；拨打电话 6.42 泰铢/分钟（约 1.3 元）</td><td>联系客服申请新eSIM，可能需要提交护照照片等资料</td><td>开卡费略贵；自带 6 个月有效期</td></tr><tr><td align="center">🇱🇻 拉脱维亚（+371）</td><td align="center">LMT</td><td>充值 1.5 欧元余额（约 11.8 元）</td><td>每 70 天充值 1 欧元（约 7.9 元），开卡的 1.5 欧余额可用 3 个月</td><td>5 欧元/年（约 39.3 元）</td><td>实测漫游激活无法发送短信；流量 0.99 欧元/MB（约 7.8 元）</td><td>必须去线下门市申请新二维码</td><td>莫奈卡可付款</td></tr><tr><td align="center">🇲🇰 北马其顿（+389）</td><td align="center">Telekom</td><td>295 代纳尔（约 37.6 元）</td><td>每 2 个月充值 100 代纳尔（约 12.7 元）</td><td>600 代纳尔/年（约 76.4 元）</td><td>接听电话 153.4 代纳尔/分钟（约 19.5 元）</td><td>联系客服转移</td><td>开卡费略贵；伪实名，护照信息随便填</td></tr><tr><td align="center">🇱🇹 立陶宛（+370）</td><td align="center">pildyk</td><td>0.69 欧元（约 5.4 人民币）</td><td>每 3 个月充值 3 欧元（约 23.6元）</td><td>12 欧元/年（约 94.5 元）</td><td>发送短信 0.42 欧元/条（约 3.3 元）</td><td>未知</td><td>莫奈卡可付款；开卡费低，但保号成本较高</td></tr><tr><td align="center">🇦🇹 奥地利（+43）</td><td align="center">RedteaGo</td><td>3.01 美元（约 21.3 元）</td><td>有效期一年，无法续期</td><td>一次性，无法长期持有</td><td>无法发送短信</td><td>不支持</td><td>支持支付宝付款；13 位号码，较长；带 100MB 流量</td></tr></tbody></table><h2 id="流量卡"><a href="#流量卡" class="headerlink" title="流量卡"></a>流量卡</h2><p>大部分不带号码，仅可使用流量，部分可白嫖。漫游流量无墙，可以合法直接访问 Google、YouTube 等国内无法访问的网站。且纯净度较高，不容易被风控，适合用于注册国外网站。</p><table><thead><tr><th align="center">漫游 IP 地区<div style="width:100px"></th><th align="center">运营商<div style="width:80px"></th><th align="center">流量<div style="width:75px"></th><th align="center">开卡费<div style="width:80px"></th><th align="center">有效期<div style="width:70px"></th><th>备注<div style="width:200px"></th></tr></thead><tbody><tr><td align="center">🇸🇬 新加坡</td><td align="center">Firsty</td><td align="center">100MB 高速</td><td align="center">免费</td><td align="center">无限期</td><td>看广告可以获得上网时长（无限低速）；对 firsty.app 域名不限速（可无限白嫖高速流量）</td></tr><tr><td align="center">🇦🇹 奥地利</td><td align="center">Red Bull MOBILE</td><td align="center">2GB</td><td align="center">免费</td><td align="center">无限期</td><td>需要原生 eSIM 手机</td></tr><tr><td align="center">🇵🇱 波兰</td><td align="center">YESIM</td><td align="center">1GB</td><td align="center">0.5 欧元（约 7.8 元）</td><td align="center">无限期</td><td>莫奈卡可付款；注册时使用邀请码获得 500 YCoin，兑换 1GB 流量</td></tr><tr><td align="center">🇭🇰 香港</td><td align="center">RedteaGo</td><td align="center">100MB</td><td align="center">3.01 美元（约 21.3 元）</td><td align="center">1年</td><td>支持支付宝；带奥地利号码</td></tr><tr><td align="center">🇭🇰 香港</td><td align="center">3HK</td><td align="center">45GB</td><td align="center">268 港币（约 243.7 元）</td><td align="center">1年</td><td>支持支付宝、微信、银联付款；只在内地使用无需实名</td></tr></tbody></table>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;阅读本文前，请确保你有原生支持 eSIM 卡的手机或 eSTK.me / 5ber.eSIM 等实体 eSIM 卡，否则无法使用本文介绍的服</summary>
      
    
    
    
    <category term="分享" scheme="https://blog.iamsjy.com/categories/%E5%88%86%E4%BA%AB/"/>
    
    
    <category term="eSIM" scheme="https://blog.iamsjy.com/tags/eSIM/"/>
    
    <category term="estk" scheme="https://blog.iamsjy.com/tags/estk/"/>
    
    <category term="保号" scheme="https://blog.iamsjy.com/tags/%E4%BF%9D%E5%8F%B7/"/>
    
  </entry>
  
  <entry>
    <title>Debian 11 arm64 编译安装 Python 3.12.4</title>
    <link href="https://blog.iamsjy.com/2024/07/27/compile-and-install-python-3.12.4-on-debian-11-arm64/"/>
    <id>https://blog.iamsjy.com/2024/07/27/compile-and-install-python-3.12.4-on-debian-11-arm64/</id>
    <published>2024-07-27T03:05:43.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="编译环境"><a href="#编译环境" class="headerlink" title="编译环境"></a>编译环境</h2><p>操作系统：Debian 11 arm64</p><p>Python 版本：3.12.4</p><p>Debian 12、Ubuntu 系统同理，其他 Python 版本同理。</p><p>以下是详细编译步骤。</p><h2 id="修改-sources-list"><a href="#修改-sources-list" class="headerlink" title="修改 sources.list"></a>修改 sources.list</h2><p>编辑 <code>/etc/apt/sources.list</code> 文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">nano</span> /etc/apt/sources.list<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>将每个 <code>deb-src</code> 前的注释去掉，并保存。</p><h2 id="安装依赖项"><a href="#安装依赖项" class="headerlink" title="安装依赖项"></a>安装依赖项</h2><p>更新软件包索引</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> update<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装依赖项</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token parameter variable">-y</span> build-dep python3<span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token parameter variable">-y</span> <span class="token function">install</span> build-essential gdb lcov pkg-config <span class="token punctuation">\</span>      libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev <span class="token punctuation">\</span>      libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev <span class="token punctuation">\</span>      lzma lzma-dev tk-dev uuid-dev zlib1g-dev libmpdec-dev<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="下载-Python-源码"><a href="#下载-Python-源码" class="headerlink" title="下载 Python 源码"></a>下载 Python 源码</h2><p>从 Python 官网下载：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">wget</span> https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tgz<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如果机器在国内，建议使用阿里云镜像加速下载：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">wget</span> https://mirrors.aliyun.com/python-release/source/Python-3.12.4.tgz<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>解压源码，并进入源码目录。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">tar</span> <span class="token parameter variable">-zxvf</span> Python-3.12.4.tgz<span class="token builtin class-name">cd</span> Python-3.12.4<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="生成-Makefile"><a href="#生成-Makefile" class="headerlink" title="生成 Makefile"></a>生成 Makefile</h2><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">./configure <span class="token punctuation">\</span>--enable-optimizations <span class="token punctuation">\</span>--with-system-ffi <span class="token punctuation">\</span>--with-ssl <span class="token punctuation">\</span>    --enable-ipv6 <span class="token punctuation">\</span>    --enable-shared <span class="token assign-left variable">CFLAGS</span><span class="token operator">=</span>-fPIC <span class="token punctuation">\</span><span class="token parameter variable">--prefix</span><span class="token operator">=</span>/usr/local/python3.12.4 <span class="token punctuation">\</span><span class="token assign-left variable">ac_cv_file__dev_ptmx</span><span class="token operator">=</span>no <span class="token punctuation">\</span><span class="token assign-left variable">ac_cv_file__dev_ptc</span><span class="token operator">=</span>no<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="编译"><a href="#编译" class="headerlink" title="编译"></a>编译</h2><p>使用 <code>-j</code> 参数加速编译，<code>nproc</code> 为 CPU 核心数。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">make</span> -j<span class="token variable"><span class="token variable">$(</span>nproc<span class="token variable">)</span></span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><h3 id="本机安装"><a href="#本机安装" class="headerlink" title="本机安装"></a>本机安装</h3><ol><li>安装 Python</li></ol><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">make</span> <span class="token function">install</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ol start="2"><li>安装动态链接库</li></ol><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cp</span> /usr/local/python3.12.4/lib/libpython3* /usr/lib/aarch64-linux-gnu/<span class="token comment"># 如果是 amd64 架构，目标路径则为 /usr/lib/x86_64-linux-gnu/</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h3 id="在其他设备上安装"><a href="#在其他设备上安装" class="headerlink" title="在其他设备上安装"></a>在其他设备上安装</h3><p><strong>（CPU 架构、Debian 版本必须相同，否则会出现异常）</strong></p><ol><li>本机执行：</li></ol><ul><li>安装 Python 到指定目录</li></ul><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">make</span> <span class="token function">install</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ul><li>打包安装目录</li></ul><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">tar</span> <span class="token parameter variable">-zcvf</span> python3.12.4-linux-arm64.tar.gz /usr/local/python3.12.4/* <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后把压缩包传输到其他设备上。</p><ol start="2"><li>在其他设备上执行：</li></ol><ul><li> 解压</li></ul><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">tar</span> <span class="token parameter variable">-zxvf</span> python3.12.4-linux-arm64.tar.gz <span class="token parameter variable">-C</span> /<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ul><li>安装动态链接库</li></ul><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cp</span> /usr/local/python3.12.4/lib/libpython3* /usr/lib/aarch64-linux-gnu/<span class="token comment"># 如果是 amd64 架构，目标路径则为 /usr/lib/x86_64-linux-gnu/</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="设置环境变量"><a href="#设置环境变量" class="headerlink" title="设置环境变量"></a>设置环境变量</h2><p>编辑 profile 配置文件：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">nano</span> /etc/profile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>在末尾加入以下内容，并保存。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span>/usr/local/python3.12.4/bin:<span class="token environment constant">$PATH</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>使环境变量生效：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">source</span> /etc/profile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="卸载"><a href="#卸载" class="headerlink" title="卸载"></a>卸载</h2><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">rm</span> <span class="token parameter variable">-rf</span> /usr/local/python3.12.4<span class="token function">rm</span> <span class="token parameter variable">-rf</span> /usr/lib/aarch64-linux-gnu/libpython3*<span class="token comment"># 如果是 amd64 架构，则为 rm -rf /usr/lib/x86_64-linux-gnu/libpython3*</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;编译环境&quot;&gt;&lt;a href=&quot;#编译环境&quot; class=&quot;headerlink&quot; title=&quot;编译环境&quot;&gt;&lt;/a&gt;编译环境&lt;/h2&gt;&lt;p&gt;操作系统：Debian 11 arm64&lt;/p&gt;
&lt;p&gt;Python 版本：3.12.4&lt;/p&gt;
&lt;p&gt;Debian 12、</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Linux" scheme="https://blog.iamsjy.com/tags/Linux/"/>
    
    <category term="Debian" scheme="https://blog.iamsjy.com/tags/Debian/"/>
    
    <category term="Python" scheme="https://blog.iamsjy.com/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Linux 下使用 update-alternatives 切换软件默认版本</title>
    <link href="https://blog.iamsjy.com/2024/07/19/update-alternatives/"/>
    <id>https://blog.iamsjy.com/2024/07/19/update-alternatives/</id>
    <published>2024-07-19T09:47:30.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<p><code>update-alternatives</code> 是管理符号链接的工具，在 Ubuntu 和 Debian 中可用。通过它，我们可以方便地切换同一命令使用的软件版本。比如，系统中同时安装了多个 gcc 版本（比如 gcc、riscv64-linux-gnu-gcc 和 aarch64-linux-gnu-gcc），对于不同项目需要使用不同的版本。</p><h2 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h2><p><code>update-alternatives</code> 通过软链接来处理 Linux 中多版本切换问题，软链接存储于 <code>/etc/alternatives</code> 目录。</p><p>比如，cc 命令（<code>/usr/bin/cc</code>）其实是一个软链接，它指向 <code>/etc/alternatives/cc</code> ，而这也是一个软链接，指向 <code>/usr/bin/gcc</code> ，而这才是最终的可执行文件 。</p><h2 id="注册版本"><a href="#注册版本" class="headerlink" title="注册版本"></a>注册版本</h2><pre class="line-numbers language-none"><code class="language-none">格式：sudo update-alternatives --install &lt;链接&gt; &lt;名称&gt; &lt;路径&gt; &lt;优先级&gt;&#96;&lt;链接&gt; 即为命令所在的路径&lt;名称&gt; 为命令的名称&lt;路径&gt; 为最终的可执行文件的路径&lt;优先级&gt; 为正整数，数字越大，优先级越高<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>举个例子：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 注册 riscv64-linux-gnu-gcc 版本</span>$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--install</span> /usr/bin/cc cc /usr/bin/riscv64-linux-gnu-gcc <span class="token number">19</span><span class="token comment"># 注册 aarch64-linux-gnu-gcc 版本</span>$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--install</span> /usr/bin/cc cc /usr/bin/aarch64-linux-gnu-gcc <span class="token number">18</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="切换版本"><a href="#切换版本" class="headerlink" title="切换版本"></a>切换版本</h2><pre class="line-numbers language-none"><code class="language-none">格式：sudo update-alternatives --config &lt;名称&gt;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>举个例子：</p><ul><li><p>把 <code>cc</code> 命令的默认版本由 <code>gcc</code> 切换到 <code>riscv64-linux-gnu-gcc</code>：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--config</span> ccThere are <span class="token number">3</span> choices <span class="token keyword">for</span> the alternative cc <span class="token punctuation">(</span>providing /usr/bin/cc<span class="token punctuation">)</span>.  Selection    Path                            Priority   Status------------------------------------------------------------* <span class="token number">0</span>            /usr/bin/gcc                     <span class="token number">20</span>        auto mode  <span class="token number">1</span>            /usr/bin/aarch64-linux-gnu-gcc   <span class="token number">18</span>        manual mode  <span class="token number">2</span>            /usr/bin/gcc                     <span class="token number">20</span>        manual mode  <span class="token number">3</span>            /usr/bin/riscv64-linux-gnu-gcc   <span class="token number">19</span>        manual modePress <span class="token operator">&lt;</span>enter<span class="token operator">></span> to keep the current choice<span class="token punctuation">[</span>*<span class="token punctuation">]</span>, or <span class="token builtin class-name">type</span> selection number: <span class="token number">3</span>update-alternatives: using /usr/bin/riscv64-linux-gnu-gcc to provide /usr/bin/cc <span class="token punctuation">(</span>cc<span class="token punctuation">)</span> <span class="token keyword">in</span> manual mode<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>把 <code>python3</code> 命令的默认版本由 <code>python3.10</code> 切换到 <code>python3.11</code>：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--config</span> python3There are <span class="token number">2</span> choices <span class="token keyword">for</span> the alternative python3 <span class="token punctuation">(</span>providing /usr/bin/python3<span class="token punctuation">)</span>.  Selection    Path                 Priority   Status------------------------------------------------------------* <span class="token number">0</span>            /usr/bin/python3.10   <span class="token number">2</span>         auto mode  <span class="token number">1</span>            /usr/bin/python3.10   <span class="token number">2</span>         manual mode  <span class="token number">2</span>            /usr/bin/python3.11   <span class="token number">1</span>         manual modePress <span class="token operator">&lt;</span>enter<span class="token operator">></span> to keep the current choice<span class="token punctuation">[</span>*<span class="token punctuation">]</span>, or <span class="token builtin class-name">type</span> selection number: <span class="token number">2</span>update-alternatives: using /usr/bin/python3.11 to provide /usr/bin/python3 <span class="token punctuation">(</span>python3<span class="token punctuation">)</span> <span class="token keyword">in</span> manual mode<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="移除指定版本"><a href="#移除指定版本" class="headerlink" title="移除指定版本"></a>移除指定版本</h2><pre class="line-numbers language-none"><code class="language-none">格式：sudo update-alternatives --remove &lt;名称&gt; &lt;路径&gt;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>举个例子：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 移除 riscv64-linux-gnu-gcc 版本</span>$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--remove</span> cc /usr/bin/riscv64-linux-gnu-gcc<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h2 id="列出可用版本"><a href="#列出可用版本" class="headerlink" title="列出可用版本"></a>列出可用版本</h2><pre class="line-numbers language-none"><code class="language-none">格式：sudo update-alternatives --list &lt;名称&gt;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>举个例子：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 列出 cc 替换组中可用版本</span>$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--list</span> cc/usr/bin/aarch64-linux-gnu-gcc/usr/bin/gcc/usr/bin/riscv64-linux-gnu-gcc<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="查看替换组信息"><a href="#查看替换组信息" class="headerlink" title="查看替换组信息"></a>查看替换组信息</h2><pre class="line-numbers language-none"><code class="language-none">格式：sudo update-alternatives --display &lt;名称&gt;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>举个例子：</p><ul><li><p>查看 <code>cc</code> 替换组信息</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--display</span> cccc - auto mode  <span class="token function">link</span> best version is /usr/bin/gcc  <span class="token function">link</span> currently points to /usr/bin/gcc  <span class="token function">link</span> cc is /usr/bin/cc  slave cc.1.gz is /usr/share/man/man1/cc.1.gz/usr/bin/aarch64-linux-gnu-gcc - priority <span class="token number">18</span>/usr/bin/gcc - priority <span class="token number">20</span>  slave cc.1.gz: /usr/share/man/man1/gcc.1.gz/usr/bin/riscv64-linux-gnu-gcc - priority <span class="token number">19</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>查看 <code>python3</code> 替换组信息</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--display</span> python3python3 - manual mode  <span class="token function">link</span> best version is /usr/bin/python3.10  <span class="token function">link</span> currently points to /usr/bin/python3.11  <span class="token function">link</span> python3 is /usr/bin/python3/usr/bin/python3.10 - priority <span class="token number">2</span>/usr/bin/python3.11 - priority <span class="token number">1</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="设置默认版本"><a href="#设置默认版本" class="headerlink" title="设置默认版本"></a>设置默认版本</h2><pre class="line-numbers language-none"><code class="language-none">格式：sudo update-alternatives --set &lt;名称&gt; &lt;链接&gt;<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>举个例子：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 设置默认版本为 gcc</span>$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--set</span> cc /usr/bin/gcc<span class="token comment"># 设置默认版本为 riscv64-linux-gnu-gcc</span>$ <span class="token function">sudo</span> update-alternatives <span class="token parameter variable">--set</span> cc /usr/bin/riscv64-linux-gnu-gcc<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;code&gt;update-alternatives&lt;/code&gt; 是管理符号链接的工具，在 Ubuntu 和 Debian 中可用。通过它，我们可以方便地切换同一命令使用的软件版本。比如，系统中同时安装了多个 gcc 版本（比如 gcc、riscv64-linux-gnu-</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Linux" scheme="https://blog.iamsjy.com/tags/Linux/"/>
    
    <category term="Debian" scheme="https://blog.iamsjy.com/tags/Debian/"/>
    
    <category term="Ubuntu" scheme="https://blog.iamsjy.com/tags/Ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>使用 Caddy 搭建静态网站</title>
    <link href="https://blog.iamsjy.com/2024/04/05/caddy-static-website/"/>
    <id>https://blog.iamsjy.com/2024/04/05/caddy-static-website/</id>
    <published>2024-04-05T07:40:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>与 Nginx 相比，语法简洁和自动申请 TLS 证书是 Caddy 的两大优势。使用 Caddy 建站对入门者来说更为容易。</p><p>本文简述使用 Caddy 搭建静态网站的步骤。</p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p>对于 Ubuntu 和 Debian 系统，只需几条命令即可安装。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> debian-keyring debian-archive-keyring apt-transport-https <span class="token function">curl</span><span class="token function">curl</span> <span class="token parameter variable">-1sLf</span> <span class="token string">'https://dl.cloudsmith.io/public/caddy/stable/gpg.key'</span> <span class="token operator">|</span> <span class="token function">sudo</span> gpg <span class="token parameter variable">--dearmor</span> <span class="token parameter variable">-o</span> /usr/share/keyrings/caddy-stable-archive-keyring.gpg<span class="token function">curl</span> <span class="token parameter variable">-1sLf</span> <span class="token string">'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt'</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /etc/apt/sources.list.d/caddy-stable.list<span class="token function">sudo</span> <span class="token function">apt</span> update <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> caddy<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><p>对于其他操作系统，请翻阅 <a href="https://caddyserver.com/docs/install">Caddy 官方文档</a>，这里不再赘述。</p><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><p>首先，将需要用到的域名解析到服务器 IP。</p><p>然后删除 <code>/etc/caddy/Caddyfile</code> 中原有内容。也可使用以下命令一键清空：</p><pre class="line-numbers language-none"><code class="language-none">echo &#39;&#39; &gt; &#x2F;etc&#x2F;caddy&#x2F;Caddyfile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>编辑 <code>/etc/caddy/Caddyfile</code>，按照模板进行配置：</p><pre class="line-numbers language-none"><code class="language-none">www.example.com &#123;                  # 域名        root * &#x2F;usr&#x2F;share&#x2F;caddy    # 网站根目录        file_server                # 启用静态文件服务器        tls i@example.com          # 用于生成 TLS 证书的邮箱        encode gzip                # 启用 Gzip 压缩&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>保存配置文件，然后重载 Caddy 配置文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> systemctl reload caddy<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>设置开机自启（可选）</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> caddy<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如果需要在同一台服务器上搭建多个静态网站，只需将其他网站的配置附在 <code>Caddyfile</code> 之后即可。</p><p>例如：</p><pre class="line-numbers language-none"><code class="language-none">www.example.com &#123;        root * &#x2F;usr&#x2F;share&#x2F;caddy&#x2F;www        file_server        tls i@example.com        encode gzip&#125;blog.example.com &#123;        root * &#x2F;usr&#x2F;share&#x2F;caddy&#x2F;blog        file_server        tls i@example.com        encode gzip&#125;web.example.com &#123;        root * &#x2F;usr&#x2F;share&#x2F;caddy&#x2F;web        file_server        tls i@example.com        encode gzip&#125;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>修改完记得重载 Caddy 配置文件。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;与 Nginx 相比，语法简洁和自动申请 TLS 证书是 Caddy 的两大优势。使用 Caddy 建站对入门者来说更为容易。&lt;/p&gt;
&lt;p</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="建站" scheme="https://blog.iamsjy.com/tags/%E5%BB%BA%E7%AB%99/"/>
    
    <category term="Caddy" scheme="https://blog.iamsjy.com/tags/Caddy/"/>
    
  </entry>
  
  <entry>
    <title>解除 MSIX 包系统版本限制</title>
    <link href="https://blog.iamsjy.com/2024/01/22/unlock-system-version-restrictions-of-msix-packages/"/>
    <id>https://blog.iamsjy.com/2024/01/22/unlock-system-version-restrictions-of-msix-packages/</id>
    <published>2024-01-22T08:30:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>微软商店很多软件软件对系统版本要求太高，甚至低几个小版本都安装不上。这很大程度上并不是因为兼容性问题，因此可以通过改包来解决。现有的教程大多是直接安装解压后的软件包，这样并不方便管理，因此本文采用了另一种方法。</p><p>下面以 Apple Music 为例谈谈具体方法。</p><h2 id="下载-MSIX-安装包"><a href="#下载-MSIX-安装包" class="headerlink" title="下载 MSIX 安装包"></a>下载 MSIX 安装包</h2><p>首先去 <a href="https://apps.microsoft.com/store/apps?hl=zh-cn&gl=cn">网页版微软商店</a> 获取对应软件的链接，比如 Apple Music 的链接是这个：</p><pre class="line-numbers language-none"><code class="language-none">https:&#x2F;&#x2F;apps.microsoft.com&#x2F;detail&#x2F;9PFHDD62MXS1?hl&#x3D;zh-cn&amp;gl&#x3D;CN<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>然后打开 <a href="https://store.rg-adguard.net/">微软商店直链解析器</a>，粘贴软件页面链接，并点击右侧的对勾按钮，就能解析安装包直链了。<img src="https://img-cdn.boochi.cn/i/2024/01/23/65af902944e8d.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af902944e8d.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123145959552"></p><p>我们要下载是以 <code>.msixbundle</code> 结尾的文件，这个才是真正的安装包，如红框中所示。</p><h2 id="修改-MSIX-包"><a href="#修改-MSIX-包" class="headerlink" title="修改 MSIX 包"></a>修改 MSIX 包</h2><p>去微软商店下载 <a href="https://apps.microsoft.com/detail/9N5LW3JBCXKF?query=msix&hl=zh-cn&gl=CN">MSIX Packaging Tool</a> 这个工具，解包和打包都需要用到它。</p><p>用压缩软件解压之前下载的 <code>.msixbundle</code> 格式安装包。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af904cb217e.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af904cb217e.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123152813805"></p><p>解压后的目录里有一个打包的 <code>.msix</code> 文件，这个是后面要用到的。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af905311ce0.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af905311ce0.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123152855490"></p><p>打开 MSIX Packaging Tool，选择“程序包编辑器”。<img src="https://img-cdn.boochi.cn/i/2024/01/23/65af9055dab33.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af9055dab33.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123152422792"></p><p>然后选择解压后得到的 <code>.msix</code> 文件，并选择打开程序包。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af9059cd1ef.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af9059cd1ef.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123153158884"></p><p>然后点击“打开文件”按钮，会弹出一个记事本，这里我们需要对最低版本进行修改，请看下一张图。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af9087a7195.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af9087a7195.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123153255877"></p><p>找到 <code>TargetDeviceFamily</code>  一行，其中 <code>MinVersion</code> 的值为最低系统版本，如红框中所示。只需将其改为低于或等于当前系统版本即可（不要删除前面的<code>10.0.</code>）。如果你不知道当前系统版本，按 Win + R 并执行 <code>winver</code> 命令即可。</p><p>例如：对于 21H2 版本（LTSC 2021），将 <code>MinVersion</code> 的值修改成 <code>10.0.19044.0</code> 就能正常安装。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af908d5543e.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af908d5543e.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123153508524"></p><p>修改完，保存并关闭记事本即可。然后点击右下角的保存按钮。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af90924b72b.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af90924b72b.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123155810440"></p><p>在弹出的新窗口中点击“否，不升级”，然后选择修改后的软件包的保存路径。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af909593c65.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af909593c65.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123155914313"></p><p>至此，软件包修改好了。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af909885163.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af909885163.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123160358981"></p><h2 id="对-MSIX-包签名"><a href="#对-MSIX-包签名" class="headerlink" title="对 MSIX 包签名"></a>对 MSIX 包签名</h2><p>这里要用到 <a href="https://github.com/Empyreal96/Appx_Re-Sign/releases">Appx Re-Sign</a> 这款工具，对 MSIX 包进行签名，并生成安装脚本。</p><p>如果上述链接无法访问可通过以下链接下载：<a href="https://iamsjy.lanzoul.com/idN9r1m0pwij">https://iamsjy.lanzoul.com/idN9r1m0pwij</a></p><p>解压后运行 <code>pkgrsn.exe</code>。然后回车，并选择修改好的 <code>.msix</code> 包。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af909e9cbfa.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af909e9cbfa.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123162035745"></p><p>以下无需修改，使用默认设置即可，包括密码（直接回车）。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af90a6d6bd2.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af90a6d6bd2.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123162752672"></p><p>然后工具会自动进行签名并重新打包，输出 <code>Package successfully re-signed.</code>则表明签名成功。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af90aa14d2b.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af90aa14d2b.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123162931460"></p><p>完成后，工具会自动打开签名好的 <code>.msix</code> 包所在文件夹。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af90aed5763.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af90aed5763.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123163154462"></p><h2 id="安装-MSIX-包"><a href="#安装-MSIX-包" class="headerlink" title="安装 MSIX 包"></a>安装 MSIX 包</h2><p>由于是自签名的程序，系统默认会阻止安装，因此需要打开“设置”-“更新与安全”-“开发者选项”中的开发人员模式。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af90bfab7c1.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af90bfab7c1.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123163904977"></p><p>双击 <code>.bat</code> 结尾的文件进行安装。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af90c392e4a.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af90c392e4a.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20240123164446746"></p><p>安装成功。</p><p><img src="https://img-cdn.boochi.cn/i/2024/01/23/65af911fa434c.jpeg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/01/23/65af911fa434c.jpeg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="img"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;微软商店很多软件软件对系统版本要求太高，甚至低几个小版本都安装不上。这很大程度上并不是因为兼容性问题，因此可以通过改包来解决。现有的教程大多</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Windows" scheme="https://blog.iamsjy.com/tags/Windows/"/>
    
    <category term="msix" scheme="https://blog.iamsjy.com/tags/msix/"/>
    
  </entry>
  
  <entry>
    <title>骁龙 410 随身 WiFi 刷入 Debian 系统并优化</title>
    <link href="https://blog.iamsjy.com/2023/12/11/snapdragon-410-portable-wifi-hotspot-flash-debian-and-optimize/"/>
    <id>https://blog.iamsjy.com/2023/12/11/snapdragon-410-portable-wifi-hotspot-flash-debian-and-optimize/</id>
    <published>2023-12-11T08:45:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近我在网上看到一款骁龙 410 SoC 的随身 WiFi，性价比高，领券后十元以下就能买到。更重要的是，这款 SoC 的随身 WiFi 能刷 Debian 系统。你可以在上面搭建网站甚至 MC 服务器，也可以接上扩展版当 Linux 开发板用，可玩性很高。</p><p>本文记录一下刷机的步骤和注意事项。</p><h2 id="硬件配置"><a href="#硬件配置" class="headerlink" title="硬件配置"></a>硬件配置</h2><p>这款随身 WiFi 配置如下：</p><table><thead><tr><th>SoC</th><th>骁龙410（MSM8916）四核 Cortex-A53，64 位</th></tr></thead><tbody><tr><td>内存</td><td>512MB</td></tr><tr><td>存储</td><td>4GB</td></tr><tr><td>版号</td><td>UFI001C、UFI001B、UFI003、UZ801、SP970</td></tr></tbody></table><blockquote class="blockquote-note blockquote-note__caution"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></div>注意</div><div class="blockquote-note__content"><p><strong>不是骁龙 410 SoC 的随身 WiFi 无法刷机，请知悉。</strong></p></div></blockquote><h2 id="所需文件"><a href="#所需文件" class="headerlink" title="所需文件"></a>所需文件</h2><ul><li><a href="https://www.123pan.com/s/7368Vv-3TyQh.html">高通 9008 驱动</a></li><li><a href="https://googledownloads.cn/android/repository/platform-tools-latest-windows.zip">ADB 工具</a></li><li><a href="https://www.123pan.com/s/7368Vv-hTyQh.html">Miko 备份工具</a></li><li><a href="https://www.123pan.com/s/XwVDVv-WICn3">Debian 刷机包</a></li></ul><p>如果不确定下载哪个，请先查看板子型号再下载刷机包。</p><h2 id="查看板子型号"><a href="#查看板子型号" class="headerlink" title="查看板子型号"></a>查看板子型号</h2><p>用螺丝刀将随身 WiFi 的外壳拆开，查看板子上方的丝印，型号一般以 UFI、UZ 或 SP 开头。如红框中所示，我买到的型号是 UFI003。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce22e2579.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce22e2579.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1702214357490"></p><h2 id="安装-9008-驱动"><a href="#安装-9008-驱动" class="headerlink" title="安装 9008 驱动"></a>安装 9008 驱动</h2><p>执行 <code>driver.exe</code>，并点击立即安装。在弹出如下窗口中，点击“安装”。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce32c14a5.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce32c14a5.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231204174343852">   </p><h2 id="安装-ADB-工具"><a href="#安装-ADB-工具" class="headerlink" title="安装 ADB 工具"></a>安装 ADB 工具</h2><p>解压 <code>platform-tools_r34.0.5-windows.zip</code>，并将解压目录添加到环境变量。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce3d09e64.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce3d09e64.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210224939537"></p><p>打开命令提示符，执行 <code>adb version</code>。有如下输出，则表明配置正确。</p><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell">C:\Users\Thinkpad>adb versionAndroid Debug Bridge version 1<span class="token punctuation">.</span>0<span class="token punctuation">.</span>41Version 34<span class="token punctuation">.</span>0<span class="token punctuation">.</span>5-10900879Installed as D:\platform-tools\adb<span class="token punctuation">.</span>exeRunning on Windows 10<span class="token punctuation">.</span>0<span class="token punctuation">.</span>19045<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="安装-Miko-备份工具"><a href="#安装-Miko-备份工具" class="headerlink" title="安装 Miko 备份工具"></a>安装 Miko 备份工具</h2><p>解压 <code>MiKo_Loder Pro.zip</code>，运行 <code>miko.exe</code>  安装备份工具。安装完成后，桌面上会出现 Miko 备份工具的快捷方式。在图标上右键，打开文件所在位置，将解压得到的 <code>Loader.exe</code> 复制到 Miko 安装目录即可。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce44c7690.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce44c7690.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210215138055"></p><h2 id="开启-ADB"><a href="#开启-ADB" class="headerlink" title="开启 ADB"></a>开启 ADB</h2><p>将随身 WiFi 插入电脑 USB 接口。打开设备管理器，如果此时多了一个名叫 <code>Android Composite ADB Interface</code> 的设备，则表明随身 WiFi 已经开启 ADB，无需执行其他操作。</p><p>如果没有出现这个设备，则需要手动开启 ADB。以 <code>UZ801</code> 型号为例，连上随身 WiFi 的热点，并访问 <a href="http://192.168.100.1/usbdebug.html">http://192.168.100.1/usbdebug.html</a> 即可开启 ADB，再次访问即可关闭。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce6125f05.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce6125f05.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210215947101"></p><blockquote class="blockquote-note blockquote-note__info"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></div>提示</div><div class="blockquote-note__content"><p>部分 UFI003 型号的随身 WiFi 默认不开 ADB，需要手动进 9008 模式刷入已开启 ADB 的安卓固件。</p><p>固件下载地址：<a href="https://www.123pan.com/s/NUK8Vv-nRdl">https://www.123pan.com/s/NUK8Vv-nRdl</a> 提取码：1LEW</p><p><strong>手动进 9008 模式的方法：按住 reset 键不放（随身 WiFi 背面二维码右上角的小孔，用取卡针或牙签戳即可），并将随身 WiFi 插入电脑，松开 reset 键。</strong></p></div></blockquote><h2 id="备份原厂固件"><a href="#备份原厂固件" class="headerlink" title="备份原厂固件"></a>备份原厂固件</h2><p>为避免刷错固件变砖等情况，强烈建议备份原厂固件。</p><p>打开命令提示符，执行 <code>adb reboot edl</code>，此时设备管理器中会多出高通 9008 设备。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce6c996b3.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce6c996b3.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210221934063"></p><p>我们运行上文所提到的 <code>Loader.exe</code>（即 Miko 工具）进行备份数据。</p><p>此时窗口右侧显示设备信息，表明随身 WiFi 已被成功识别。如果显示 <strong>Not Found</strong> 字样，请重新安装 9008 驱动并再次尝试。</p><p>依次点击 <strong>Read</strong> –&gt;<strong>Partition Backup/Erase</strong>–&gt;<strong>Load Partition Structure</strong>。然后双击红色 Option 下面的灰条，选择备份目录，并点击 <strong>Read Full Image</strong>。再次选择备份目录，并取一个文件名，点击确定，即可开始备份。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce79b5a9c.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce79b5a9c.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210233137419"></p><p>等待几分钟，直到进度条达到 100%，右侧输出 Sucess 字样和用时，则表明备份完成 。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce8b43166.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce8b43166.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210234948575"></p><p>如果需要恢复备份，依次点击 <strong>Flash</strong> –&gt;<strong>emmc block0 flasher</strong>。然后双击 <strong>Emmc Data</strong>，选择之前备份的文件（<code>.bin</code> 格式），并点击下方 <strong>Flash</strong> 按钮，等待刷机完成即可。</p><p><img src="https://img-cdn.boochi.cn/i/2024/07/08/668b9b21e9950.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2024/07/08/668b9b21e9950.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="668b99e4dcc3d.png"></p><h2 id="刷入-Debian"><a href="#刷入-Debian" class="headerlink" title="刷入 Debian"></a>刷入 Debian</h2><p>拔掉随身 WiFi 并重新插入 USB 接口，解压 Debian 刷机包。打开命令提示符，执行 <code>adb reboot bootloader</code> 进入 fastboot 模式。运行刷机包中的 <code>flash.bat</code>刷入系统，等待刷机完成。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ce9854dd3.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ce9854dd3.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210235717253"></p><p>输出 <code>all done!</code> 则表明刷机完成。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cea228405.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cea228405.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231210235939348"></p><h2 id="安装-RNDIS-网络驱动"><a href="#安装-RNDIS-网络驱动" class="headerlink" title="安装 RNDIS 网络驱动"></a>安装 RNDIS 网络驱动</h2><blockquote class="blockquote-note blockquote-note__info"><div class="blockquote-note__header"><div class="blockquote-note__icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></div>提示</div><div class="blockquote-note__content"><p>如果设备管理器只显示 Android Device，右键更新驱动程序，依次选择 Microsoft - USB 移动宽带网络适配器，然后重新插入随身 WiFi，会出现一个未知设备，再根据下述步骤进行操作。</p></div></blockquote><p>重新插入随身 WiFI，打开任务管理器，在其他设备中会出现一个未知设备或以 RNDIS 开头的设备。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ceae713b7.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ceae713b7.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211002244435"></p><p>右键，<strong>更新驱动程序</strong>–&gt;<strong>浏览我的电脑以查找驱动程序</strong>–&gt;<strong>让我从计算机上的可用驱动程序列表中选取</strong>–&gt;<strong>显示所有设备</strong>，等待列表加载完成。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576ced636acb.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576ced636acb.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211002348468"></p><p>左侧选择 <strong>Microsoft</strong>，右侧选择 <strong>基于远程 NDIS 的 Internet 共享设备</strong>，在弹出窗口中选择是，并确定。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cee2bd3a7.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cee2bd3a7.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211002724457"></p><p>至此，RNDIS 驱动安装成功。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf3d95a0f.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf3d95a0f.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211002850196"></p><h2 id="连接随身-WiFi-终端"><a href="#连接随身-WiFi-终端" class="headerlink" title="连接随身 WiFi 终端"></a>连接随身 WiFi 终端</h2><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf55d48de.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf55d48de.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211004205761"></p><p>驱动安装成功后，电脑上会多出一个名叫 <code>4G_UFI_123456</code> 的 NDIS 设备，同时会出现一个同名的热点，密码为 <strong>12345678</strong>。</p><p>Debian 默认用户名为 user，密码为 1，root 密码也为 1。<strong>请务必及时修改密码（命令：passwd）。</strong></p><p>此时可以通过 adb 或 ssh 连接到 Debian 终端。</p><h3 id="通过-adb-连接"><a href="#通过-adb-连接" class="headerlink" title="通过 adb 连接"></a>通过 adb 连接</h3><p>将随身 WiFi 插入电脑 USB 接口，使用以下命令查看已连接 adb 设备：</p><pre class="line-numbers language-none"><code class="language-none">adb devices<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell">C:\Users\Thinkpad>adb devicesList of devices attached0123456789      device<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>有新设备出现时，使用以下指令进入 bash：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">adb shell<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>通过 adb 连接时，使用 <code>nmtui</code>、<code>htop</code> 等需要显示图形的命令，可能会出现如下错误：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">root@openstick:/<span class="token comment"># nmtui</span><span class="token environment constant">TERM</span> environment variable needs set.<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>设置 <code>TERM</code> 环境变量即可解决。</p><pre class="line-numbers language-none"><code class="language-none">export TERM&#x3D;linux<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="通过-ssh-连接"><a href="#通过-ssh-连接" class="headerlink" title="通过 ssh 连接"></a>通过 ssh 连接</h3><p>将随身 WiFi 插入电脑 USB 接口或连接上随身 WiFi 的热点，使用以下指令进行连接：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ssh</span> root@192.168.68.1<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如果连不上说明系统还在启动，请稍后再试。</p><h2 id="随身-WiFi-联网"><a href="#随身-WiFi-联网" class="headerlink" title="随身 WiFi 联网"></a>随身 WiFi 联网</h2><p>此时随身 WiFi 并没有联网，必须要关闭热点才能连接 WiFi。下面介绍详细步骤。</p><p>首先打开命令提示符，执行 <code>adb shell</code> 进入 Debian 终端。然后设置 TERM 环境变量：<code>export TERM=linux</code>。</p><p>执行 <code>nmtui</code>，选择“编辑连接”。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf5cb34d0.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf5cb34d0.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211005030766"></p><p>左侧使用方向键选择 <code>bridge</code>，右侧选择“编辑”。并回车。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf6e3537f.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf6e3537f.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211005119460"></p><p>删除其中的 <code>wifi</code>，并选择确定。。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf8484bd9.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf8484bd9.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211005229505"></p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf944056e.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf944056e.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211005307459"></p><p>返回，选择启用连接，则可连接 WiFi。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cf9b13fd4.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cf9b13fd4.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="img"></p><h2 id="优化系统"><a href="#优化系统" class="headerlink" title="优化系统"></a>优化系统</h2><p>删除无效软件包仓库</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">rm</span> <span class="token parameter variable">-rf</span> /etc/apt/sources.list.d/*<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>删除多余软件包</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">apt</span> autopurge <span class="token parameter variable">-y</span> adoptopenjdk-8-hotspot<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>更换软件源</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> <span class="token operator">&lt;&lt;</span>EOF<span class="token operator">></span> /etc/apt/sources.listdeb http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free<span class="token comment"># deb-src http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free</span>deb http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free<span class="token comment"># deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free</span><span class="token comment">#deb http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free</span><span class="token comment"># deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free</span>deb http://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free<span class="token comment"># deb-src http://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free</span>EOF<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>更新软件包</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">apt</span> update <span class="token operator">&amp;&amp;</span> <span class="token function">apt</span> upgrade <span class="token parameter variable">-y</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装常用软件包</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> <span class="token function">nano</span> <span class="token function">curl</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>删除软件包缓存</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">apt</span> clean<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="关闭-LED-灯（可选）"><a href="#关闭-LED-灯（可选）" class="headerlink" title="关闭 LED 灯（可选）"></a>关闭 LED 灯（可选）</h2><p>随身 WiFi 开机后，LED 灯会不停地闪烁，如果不喜欢的话，执行以下命令即可关闭。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">echo</span> none <span class="token operator">></span> /sys/class/leds/blue:wifi/trigger<span class="token builtin class-name">echo</span> none <span class="token operator">></span> /sys/class/leds/red:os/trigger<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>执行后会立即生效。为避免重启后失效，建议设置开机自动执行。</p><p>编辑 <code>/etc/rc.local</code> 文件，并将以上两行命令添加到 <code>exit 0</code> 之前，并保存。</p><p><img src="https://img-cdn.boochi.cn/i/2023/12/11/6576cfab93361.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/12/11/6576cfab93361.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231211155540049"></p><p>关于更多 LED 灯控制的高级用法，建议参考 <a href="https://blog.csdn.net/weixin_41099712/article/details/130836998">随身WIFI折腾日记(一)—霓虹灯</a> 这篇文章。</p><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><p>感谢 HandsomeHacker 大佬的 <a href="https://github.com/OpenStick/OpenStick">OpenStick</a> 开源项目和苏苏小亮亮大佬的 <a href="https://www.kancloud.cn/a813630449/ufi_car/2795165">刷机包</a>，能在随身 WiFi 上用上 Linux 系统离不开他们的努力。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;最近我在网上看到一款骁龙 410 SoC 的随身 WiFi，性价比高，领券后十元以下就能买到。更重要的是，这款 SoC 的随身 WiFi 能</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Linux" scheme="https://blog.iamsjy.com/tags/Linux/"/>
    
    <category term="Debian" scheme="https://blog.iamsjy.com/tags/Debian/"/>
    
    <category term="随身WiFi" scheme="https://blog.iamsjy.com/tags/%E9%9A%8F%E8%BA%ABWiFi/"/>
    
    <category term="骁龙410" scheme="https://blog.iamsjy.com/tags/%E9%AA%81%E9%BE%99410/"/>
    
  </entry>
  
  <entry>
    <title>斐讯 N1 刷 Armbian 破解校园网多设备限制</title>
    <link href="https://blog.iamsjy.com/2023/10/26/phicomm-n1-armbian-break-multi-device-restrictions-on-campus-network/"/>
    <id>https://blog.iamsjy.com/2023/10/26/phicomm-n1-armbian-break-multi-device-restrictions-on-campus-network/</id>
    <published>2023-10-26T07:30:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>由于校园网只能同时登录两台设备，而且有 AP 隔离，时不时还要重新登录认证，用起来很不方便。我们校园网采用 Dr.com 网页认证，向认证服务器发送一个 GET 请求即可认证成功。</p><p>由于我对 OpenWrt 并不熟悉，折腾了几天都没有搞定，于是我换了一种思路。简而言之，就是用 N1 过校园网认证，然后开热点共享给其他设备。</p><h2 id="开箱及介绍"><a href="#开箱及介绍" class="headerlink" title="开箱及介绍"></a>开箱及介绍</h2><p>收到的是黑色的 N1。除了外壳上有几张贴纸，成色还算可以。加上非原装电源、HDMI 线、网线和运费，闲鱼 85 大洋到手。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/28/653c8a94ae9cf.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/28/653c8a94ae9cf.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20231028_121238.jpg"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/28/653c8b95ce9d8.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/28/653c8b95ce9d8.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="IMG_20231028_121316.jpg"></p><p>斐讯 N1 的技术规格如下：</p><pre class="line-numbers language-none"><code class="language-none">分辨率 - 支持 4K 输出SoC - 晶晨 S905D 64 位 4 核 Cortex-A53 1.5 GHzGPU - 5 核 Mali-450RAM - 2GBROM - 8GB eMMCWiFi - 2.4G&#x2F;5G蓝牙 - BT4.1电源 - 5V&#x2F;2A x1接口 - 千兆网口 x1，HDMI x1，USB2.0 x2<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>由于 N1 当初是为挖矿和 NAS 而设计的，其性能不言而喻。比它便宜的少 WiFi，比它性能好且接口全的价格是它的几倍。<br>人称刷机小王子，N1 可以刷 Android TV、Armbian、OpenWrt、CentOS 等多种系统，在恩山论坛能找到大量的刷机教程。</p><p>较高的配置提供了更多的可玩性。在破解校园网多设备认证的同时，我们还可以在 N1 上搭建 Jellyfin 媒体服务器、Alist 网盘……这里就不再赘述了。</p><h2 id="需要准备"><a href="#需要准备" class="headerlink" title="需要准备"></a>需要准备</h2><ul><li>斐讯 N1</li><li>U 盘 1-2 个（不小于 8G）</li><li>HDMI 线一根</li><li>网线一根</li><li>带网口的 Type-C 扩展坞</li><li>显示器（或 USB 采集卡）</li><li>鼠标一个</li></ul><h2 id="开启-ADB"><a href="#开启-ADB" class="headerlink" title="开启 ADB"></a>开启 ADB</h2><p>如果你像我一样没有显示器，可以改用视频采集教程卡来获取 N1 的画面。给 N1 插上鼠标，点四下固件版本，即可开启 ADB。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a95dfd90d4.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a95dfd90d4.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231022145921259"></p><h2 id="系统降级"><a href="#系统降级" class="headerlink" title="系统降级"></a>系统降级</h2><p>如果系统是 2.19 版本，则可跳过此步骤。如果是其他版本，必须要给 N1 降级才能恢复线刷模式。由于卖家已经降级好了，这里我就不再赘述，需要降级的请参考：<a href="https://www.right.com.cn/forum/thread-340279-1-1.html">斐讯T1和N1降级恢复线刷功能 , adb脚本工具</a>。</p><h2 id="备份原厂系统（可选）"><a href="#备份原厂系统（可选）" class="headerlink" title="备份原厂系统（可选）"></a>备份原厂系统（可选）</h2><p>为了便于恢复，我建议备份原厂系统。由于校园网有 AP 隔离，这里我连接手机热点，同时电脑也要连上相同的热点。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a95ea88efb.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a95ea88efb.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot 2023-10-22 14-35-03"></p><p>下载 <a href="https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn">ADB 工具包</a> ，解压并在当前目录打开 cmd。</p><pre class="line-numbers language-none"><code class="language-none">.\adb.exe connect 设备IP<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>如显示类似 <code>connected to 192.168.x.x:5555</code> 则表明已连接上。然后输入以下命令打开 <code>adb shell</code>：</p><pre class="line-numbers language-none"><code class="language-none">.\adb shell<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>切换到 root 用户</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">su</span> root<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>通过 <code>df -h</code>命令查看 U 盘挂载目录，比如我的是 <code>/mnt/media_rw/5840-1BB0</code>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a9600735c0.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a9600735c0.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231022151144151"></p><p>然后整机备份到 U 盘。</p><p><strong>注意：<code>5840-1BB0</code>这部分要根据实际情况自行替换。</strong></p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> /dev/block/mmcblk0 <span class="token operator">></span>/mnt/media_rw/5840-1BB0/mmcblk0_backup.bin<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a96065c5a4.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a96065c5a4.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231022151203591"></p><p>等待命令执行完成即可。</p><h2 id="烧录镜像"><a href="#烧录镜像" class="headerlink" title="烧录镜像"></a>烧录镜像</h2><p>打开 Armbian 镜像<a href="https://github.com/ophub/amlogic-s9xxx-armbian/releases">下载页</a>，下载带 <code>s905d</code> 的最新版镜像，并使用 <a href="https://rufus.ie/zh/">Rufus</a> 工具将其刷入 U 盘。</p><p>我使用的镜像是 <code>Armbian_23.11.0_amlogic_s905d_lunar_6.1.59_server_2023.10.20.img.gz</code>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a9610a2533.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a9610a2533.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231026140038797"></p><h2 id="通过-U-盘启动"><a href="#通过-U-盘启动" class="headerlink" title="通过 U 盘启动"></a>通过 U 盘启动</h2><p>下载 U 盘启动工具，工具和教程如下：</p><p>链接: <a href="https://pan.baidu.com/s/1yTy4_zz4-4tOHh8VbRnBqg">https://pan.baidu.com/s/1yTy4_zz4-4tOHh8VbRnBqg</a> 提取码: 2d89</p><p>将 U 盘连上 N1 并上电开机。启动到原厂系统后，将电脑和 N1 盒子同时连接手机热点，然后执行 <code>U盘启动.BAT</code> ，输入 N1 的 IP 地址并回车。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a961e9d7d8.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a961e9d7d8.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231022155738360"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a962c32e0e.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a962c32e0e.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231022155851235"></p><p>使用扩展坞将手机与 N1 的网口相连，手机上开启以太网络共享。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a9662d2c16.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a9662d2c16.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1698303062211"></p><p>使用 NetX 工具扫描 N1 的 IP，我这边是 <code>192.168.46.237</code>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a966b55597.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a966b55597.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1698303146696"></p><p>然后通过 ssh 登录 Armbian，默认用户：root，默认密码：1234。首次登录需要修改密码，并创建普通用户。</p><p>然后执行以下命令安装 Armbian 到 eMMC：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">armbian-install<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>设备 ID 选择 <code>101</code>，文件系统选择 <code>ext4</code>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a9674a7b9d.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a9674a7b9d.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1698303062218"></p><p>安装完成后执行 <code>poweroff</code> 关机，拔出 U 盘，并重新插入电源线。</p><p>然后通过 ssh 登录 Armbian，并配置 22 端口的内网穿透，具体方法就不说了。</p><h2 id="自动认证校园网"><a href="#自动认证校园网" class="headerlink" title="自动认证校园网"></a>自动认证校园网</h2><p>保持以太网络共享开启，在 Armbian 上编写配置文件：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">nano</span> /opt/drcom.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>以我校的 Dr.com 网页认证为例：</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token function">curl</span> <span class="token parameter variable">-m</span> <span class="token number">5</span>  https://www.baidu.com/ <span class="token operator">></span> /tmp/baidu.com<span class="token assign-left variable">check_status</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">curl</span> <span class="token parameter variable">-I</span> <span class="token parameter variable">-m</span> <span class="token number">5</span> <span class="token parameter variable">-s</span> <span class="token parameter variable">-w</span> <span class="token string">"%&#123;http_code&#125;<span class="token entity" title="\n">\n</span>"</span> <span class="token parameter variable">-o</span> /dev/null www.baidu.com<span class="token variable">`</span></span><span class="token builtin class-name">echo</span> <span class="token variable">$check_status</span><span class="token keyword">if</span> <span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token variable">$check_status</span> <span class="token operator">!=</span> <span class="token number">200</span>  <span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token keyword">then</span>    <span class="token builtin class-name">echo</span> <span class="token string">"Not signed in yet"</span>    <span class="token function">curl</span> <span class="token string">'http://172.20.xxx.xxx/drcom/login?callback=dr1003&amp;DDDDD=学号%40telecom&amp;upass=密码&amp;0MKKey=123456&amp;R1=0&amp;R2=&amp;R3=0&amp;R6=0¶=00&amp;v6ip=&amp;terminal_type=1&amp;lang=zh-cn&amp;jsVersion=4.1.3&amp;v=7472&amp;lang=zh'</span> <span class="token punctuation">\</span><span class="token keyword">else</span>    <span class="token builtin class-name">echo</span> <span class="token string">"Already logged in"</span><span class="token keyword">fi</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>执行 <code>crontab -e</code>，添加以下内容并保存</p><pre class="line-numbers language-none"><code class="language-none">*&#x2F;1 * * * * bash &#x2F;opt&#x2F;drcom.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>关闭手机上的以太网络共享，将 N1 网口与宿舍网口相连。等待一分钟，不出意外的话能通过 ssh 连上 Armbian了。</p><h2 id="创建热点"><a href="#创建热点" class="headerlink" title="创建热点"></a>创建热点</h2><p>如果默认的 apt 源速度过慢，可以先换成国内源。</p><ul><li><p>编辑 <code>/etc/apt/sources.list</code>，将 <code>ports.ubuntu.com</code> 替换为 <code>mirrors.ustc.edu.cn/ubuntu-ports</code>。</p></li><li><p>编辑  <code>/etc/apt/sources.list.d/armbian.list</code>，将 <code>apt.armbian.com</code> 替换为 <code>mirrors.ustc.edu.cn/armbian</code>。</p></li></ul><p>然后更新 apt 索引并安装依赖。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> update <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> libgtk-3-dev build-essential gcc g++ pkg-config <span class="token function">make</span> hostapd libqrencode-dev libpng-dev dnsmasq<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装 <a href="https://github.com/lakinduakash/linux-wifi-hotspot">Linux Wifi Hotspot</a></p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> clone https://github.com/lakinduakash/linux-wifi-hotspot<span class="token builtin class-name">cd</span> linux-wifi-hotspot/src/scripts<span class="token function">sudo</span> <span class="token function">make</span> install-cli-only<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>修改配置文件</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">nano</span> /etc/create_ap.conf<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>网关、WiFI名称、密码等可自行设置。</p><pre class="line-numbers language-none"><code class="language-none">CHANNEL&#x3D;defaultGATEWAY&#x3D;192.168.12.1WPA_VERSION&#x3D;2ETC_HOSTS&#x3D;0DHCP_DNS&#x3D;gatewayNO_DNS&#x3D;0NO_DNSMASQ&#x3D;0HIDDEN&#x3D;0MAC_FILTER&#x3D;0MAC_FILTER_ACCEPT&#x3D;&#x2F;etc&#x2F;hostapd&#x2F;hostapd.acceptISOLATE_CLIENTS&#x3D;0SHARE_METHOD&#x3D;natIEEE80211N&#x3D;1IEEE80211AC&#x3D;1HT_CAPAB&#x3D;[HT40+]VHT_CAPAB&#x3D;DRIVER&#x3D;nl80211NO_VIRT&#x3D;0COUNTRY&#x3D;FREQ_BAND&#x3D;5NEW_MACADDR&#x3D;DAEMONIZE&#x3D;0NO_HAVEGED&#x3D;0WIFI_IFACE&#x3D;wlan0INTERNET_IFACE&#x3D;eth0SSID&#x3D;此处为WiFi名称PASSPHRASE&#x3D;此处为WiFi密码USE_PSK&#x3D;0<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>启动热点</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> systemctl start create_ap<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>设置开机自启</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> create_ap<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="网速测试"><a href="#网速测试" class="headerlink" title="网速测试"></a>网速测试</h2><p>这是在 N1 上测到最快的网速。多次测试，下行速度稳定在 94Mbps 左右，上行速度普遍在 20-30 Mbps。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/28/653c6d1eba2b1.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/28/653c6d1eba2b1.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_2023-10-28-09-45-31-497_com.sonelli.juicessh-edit.jpg"></p><p>设备上测到的网速并不稳定。使用与 N1 相同测速节点（苏州电信）时，下行速度仅 40-60 Mpbs。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/27/653a967d10878.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/27/653a967d10878.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="image-20231026125941267.png"></p><p>但使用南大测速节点时，下行速度达到 60-95 Mbps。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/28/653c6d4e4373a.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/28/653c6d4e4373a.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_2023-10-28-10-02-45-133_com.android.chrome-edit.jpg"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/28/653c6d4de005e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/28/653c6d4de005e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Screenshot_2023-10-28-09-30-48-213_com.android.chrome-edit.jpg"></p><p>鉴于 N1 较弱的 WiFi 性能和信号传输中的损耗，就目前来说，这个速度还是能接受的。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>对于学校的百兆网来说，N1 的网络性能也够用。但本文并不是建议你购买 N1，千兆硬路由或许是更佳的选择。</p><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ol><li><a href="https://zhuanlan.zhihu.com/p/157726613">OBS直播，采集卡怎么设置？</a></li><li><a href="https://luotianyi.vc/1306.html">斐讯N1探索手记#1 – 降级并刷入armbian系统</a></li><li><a href="https://www.right.com.cn/FORUM/thread-7156363-1-1.html">N1原厂eMMC整机备份和各项独立备份教程(含工具软件)</a></li><li><a href="https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/README.cn.md">安装及升级 Armbian 的相关说明</a></li><li><a href="https://www.right.com.cn/FORUM/thread-431683-1-1.html">N1 U盘启动教程（可用于SX05RE或ARMBIAN等系统）</a></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;由于校园网只能同时登录两台设备，而且有 AP 隔离，时不时还要重新登录认证，用起来很不方便。我们校园网采用 Dr.com 网页认证，向认证服</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Linux" scheme="https://blog.iamsjy.com/tags/Linux/"/>
    
    <category term="N1" scheme="https://blog.iamsjy.com/tags/N1/"/>
    
    <category term="Armbian" scheme="https://blog.iamsjy.com/tags/Armbian/"/>
    
    <category term="校园网" scheme="https://blog.iamsjy.com/tags/%E6%A0%A1%E5%9B%AD%E7%BD%91/"/>
    
  </entry>
  
  <entry>
    <title>（转载）为 Azure AD 应用创建无限时长的 key</title>
    <link href="https://blog.iamsjy.com/2023/10/13/create-unlimited-duration-keys-for-azure-ad-applications/"/>
    <id>https://blog.iamsjy.com/2023/10/13/create-unlimited-duration-keys-for-azure-ad-applications/</id>
    <published>2023-10-13T01:14:00.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<p>本文转载于 <a href="https://zzy-ac.github.io/2022/09/23/wei-azure-api-chuang-jian-wu-xian-shi-chang-de-key/">点墨阁</a>，遵循 <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh">CC BY-SA 4.0 协议</a>。</p><blockquote><p>早在 2021 年 4 月微软就移除了 AzureAD 应用程序注册中永不过期的选项（Never Expire），出于对用户安全的考虑，这一变更显然是有其价值的，但也为广大开发者带来了不便。因此，本文章经过探索找到了一个可以绕过限制创建终结日期为任意年份密钥的方法。</p></blockquote><h2 id="登陆-Azure-AD-平台"><a href="#登陆-Azure-AD-平台" class="headerlink" title="登陆 Azure AD 平台"></a>登陆 Azure AD 平台</h2><p>Azure AD 地址：<a href="https://portal.azure.com/">https://portal.azure.com/</a></p><h3 id="选择应用注册选项："><a href="#选择应用注册选项：" class="headerlink" title="选择应用注册选项："></a>选择应用注册选项：</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/6528922f7abd2.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/6528922f7abd2.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="1663918066000.png"></p><h3 id="创建新的应用："><a href="#创建新的应用：" class="headerlink" title="创建新的应用："></a>创建新的应用：</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/6528926d4f696.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/6528926d4f696.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-2.webp"></p><h3 id="填入相关信息创建应用程序"><a href="#填入相关信息创建应用程序" class="headerlink" title="填入相关信息创建应用程序"></a>填入相关信息创建应用程序</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/65289294aa84e.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/65289294aa84e.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-3.webp"></p><h3 id="在概述中可以看到该程序的-Client-ID"><a href="#在概述中可以看到该程序的-Client-ID" class="headerlink" title="在概述中可以看到该程序的 Client_ID"></a>在概述中可以看到该程序的 Client_ID</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652892ebded34.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652892ebded34.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-4.webp"></p><h3 id="选择证书和密码—-gt-新客户端密码创建-key"><a href="#选择证书和密码—-gt-新客户端密码创建-key" class="headerlink" title="选择证书和密码—&gt;新客户端密码创建 key"></a>选择证书和密码—&gt;新客户端密码创建 key</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/65289325c54e8.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/65289325c54e8.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-5.webp"></p><h3 id="F12-打开浏览器开发者模式模拟手机版页面"><a href="#F12-打开浏览器开发者模式模拟手机版页面" class="headerlink" title="F12 打开浏览器开发者模式模拟手机版页面"></a>F12 打开浏览器开发者模式模拟手机版页面</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/65289349eb1cb.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/65289349eb1cb.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-6.webp"></p><h3 id="填入想要的-key-名称并选择自定义截止期限"><a href="#填入想要的-key-名称并选择自定义截止期限" class="headerlink" title="填入想要的 key 名称并选择自定义截止期限"></a>填入想要的 key 名称并选择自定义截止期限</h3><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/6528939fd2331.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/6528939fd2331.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-7.webp"></p><p>如图所示如果直接填入超范围的时间会有红字提示，并且下面的添加按钮为灰色不可选中状态。<br>因此我们要先随意选择一个 2 年范围内的合理日期，然后点击页面空白处点亮下方的添加按钮。<br>之后将日期的年份修改为 2099、2333 或 9999 这样超过了两年范围的日期。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652893d4d0e85.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652893d4d0e85.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-8.webp"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652893edd8363.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652893edd8363.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-9.webp"></p><p>之后直接点击添加，就可以看到我们已经成功创建了一个截止日期为 2333 年的 api，你也可以将 2333 换成任意你想要的值（四位数）</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/65289446ba2d7.webp" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/65289446ba2d7.webp" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Azure-10.webp"></p><p>至此你就成功的创建了一个永不过期的 Azure AD 的应用程序密钥。（相信我你活不到 2333 年的）</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;本文转载于 &lt;a href=&quot;https://zzy-ac.github.io/2022/09/23/wei-azure-api-chuang-jian-wu-xian-shi-chang-de-key/&quot;&gt;点墨阁&lt;/a&gt;，遵循 &lt;a href=&quot;https://creat</summary>
      
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Azure" scheme="https://blog.iamsjy.com/tags/Azure/"/>
    
  </entry>
  
  <entry>
    <title>Cloudflare 批量删除 DNS 解析</title>
    <link href="https://blog.iamsjy.com/2023/09/25/cloudflare-bulk-delete-dns-records/"/>
    <id>https://blog.iamsjy.com/2023/09/25/cloudflare-bulk-delete-dns-records/</id>
    <published>2023-09-25T04:45:09.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<p>域名从 Vercel 转到 Cloudlare 以后自动创建了一大堆记录，总共有一百多条，都是没用的解析。由于 Cloudflare 的控制台没有批量删除解析的功能，一条一条删很麻烦。不过我们可以通过 Cloudflare 的 API 功能来实现批量删除解析，准确地讲是全部删除，目前还不能实现删除指定的解析。</p><span id="more"></span><h2 id="创建-API-令牌"><a href="#创建-API-令牌" class="headerlink" title="创建 API 令牌"></a>创建 API 令牌</h2><p>打开 <a href="https://dash.cloudflare.com/profile/api-tokens">用户 API 令牌</a> 页面，点击 <code>创建令牌</code> 。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652911f907881.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652911f907881.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="641622b45f4db95eb997d96e5f8b0c80.png"></p><p>然后点击 <strong>编辑区域 DNS</strong> 后的 <code>使用模板</code> 按钮。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652911fce31b4.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652911fce31b4.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="eb75928078b45f0335870ea2c116f674.png"></p><p>接着在 <strong>特定区域</strong> 右侧的下拉列表列表中选择你需要批量删除解析的域名。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652912001ebf4.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652912001ebf4.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="a96a4c8dc9075946e63eefe24140ad3c.png"></p><p>翻到网页底部，点击 <code>继续以显示摘要</code>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652912029d849.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652912029d849.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="3ad85249be28468eeba4b32b30eaf2d6.png"></p><p>点击 <code>创建令牌</code>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/652912054681d.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/652912054681d.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="23e95910af8a36b2a9b2fb2e153a0b5b.png"></p><p>复制虚线框内的令牌，保存备用。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/65291208ddfd9.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/65291208ddfd9.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="87fbfb72b76189745927cdbe1e21522f.png"></p><h2 id="找到区域-ID"><a href="#找到区域-ID" class="headerlink" title="找到区域 ID"></a>找到区域 ID</h2><p>打开域名的概述页，下拉网页，在右下角找到 <strong>区域 ID</strong>。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/6529120bbbae9.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/6529120bbbae9.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="80457dca0b17bf03b5f8ddb977152427.png"></p><h2 id="执行批量删除"><a href="#执行批量删除" class="headerlink" title="执行批量删除"></a>执行批量删除</h2><p><strong>注意：脚本会删除指定域名的所有解析！</strong></p><p><strong>请将以下的 <code>&lt;API TOKEN&gt;</code> 替换为你之前创建的 API 令牌，将 <code>&lt;ZONE ID&gt;</code> 替换为域名的区域 ID。</strong></p><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><p>如果你使用 Windows 系统，请使用以下 PowerShell 脚本。（此脚本来自 <a href="https://community.cloudflare.com/t/bulk-delete-dns-records/421686/2">Cloudflare 论坛</a>）</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/13/6529120f590a3.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/13/6529120f590a3.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="6155c4bc1d7c0a6085cb851ba270d939.png"></p><p><a href="https://blog.iamsjy.com/scripts/cf-del-records.ps1">点击下载 PowerShell 脚本</a></p><p>使用方法：</p><ol><li><strong>首先将脚本中的 <code>&lt;API TOKEN&gt;</code> 替换为你之前创建的 API 令牌，将 <code>&lt;ZONE ID&gt;</code> 替换为域名的区域 ID。</strong></li><li>然后右键脚本，点击 <code>使用 PowerShell 运行</code>，等待执行完成即可。</li></ol><h3 id="macOS-Linux-BSD-Termux"><a href="#macOS-Linux-BSD-Termux" class="headerlink" title="macOS / Linux / BSD / Termux"></a>macOS / Linux / BSD / Termux</h3><p>如果你使用其他操作系统，请使用以下 Python 脚本。</p><p><a href="https://blog.iamsjy.com/scripts/cf-del-records.py">点击下载 Python 脚本</a></p><p>使用方法：</p><ol><li><p>首先安装 Python 环境和 <code>requests</code> 库（如果没有安装的话）。</p></li><li><p><strong>然后将脚本中的 <code>&lt;API TOKEN&gt;</code> 替换为你之前创建的 API 令牌，将 <code>&lt;ZONE ID&gt;</code> 替换为域名的区域 ID。</strong></p></li><li><p>在脚本目录打开终端，并执行命令 <code>python3 cf-del-records.py</code>，等待执行完成即可。</p></li></ol>]]></content>
    
    
    <summary type="html">&lt;p&gt;域名从 Vercel 转到 Cloudlare 以后自动创建了一大堆记录，总共有一百多条，都是没用的解析。由于 Cloudflare 的控制台没有批量删除解析的功能，一条一条删很麻烦。不过我们可以通过 Cloudflare 的 API 功能来实现批量删除解析，准确地讲是全部删除，目前还不能实现删除指定的解析。&lt;/p&gt;</summary>
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="Cloudflare" scheme="https://blog.iamsjy.com/tags/Cloudflare/"/>
    
    <category term="DNS" scheme="https://blog.iamsjy.com/tags/DNS/"/>
    
  </entry>
  
  <entry>
    <title>小米平板 2 魔改版开箱体验</title>
    <link href="https://blog.iamsjy.com/2023/09/21/mipad2-experience/"/>
    <id>https://blog.iamsjy.com/2023/09/21/mipad2-experience/</id>
    <published>2023-09-21T17:51:56.000Z</published>
    <updated>2025-08-16T06:51:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>买这块平板，一个很大的原因是好奇，很想拥有一块搭载桌面 Windows 系统的平板。另一个原因是它具有极高的性价比，最低配的 2G +16G 款在小黄鱼上 100 多就能买到。得益于兼容性强大的 x86 处理器，无论是看番、刷网课甚至给手机刷机都能胜任。至于旧款 Surface Pro，价格相对较高，而且抖屏和幽灵触控等问题饱受诟病，想想还是算了。</p><p>小米官方仅发售过 2G + 16G 和 2G + 64G 的 小米平板 2，显然这个配置在如今使用太过吃力了。于是我购买了 4G + 128G 魔改版，某鱼 340 大洋包邮。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281044bca44.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281044bca44.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="38e42f5d71abf31aa5d43d17d07b5180.jpg"></p><p>本文就是在小米平板 2 上写成的。</p><h2 id="参数"><a href="#参数" class="headerlink" title="参数"></a>参数</h2><ul><li>CPU：Intel Atom x5-Z8500 @ 1.44GHz</li><li>内存：4GB LPDDR3</li><li>存储：128GB eMMC</li><li>屏幕：7.9 英寸触摸屏（10点触控） ，2048*1536 分辨率 （2K）</li><li>相机：前置 500 万像素，后置 800 万像素</li><li>网络：802.11ac 双频 Wi-Fi，蓝牙 4.1</li><li>电池：约 6000 mAh</li><li>接口：Type-C 接口、3.5 mm 耳机接口</li></ul><h2 id="开箱"><a href="#开箱" class="headerlink" title="开箱"></a>开箱</h2><p>从外到里分别是泡沫盒、气泡膜、气柱袋三层保护。裸机没有送键鼠和触控笔。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528104dbfd69.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528104dbfd69.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="e0a87f6e37dff70ce0093a489a2372b5.jpg"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528105dc27ca.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528105dc27ca.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="ea74793e1d458736905a4e32e22656f0.jpg"></p><p>尺寸比想象的要小，对比室友的 11 英寸 iPad Pro 和我的 13.3 英寸 ThinkPad X13 就知道有多小了。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/652810683c68e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/652810683c68e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="e98ef7ae4f906b7779befca2b5d1a04b.jpg"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528107852f46.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528107852f46.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="b160c628ff852568305f2d18bd33cfc2.jpg"></p><h3 id="正面"><a href="#正面" class="headerlink" title="正面"></a>正面</h3><p>卖家贴了膜，虽然有几个很小的气泡，但日常使用几乎看不出来。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528108d6e5ca.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528108d6e5ca.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="e6a2ae608a1041105e80312d888dae81.jpg"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281096eb3b1.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281096eb3b1.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="cb4a67a40514a125e37d1e3fec54bc6e.jpg"></p><h3 id="反面"><a href="#反面" class="headerlink" title="反面"></a>反面</h3><p>卖家送了保护套，虽然是坏的，但又不是不能用。如图，可以看到保护套有明显的破损。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528109fa966e.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528109fa966e.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="37a86c9be7a4c0943e6699bb1d7233fd.jpg"></p><p>揭开保护套，可以看到后盖上有一些磨损，还有一处略微凹进去了，应该是魔改的时候留下的。这个后盖的成色只能说一般了，但是金属后盖手感还不错。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281103783e4.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281103783e4.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="69e6808ef6079c68caa2de84fb8bad94.jpg"></p><p>接口较少，只有顶部的 3.5mm 耳机接口和底部的 Type-C 接口，接 U 盘只能靠转接头。</p><p>下图为贴在保护壳内侧的贴纸，本来是贴在平板后盖上的。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281124e7d1f.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281124e7d1f.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="8b64bf9cdfd1655b5df1e00420740d26.jpg"></p><h2 id="初体验"><a href="#初体验" class="headerlink" title="初体验"></a>初体验</h2><p>开机大约 37 秒，考虑到小米平板 2 是 8 年前的设备，这个成绩还是可以接受的。开机后不运行任何应用，内存占用 约1.5G，想必 4G 的内存够用了。128G 的空间仅占用 9G 多，为安装软件和存放电影留下了充足的空间。处理器是 Z8500，是一款用于低端平板的x86 处理器。系统为 Windows 10 IoT 企业版 LTSC 精简版。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281133a4632.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281133a4632.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="61d684185f65fd1f2b72a9ab8f9230cc.jpg"></p><p>屏幕细腻，2K 分辨率在同价位的平板中可以说首屈一指了。触屏灵敏，切换窗口流畅，拖动窗口不卡顿。</p><p>经测试，触屏、Wi-Fi、蓝牙、扬声器、亮度调节、屏幕旋转、前后摄像头、亮度调节均正常，麦克风还没试。除续航以外都没有问题。</p><p>Windows 10 自带的虚拟键盘和虚拟触摸板体验还是不错的。由于很多应用没有对触屏做优化，在触摸屏下的体验并不是很理想（比如 Typora 的右键）。而虚拟触摸板能在一定程度上能完成鼠标的功能，提升使用体验（虽然很有限）。</p><p>UWP 应用一般会对触屏优化，体验比非 UWP 应用好一些。我常用的软件是 <a href="https://github.com/Richasy/Bili.Uwp">哔哩</a>，这是一款开源的第三方 B 站客户端，相比套壳 Electron 的 B 站官方客户端可谓是一股清流。实际体验看 B 站 1080P 很流畅，弹幕略卡，大概放 8 秒视频就要卡一下。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528114d7826a.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528114d7826a.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="7bf4c2b4612585806f3f3e6a566a9fb7.jpg"></p><p>另一个常用的软件是 PotPlayer，一个强大的视频播放器，支持多种视频格式，并支持触屏手势。用来看电影、番剧还是很不错的。</p><p>自带的新版 Edge 浏览器也基本能体验也不差，浏览网页挺流畅。</p><p>要说缺点的话，主要就是续航问题，充满电只能使用一个小时左右，卖家建议插电用。实测开节电模式待机一晚上都掉电 33%。打算买一块新电池自己换上。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281158b1a77.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281158b1a77.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="5de366695be24e2bfd8ff30c14deebc5.png"></p><p>受限于 7.9 英寸的小屏幕，小米平板 2 的字号比较小，按钮也很小，点的时候得小心。系统默认缩放到 200%，觉得字小也可以调更大一些。作为一块具有高分辨率的小屏幕，不缩放定会让你体验到字小如蚂蚁的感觉，如下图所示。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281161a9027.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281161a9027.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="f2ed5f9383ef453992ba4d7f159b7052.jpg"></p><h2 id="性能测试"><a href="#性能测试" class="headerlink" title="性能测试"></a>性能测试</h2><p>测试是在接通电源并开启“”最长的续航”模式下进行的，历时 30 多分钟。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281167592ae.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281167592ae.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="b7ece9eeeebd4a6a1a75be21b92518ec.png"></p><p>Geekbench 详细测试数据见：<a href="https://browser.geekbench.com/v6/cpu/2702497">https://browser.geekbench.com/v6/cpu/2702497</a></p><p>这颗凌动 CPU 性能和低端软路由 CPU 赛扬 J1900 差不多，实际使用连切换窗口都会有明显的 CPU 占用飙升。可能是因为卖家改了散热，长时间使用并不会导致平板发热到烫手的程度，性能也没有明显的下降。</p><h2 id="磁盘性能测试"><a href="#磁盘性能测试" class="headerlink" title="磁盘性能测试"></a>磁盘性能测试</h2><p>由于磁盘是 eMMC，性能与 SSD 有较大差距。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528116e50990.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528116e50990.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="efbb4d8d44f111de9251ce1c1f2d617e.png"></p><h2 id="解压缩测试"><a href="#解压缩测试" class="headerlink" title="解压缩测试"></a>解压缩测试</h2><p>为了提高测试的准确度，测试是在关闭网络和蓝牙的情况下执行的。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281174ae395.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281174ae395.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="474e3b1818be30a3b0352c85c771e031.png"></p><h2 id="网速测试"><a href="#网速测试" class="headerlink" title="网速测试"></a>网速测试</h2><p>这是在连接热点后测出来的网速，下载带宽能达到百兆以上。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/652811798facf.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/652811798facf.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="153bd90b3f32c94bd4bd27ffc29dbc8c.png"></p><p>这是通过 Type-C 转 RJ-45 转换器连接上以太网后测出来的速度，和我笔记本电脑测到的 92Mbps 下行还是有一些差距。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528117ebe5c5.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528117ebe5c5.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="c309e962627dce9882801190d39383ac.png"></p><p>学校 WiFi 信号太差就不测了。</p><h2 id="整活"><a href="#整活" class="headerlink" title="整活"></a>整活</h2><p>如果你仔细看文章题图，一定会发现这颗凌动 CPU 居然是支持虚拟化的。所以理论上可以通过虚拟机运行其他操作系统，理论上 WSL2 也能用。实测 Alpine 虚拟机能成功启动，但是无法联网，具体原因未知。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281183c7045.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281183c7045.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="0563e7aea78c0e50073ef37c44b9cb17.png"></p><p>熟悉的 WSL 也能成功在小米平板 2 上运行。由于 CPU 支持虚拟化， WSL2 理论上也是可以运行的。你的下一台服务器，何必是服务器，它也可以是一台平板电脑（手动狗头）。</p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/6528118ed848b.png" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/6528118ed848b.png" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="c5c25a93de2bb4d6199016c92f215b55.png"></p><p><img src="https://img-cdn.boochi.cn/i/2023/10/12/65281199a29c9.jpg" class="lazy" data-srcset="https://img-cdn.boochi.cn/i/2023/10/12/65281199a29c9.jpg" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="19ddf57f6e7423ee4fde9af28564682e.jpg"></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>这是我第一次在闲鱼购物，也是一次较为满意的购物体验。虽然这是一款 8 年前的产品，但它基本能满足我的日常需求。当然，我并是说建议买这块平板，因为无论是续航还是性能在如今都显得落后。作为一款便携式 Windows 平板电脑，在如今的体验也只能勉强算及格。如果你想买一块来当玩具，还是值得尝试的。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;买这块平板，一个很大的原因是好奇，很想拥有一块搭载桌面 Windows 系统的平板。另一个原因是它具有极高的性价比，最低配的 2G +16G</summary>
      
    
    
    
    <category term="分享" scheme="https://blog.iamsjy.com/categories/%E5%88%86%E4%BA%AB/"/>
    
    
    <category term="分享" scheme="https://blog.iamsjy.com/tags/%E5%88%86%E4%BA%AB/"/>
    
    <category term="硬件" scheme="https://blog.iamsjy.com/tags/%E7%A1%AC%E4%BB%B6/"/>
    
    <category term="开箱" scheme="https://blog.iamsjy.com/tags/%E5%BC%80%E7%AE%B1/"/>
    
    <category term="小米" scheme="https://blog.iamsjy.com/tags/%E5%B0%8F%E7%B1%B3/"/>
    
    <category term="Windows" scheme="https://blog.iamsjy.com/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>Linux 安装 LiteLoaderBDS（LLBDS） 教程</title>
    <link href="https://blog.iamsjy.com/2023/07/19/install-llbds-on-linux/"/>
    <id>https://blog.iamsjy.com/2023/07/19/install-llbds-on-linux/</id>
    <published>2023-07-19T14:23:00.000Z</published>
    <updated>2023-10-30T05:22:49.000Z</updated>
    
    <content type="html"><![CDATA[<p>LiteLoaderBDS 是专为<em>适用于 Bedrock 版 Minecraft 的服务端软件</em>（简称 BDS）开发的插件加载器。它具备强大的跨语言脚本插件支持能力和稳定的 API 支持。</p><p>本文将分享安装 LiteLoaderBDS 的详细教程。</p><span id="more"></span><h2 id="开始"><a href="#开始" class="headerlink" title="开始"></a>开始</h2><p>你需要准备一台 x86 架构的 Linux 服务器（能畅通连接外网），推荐使用 Ubuntu 20.04 LTS 或更高版本。</p><h2 id="安装-Wine-环境"><a href="#安装-Wine-环境" class="headerlink" title="安装 Wine 环境"></a>安装 Wine 环境</h2><p>首先启用 32 位支持</p><pre class="line-numbers language-none"><code class="language-none">sudo dpkg --add-architecture i386<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p><strong>注∶ 如果你使用 Ubuntu 22.04，可使用以下命令直接安装 Ubuntu 仓库中的 wine 6.0。虽然版本老一点，但又不是不能用。</strong></p><pre class="line-numbers language-none"><code class="language-none">sudo apt install wine<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>下面介绍 Wine 最新版安装方法∶</p><p>下载 Wine 的 apt 仓库公钥</p><pre class="line-numbers language-none"><code class="language-none">sudo mkdir -pm755 &#x2F;etc&#x2F;apt&#x2F;keyringssudo wget -O &#x2F;etc&#x2F;apt&#x2F;keyrings&#x2F;winehq-archive.key https:&#x2F;&#x2F;dl.winehq.org&#x2F;wine-builds&#x2F;winehq.key<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>添加 Wine 的 apt 存储库</p><p>（如果你不知道服务器的 Ubuntu 版本，请使用 <code>cat /etc/os-release</code> 命令查看）</p><table><thead><tr><th align="center">系统</th><th align="center">命令</th></tr></thead><tbody><tr><td align="center">Ubuntu 23.04</td><td align="center">sudo wget -NP /etc/apt/sources.list.d/ <a href="https://dl.winehq.org/wine-builds/ubuntu/dists/lunar/winehq-lunar.sources">https://dl.winehq.org/wine-builds/ubuntu/dists/lunar/winehq-lunar.sources</a></td></tr><tr><td align="center">Ubuntu 22.10</td><td align="center">sudo wget -NP /etc/apt/sources.list.d/ <a href="https://dl.winehq.org/wine-builds/ubuntu/dists/kinetic/winehq-kinetic.sources">https://dl.winehq.org/wine-builds/ubuntu/dists/kinetic/winehq-kinetic.sources</a></td></tr><tr><td align="center">Ubuntu 22.04</td><td align="center">sudo wget -NP /etc/apt/sources.list.d/ <a href="https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources">https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources</a></td></tr><tr><td align="center">Ubuntu 20.04</td><td align="center">sudo wget -NP /etc/apt/sources.list.d/ <a href="https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources">https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources</a></td></tr></tbody></table><p>更新 apt 索引</p><pre class="line-numbers language-none"><code class="language-none">sudo apt update<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装 Wine</p><pre class="line-numbers language-none"><code class="language-none">sudo apt install -y --install-recommends winehq-stable<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>安装 Winetricks</p><pre class="line-numbers language-none"><code class="language-none">sudo apt install -y winetricks<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="安装-LiteLoaderBDS"><a href="#安装-LiteLoaderBDS" class="headerlink" title="安装 LiteLoaderBDS"></a>安装 LiteLoaderBDS</h2><p>在要安装服务器的目录中，执行以下命令∶</p><pre class="line-numbers language-none"><code class="language-none">wget https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;LiteLDev&#x2F;LiteLoaderBDSv2&#x2F;develop&#x2F;scripts&#x2F;install.sh &amp;&amp; sh install.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>中间需要按两下回车同意 EULA 和隐私政策。</p><h2 id="运行-LiteLoaderBDS"><a href="#运行-LiteLoaderBDS" class="headerlink" title="运行 LiteLoaderBDS"></a>运行 LiteLoaderBDS</h2><p>进入 LLBDS 安装目录，执行以下命令启动 LLBDS∶</p><pre class="line-numbers language-none"><code class="language-none">cd bedrock_serverwine bedrock_server_mod.exe<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>执行 <code>stop</code> 命令即可停止 LLBDS。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;LiteLoaderBDS 是专为&lt;em&gt;适用于 Bedrock 版 Minecraft 的服务端软件&lt;/em&gt;（简称 BDS）开发的插件加载器。它具备强大的跨语言脚本插件支持能力和稳定的 API 支持。&lt;/p&gt;
&lt;p&gt;本文将分享安装 LiteLoaderBDS 的详细教程。&lt;/p&gt;</summary>
    
    
    
    <category term="教程" scheme="https://blog.iamsjy.com/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Linux" scheme="https://blog.iamsjy.com/tags/Linux/"/>
    
    <category term="MC" scheme="https://blog.iamsjy.com/tags/MC/"/>
    
  </entry>
  
</feed>
