<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>烏托邦的理想國</title><link>https://b.utopias.site/</link><atom:link href="https://b.utopias.site/rss.xml" rel="self" type="application/rss+xml"/><description>One Blog, One Dreamland</description><generator>Halo v2.23.2</generator><language>zh-cn</language><image><url>https://source.utopias.site/bucket-pic/2023/11/06F9C37B-B689-47C6-BAB1-42E88F643540.png</url><title>烏托邦的理想國</title><link>https://b.utopias.site/</link></image><lastBuildDate>Wed, 22 Apr 2026 06:00:44 GMT</lastBuildDate><item><title><![CDATA[紧急安全警告：飞牛OS出现高危漏洞，请勿暴露设备于公网]]></title><link>https://b.utopias.site/archives/fv31KuSH</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E7%B4%A7%E6%80%A5%E5%AE%89%E5%85%A8%E8%AD%A6%E5%91%8A%EF%BC%9A%E9%A3%9E%E7%89%9BOS%E5%87%BA%E7%8E%B0%E9%AB%98%E5%8D%B1%E6%BC%8F%E6%B4%9E%EF%BC%8C%E8%AF%B7%E5%8B%BF%E6%9A%B4%E9%9C%B2%E8%AE%BE%E5%A4%87%E4%BA%8E%E5%85%AC%E7%BD%91&amp;url=/archives/fv31KuSH" width="1" height="1" alt="" style="opacity:0;">
<p style=""><strong>2月1日更新：</strong>飞牛于今日凌晨4时许发布公告并同时推送了1.1.18版本更新，详情可查看官方通告，请尽快更新至最新版本。</p>
<p style="">综合多方消息，在过去的24小时之内，飞牛OS被爆出存在两个高危安全漏洞，并且可能还存在潜在的更多高危漏洞。飞牛OS官方建议x86用户将系统升级至1.1.15版本，ARM内测用户使用400以上的版本以缓解已知的攻击问题。但根据社区大量用户反馈，最新版本的飞牛OS似乎并没有成功解决漏洞问题，攻击仍可被复现。建议所有用户立即停止将飞牛OS对外暴露在公网环境下，包括端口直接暴露和反向代理在内的对外开放都可能导致设备被黑客团队利用。如果一定要将系统对公网开放访问，请尽量使用VPN和WAF等手段尽可能降低漏洞被利用的风险。</p>
<p style="">目前已知存在以下两个严重的 0 day 漏洞：</p>
<ol>
 <li>
  <p style="">路径穿越漏洞
   <br>
   PoC: <code>/app-center-static/serviceicon/myapp/%7B0%7D/?size=../../../../</code>
   <br>
   此漏洞有测试称最早可以溯源到 fnOS 0.9.X 版本, 飞牛官方称已经在 1.1.15 版本修复，但似乎仍有用户反馈问题依旧存在。
   <br>
   该漏洞可通过路径穿越实现任意路径访问，经过测试NAS上的所有文件都可以通过此方式绕过鉴权直接访问。社区有用户表示，截止到1月31日晚上，在电报和暗网等渠道已经出现了有黑客团体售卖通过此漏洞窃取到的他人的隐私照片的情况，证明漏洞自大规模披露后正在被黑客利用。</p>
 </li>
 <li>
  <p style="">WebSocket 接口任意命令执行
   <br>
   PoC: <hyperlink-inline-card target="_blank" href="https://www.v2ex.com/member/patrickyoung" theme="inline"><a href="https://www.v2ex.com/member/patrickyoung" target="_blank">https://www.v2ex.com/member/patrickyoung</a></hyperlink-inline-card></p>
  <p style="">此漏洞由 v2ex 用户 <strong>patrickyoung </strong>根据飞牛用户 <strong>xwmz1369</strong> 的反馈贴定位并逆向确定。怀疑是近期大量用户机器被入侵所利用的主要漏洞。此漏洞可通过WebSocket API接口越权进行RCE操作，并且很有可能说明前置还存在一个未知的 authorization bypass 漏洞。此漏洞能够与第一个漏洞形成“组合拳”，并且怀疑已经被黑客团伙利用，目前 1.1.15 版本此漏洞仍未修复。</p>
 </li>
</ol>
<p style="">根据 LoopDNS 频道发布的消息表明，目前已经有 2~3 个黑客团队在感染飞牛 OS 并可能将其纳入到僵尸网络，用于发起 DDoS 攻击等。FOFA网络空间测绘引擎表明，目前全网至少有 80 万台安装 fnOS 的设备在线，这些设备均为潜在的攻击目标。</p>
<p style="">值得一提的是，飞牛官方对于漏洞的处置态度消极，响应与修复速度缓慢。在用户设备被大量攻击的早期，有用户在社区反馈设备被攻击并可能存在系统漏洞时，飞牛官方将“锅”扣在用户开放了HTTP访问而不是仅HTTPS上，但实际漏洞被披露后证实与HTTP还是HTTPS无关。截止目前，飞牛官方仍未发布公告强制用户升级系统，也没有披露漏洞的细节和修复的细节。</p>
<p style=""></p>
<p style="">参考文献：</p>
<ol>
 <li>
  <p style=""><hyperlink-inline-card target="_blank" href="https://club.fnnas.com/forum.php?mod=viewthread&amp;tid=53230" theme="inline"><a href="https://club.fnnas.com/forum.php?mod=viewthread&amp;tid=53230" target="_blank">https://club.fnnas.com/forum.php?mod=viewthread&amp;tid=53230</a></hyperlink-inline-card></p>
 </li>
 <li>
  <p style=""><hyperlink-inline-card target="_blank" href="https://www.v2ex.com/t/1189672" theme="inline"><a href="https://www.v2ex.com/t/1189672" target="_blank">https://www.v2ex.com/t/1189672</a></hyperlink-inline-card></p>
 </li>
 <li>
  <p style=""><hyperlink-inline-card target="_blank" href="https://linux.do/t/topic/1548846" theme="inline"><a href="https://linux.do/t/topic/1548846" target="_blank">https://linux.do/t/topic/1548846</a></hyperlink-inline-card></p>
 </li>
 <li>
  <p style=""><hyperlink-inline-card target="_blank" href="https://www.v2ex.com/member/patrickyoung" theme="inline"><a href="https://www.v2ex.com/member/patrickyoung" target="_blank">https://www.v2ex.com/member/patrickyoung</a></hyperlink-inline-card></p>
 </li>
</ol>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/fv31KuSH</guid><dc:creator>烏托邦</dc:creator><category>杂七杂八</category><pubDate>Sat, 31 Jan 2026 17:52:07 GMT</pubDate></item><item><title><![CDATA[Chrome浏览器如何解决此扩展程序不再受支持]]></title><link>https://b.utopias.site/archives/UwG1rExj</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=Chrome%E6%B5%8F%E8%A7%88%E5%99%A8%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E6%AD%A4%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E4%B8%8D%E5%86%8D%E5%8F%97%E6%94%AF%E6%8C%81&amp;url=/archives/UwG1rExj" width="1" height="1" alt="" style="opacity:0;">
<p style="">本文章用于在我即将把 Chrome 换成 Firefox 之前的备份教程，避免有一天如果我想重新把浏览器更换回 Chrome 而找不到教程。</p>
<h1 style="" id="%E5%89%8D%E8%A8%80">前言</h1>
<p style="">Google 早在 2024年6月 就开始尝试禁用 Manifest V2 扩展程序，强制开发者使用 Manifest V3 开发扩展程序。但问题在于，Manifest V3 以“安全”为借口大幅限制了浏览器扩展的功能，诸如 uBlock Origin 之类的插件无法使用 Manifest V3，进而已经无法在新版本的 Chrome 上使用了。如果你需要使用 uBlock Origin 或是其他仍停留在 Manifest V2 的扩展程序，此教程将帮到你。</p>
<h1 style="" id="%E6%96%B9%E6%B3%95">方法</h1>
<p style="">Chrome 138 版本应该是最后一个支持 Manifest V2 扩展程序的版本，Chrome 139 可以通过打开浏览器实验参数的方式继续使用 Manifest V2 扩展程序。因此在一切开始之前，你需要先准备好以上两个版本任意一个的安装包。我知道你肯定没有，所以资源下载区见 (ﾟω´)</p>
<h2 style="" id="windows">Windows</h2>
<p style="">总体分三步，先禁用浏览器更新，然后启用 Manifest V2，最后安装你需要的扩展。</p>
<h3 style="" id="%E7%A6%81%E7%94%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E6%9B%B4%E6%96%B0">禁用浏览器更新</h3>
<p style="">这一步骤网上教程一搜一大把，有策略组禁用浏览器更新的，有修改 hosts 禁止 Chrome 连接更新服务器的。但其实用不着这么复杂，方法很简单。在注册表里面添加企业策略，企业策略本身就会阻止浏览器更新。</p>
<ol>
 <li>
  <p style="">WIN+R 输入<code>regedit</code>打开注册表编辑器</p>
 </li>
 <li>
  <p style="">在注册表编辑器里打开<code>HKEY_LOCAL_MACHINE\SOFTWARE\Policies\</code></p>
 </li>
 <li>
  <p style="">右键单击<code>Policies</code>，新建项<code>Google</code></p>
 </li>
 <li>
  <p style="">右键单击<code>Google</code>，新建项<code>Chrome</code></p>
 </li>
 <li>
  <p style="">右键单击<code>Chrome</code>，新建<code>DWORD32 位值</code>，命名为<code>ExtensionManifestV2Availability</code></p>
 </li>
 <li>
  <p style="">右键单击<code>ExtensionManifestV2Availability</code>，将值修改为<code>2</code>，确定。
   <br></p>
  <figure data-content-type="image" style="display: flex; flex-direction: column;">
   <img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-23-qjgqpmtv.png&amp;size=m" alt="2026-01-23-qjgqpmtv.png" width="1079px">
  </figure>
 </li>
 <li>
  <p style="">重启 Chrome 后打开<code>chrome://policy/</code>，就可以看到我们刚刚添加的政策。点击右上角三个点菜单栏，可以看到最下面出现了<strong>由贵组织管理</strong>字样，说明企业策略启用成功。这个时候你再点击 Chrome 设置里面的<code>关于 Chrome</code>就能够看到<strong>Chrome检查更新时出错</strong>和<strong>您的浏览器由贵单位管理</strong>字样<strong>。</strong>
   <br></p>
  <figure data-content-type="image" style="display: flex; flex-direction: column;">
   <img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-23-pqlnwssp.png&amp;size=m" alt="2026-01-23-pqlnwssp.png" width="1030px">
  </figure>
  <figure data-content-type="image" style="display: flex; flex-direction: column;">
   <img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-23-pdaltyly.png&amp;size=m" alt="2026-01-23-pdaltyly.png" width="1030px">
  </figure>
 </li>
</ol>
<h4 style="" id="%E5%B0%8F%E8%B4%B4%E5%A3%AB">小贴士</h4>
<p style="">实际上你添加任何策略都可以阻止 Chrome 更新，不一定非得是<code>ExtensionManifestV2Availability</code>。因为经过我去查询 Chrome 的开发文档时发现<code>ExtensionManifestV2Availability</code>这个策略实际上并不是一个有效策略，所以理论上你随便输个123都可以触发企业策略管理。</p>
<p style="">比如说，你可以添加让浏览器使用DoH的企业策略，因为启用企业策略之后DoH就没法直接设置了。仿照上面的方法，在注册表里添加如下图中的两个策略：
 <br></p>
<figure data-content-type="image" style="display: flex; flex-direction: column;">
 <img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-23-eqdggygs.png&amp;size=m" alt="2026-01-23-eqdggygs.png" width="1260px">
</figure>
<h3 style="" id="%E5%90%AF%E7%94%A8-manifest-v2">启用 Manifest V2</h3>
<ol>
 <li>
  <p style="">在 Chrome 中访问 <code>chrome://flags/#temporary-unexpire-flags-m137</code>，把值改为<code>Enabled</code></p>
 </li>
 <li>
  <p style="">重启浏览器。注意要彻底重启，杀掉 Chrome 后台进程。</p>
 </li>
 <li>
  <p style="">在<code>chrome://flags</code>中找到如下几项并设置为对应值：
   <br></p>
  <div style="overflow-x: auto; overflow-y: hidden;">
   <table style="width: 601px">
    <colgroup>
     <col style="width: 454px">
     <col style="width: 147px">
    </colgroup>
    <tbody>
     <tr style="height: 60px;">
      <td colspan="1" rowspan="1" colwidth="454">
       <p style="">Extension Manifest V2 Deprecation Warning Stage</p>
      </td>
      <td colspan="1" rowspan="1" colwidth="147">
       <p style="">Disabled</p>
      </td>
     </tr>
     <tr style="height: 60px;">
      <td colspan="1" rowspan="1" colwidth="454">
       <p style="">Extension Manifest V2 Deprecation Disabled Stage</p>
      </td>
      <td colspan="1" rowspan="1" colwidth="147">
       <p style="">Disabled</p>
      </td>
     </tr>
     <tr style="height: 60px;">
      <td colspan="1" rowspan="1" colwidth="454">
       <p style="">Extension Manifest V2 Deprecation Unsupported Stage</p>
      </td>
      <td colspan="1" rowspan="1" colwidth="147">
       <p style="">Disabled</p>
      </td>
     </tr>
     <tr style="height: 60px;">
      <td colspan="1" rowspan="1" colwidth="454">
       <p style="">Allow legacy extension manifest versions</p>
      </td>
      <td colspan="1" rowspan="1" colwidth="147">
       <p style="">Enabled</p>
      </td>
     </tr>
    </tbody>
   </table>
  </div>
 </li>
 <li>
  <p style="">点击重启浏览器。</p>
 </li>
 <li>
  <p style="">重启 Chrome 后应该就可以安装 uBlock Origin 之类的 Manifest V2 扩展程序了。
   <br></p>
  <figure data-content-type="image" style="display: flex; flex-direction: column;">
   <img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-23-jpnhorgp.png&amp;size=m" alt="2026-01-23-jpnhorgp.png" width="893px">
  </figure>
 </li>
</ol>
<h2 style="" id="linux">Linux</h2>
<p style="">我找遍了全网都没有找到 Linux 版本的 Chrome 如何禁用更新并启用 Manifest V2 支持，所以这应该是全网独家教程。</p>
<h3 style="" id="%E7%A6%81%E7%94%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E6%9B%B4%E6%96%B0-1">禁用浏览器更新</h3>
<h4 style="" id="%E5%81%9C%E7%94%A8-chrome-%E6%B5%8F%E8%A7%88%E5%99%A8%E6%9B%B4%E6%96%B0">停用 Chrome 浏览器更新</h4>
<p style="">如要阻止 Chrome 浏览器更新，请执行下列操作之一：</p>
<ul>
 <li>
  <p style="">在安装 Chrome 浏览器之前先创建一个空白存储区：
   <br>
   <code>sudo touch /etc/default/google-chrome</code></p>
 </li>
 <li>
  <p style="">将以下代码添加到<strong>/etc/default/google-chrome</strong>：
   <br>
   <code>repo_add_once=false</code></p>
 </li>
</ul>
<h4 style="" id="%E5%81%9C%E7%94%A8-chrome-%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BB%84%E4%BB%B6%E6%9B%B4%E6%96%B0">停用 Chrome 浏览器组件更新</h4>
<p style="">即便您停用了 Chrome 浏览器的自动更新功能，浏览器组件也不会停止更新。这些组件当中就包括了 Chrome 更新程序恢复组件。如要阻止这些组件更新，就需要停用 Chrome ComponentUpdatesEnabled 政策。</p>
<ol>
 <li>
  <p style="">在 <strong>/etc/opt/chrome/policies/managed</strong> 文件夹中创建一个JSON文件，并将其命名为 <strong>component_update.json</strong></p>
 </li>
 <li>
  <p style="">在JSON文件中添加以下设置以停用组件更新：
   <br>
   <code>{"ComponentUpdatesEnabled": "false"}</code></p>
 </li>
 <li>
  <p style="">重启浏览器</p>
 </li>
</ol>
<h3 style="" id="%E5%90%AF%E7%94%A8-manifest-v2-1">启用 Manifest V2</h3>
<p style="">参照上面 Windows 的这一步进行操作。</p>
<p style=""></p>
<hr>
<p style=""><strong>资源下载区：</strong></p>
<download-links data-links="[{&quot;url&quot;:&quot;https://pan.quark.cn/s/d937ede00e5b&quot;,&quot;filename&quot;:&quot;google_chrome_138.exe&quot;,&quot;source&quot;:&quot;夸克网盘&quot;,&quot;code&quot;:&quot;&quot;,&quot;icon&quot;:&quot;/upload/quark.png&quot;},{&quot;url&quot;:&quot;https://pan.quark.cn/s/e160cf1c2751&quot;,&quot;filename&quot;:&quot;google_chrome_138.deb&quot;,&quot;source&quot;:&quot;夸克网盘&quot;,&quot;code&quot;:&quot;&quot;,&quot;icon&quot;:&quot;/upload/quark.png&quot;}]"></download-links>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/UwG1rExj</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-23-ypwtovaq.webp&amp;size=m" type="image/jpeg" length="58096"/><category>教程</category><pubDate>Fri, 23 Jan 2026 07:11:10 GMT</pubDate></item><item><title><![CDATA[飞牛OS ARM？黑牛OS ARM！]]></title><link>https://b.utopias.site/archives/c2eXhERM</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E9%A3%9E%E7%89%9BOS%20ARM%EF%BC%9F%E9%BB%91%E7%89%9BOS%20ARM%EF%BC%81&amp;url=/archives/c2eXhERM" width="1" height="1" alt="" style="opacity:0;">
<h1 style="" id="%E5%89%8D%E8%A8%80">前言</h1>
<p style="">本月初，NAS圈捷报频传。堪称“要做NAS系统里的Windows”的飞牛OS迎来了其ARM版本的首次内测，电子垃圾废物利用的风终究还是从x86吹到了ARM。但首批次内测官方支持的机型数量在ARM浩如烟海的设备型号面前少得可怜，仅RK3566等几款芯片型号的ARM设备获得了官方支持。不过，社区能人不少，在内测固件发布仅几小时后，就变成了“一人内测全员公测”。先是有大佬发现，只要有合适的设备树文件，同一个芯片家族的方案有自行“适配”的希望。然后有大佬逆向dtb文件获得dts，针对自己的机型修改后重新编译dtb导入镜像，刷入设备后成功点亮。再然后，为openwrt和armbian做系统镜像适配的大佬ophub根据飞牛官方提供的内核火速为上百款ARM设备编译了适配镜像，包括晶晨/瑞芯微/全志系列的众多设备。飞牛OS ARM社区版本就此诞生，飞牛OS正式进入黑牛时代...</p>
<h1 style="" id="%E9%A3%9E%E7%89%9Bos-arm-%E7%A4%BE%E5%8C%BA%E7%89%88%E6%9C%AC">飞牛OS ARM 社区版本</h1>
<p style="">飞牛OS ARM的社区版本由ophub打包和维护，项目地址如下：
 <br></p>
<hyperlink-card target="_blank" href="https://github.com/ophub/fnnas" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://github.com/ophub/fnnas" target="_blank">https://github.com/ophub/fnnas</a></hyperlink-card>
<p style="">可以看到，社区版本的飞牛OS ARM适配了包括晶晨S9XXX系列和瑞芯微RKXXXX系列以及全志h6等多款Soc的设备。项目目前跟随飞牛OS官方版本包同步打包更新。</p>
<p style="">不过，需要说明的是。由于飞牛OS的内核和内置应用的源码官方目前暂未开源，因此社区版本系统许多设备虽然显示适配了但实际刷入后仍会有各种各样的毛病，有些甚至刷入系统后无法启动。目前ophub大佬也表示，因为没有源码，目前所有的适配工作都只能靠经验倒猜，许多BUG和适配问题也无法解决。希望社区的各路大佬能够积极出手，集思广益出更多的方案和补丁，让飞牛OS社区版本的适配工作更顺利。</p>
<h2 style="" id="%E5%88%B7%E6%9C%BA%E6%96%B9%E6%B3%95">刷机方法</h2>
<p style="">刷机方法我就不提供教程了。ARM设备的刷机方法千奇百怪，详情可以查看项目的README的<a href="https://github.com/ophub/fnnas/blob/main/README.cn.md#%E5%AE%89%E8%A3%85%E5%8F%8A%E5%8D%87%E7%BA%A7-fnnas-%E7%9A%84%E7%9B%B8%E5%85%B3%E8%AF%B4%E6%98%8E" target="_blank" rel=""><strong>安装及升级 FnNAS 的相关说明</strong></a>这一栏。另外，你都玩ARM了，那你自己的板子你肯定了解怎么刷机。</p>
<h1 style="" id="%E5%BD%93%E5%89%8D%E6%96%B0%E8%BF%9B%E5%B1%95">当前新进展</h1>
<h2 style="" id="rk35xx%E5%90%AF%E7%94%A8gpu%E5%8A%A0%E9%80%9F%E8%A7%A3%E7%A0%81">rk35xx启用GPU加速解码</h2>
<p style="">飞牛OS ARM官方版本已经在338版本更新中为部分支持设备提供了VPU 硬件编解码支持，但部分设备型号还需要等到官方在 dtb 里加入 VPU, VOP 节点才能启用。对此有大佬在社区提供了自适配的解决方案：针对rk3568和rk3588机型，补齐主线缺失的&amp;rkvdec、&amp;mpp_srv等相关节点。大佬同时还提供了抠出来的节点的dtsi，可以整合进自己设备的dts文件中编译出来dtb，导入进系统后重启应该就能启用GPU硬件加速解码。推荐使用LEDE的源码进行dts-dtb的编译。具体详情可查看如下issue：</p>
<hyperlink-card target="_blank" href="https://github.com/ophub/fnnas/issues/213" theme="small" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://github.com/ophub/fnnas/issues/213" target="_blank">https://github.com/ophub/fnnas/issues/213</a></hyperlink-card>
<h3 style="" id="%E6%9C%AC%E4%BA%BA%E7%9A%84%E4%B8%80%E4%BA%9B%E5%AE%9E%E6%93%8D%E7%BB%8F%E9%AA%8C">本人的一些实操经验</h3>
<p style="">针对这一节，我的设备是FastRhino-R66s，刚好Soc是RK3568，于是沿着大佬提供的思路我做了相关尝试。</p>
<p style="">但很遗憾，在折腾了两天后，我尝试各种方法进行编译，但编译出来的dtb在系统启动时内核始终报错如下：</p>
<pre><code>[ 2.313017] rockchip-otp fe38c000.otp: error -ENOENT: Failed to get clk 'otp' 
[ 2.313046] rockchip-otp fe38c000.otp: error -ENOENT: failed to get clocks 
[ 2.313060] rockchip-otp fe38c000.otp: probe with driver rockchip-otp failed with error -2 
[ 19.561351] panfrost fde60000.gpu: _of_add_opp_table_v2: no supported OPPs 
[ 19.562005] panfrost fde60000.gpu: devfreq init failed -2 
[ 19.562528] panfrost fde60000.gpu: Fatal error during GPU init 
[ 19.564478] panfrost fde60000.gpu: probe with driver panfrost failed with error -2</code></pre>
<p style="">我猜测可能是因为大佬提供的dtsi文件内的相关节点还是和我的设备的dts不适配导致的，我也不会改，所以暂且放弃吧...</p>
<hr>
<p style="">另外，我看有人问如何把dts编译成dtb，我这有三种方案：</p>
<ol>
 <li>
  <p style="">使用lede的<a href="https://github.com/coolsnowwolf/lede" target="_blank" rel="">源码</a>修改dts，把大佬提供的dtsi引入，然后编译完整的系统，最后把dtb从编译好的系统中取出来。
   <br>
   这个方法严格参照Lemon1151和ophub两位大佬提供的方案，但说实话比较繁琐，编译一次系统至少需要一个小时。如果算上搭建编译环境和首次编译等等因素，那编译一次三个小时妥妥的。另外，本地编译一定要准备好干净的ubuntu环境和梯子，<strong>不要用WSL！！！</strong>别问我怎么知道的(〒︿〒)...</p>
 </li>
 <li>
  <p style="">使用主线内核中的dts进行修改，修改后在内核中将dts编译为dtb。
   <br>
   这个方法参照飞牛社区大佬<strong>陪玩</strong>的<a href="https://club.fnnas.com/forum.php?mod=viewthread&amp;tid=49495" target="_blank" rel="">帖子</a>，直接在主线内核上做修改，然后借助内核完成dtb的编译然后取出来。这个方法较第一个方案来说更简单快速，但编译出来的dtb不一定能成功启用GPU加速解码，至少我没成功。</p>
 </li>
 <li>
  <p style="">直接在板子上把系统内的dtb反向编译出dts，然后做修改引入dtsi，最后用dtc工具把dts重新编译出dtb。
   <br>
   这个方法仅提供思路，因为我没实际尝试。但理论上是可行的。对于如何使用dtc工具编译和反编译，问AI。</p>
 </li>
</ol>
<h4 style="" id="20260122%E6%9B%B4%E6%96%B0%EF%BC%9A">20260122更新：</h4>
<p style="">社区大佬<strong>Lemon1151</strong>已提供详细操作教程，详情见如下链接。总结一下，把修改后的dts扔进LEDE的源码里编译，然后编译完把dtb取出来，导入到<strong>官方包</strong>337以后的版本里，注意不是<strong>ophub包</strong>（ophub包还没更新，或许更新后可以？）。</p>
<hyperlink-card target="_blank" href="https://github.com/ophub/fnnas/issues/213#issuecomment-3776900056" theme="small" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://github.com/ophub/fnnas/issues/213#issuecomment-3776900056" target="_blank">https://github.com/ophub/fnnas/issues/213#issuecomment-3776900056</a></hyperlink-card>
<p style="">参照这个办法我也进行了尝试，MPP解码器成功运行，但是GPU还是因为同样的问题报错... 不过，社区已有用户的设备参照新的方法成功点亮了GPU，开启了硬件解码。所以愿意继续折腾的可以试试...</p>
<h2 style="" id="%E5%90%AF%E7%94%A8%E5%BA%94%E7%94%A8%E5%95%86%E5%BA%97%EF%BC%8C%E2%80%9C%E9%BB%91%E7%89%9B%E2%80%9D%E5%8F%98%E2%80%9C%E9%BB%84%E7%89%9B%E2%80%9D">启用应用商店，“黑牛”变“黄牛”</h2>
<p style="">没有内测资格的用户的FnOS的应用中心是空空如也的，即便你刷入的是官方包也不行。这应该是“黑牛”和“白牛”最明显的区别了，应该是飞牛官方做了限制。“黑牛”用户想要安装应用只能导入fpk离线安装包。不过，近日有恩山大佬开发出了一个工具箱，可以帮助“黑牛”玩家开启ARM飞牛应用商店。</p>
<p style="">正确的使用姿势应该是：</p>
<ol>
 <li>
  <p style="">系统装好，存储空间创建好，需要安装应用。</p>
 </li>
 <li>
  <p style="">安装大佬开发的xxnas工具箱。</p>
 </li>
 <li>
  <p style="">工具箱的第6个菜单是应用中心权限（其他先别动），点击蓝色临时开启权限。开启后去看系统设置，你会发现设备ID发生了变化。</p>
 </li>
 <li>
  <p style="">去应用商店安装你需要的应用。</p>
 </li>
 <li>
  <p style="">回到xxnas工具箱，点击恢复默认状态。刷新页面后再去系统设置里查看，你原来的设备ID回来了。</p>
 </li>
</ol>
<p style="">本方案的原理应该就是借用了有内测资格用户的位于官方白名单内的设备ID短暂开启应用中心权限，然后应用中心就可以用了。不过鉴于本方案还是有一定风险的，而且飞牛OS ARM最迟今年过年前也开启公测了，到时大家就都能用应用中心了，所以这就是个临时的解决方案，大家图一乐就好了。</p>
<p style="">除此之外，还有人提供了命令行直接改设备ID的方案，跟xxnas工具箱的原理是一样的，不过是不需要多安装一个fpk包更方便而已。</p>
<p style=""><strong>资源下载区：</strong></p>
<download-links data-links="[{&quot;url&quot;:&quot;https://www.123865.com/s/vj51Td-RiwRv&quot;,&quot;filename&quot;:&quot;解锁应用商店&quot;,&quot;source&quot;:&quot;123云盘&quot;,&quot;code&quot;:&quot;66pR&quot;,&quot;icon&quot;:&quot;/upload/123pan.png&quot;},{&quot;url&quot;:&quot;https://www.123865.com/s/vj51Td-DiwRv&quot;,&quot;filename&quot;:&quot;离线应用安装包&quot;,&quot;source&quot;:&quot;123云盘&quot;,&quot;code&quot;:&quot;PBhV&quot;,&quot;icon&quot;:&quot;/upload/123pan.png&quot;}]"></download-links>
<p style=""></p>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/c2eXhERM</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2026%2F01%2F2026-01-21-vhsxemeb.jpg&amp;size=m" type="image/jpeg" length="221917"/><category>杂七杂八</category><pubDate>Wed, 21 Jan 2026 07:05:19 GMT</pubDate></item><item><title><![CDATA[iStoreOS的折腾记录]]></title><link>https://b.utopias.site/archives/do6PWUXE</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=iStoreOS%E7%9A%84%E6%8A%98%E8%85%BE%E8%AE%B0%E5%BD%95&amp;url=/archives/do6PWUXE" width="1" height="1" alt="" style="opacity:0;">
<h1 style="" id="%E5%89%8D%E6%83%85%E6%8F%90%E8%A6%81">前情提要</h1>
<p style="">前几日手贱想要折腾一下软路由的系统，结果把存储系统的内存卡刷坏了... （吐槽一下R66S的原装内存卡质量也太差了）</p>
<p style="">于是不得不买了一张新的内存卡重新搭建整个环境，花了我整整三天... 在此记录一些值得注意的点。</p>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style="">iStoreOS是什么？——来自通义千问</p>
  <p style="">iStoreOS 是一个基于 OpenWrt 的开源路由器操作系统，专注于提供简洁、高效且易于使用的网络管理体验。它针对国内用户的使用习惯进行了深度优化，内置了丰富的插件生态，支持一键安装各类实用功能，如广告过滤、科学上网、内网穿透、流量统计等。同时，iStoreOS 拥有友好的 Web 管理界面，让用户可以轻松配置网络设置、控制设备访问权限以及管理家庭网络环境。因其高度可定制性和对多种主流路由器设备的良好兼容性，iStoreOS 受到了不少技术爱好者和家庭用户的青睐。</p>
 </div>
</div>
<h1 style="" id="%E6%AD%A3%E6%96%87">正文</h1>
<h2 style="" id="istoreos">iStoreOS</h2>
<p style="">iStoreOS毕竟是一个基于OpenWrt的操作系统，因此所有的使用逻辑也来自于OpenWrt，在此不过多赘述。这里只来记录一些锦上添花的小插件，让iStoreOS更简洁更趁手。</p>
<h3 style="" id="passwall">Passwall</h3>
<p style="">不过多赘述，相信你肯定需要，看这个项目：
 <br></p>
<hyperlink-card target="_blank" href="https://github.com/bilibili2077/passwall-run" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://github.com/bilibili2077/passwall-run" target="_blank">https://github.com/bilibili2077/passwall-run</a></hyperlink-card>
<h3 style="" id="%E9%AB%98%E7%BA%A7%E5%8D%B8%E8%BD%BD">高级卸载</h3>
<p style="">iStoreOS预装的一些插件中大概会有你用不到的或者不习惯的，自己卸载你大概率卸不干净，这个插件可以帮助你把插件、依赖和缓存一锅端了，彻底解决卸载点东西畏手畏脚的难题。哦，还可以解决你自己后安装的插件的卸载问题。</p>
<p style="">对于我来说，现在终于可以把DDNSGO、易有云全卸载掉，根本用不上啊...</p>
<hyperlink-card target="_blank" href="https://xz.vumstar.com/" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://xz.vumstar.com/" target="_blank">https://xz.vumstar.com/</a></hyperlink-card>
<h2 style="" id="%E9%98%B2%E7%81%AB%E5%A2%99">防火墙</h2>
<p style="">OpenWrt的防火墙的逻辑确实给我造成了一些困扰，这个主要为路由器设计的firewall4防火墙和我熟悉的ufw完全不一样，但我确实有从外部访问的需要，因此在以前我都是直接让防火墙四敞大开的，直接暴露所有端口。但这终归不安全，因此我决定正好借着此次机会配置好防火墙，一劳永逸。</p>
<p style="">简单来说，在较新版本的OpenWrt中，通信规则&gt;区域规则&gt;常规设置，就这么简单。</p>
<p style="">所以解决方案就是，你可以让常规设置中的入站数据和区域转发规则中来自WAN侧的入站数据都设置为拒绝，这样防火墙将进入白名单模式。然后在通信规则里配置你想要开放的端口即可。比方说下图就是开放了来自WAN侧的上级ip端192.168.1.0/24对管理面板也就是80端口的访问，这样就可以从上级路由器下的设备访问到iStoreOS的管理面板。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F12%2F2025-12-18-gxgjdddo.png&amp;size=m" alt="2025-12-18-gxgjdddo.png" width="991px" height="Infinitypx" style="display: inline-block"></p>
<h2 style="" id="nginx">Nginx</h2>
<p style="">iStoreOS跟OpenWrt一样默认使用uHTTPd作为Web服务器，因此如果你没有反向代理之类的特殊需求，大可以保持默认状态。但如果需要包括反向代理在内的高级功能，你就需要安装Nginx来替代uHTTPd。</p>
<p style="">较新版本的Nginx已经可以通过iStore一键安装了，你不需要再去进行手动的繁琐的配置让Nginx来取代uHTTPd，因为系统会自动配置好Nginx并禁用掉uHTTPd。但既然选择了安装Nginx就代表着有更多的需求，因此以下是你需要注意的点：</p>
<ol>
 <li>
  <p style="">可能是因为魔改的luci-nginx与nginx的兼容问题，自动安装后的nginx是没有nginx.conf文件的，因此nginx在重启时就会报错找不到nginx.conf文件。解决的办法就是随便拷贝一个标准的nginx.conf到<code>/etc/nginx</code>路径下，让nginx在启动的时候能够识别到nginx.conf即可。别担心，nginx启动时虽然会检测nginx.conf，但实际上并不使用nginx.conf里面的配置启动，而是使用同目录下的uci.conf，这个我们之后再说。</p>
 </li>
 <li>
  <p style="">你可以在<code>/etc/nginx/conf.d/</code>目录下添加你自己的自定义配置，nginx会在启动和重载时自动读取。</p>
 </li>
 <li>
  <p style="">nginx的日志你可以在<code>状态&gt;系统日志</code>里查看。</p>
 </li>
 <li>
  <p style="">如果出现了80和443端口占用的问题导致了nginx启动失败，可能是uHTTPd自己莫名其妙的启动了，去<code>系统&gt;启动项</code>里面手动禁用它就好。</p>
 </li>
 <li>
  <p style=""><span style="font-size: 16px; color: rgb(64, 64, 64)"><strong>不要</strong>手贱删除</span><code>/etc/nginx/uci.conf.template</code><span style="font-size: 16px; color: rgb(64, 64, 64)">！！！<strong>不要</strong>手贱删除</span><code>/etc/nginx/uci.conf.template</code><span style="font-size: 16px; color: rgb(64, 64, 64)">！！！<strong>不要</strong>手贱删除</span><code>/etc/nginx/uci.conf.template</code><span style="font-size: 16px; color: rgb(64, 64, 64)">！！！</span>
   <br>
   重要的事情说三遍。luci-<span style="font-size: 16px; color: rgb(64, 64, 64)">nginx的主配置来自</span><code>/etc/nginx/uci.conf</code><span style="font-size: 16px; color: rgb(64, 64, 64)">，</span>而uci.conf的自动生成依赖模版文件<code>/etc/nginx/uci.conf.template</code>。因此如果你手贱删掉了uci.conf.template，那么只能重装nginx了。
   <br>
   当然，如果你需要修改nginx的主配置，就可以修改uci.conf.template，记得修改之前做好备份。不要尝试直接修改uci.conf，因为这个文件是动态生成的，你人为修改后再次重启会被覆盖掉。</p>
 </li>
</ol>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/do6PWUXE</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F12%2F2025-12-18-bveuhcie.webp&amp;size=m" type="image/jpeg" length="2862"/><category>笔记</category><category>教程</category><pubDate>Thu, 18 Dec 2025 08:40:36 GMT</pubDate></item><item><title><![CDATA[WSL update时报错403的解决方案]]></title><link>https://b.utopias.site/archives/QsUQeU7j</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=WSL%20update%E6%97%B6%E6%8A%A5%E9%94%99403%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88&amp;url=/archives/QsUQeU7j" width="1" height="1" alt="" style="opacity:0;">
<h1 style="" id="%E8%83%8C%E6%99%AF">背景</h1>
<p style="">无论你是需要使用Ubuntu WSL还是需要使用Docker Desktop，你都需要先开启WSL。但是，如果你使用的是Windows 11 Pro最近的几个版本，例如25H2或者24H2，那么你首次开启虚拟化后安装WSL时几乎必定会发生如下的报错：</p>
<pre><code class="language-powershell">PS C:\Users\XXX&gt; wsl --set-default-version 2
适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 “wsl.exe --update” 进行更新。
有关详细信息，请访问 https://aka.ms/wslinstall

按任意键安装适用于 Linux 的 Windows 子系统。
按 CTRL-C 或关闭此窗口以取消。
此提示将在 60 秒后超时。
已禁止(403)。</code></pre>
<p style="">这个时候如果你在搜索引擎搜索，网络上的大部分教程会告诉你，这是因为网络问题或权限问题，导致系统无法自动下载WSL2的更新包，你需要到<hyperlink-inline-card target="_blank" href="https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package" theme="inline"><a href="https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package" target="_blank">https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package</a></hyperlink-inline-card>去下载WSL2 Linux内核更新包并手动安装。</p>
<p style="">这个步骤似乎没错，你将<code>wsl_update_x64.msi</code>下载下来并安装，那么这个时候你会遇到第二个问题：安装程序报错弹框<code>This update only applies to machines with the Windows Subsytem for Linux</code>，然后安装程序就退出了。</p>
<p style="">这会儿你肯定已经懵逼了，更新包的安装程序说我的电脑上没有WSL，那我刚刚运行的命令是什么？然后你就会去检查自己是不是真的开了WSL功能和虚拟机平台，就算你去问 AI 它也大概率告诉你的是要求你去再次检查是否已经开启那两项功能并且已经重启。一切就此卡住。</p>
<h1 style="" id="%E5%8E%9F%E5%9B%A0">原因</h1>
<p style="">先说原因吧，导致上面的问题的罪魁祸首有两个：</p>
<ul>
 <li>
  <p style="">wsl.exe --update 的“403 已禁止”报错，基本可以确定是系统无法访问微软商店/相关内容分发节点（被企业策略、WSUS、代理或地区网络限制），这在中国大陆地区很常见。</p>
 </li>
 <li>
  <p style="">在Windows 11的最新几个版本中，WSL已经改为通过微软商店包分发（Store 版 WSL），老的内核 MSI 仅适用于“inbox 版”WSL，检测到你不是该通道或检测不到对应组件时自然就会拒绝安装。</p>
 </li>
</ul>
<p style="">因此，你根据网络上的教程去手动下载的更新包实际上是与你的系统不匹配的。</p>
<h1 style="" id="%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95">解决办法</h1>
<h2 style="" id="%E6%96%B9%E6%B3%95a%EF%BC%9A%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85-store-%E7%89%88-wsl-%E5%8C%85">方法A：离线安装 Store 版 WSL 包</h2>
<p style="">我更推荐这种方法，手动安装能够避免自动安装过程中带来的网络问题。</p>
<ol>
 <li>
  <p style="">去Github上下载最新版本的WSL的安装包（.msixbundle）：<hyperlink-inline-card target="_blank" href="https://github.com/microsoft/WSL/releases" theme="inline"><a href="https://github.com/microsoft/WSL/releases" target="_blank">https://github.com/microsoft/WSL/releases</a></hyperlink-inline-card>，文件名类似这样<code>Microsoft.WSL_xxx_x64_ARM64.msixbundle</code><span style="font-size: 14px; color: rgb(0, 0, 0)">。</span></p>
 </li>
 <li>
  <p style="">直接双击打开安装包安装即可。</p>
 </li>
</ol>
<p style="">安装好之后你再去<code>wsl --set-default-version 2</code>就会发现一切正常了。</p>
<h2 style="" id="%E6%96%B9%E6%B3%95b%EF%BC%9A%E7%BB%95%E8%BF%87%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E6%9B%B4%E6%96%B0%E9%80%9A%E9%81%93">方法B：绕过微软商店更新通道</h2>
<p style="">说实话不建议使用这种方法，因为即便你能够成功连接到Github，在国内直连下载文件的速度也会超级慢。</p>
<ol>
 <li>
  <p style="">以管理员权限打开 PowerShell，执行： wsl --update --web-download 这条命令会直接从 GitHub 的 WSL 发布页下载并安装，而不是走微软商店/CDN，通常能绕过 403 问题。</p>
 </li>
 <li>
  <p style="">成功后执行： wsl --set-default-version 2 再运行 wsl --version 和 wsl --status 看看是否已显示内核版本、WSL 版本。</p>
 </li>
</ol>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/QsUQeU7j</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F10%2F2025-10-19-vsidmuoh.png&amp;size=m" type="image/jpeg" length="121728"/><category>教程</category><pubDate>Sun, 19 Oct 2025 06:32:30 GMT</pubDate></item><item><title><![CDATA[在VSCode中使用fcitx5输入中文]]></title><link>https://b.utopias.site/archives/3GsoDFx0</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E5%9C%A8VSCode%E4%B8%AD%E4%BD%BF%E7%94%A8fcitx5%E8%BE%93%E5%85%A5%E4%B8%AD%E6%96%87&amp;url=/archives/3GsoDFx0" width="1" height="1" alt="" style="opacity:0;">
<blockquote>
 <p style="">解决方案来自《<a href="https://yangqiuyi.com/blog/linux/%E5%9C%A8wayland%E6%A8%A1%E5%BC%8F%E7%9A%84vscode%E4%B8%AD%E4%BD%BF%E7%94%A8fcitx5%E8%BE%93%E5%85%A5%E4%B8%AD%E6%96%87/" target="_blank" rel="nofollow">在Wayland模式的VSCode中使用fcitx5输入中文</a>》 作者：杨秋逸</p>
</blockquote>
<p style="">注意：本文的方法在 AnduinOS 1.3.5 (基于Ubuntu 25.04), GNOME48 桌面环境下验证有效，不保证对其他发行版和桌面环境有效。</p>
<p style="">可能是因为我的fcitx5输入法是卸载了ibus之后手动后装的，也可能是别的原因，总之在使用了rime-fcitx5之后我就无法在 VSCode 里面使用输入法输入中文了。下面的方法能够帮助在 VSCode 中恢复中文的输入。</p>
<p style="">只需要在运行时加上<code>--enable-wayland-ime</code>参数就可以了：</p>
<pre><code>code --enable-wayland-ime</code></pre>
<p style="">这个时候不出意外你就会很神奇的发现又可以在 VSCode 里面愉快地输入中文了。</p>
<blockquote>
 <p style="">原理 --来自Qwen3：--enable-wayland-ime - 此选项启用了Wayland协议下的输入法支持。在某些情况下，默认配置可能不会充分考虑到所有软件对特定功能的支持情况，如输入法集成。通过启用这项特性，即使是在采用Wayland作为显示服务器的系统上也能获得更好的文本输入体验。</p>
</blockquote>
<h3 style="" id="%E4%BF%AE%E6%94%B9desktop%E6%96%87%E4%BB%B6">修改DESKTOP文件</h3>
<p style="">总是使用<code>code</code>命令在命令行里面带参数启动 VSCode 太麻烦了，进一步修改 VSCode 的 desktop 文件，让点击图标启动后的 VSCode 也能够使用输入法。</p>
<p style="">修改位于<code>/usr/share/applications/code.desktop</code>下的<code>code.desktop</code>文件，添加启动参数：</p>
<pre><code>Exec=/usr/share/code/code --enable-wayland-ime %F</code></pre>
<p style="">保存后再点击 VSCode 图标启动它，你会发现可以使用输入法输入中文了。如果你桌面上也有一个 VSCode 的图标文件记得一起修改。</p>
<div class="columns" cols="1" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><strong>特殊情况</strong></p>
  <p style="">我遇到了修改完desktop文件后点击图标启动仍旧无法使用输入法，但是使用命令行带参数启动却可以使用的诡异现象。这种情况大概是fcitx5的环境变量未正确继承导致的，如果你也遇到了这种情况，需要在 desktop 文件里面添加fcitx5的环境变量，就像这样：</p>
  <pre><code>Exec=env GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx /usr/share/code/code --enable-wayland-ime %F</code></pre>
 </div>
</div>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/3GsoDFx0</guid><dc:creator>烏托邦</dc:creator><category>教程</category><pubDate>Sat, 6 Sep 2025 08:21:00 GMT</pubDate></item><item><title><![CDATA[AnduinOS - 最像 Windows 11 的 Linux 使用体验如何]]></title><link>https://b.utopias.site/archives/nf81Legz</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=AnduinOS%20-%20%E6%9C%80%E5%83%8F%20Windows%2011%20%E7%9A%84%20Linux%20%E4%BD%BF%E7%94%A8%E4%BD%93%E9%AA%8C%E5%A6%82%E4%BD%95&amp;url=/archives/nf81Legz" width="1" height="1" alt="" style="opacity:0;">
<p style="">前一阵子偶然遇到了一个看上去很有意思的系统 - AnduinOS，到现在在我的笔记本电脑上使用了有小半个月，我想要来谈一谈这个新奇的 Linux 发行版体验到底如何。</p>
<p style="">如果你受够了 Windows 11 无休止地更新出新的 bug，但又对尝试 Linux 感到无从下手，那么这个 AnduinOS 可能正适合作为你的第一款 Linux 操作系统。它有着无限接近于 Windows 11 的操作系统界面，符合你一贯的操作习惯，你无须为需要学习一套新的操作逻辑而感到担忧，你可以很快上手适应它。它背靠世界上最流行的 Linux 发行版 - Ubuntu，有着强大的社区支持和软件支持，你无须为软件的适配发愁，也不必担忧遇到棘手的问题无法处理，几乎90%的问题都能从社区中找到解决方案。</p>
<p style="">这是一款有趣的操作系统，对于那些想要尝试 Linux 但又担心学习曲线过陡的人来说，这无疑是一个理想的选择。对于新人，它可以帮助你顺利过渡到 Linux 系统和生态，同时也让 Linux 入门变得更有趣。而对于 Linux 的常客，正如系统的作者所言，他可以让你“在业余时间舒服的使用 Linux”，仅此而已。</p>
<p style="">不过也有许多人批评它不过就是 Ubuntu 换皮，但作者似乎想要的也就是这一点，“AnduinOS 甚至在 /etc/os-release 里都标记自己是 Ubuntu，它就是 Ubuntu，这就是为了不引入太多新的概念，来尽可能重用 Ubuntu 的知识和生态”。</p>
<p style="">当然，如果只是说换皮这么简单，恐怕我也不会在这里写这篇文章。相比于标准的 Ubuntu 系统，我认为 AnduinOS 有一种开箱即用的爽感，你无须在每次重装 Ubuntu 之后再花半个小时到一个小时来自定义你的系统。常用的 Gnome 扩展都是默认安装的，让你的桌面使用起来更加顺手。AnduinOS 还去除了讨厌的 snap 商店和软件包，相信 Ubuntu 的用户都知道我在说什么。现在你可以自由选择你倾向的软件包了，无论是 flatpak 还是 appimage，亦或是你重新再把 snap 商店装回来，选择权在你。当然，由于就像我前面说的，AnduinOS 是面向小白的 Linux 系统，作者最终还是预装了 flatpak 的软件商店，以方便下载一些常用的软件，顺便也方便了 deb 包的安装。</p>
<p style="">如果所有的东西都预装好了，开箱即用，那是不是也从另一个方面意味着这是一款封闭臃肿的操作系统？并不是！AnduinOS 尝试努力地做成一张白纸，你可以在上面写写画画，让它成为你喜欢的样子。除了基本的系统组件，AnduinOS 没有任何的恶心的预装软件，甚至没有标准 Ubuntu 里面自带的 Firefox 和 LibreOffice，你可以自己决定是用 Firefox 还是 Chrome 、是用 LibreOffice 还是 WPS Office 。除此之外，AnduinOS 的作者 Anduin 还表示，AnduinOS 不收集任何用户数据，不追踪用户行为，保护你的隐私安全。</p>
<p style="">总之，这是一款从安装到使用都不会给你带来太大压力的操作系统，你大可以尝试安装在你的物理机上面来玩一玩，无论你是 Linux 小白还是专家。当然，如果你是 Windows 11 用户，想要尝试 Linux， 但又不想花费太多精力学习新操作方式，AnduinOS 更加是你的不二之选。</p>
<p style=""><strong>放几张图片上来感受一下：</strong></p>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-pibsexwt.png&amp;size=m" alt="watch.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="1" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-oalqgyju.png&amp;size=m" alt="game.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="2" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-jqiholab.png&amp;size=m" alt="code.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
</div>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-oeaonbvw.png&amp;size=m" alt="office.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="1" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-gizjfiiz.png&amp;size=m" alt="Server.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="2" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-fpxmpnux.png&amp;size=m" alt="blender.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
</div>
<p style=""><strong>关于 AnduinOS，你可能用到的资源：</strong></p>
<div class="columns" cols="1" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style="">AnduinOS 官网：</p>
  <hyperlink-card target="_blank" href="https://www.anduinos.com/" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://www.anduinos.com/" target="_blank">https://www.anduinos.com/</a></hyperlink-card>
  <p style="">AnduinOS 存储库：</p>
  <hyperlink-card target="_blank" href="https://github.com/Anduin2017/AnduinOS" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://github.com/Anduin2017/AnduinOS" target="_blank">https://github.com/Anduin2017/AnduinOS</a></hyperlink-card>
  <p style="">AnduinOS 究竟是怎么诞生的……</p>
  <hyperlink-card target="_blank" href="https://anduin.aiursoft.cn/post/2024/9/1/anduin-os-10" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://anduin.aiursoft.cn/post/2024/9/1/anduin-os-10" target="_blank">https://anduin.aiursoft.cn/post/2024/9/1/anduin-os-10</a></hyperlink-card>
 </div>
</div>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/nf81Legz</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-25-uecfadhl.png&amp;size=m" type="image/jpeg" length="204124"/><category>杂七杂八</category><pubDate>Mon, 25 Aug 2025 11:00:00 GMT</pubDate></item><item><title><![CDATA[一些近况-202508]]></title><link>https://b.utopias.site/archives/yD3sDApE</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E4%B8%80%E4%BA%9B%E8%BF%91%E5%86%B5-202508&amp;url=/archives/yD3sDApE" width="1" height="1" alt="" style="opacity:0;">
<p style=""><strong>欢迎回来！</strong>好久不见⁽⁽ ◟(∗ ˊωˋ ∗)◞ ⁾⁾</p>
<p style="">现在是2025年8月，距离上一次”一些近况“栏目的更新已经过去了9个月，此时再想聊一聊过去9个月里发生的事情恐怕已不能算是近况了，但本着命名一致性的原则，我还是把这篇杂谈命名为”一些近况“。</p>
<p style=""></p>
<p style=""><strong>关于这个网站</strong></p>
<p style="">这个网站在过去9个月里面一共只更新了两篇文章（不包含本月新更新的），且都是在去年年底更新的。事实上，这倒不完全是因为我懒，实在是因为在过去的一年里发生了很多事情，致使我不太有空来更新和维护这个网站。另外，说实话，我也不太知道要写点什么，没有新的选题也没有更新的动力，请见谅。</p>
<p style="">今年已经过去了四分之三，我想我确实需要写点什么来证明这个网站还活着，以防止被萌站备案当成死站踢出去（笑）。</p>
<p style="">谈一谈更新计划吧。在这篇杂谈之前，本月已经更新了两篇文章，一篇与最近很火的EdgeOne有关，另一篇跟Linux有关。到现在为止今年已经有计划更新的文章应该还有几篇，包括EdgeOne还会有1-2篇，与Linux有关的应该也还有几篇。我会尽量在今年剩下的三个月每个月都更新至少一篇，当然也有可能腹泻式更新好几篇然后沉寂到明年。但是反正，肯定还会有更新就是了。╮(╯_╰)╭</p>
<p style="">哦对了，除了文章以外，站点也已经做出了一点小小的更新。之前一直都没有”关于“这一栏，因为我一直没想好怎么写，所以就一直也没开放。但现在我重新写了一篇关于，填上了这个好久之前挖的坑。另外网站的页脚也有一点小改进。还有还有，评论系统我也重新配置了，虽然前端可能看不出来，但比之前好用太多了。</p>
<p style=""></p>
<p style=""><strong>关于站长</strong></p>
<p style="">过去的12个月对于我来说，是我到目前为止的人生中最具有挑战性的一年，也是最“颠沛流离”的一年。</p>
<p style="">7月 入职一家外企，第一次实习工作；第一次在外面租房子；</p>
<p style="">9月 第一次在异地的朋友家过夜；第一次坐半夜的火车偷偷跑回家；</p>
<p style="">10月 第一次去漫展玩，遇到了很多同好；</p>
<p style="">11月 在漫展和关注了很多年的coser面基；</p>
<p style="">12月 终于也是有机会在东北的城市吃上达美乐了~；复习然后回学校考试；</p>
<p style="">1月 毕设选题，开始准备毕业设计的前期工作了；</p>
<p style="">3月 学校的事情多起来，开始频繁的往返于公司住处和学校；</p>
<p style="">4月 终于是下定决心准备出国了，开始准备申请的各种材料，依旧是来回跑；</p>
<p style="">5月 下定决心离职了，离职前还请领导帮我写了介绍信~；毕设是完事了，疯狂忙论文；</p>
<p style="">6月 疯狂改论文，学校和家两地来回跑；顺利毕业了~</p>
<p style="">7月 家里蹲，学雅思，考雅思~</p>
<p style="">写到这里突然觉得时间好快啊，去年7月的我恐怕也想不到在接下来的一年里会发生那么多事情吧。</p>
<p style="">就到这里吧，再写下去就像流水账了......</p>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/yD3sDApE</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-18-pksvjypr.webp&amp;size=m" type="image/jpeg" length="34151"/><category>杂七杂八</category><pubDate>Mon, 18 Aug 2025 12:00:00 GMT</pubDate></item><item><title><![CDATA[解决在Linux上处理文档时的几个蛋疼问题]]></title><link>https://b.utopias.site/archives/K0OOvMBb</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E8%A7%A3%E5%86%B3%E5%9C%A8Linux%E4%B8%8A%E5%A4%84%E7%90%86%E6%96%87%E6%A1%A3%E6%97%B6%E7%9A%84%E5%87%A0%E4%B8%AA%E8%9B%8B%E7%96%BC%E9%97%AE%E9%A2%98&amp;url=/archives/K0OOvMBb" width="1" height="1" alt="" style="opacity:0;">
<p style="">当使用 Ubuntu 或者其它 Linux 系统办公和处理文档时，常常会因为 Ubuntu 上缺少常用的字体以及开放文档格式 (ODF) 的文件版式不严谨而使工作陷入困境。此时，导入来自 Windows 的常用字体和 Office 新建文档将有助于解决这一问题。</p>
<p style="">下面的资源中包含我选自 Windows 中的常用中英文字体以及符号，将他们导入 Ubuntu 将会帮助解决文档字体缺失问题。还有三个新建的 Office 文档，包括 docx/pptx/xlsx。将这三个新建自 Windows 的文档导入到 Ubuntu 的 Templates 文件夹下作为模板，将有助于解决直接在 Ubuntu 上使用 LibreOffice 新建文档并保存为 Microsoft Office 格式后，文档的版式总是跟直接在 Windows 上新建的文档的版式不太一样的问题。</p>
<p style=""><strong>字体的使用方法：</strong></p>
<p style="">将解压后的字体文件夹复制到 /usr/share/fonts 目录下，然后运行 <code>fc-cache -fv</code> 命令以更新字体缓存。</p>
<p style=""><strong>模板的使用方法：</strong></p>
<p style="">将解压后的三个文件复制到主目录下的 Templates 文件夹下，没有这个文件夹就新建一个。</p>
<p style=""></p>
<p style=""><strong>资源下载区：</strong></p>
<download-links data-links="[{&quot;url&quot;:&quot;https://pan.quark.cn/s/d40943f0d6df&quot;,&quot;filename&quot;:&quot;Windows Fonts.zip&quot;,&quot;source&quot;:&quot;夸克网盘&quot;,&quot;code&quot;:&quot;&quot;,&quot;icon&quot;:&quot;/upload/quark.png&quot;}]"></download-links>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/K0OOvMBb</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-15-oefjiegv.jpg&amp;size=m" type="image/jpeg" length="35203"/><category>笔记</category><category>教程</category><pubDate>Thu, 14 Aug 2025 17:30:00 GMT</pubDate></item><item><title><![CDATA[Certimate配合EdgeOne实现证书自动化部署]]></title><link>https://b.utopias.site/archives/K4rslPV9</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=Certimate%E9%85%8D%E5%90%88EdgeOne%E5%AE%9E%E7%8E%B0%E8%AF%81%E4%B9%A6%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2&amp;url=/archives/K4rslPV9" width="1" height="1" alt="" style="opacity:0;">
<h1 style="" id="%E4%BB%80%E4%B9%88%E6%98%AFedgeone">什么是EdgeOne</h1>
<p style="">首先来谈谈什么是EdgeOne，以下解释来自DeepSeek：</p>
<blockquote>
 <p style="">EdgeOne是腾讯云推出的一款边缘计算服务产品，旨在通过分布在全球各地的边缘节点，提供低延迟、高可用性的计算、存储和网络资源，满足用户对实时性和高性能的需求。</p>
</blockquote>
<p style="">简单来说，EdgeOne是一种升级版的<strong>CDN</strong>，提供连接加速功能的同时又保障了传输安全，可谓是赛博活佛Cloudflare的替代品。相比于Cloudflare，EdgeOne又有许多优点。</p>
<p style="">首先是EdgeOne自称是亚洲地区最快的CDN，是不是最快暂且不表，但至少针对亚洲地区连接进行了优化，实测相比Cloudflare连接更流畅。</p>
<p style="">然后，如果你有一个国内备案过的域名，那么你就可以免费使用EdgeOne的国内加速服务。这是首个面向个人用户免费的可以提供中国大陆加速服务的全球CDN，与此相比Cloudflare仅对企业版付费用户提供此服务。</p>
<p style="">最后对于我来说，EdgeOne相比Cloudflare还有其他几个优点：无需将域名完全托管，允许通过cname的方式托管域名；允许自定义回源端口，无需锁死在少数几个端口上；SSL证书同时支持在EdgeOne免费申请和托管自己的证书，统一证书管理（也是这篇文章用到的特性）；支持加速对象存储、加速音视频流等服务，不只局限于网站加速。</p>
<p style="">当然相比于Cloudflare来说EdgeOne也有几个明显的缺点：免费资格需要限时限量抢，如果你有四五个域名需要托管免费资格怕是不够用；国际站完成注册需要银行卡验证，国内站更是需要实名认证；不支持优选IP（如果你有特殊需求你应该知道这意味着什么）；免费方案不支持HTTP3(QUIC)请求等。但总体来说瑕不掩瑜，我愿称之为新一代赛博活佛。</p>
<p style="">目前腾讯云EdgeOne国际站测速并分享至<strong>X</strong>和<strong>Facebook</strong>免费领两个免费资格，可以去<hyperlink-inline-card target="_blank" href="https://edgeone.ai/get-free-plan" theme="inline"><a href="https://edgeone.ai/get-free-plan" target="_blank">https://edgeone.ai/get-free-plan</a></hyperlink-inline-card>注册后测速领取。腾讯云EdgeOne中国站也可以通过兑换官方Discord频道每日定时定量发放的兑换码获取一个免费资格。</p>
<h1 style="" id="%E4%BB%80%E4%B9%88%E6%98%AFcertimate">什么是Certimate</h1>
<p style="">然后来谈谈什么是Certimate，以下解释来自Qwen3:</p>
<blockquote>
 <p style="">Certimate 是一个用于自动化申请和管理 SSL/TLS 证书的开源项目，目标是简化 HTTPS 证书的申请、续签及部署流程，提升运维效率和系统安全性。它基于 Let's Encrypt（或其它 ACME 协议兼容的CA）自动申请免费证书，并支持多种 DNS 解析商自动完成域名验证（DNS-01 Challenge）。</p>
</blockquote>
<p style="">SSL证书在Apple等一众大公司的支持下有效期逐渐缩短，免费证书的有效期现在已经缩短到了90天，未来更是要缩短到45天。在这种背景下手动更新SSL证书会成为一件极其繁琐的事情，证书自动化成为了一件必要且迫在眉睫的事情。虽然Cloudflare和EdgeOne的CDN证书都支持自动申请免费证书和自动续期，但我还是喜欢源站和CDN都使用一张证书，方便管理。况且一些小的CDN只支持手动上传证书，因此自动化更新源站和CDN的证书还是很有必要的。</p>
<h1 style="" id="certimate%E7%9A%84%E9%85%8D%E7%BD%AE">Certimate的配置</h1>
<p style="">我们现在假设你已经完成了Certimate的安装和配置，也完成了EdgeOne的网站配置，我们现在只讲解Certimate配合EdgeOne实现证书自动化部署。</p>
<p style="">在Certimate中新建一个标准模板的工作流，我们在此基础上对工作流进行修改。</p>
<p style="">新建的工作流架构应该如前图所示，我们在申请执行成功的后面新增一条分支，修改后的工作流应该如后图所示。</p>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-bzkwkaew.png&amp;size=m" alt="2025-08-13-bzkwkaew.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="1" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-ejqgrdaj.png&amp;size=m" alt="2025-08-13-ejqgrdaj.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
</div>
<p style="">在源站的这一条分支，我们修改部署环节的配置，根据自己的情况将申请到的证书部署在自己的源站。这里展示当源站部署在宝塔和1panel面板时的配置模板。</p>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-nnaghmni.png&amp;size=m" alt="2025-08-13-nnaghmni.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="1" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-nkmplcup.png&amp;size=m" alt="2025-08-13-nkmplcup.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
</div>
<p style="">其中当部署目标为1panel时，1panel的网站ID获取办法参考下图。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-kxxdknwx.png&amp;size=m" alt="2025-08-13-kxxdknwx.png" width="100%" height="100%" style="display: inline-block"></p>
<p style="">在CDN的这一条分支，我们修改部署环节的配置，根据自己的情况将申请到的证书部署到EdgeOne。</p>
<p style="">在主机提供商授权那里选择新建一个腾讯云，SecretID和SecretKey需要去腾讯云创建一个accesskey然后复制以上两个的值到这里。接口端点那里默认不填。腾讯云 EdgeOne 站点 ID可以在站点概览的上方找到，如图：</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-mrssjrjc.png&amp;size=m" alt="2025-08-13-mrssjrjc.png" width="100%" height="100%" style="display: inline-block"></p>
<p style="">腾讯云 EdgeOne 加速域名则是你的网站的域名。最后配置参考如下图。</p>
<p style="text-align: center"><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-fbygdnxa.png&amp;size=m" alt="2025-08-13-fbygdnxa.png" width="50%" height="auto" style="display: inline-block"></p>
<p style="">Certimate工作流的其余配置项，包括工作流何时触发、证书的申请配置、以及失败后通知提醒，请根据实际情况自行探索修改，在此不过多赘述。</p>
<p style="">最后可手动运行一次工作流，若成功则EdgeOne的域名配置中HTTPS的标志应该点亮，同时可以看到申请的证书已经成功配置到EdgeOne了。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-13-nwhqtidi.png&amp;size=m" width="100%" height="100%" style="display: inline-block"></p>]]></description><guid isPermaLink="false">/archives/K4rslPV9</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2025%2F08%2F2025-08-14-nsxxkucz.png&amp;size=m" type="image/jpeg" length="56996"/><category>教程</category><pubDate>Wed, 13 Aug 2025 15:00:00 GMT</pubDate></item><item><title><![CDATA[飞书多维表格实现友链自助提交]]></title><link>https://b.utopias.site/archives/kLHhDPOh</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E9%A3%9E%E4%B9%A6%E5%A4%9A%E7%BB%B4%E8%A1%A8%E6%A0%BC%E5%AE%9E%E7%8E%B0%E5%8F%8B%E9%93%BE%E8%87%AA%E5%8A%A9%E6%8F%90%E4%BA%A4&amp;url=/archives/kLHhDPOh" width="1" height="1" alt="" style="opacity:0;">
<h2 style="" id="%E5%89%8D%E8%A8%80">前言</h2>
<p style="">这个网站建立一年多了，从Typecho的时代到今天的Halo，我都没有注意过友链这个功能。直到最近有朋友来问，说你的站点的友链页面为什么什么也没有啊，我才注意到这个功能。再加上前段时间偶然间在B站刷到过一个使用飞书多维表格自动化添加友链的视频，视频中只提供了简单的思路，于是我决定实践一下，摸索出一套完整的解决方案。</p>
<p style=""></p>
<h2 style="" id="%E5%AE%9E%E7%8E%B0%E9%80%BB%E8%BE%91">实现逻辑</h2>
<p style="">想要实现友链的自助提交功能，大体上应该有两部分：友链的申请，友链的添加。友链的申请部分可以用飞书多维表格构建一个收集表，用来收集友链的申请信息。友链的添加部分需要实现友链的自动化添加，这里可以在飞书多维表格中创建工作流，利用工作流的发送HTTP请求功能，调用Halo链接插件的官方API即可完成添加。</p>
<p style="">除此之外，在友链的申请和添加中间，我还想实现一个步骤，那就是友链的自动化审核。两个网站想要构成友链，应该是互为友链的，单方面的友链不太可能。因此，我还希望在这个流程中可以实现友链的自动验证审核，自动去对方网站的友链页面检查一下添没添加我的网站信息。</p>
<p style="">所以，完整的逻辑应该是：先接收申请，再进行审核，最后进行添加。</p>
<p style=""></p>
<h2 style="" id="%E5%AE%9E%E7%8E%B0%E7%BB%86%E8%8A%82">实现细节</h2>
<h3 style="" id="%E5%8F%8B%E9%93%BE%E7%9A%84%E7%94%B3%E8%AF%B7">友链的申请</h3>
<p style="">首先我们要解决的是友链的申请部分，这部分应该是三步曲中最好解决的部分。</p>
<p style=""></p>
<p style="">我们只要在飞书中新建一个多维表格，可以给它取名为“友链”。然后在这个多维表格中新建一个收集表，在这个收集表中添加所有你需要收集的信息，我认为需要收集的就是以下这些信息，当然你可以根据实际情况自定义。</p>
<div style="overflow-x: auto; overflow-y: hidden;">
 <table style="width: 973px">
  <colgroup>
   <col style="width: 100px">
   <col style="width: 122px">
   <col style="width: 126px">
   <col style="width: 124px">
   <col style="width: 129px">
   <col style="width: 101px">
   <col style="width: 71px">
   <col style="width: 100px">
   <col style="width: 100px">
  </colgroup>
  <tbody>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style="">你的昵称</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="122">
     <p style="">你的网站名称</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="126">
     <p style="">你的网站链接</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="124">
     <p style="">你的网站类型</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="129">
     <p style="">你的网站简介</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="101">
     <p style="">你的网站Logo</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="71">
     <p style="">你的网站的友链页面</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="100">
     <p style="">你的邮箱</p>
    </td>
    <td colspan="1" rowspan="1" colwidth="100">
     <p style="">其他说明</p>
    </td>
   </tr>
  </tbody>
 </table>
</div>
<p style=""></p>
<p style="">然后你可以给这份表单起一个名字，比如“友链自助申请表”，可以给它换个好看的样式。记得在右上角的设置中将表单设置成“允许匿名填写”和“任何人都可以填写”，然后就可以发布啦。此时你就会获得一个可以对外分享的链接，理论上把这个链接挂到你的网站的友链页面上就可以供他人自助申请了。</p>
<p style="">关于友链自助申请表的设计，这里可以参考一下我的：(下面加载失败请点击这里)</p>
<p style="text-align: center"><iframe src="https://utopia-s.feishu.cn/share/base/form/shrcns7slo28POvvI6WtvHwbnce" width="100%" height="300px" frameborder="0" allowfullscreen="true" framespacing="0" style="display: inline-block"></iframe></p>
<p style=""></p>
<p style="">最后，为了体现一些专业性，我们可以创建一个查询页面，用户可以通过这个查询页面查看提交的信息和处理进度等信息。在这份申请表的右上角点击创建查询页面的小圆钮，就可以自动生成一个查询页面。我们可以调整一下让用户查询的字段，我建议只勾选<strong>你的邮箱</strong>和<strong>你的网站链接</strong>即可，因为这两个字段的唯一性比较强，保证用户可以精准查询到自己提交的记录。</p>
<p style="">同样的，我们可以给这个表单美化一下，起个名叫“友链提交查询”。可以在右上角的设置中调整查询范围、权限设置、可见字段等相关设置。然后点击发布即可获得一个可以对外分享的链接。</p>
<p style="">这里也可以参考一下我的“友链提交查询”页面：（请点击<a href="https://utopia-s.feishu.cn/share/base/query/shrcnowrvWXaQlpPOF8upC1jS3b" target="_blank">这里</a>前往）</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-hnvingpk.png&amp;size=m" alt="2024-12-11-hnvingpk.png" width="60%" height="auto" style="display: inline-block"></p>
<p style=""></p>
<p style="">至此，一个如下图结构的收集表就做好了，我们可以在多维表格的收集结果中直接查看提交记录。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-mqvsqwot.png&amp;size=m" alt="2024-12-11-mqvsqwot.png" width="25%" height="auto" style="display: inline-block"></p>
<p style=""></p>
<p style="">为了方便后续的自动化处理部分，需要在收集表中手动添加三个字段：友链添加状态、添加失败原因、人工审核意见（可选）：</p>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-ktwkzoit.png&amp;size=m" alt="2024-12-11-ktwkzoit.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="1" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-mymqrgbh.png&amp;size=m" alt="2024-12-11-mymqrgbh.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="2" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-ucvthgfl.png&amp;size=m" alt="2024-12-11-ucvthgfl.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
</div>
<h3 style="" id="%E5%8F%8B%E9%93%BE%E7%9A%84%E5%AE%A1%E6%A0%B8%E5%92%8C%E8%87%AA%E5%8A%A8%E5%8C%96%E5%A4%84%E7%90%86%E6%B7%BB%E5%8A%A0">友链的审核和自动化处理添加</h3>
<p style="">友链的审核部分则依赖飞书多维表格的工作流和自动化功能，从而实现友链从提交到审核再到添加的全流程自动化作业。</p>
<h4 style="" id="%E5%B7%A5%E4%BD%9C%E6%B5%81">工作流</h4>
<p style="">工作流的完整流程如下，包含了从提交到审核到添加的全过程，以及错误处理和通知功能。</p>
<p style="">因为飞书多维表格的工作流不支持直接对外分享，若需要具体每个步骤的配置细节，请查看 <strong>资源分享说明</strong> 部分。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-wwsxkedd.png&amp;size=m" alt="2024-12-11-wwsxkedd.png" width="100%" height="100%" style="display: inline-block"></p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-jxodycqr.png&amp;size=m" alt="2024-12-11-jxodycqr.png" width="100%" height="100%" style="display: inline-block"></p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-pciobhhq.png&amp;size=m" alt="2024-12-11-pciobhhq.png" width="100%" height="100%" style="display: inline-block"></p>
<p style=""></p>
<h4 style="" id="%E8%87%AA%E5%8A%A8%E5%8C%96">自动化</h4>
<p style="">自动化主要是根据流程中的不同状态和情况，自动触发对用户的邮件通知。目前共有六种状态需要通知：</p>
<p style="">同样因为飞书多维表格的自动化配置不支持直接对外分享，若需要具体的配置细节和邮件模板，请查看 <strong>资源分享说明</strong> 部分。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-rkkkryfk.png&amp;size=m" alt="2024-12-11-rkkkryfk.png" width="50%" height="auto" style="display: inline-block"></p>
<p style=""></p>
<h4 style="" id="%E5%8F%8B%E9%93%BE%E8%87%AA%E5%8A%A8%E9%AA%8C%E8%AF%81%E5%B7%A5%E5%85%B7-flinkvertify">友链自动验证工具-flinkvertify</h4>
<p style="">对于双向友链的验证部分，这里需要展开介绍一下这个搭配工作流使用的双向友链验证插件——flinkvertify。</p>
<p style="">这个程序的设计目的是为了在对方网站的友链页面上自动抓取并验证对方是否添加了我们的博客为友链，然后返回检测结果给多维表格的工作流。当检测结果为true时，工作流会继续进行友链自动化添加流程；当检测结果为false时，触发并通知人工审核。</p>
<p style="">flinkvertify目前已经开源，欢迎前往Gitee或Github下载使用：</p>
<hyperlink-card target="_blank" href="https://gitee.com/chenxv399/flinkvertify" theme="small" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://gitee.com/chenxv399/flinkvertify" target="_blank">https://gitee.com/chenxv399/flinkvertify</a></hyperlink-card><hyperlink-card target="_blank" href="https://github.com/chenxv399/flinkvertify" theme="small" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://github.com/chenxv399/flinkvertify" target="_blank">https://github.com/chenxv399/flinkvertify</a></hyperlink-card><hyperlink-card target="_blank" href="https://code.utopias.site/chenxv399/flinkvertify" theme="small" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://code.utopias.site/chenxv399/flinkvertify" target="_blank">https://code.utopias.site/chenxv399/flinkvertify</a></hyperlink-card>
<p style=""></p>
<p style="">多维表格工作流中的第9步和第11步即为双向友链验证功能的实现，具体细节如下:</p>
<div class="columns" cols="2" style="display: flex;width: 100%;gap: 1em;">
 <div class="column" index="0" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-demtprbm.png&amp;size=m" alt="2024-12-11-demtprbm.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
 <div class="column" index="1" style="min-width: 0;flex: 1 1;box-sizing: border-box;">
  <p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-tbsuwovo.png&amp;size=m" alt="2024-12-11-tbsuwovo.png" width="100%" height="100%" style="display: inline-block"></p>
 </div>
</div>
<p style=""></p>
<h4 style="" id="%E5%8F%8B%E9%93%BE%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E9%83%A8%E5%88%86">友链自动添加部分</h4>
<p style="">对于友链的自动添加部分，通过请求Halo官方链接插件plugin-links的接口实现：</p>
<p style="">项目地址：<hyperlink-inline-card target="_blank" href="https://github.com/halo-sigs/plugin-links" theme="inline"><a href="https://github.com/halo-sigs/plugin-links" target="_blank">https://github.com/halo-sigs/plugin-links</a></hyperlink-inline-card></p>
<p style="">接口文档：<hyperlink-inline-card target="_blank" href="https://github.com/halo-sigs/plugin-links/blob/main/api-docs/openapi/v3_0/linksV1alpha1Api.json" theme="inline"><a href="https://github.com/halo-sigs/plugin-links/blob/main/api-docs/openapi/v3_0/linksV1alpha1Api.json" target="_blank">https://github.com/halo-sigs/plugin-links/blob/main/api-docs/openapi/v3_0/linksV1alpha1Api.json</a></hyperlink-inline-card></p>
<p style=""></p>
<p style="">多维表格工作流中的第15步即为自动添加友链功能的实现，具体细节如下：</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-11-dysbejyb.png&amp;size=m" alt="2024-12-11-dysbejyb.png" width="300px" height="100%" style="display: inline-block"></p>
<p style=""></p>
<h2 style="" id="%E8%B5%84%E6%BA%90%E5%88%86%E4%BA%AB%E8%AF%B4%E6%98%8E">资源分享说明</h2>
<p style="">请遵守<a href="https://creativecommons.org/licenses/by/4.0/legalcode.zh-hans" target="_blank">CC BY 4.0</a>协议，转载本文请注明原作者及来源。请勿用于任何形式的商业用途。</p>
<ul>
 <li>
  <p style="">flinkvertify直接下载链接：<hyperlink-inline-card target="_blank" href="https://wwtb.lanzouv.com/id3i62ht9g0j" theme="inline"><a href="https://wwtb.lanzouv.com/id3i62ht9g0j" target="_blank">https://wwtb.lanzouv.com/id3i62ht9g0j</a></hyperlink-inline-card> 密码:g7hu</p>
 </li>
 <li>
  <p style="">对于多维表格收集表，可参考以下模板分享链接：</p>
 </li>
</ul>
<p style=""><hyperlink-inline-card target="_blank" href="https://utopia-s.feishu.cn/wiki/PirJwMRU2iL4VokQDOkcFTlzn0V?from=from_copylink" theme="inline"><a href="https://utopia-s.feishu.cn/wiki/PirJwMRU2iL4VokQDOkcFTlzn0V?from=from_copylink" target="_blank">https://utopia-s.feishu.cn/wiki/PirJwMRU2iL4VokQDOkcFTlzn0V?from=from_copylink</a></hyperlink-inline-card></p>
<div class="html-edited">
 <style>
  .password-container {
    position: relative;
    display: inline-block;
  }
  .password-button {
    padding: 5px 10px;
    cursor: pointer;
    background-color: #f0f0f0;
    border: 1px solid #ddd;
    border-radius: 4px;
  }
  .password {
    display: none;
    font-family: monospace;
    font-size: 16px;
    padding: 5px 10px;
    background-color: #f8f8f8;
    border: 1px solid #ddd;
    border-radius: 4px;
    margin-top: 5px;
  }
</style>
 <div class="password-container">
  <button class="password-button" onclick="togglePassword()">访问密码点击可见</button>
  <span class="password" id="password">224f299&amp;</span>
 </div>
 <script>
function togglePassword() {
  var passwordButton = document.querySelector('.password-button');
  var password = document.getElementById('password');
  
  if (password.style.display === 'none') {
    password.style.display = 'inline';
    passwordButton.style.display = 'none';
  } else {
    password.style.display = 'none';
    passwordButton.style.display = 'inline';
  }
}
</script>
</div>
<ul>
 <li>
  <p style="">对于多维表格工作流和自动化的具体细节的获取，因为飞书不支持直接分享多维表格的工作流和自动化，请联系本站邮箱或在评论区留下您的联系方式，本人看到后将会联系您。</p>
 </li>
</ul>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/kLHhDPOh</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fwmimg.com%2Fi%2F1307%2F2025%2F07%2F6875297316d68.png&amp;size=m" type="image/jpeg" length="0"/><category>教程</category><pubDate>Wed, 11 Dec 2024 08:21:59 GMT</pubDate></item><item><title><![CDATA[ZITADEL的Docker私有化部署]]></title><link>https://b.utopias.site/archives/FGsDPmRB</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=ZITADEL%E7%9A%84Docker%E7%A7%81%E6%9C%89%E5%8C%96%E9%83%A8%E7%BD%B2&amp;url=/archives/FGsDPmRB" width="1" height="1" alt="" style="opacity:0;">
<h2 style="" id="%E8%B5%B7%E5%9B%A0">起因</h2>
<p style="">写这篇教程的原因是，想要在Docker部署一个用于SSO的IDP，但是始终没有找到适合的项目。Auth0似乎没法私有化部署；Logto私有化部署教程乱七八糟，并且无论用任何方式部署镜像连接数据库都报错；Casdoor的界面实在是太繁琐，看的我头疼。于是，我就想试一试ZITADEL。</p>
<p style="">但我没有想到的是，ZITADEL的文档写的比Logto还烂，具体可以去看我<code>2024/12/7</code>的瞬间，以至于我都怀疑是不是开发商认为把文档写的烂一些就可以使用户被迫购买他们的SaaS服务。既然官方文档不适合人类看，那我就写一个适合小白看的部署文档。</p>
<h2 style="" id="zitadel%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F">ZITADEL是什么？</h2>
<p style=""><strong>来自ChatGPT：</strong></p>
<p style="">ZITADEL 是一个专注于简化身份验证基础设施的平台，它提供安全的身份验证管理服务，支持自定义和可编程工作流程。ZITADEL 通过易于使用的API和现代认证方法来帮助开发者和企业快速集成安全的身份验证解决方案到他们的应用程序中。</p>
<p style="">ZITADEL 的特点包括但不限于：</p>
<p style="">- 提供OAuth2.0, OpenID Connect (OIDC) 和其他标准协议的支持。</p>
<p style="">- 支持多种认证方式，如密码、多因素认证（MFA）、单点登录（SSO）等。</p>
<p style="">- 允许用户管理和自定义用户界面，以便更好地适应品牌需求。</p>
<p style="">- 提供细粒度的授权管理，使得应用可以基于角色或权限进行访问控制。</p>
<p style="">- 支持API密钥管理，便于开发者安全地访问后端服务。</p>
<p style="">- 集成幂简，即插即用的特性，减少了开发时间和成本。</p>
<p style="">ZITADEL 可以被各种规模的企业使用，从初创公司到大型企业，用于保护Web应用、移动应用和其他类型的数字产品。此外，对于需要在多个项目间共享身份验证逻辑的团队来说，ZITADEL 也是一个理想的解决方案，因为它消除了为每个项目单独开发身份验证系统的必要性。</p>
<h2 style="" id="%E6%80%8E%E4%B9%88%E5%9C%A8docker%E4%B8%AD%E9%83%A8%E7%BD%B2%EF%BC%9F">怎么在Docker中部署？</h2>
<h3 style="" id="%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93">创建数据库</h3>
<p style="">首先，你需要在PostgreSQL16中新建一个数据库。</p>
<p style="">这里用1panel可以很方便地可视化创建一个：</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-07-wvaahddr.png&amp;size=m" alt="2024-12-07-wvaahddr.png" width="50%" height="auto" style="display: inline-block"></p>
<h3 style="" id="%E6%8B%89%E5%8F%96%E9%95%9C%E5%83%8F">拉取镜像</h3>
<pre><code class="language-bash">docker pull ghcr.io/zitadel/zitadel:latest</code></pre>
<p style="">或者，我更建议使用1panle这样的可视化面板拉取。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-07-rvhkmzlz.png&amp;size=m" alt="2024-12-07-rvhkmzlz.png" width="25%" height="auto" style="display: inline-block"></p>
<h3 style="" id="%E5%88%9B%E5%BB%BA%E5%AE%B9%E5%99%A8">创建容器</h3>
<pre><code class="language-bash">docker run \
  --name zitadel \
  --network db \
  -p 8080:8080 \
  -e ZITADEL_PORT=8080 \
  -e ZITADEL_DATABASE_POSTGRES_HOST=&lt;db_host&gt; \
  -e ZITADEL_DATABASE_POSTGRES_PORT=5432 \
  -e ZITADEL_DATABASE_POSTGRES_DATABASE=zitadel \
  -e ZITADEL_DATABASE_POSTGRES_USER_USERNAME=zitadel \
  -e ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=&lt;your_password&gt; \
  -e ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable \
  -e ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=&lt;your_username&gt; \
  -e ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=&lt;your_password&gt; \
  -e ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE=disable \
  -e ZITADEL_EXTERNALSECURE=true \
  -e ZITADEL_EXTERNALPORT=443 \
  -e ZITADEL_TLS_ENABLED=false \
  -e ZITADEL_EXTERNALDOMAIN=&lt;your.domain&gt; \
  -e ZITADEL_LOGSTORE_ACCESS_STDOUT_ENABLED=true \
  -e ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORDCHANGEREQUIRED=false \
  --restart always \
  ghcr.io/zitadel/zitadel:latest \
  start-from-init \
  --masterkey MasterkeyNeedsToHave32Characters \
  --tlsMode external</code></pre>
<p style="">请注意，请根据实际情况自行修改上述部署命令中的环境变量参数。</p>
<p style=""></p>
<p style="">或者，我更建议使用1panel进行可视化部署容器。</p>
<ul>
 <li>
  <p style="">名称：zitadel</p>
 </li>
 <li>
  <p style="">镜像：刚刚拉取的镜像</p>
 </li>
 <li>
  <p style="">端口：8080:8080
   <br>
   请注意：服务器与容器端口必须相同。若映射端口需要修改则环境变量中容器服务端口也需要修改为相同值。</p>
 </li>
 <li>
  <p style="">网络：请选择与数据库容器相同的网络。若数据库安装自1panel应用商店，则为<code>1panel-network</code>。</p>
 </li>
 <li>
  <p style="">Command：<code>'start-from-init' '--masterkey' 'MasterkeyNeedsToHave32Characters' '--tlsMode' 'external'</code></p>
 </li>
 <li>
  <p style="">一直重启</p>
 </li>
 <li>
  <p style="">环境变量如下(请根据实际情况修改，复制粘贴请删除注释)：</p>
 </li>
</ul>
<pre><code>ZITADEL_PORT=8080 //容器服务端口，默认8080
ZITADEL_DATABASE_POSTGRES_HOST=&lt;db_host&gt; //数据库地址
ZITADEL_DATABASE_POSTGRES_PORT=5432 //数据库端口
ZITADEL_DATABASE_POSTGRES_DATABASE=zitadel //数据库名称
ZITADEL_DATABASE_POSTGRES_USER_USERNAME=zitadel //数据库用户名
ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=&lt;your_password&gt; //数据库密码
ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable
ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=&lt;your_username&gt; //数据库管理用户名
ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=&lt;your_password&gt; //数据库管理密码
ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE=disable
ZITADEL_EXTERNALSECURE=true
ZITADEL_EXTERNALPORT=443
ZITADEL_TLS_ENABLED=false
ZITADEL_EXTERNALDOMAIN=&lt;your_domain&gt; //对外访问域名
ZITADEL_LOGSTORE_ACCESS_STDOUT_ENABLED=true
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORDCHANGEREQUIRED=false</code></pre>
<p style=""></p>
<p style="">部署后查看日志，出现下图字样即为部署成功。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F12%2F2024-12-07-kpbsvkrh.png&amp;size=m" alt="2024-12-07-kpbsvkrh.png" width="50%" height="auto" style="display: inline-block"></p>
<h3 style="" id="%E9%85%8D%E7%BD%AE%E5%8F%8D%E4%BB%A3">配置反代</h3>
<p style="">这里针对1panel面板环境及OpenResty，其他面板同理，Nginx同理。</p>
<ol>
 <li>
  <p style="">首先创建一个反向代理类型的网站，根据实际情况配置好域名和代理地址。</p>
 </li>
 <li>
  <p style="">申请并配置好域名的证书，启用HTTPS。</p>
 </li>
 <li>
  <p style=""><strong>最关键的一步。</strong>进入网站配置，编辑配置文件。
   <br>
   删除掉这一行<code>include /www/sites/&lt;your_domain&gt;/proxy/*.conf;</code> （其中<code>&lt;your_domain&gt;</code> 为你的网站域名）
   <br>
   然后添加以下这段（记得删注释），保存并重载。</p>
 </li>
</ol>
<pre><code>    location ^~ / {
        grpc_pass grpc://127.0.0.1:8080; //若上面修改了端口这里需要修改
        grpc_set_header Host $host;
        grpc_set_header X-Real-IP $remote_addr;
        grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        grpc_set_header X-Forwarded-Host $server_name;
        grpc_set_header X-Forwarded-Proto https;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;  
        add_header X-Cache $upstream_cache_status; 
        add_header Cache-Control no-cache; 
        proxy_ssl_server_name off; 
        proxy_ssl_name $proxy_host; 
        add_header Strict-Transport-Security "max-age=31536000";
    }</code></pre>
<h2 style="" id="%E9%83%A8%E7%BD%B2%E5%AE%8C%E6%88%90">部署完成</h2>
<p style="">访问你设置的域名，检查是否能够加载出ZITADEL登陆页面。</p>
<p style="">使用默认管理员用户名密码登录，检查是否能够正常将进入管理页面。</p>
<ul>
 <li>
  <p style=""><strong>username</strong>: <em>zitadel-admin@zitadel.<u>&lt;your_domain&gt;</u> </em><strong>（<u>&lt;your_domain&gt;</u>为你的域名）</strong></p>
 </li>
 <li>
  <p style=""><strong>password</strong>: <em>Password1!</em></p>
 </li>
</ul>
<h2 style="" id="%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99">参考资料</h2>
<p style="">ZITADEL官网：</p>
<hyperlink-card target="_blank" href="https://zitadel.com/" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://zitadel.com/" target="_blank">https://zitadel.com/</a></hyperlink-card>
<p style="">ZITADEL文档：</p>
<hyperlink-card target="_blank" href="https://zitadel.com/docs/self-hosting/deploy/compose" theme="regular" style="margin-top: 0.75em; margin-bottom: 0;"><a href="https://zitadel.com/docs/self-hosting/deploy/compose" target="_blank">https://zitadel.com/docs/self-hosting/deploy/compose</a></hyperlink-card>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/FGsDPmRB</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fwmimg.com%2Fi%2F1307%2F2025%2F07%2F68752b4787e22.png&amp;size=m" type="image/jpeg" length="0"/><category>教程</category><pubDate>Sat, 7 Dec 2024 16:00:00 GMT</pubDate></item><item><title><![CDATA[一些近况-202411]]></title><link>https://b.utopias.site/archives/E8VXKYll</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E4%B8%80%E4%BA%9B%E8%BF%91%E5%86%B5-202411&amp;url=/archives/E8VXKYll" width="1" height="1" alt="" style="opacity:0;">
<p style="">好久不见！让我们来聊一聊Utopias在最近都有哪些新情况吧~</p>
<ol>
 <li>
  <p style="">我们把服务器迁入了国内，网站做了备案，尽量加快了网站在国内的访问速度。</p>
 </li>
 <li>
  <p style="">友链功能大更新！以前友链这个东西我都没有维护过，最近有朋友站长来问互换友链的事情才让我注意到这个功能。我们维护了友链页面，更新了一些信息。加入了全新的自动申请机制，友链最快2小时内全自动审核添加完毕，欢迎体验！再也不用费劲地通过邮件或评论低效率互换友链啦~</p>
 </li>
 <li>
  <p style="">上个月为Utopias做了一个主页，这样我们就有门户啦。现在，Utopias Universe中所有的网站都可以在主页上快速访达了。</p>
 </li>
 <li>
  <p style="">UtopiAI从这个月起暂时下架。原因是原来的UtopiAI基于开源项目Chatnio，但是实际使用中用户体验并不好，并且Chatnio项目现在已经不再积极维护了。试了其他的项目，比如LobeChat之类的，效果也不尽如人意。所以在找到新的适合的项目之前，UtopiAI就暂时下线了。如果一段时间内找不到合适的项目，我可能会选择基于NextChat二次开发。</p>
 </li>
 <li>
  <p style="">本站的官方微信小程序即将上线，现在访问博客会更加方便啦。正式上线后欢迎体验。</p>
 </li>
</ol>
<p style=""></p>
<p style="">To Do:</p>
<ol>
 <li>
  <p style="">UtopiAI尽快重新上架</p>
 </li>
 <li>
  <p style="">打算改进瞬间功能...</p>
 </li>
 <li>
  <p style="">多更新~</p>
 </li>
</ol>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/E8VXKYll</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F11%2F2024-11-26-iwqkinky.png&amp;size=m" type="image/jpeg" length="56479"/><category>杂七杂八</category><pubDate>Mon, 25 Nov 2024 16:35:29 GMT</pubDate></item><item><title><![CDATA[资源分享-芙宁娜显卡背板设计图]]></title><link>https://b.utopias.site/archives/VvHAaXwk</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E8%B5%84%E6%BA%90%E5%88%86%E4%BA%AB-%E8%8A%99%E5%AE%81%E5%A8%9C%E6%98%BE%E5%8D%A1%E8%83%8C%E6%9D%BF%E8%AE%BE%E8%AE%A1%E5%9B%BE&amp;url=/archives/VvHAaXwk" width="1" height="1" alt="" style="opacity:0;">
<p style="">显卡的颜色实在是太丑了，于是萌生出显卡改色的想法。对于显卡背板部分，海鲜市场和B站的某些工坊的产品价格贵的离谱，设计的一般般，还不一定有我想要的型号。遂决定自己设计一张吧。</p>
<p style=""></p>
<p style=""><strong>显卡背板-原神芙宁娜 </strong></p>
<p style="">预览图如下：</p>
<figure style="align-items: start; display: flex; flex-direction: column" data-content-type="image">
 <img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F11%2F2024-11-25-spbzsjei.png&amp;size=m" alt="2024-11-25-spbzsjei.png" width="100%" height="100%">
</figure>
<p style=""></p>
<p style=""><strong>资源下载区</strong>：</p>
<download-links data-links="[{&quot;url&quot;:&quot;https://pan.baidu.com/s/1LpE5vf3IvrQXfLYKmWUPFg&quot;,&quot;filename&quot;:&quot;furina.7z&quot;,&quot;source&quot;:&quot;百度云网盘&quot;,&quot;code&quot;:&quot;ykkr&quot;,&quot;icon&quot;:&quot;/upload/baidu.png&quot;},{&quot;url&quot;:&quot;https://source.utopias.site/bucket-pic/2024/11/2024-11-25-nifswvtx.7z&quot;,&quot;filename&quot;:&quot;2024-11-25-nifswvtx.7z&quot;,&quot;source&quot;:&quot;本站直链下载&quot;,&quot;code&quot;:&quot;&quot;,&quot;icon&quot;:&quot;/upload/utopias.png&quot;}]"></download-links>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/VvHAaXwk</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F11%2F2024-11-25-spbzsjei.png&amp;size=m" type="image/jpeg" length="558552"/><category>杂七杂八</category><pubDate>Sun, 13 Oct 2024 13:56:00 GMT</pubDate></item><item><title><![CDATA[一些近况-202404]]></title><link>https://b.utopias.site/archives/P0OBd3a8</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E4%B8%80%E4%BA%9B%E8%BF%91%E5%86%B5-202404&amp;url=/archives/P0OBd3a8" width="1" height="1" alt="" style="opacity:0;">
<p style="">好久不见！距离上一次更新文章已经是两个月之前的事情了，在这两个月里，Utopia’s添加了一些新的业务和功能，下面让我们来看看都有什么新升级吧。</p>
<ol>
 <li>
  <p style="">最大的升级，我们启用了全新的二级域名: <a href="https://utopias.site/" target="_blank">utopias.site</a> 这是一个比原来的域名更加具有辨识度的域名。因此，我们的博客也使用了全新的域名 b.utopias.site 。同时，Utopia‘s已经不只局限于单一的博客网站了，新的域名将更加方便构建“Utopia’s Universe”。</p>
 </li>
 <li>
  <p style="">小改动。友链功能全新升级成为Utopias导航页，这里将收录不只是友链，还有Utopias系列站点。所有的页面都可以在导航页方便地查询和一键直达。</p>
 </li>
 <li>
  <p style="">在经过4月的试点和5月的调整后，我们推出全新的功能<a href="https://ai.utopias.site" target="_blank">UtopiAI</a>。这是一个基于开源项目私有化部署的AIGC对话平台，接入了市面上主流的大模型，让与全世界最先进的AI对话不再复杂。</p>
 </li>
 <li>
  <p style=""><s>与UtopiAI同时上线的，还有乌托邦的小店</s><a href="https://shop.chenxuvps.xyz" target="_blank"><s>Utopishop</s></a><s>。目前店铺处于测试阶段，仅负责UtopiAI的点卡发行和售卖。</s></p>
 </li>
</ol>
<p style=""></p>
<p style="">Todo：</p>
<ol>
 <li>
  <p style="">筹备私有化部署的AI绘画平台Utopaint，接入mj、sd和通义万象。</p>
 </li>
 <li>
  <p style="">完善UtopiAI的doc帮助文档，让UtopiAI接入更多的大模型。</p>
 </li>
</ol>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/P0OBd3a8</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F11%2F2024-11-20-nqymfzub.png&amp;size=m" type="image/jpeg" length="56142"/><category>杂七杂八</category><pubDate>Tue, 18 Jun 2024 17:50:00 GMT</pubDate></item><item><title><![CDATA[Golang笔记-概况]]></title><link>https://b.utopias.site/archives/CqJ40BlA</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=Golang%E7%AC%94%E8%AE%B0-%E6%A6%82%E5%86%B5&amp;url=/archives/CqJ40BlA" width="1" height="1" alt="" style="opacity:0;">
<pre><code>//Hello World
package main

import "fmt"

func main() {
&nbsp; &nbsp;/* 这是我的第一个简单的程序 */
&nbsp; &nbsp;fmt.Println("Hello, World!")
}
</code></pre>
<p>关于包：</p>
<ul>
 <li>文件名与包名没有直接关系，不一定要将文件名与包名定成同一个。</li>
 <li>文件夹名与包名没有直接关系，并非需要一致。</li>
 <li>同一个文件夹下的文件只能有一个包名，否则编译报错。</li>
 <li>main函数只能出现在main包里</li>
</ul>
<p>行的分割并不需要分号;</p>
<p>但若两个语句需要在同一行（并不推荐这样做），可以用分号隔开。</p>
<p>注释 //单行注释 /**/多行注释</p>
<p>无效标识符：</p>
<ul>
 <li>以数字开头的</li>
 <li>Go 语言的关键字</li>
 <li>有运算符</li>
</ul>
<p>字符串连接用加号+</p>
<pre><code>//字符串连接
package main
import "fmt"
func main() {
&nbsp; &nbsp; fmt.Println("Google" + "Runoob")
}
</code></pre>
<pre><code>GoogleRunoob
</code></pre>
<p>格式化字符串（输出）</p>
<ul>
 <li><strong>Sprintf</strong> 根据格式化参数生成格式化的字符串并返回该字符串。(作为返回值输出不打印)</li>
 <li><strong>Printf</strong> 根据格式化参数生成格式化的字符串并写入标准输出。（打印输出）</li>
</ul>
<pre><code>// 当前程序的包名
package main

// 导入其他包
import . "fmt"

// 常量定义
const PI = 3.14

// 全局变量的声明和赋值
var name = "gopher"

// 一般类型声明
type newType int

// 结构的声明
type gopher struct{}

// 接口的声明
type golang interface{}

// 函数声明 由main函数作为程序入口点启动
func main() {
    Println("Hello World!")
}
</code></pre>
<ul>
 <li>Go 程序是通过 <strong>package</strong> 来组织的。</li>
 <li>只有 package 名称为 main 的源码文件可以包含 main 函数。</li>
 <li>一个可执行程序有且仅有一个 <strong>main</strong> 包。</li>
 <li>通过 <strong>import</strong> 关键字来导入其他非 <strong>main</strong> 包。</li>
</ul>
<pre><code>//import单个导入
import "fmt"
import "io"
</code></pre>
<pre><code>//import多个导入
import(
    "fmt"
    "io"
)
</code></pre>
<pre><code>//给import导入包起别名
import fmt2 "fmt"
       别名  原名
</code></pre>
<pre><code>//省略调用（不建议使用）
import . "fmt"
func main (){
    Println("hello,world")
}
</code></pre>
<p>函数的private和public</p>
<pre><code>//函数名首字母小写为private
func getid() {}
</code></pre>
<pre><code>//函数名首字母大写为public
func Printf()
</code></pre>
<p>同理 包内调用方法名可小写首字母，包外调用方法名必须大写</p>]]></description><guid isPermaLink="false">/archives/CqJ40BlA</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F11%2F2024-11-25-mrhhxxgn.png&amp;size=m" type="image/jpeg" length="421075"/><category>笔记</category><pubDate>Wed, 17 Apr 2024 02:20:00 GMT</pubDate></item><item><title><![CDATA[Welcome Back!]]></title><link>https://b.utopias.site/archives/welcome-back</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=Welcome%20Back%21&amp;url=/archives/welcome-back" width="1" height="1" alt="" style="opacity:0;">
<p style=""><strong>欢迎回来！现在是2024年4月</strong></p>
<p style="">或许你会怀疑自己的眼睛，会疑惑为什么这个网页跟过去不一样了，会质疑浏览器打开了错误的网页，甚至会猜测是不是上任站长跑路了。</p>
<p style="">没错，正如你所见，在我们因为种种原因而无法相见的日子里，我们的网站完成了大改版重新上线了。</p>
<p style="">在过去的几个月里，我常常因为各种原因拖更文章，到最后更是彻底摆烂。各种bug和小毛病越攒越多，甚至网站的一些授权已经过期很久才被发现。</p>
<p style="">但现在，我回来了。人是喜新厌旧的，因此我决定重新改造这个网站，用一种新的面貌重新面对新的伙伴。或许全新的页面也能督促我多多更新吧。</p>
<p style="">最后，如果你想知道我们更新了些什么，欢迎访问全新改版的动态（现在叫瞬间），我会在那里发布更新日志。你也可以在这里催更（或许有用）闲聊，或者是提出你的意见。</p>
<p style="">总之，祝你我在见不到彼此的日子里，早安午安晚安。</p>]]></description><guid isPermaLink="false">/archives/welcome-back</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2023%2F11%2F128B1A2C-49DB-451C-8C6A-BDB0CDFCEF9D.jpeg&amp;size=m" type="image/jpeg" length="63211"/><category>默认</category><pubDate>Mon, 15 Apr 2024 07:40:00 GMT</pubDate></item><item><title><![CDATA[Linux安装wine版本微信]]></title><link>https://b.utopias.site/archives/ewvcleIR</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=Linux%E5%AE%89%E8%A3%85wine%E7%89%88%E6%9C%AC%E5%BE%AE%E4%BF%A1&url=/archives/ewvcleIR" width="1" height="1" alt="" style="opacity:0;" /><p style=""><strong>2024年11月更新：</strong>微信已推出正式版本的微信Linux版，官网<hyperlink-inline-card target="_blank" href="https://linux.weixin.qq.com/" theme="inline"><a href="https://linux.weixin.qq.com/" target="_blank">https://linux.weixin.qq.com/</a></hyperlink-inline-card>，有需要的读者可以前往下载啦。这篇文章写在2022年末，当时的我恐怕也不会想到，两年后万恶的微信会真的适配Linux吧。</p><p style=""><strong>2024年3月更新：</strong>微信已推出原生linux版本wechat(Universe)，固本教程已存档。虽然万恶的腾讯对其进行了系统白名单限制，但使用一些办法依旧可以将原生版本微信安装至任何发行版上。在此不过多赘述，点此可直接<strong><em><u><hyperlink-inline-card target="_blank" href="https://pan.baidu.com/s/1WK1gxC5x7LWMYzBoJ6gPNQ?pwd=qx7z " theme="inline"><a href="https://pan.baidu.com/s/1WK1gxC5x7LWMYzBoJ6gPNQ?pwd=qx7z " target="_blank">https://pan.baidu.com/s/1WK1gxC5x7LWMYzBoJ6gPNQ?pwd=qx7z </a></hyperlink-inline-card></u></em></strong>破解限制后的deb安装包。</p><hr><h1 style="" id="%E5%89%8D%E6%8F%90">前提</h1><p style="">本教程系统环境为Ubuntu23.10，大概大部分的GNU/linux也大同小异略有出入。wine版本8.0</p><p style="">如果你不想使用deepin版本的微信，觉得有一种NTR的感觉；如果你不想用crossover安装微信，还得花一份钱；如果你不想在Steam Proton里安装微信，忍受每次启动微信都得先启动Steam的反人类操作。那么，以下教程适合你，只要多亿些步骤，就可以使用原生版本的wine安装一个纯净的微信。</p><h1 style="" id="%E9%85%8D%E7%BD%AEwine%E7%8E%AF%E5%A2%83">配置wine环境</h1><h2 style="" id="%E5%AE%89%E8%A3%85wine%E5%92%8Cwinetricks">安装wine和winetricks</h2><p style="">你可以选择从存储库来安装wine和winetricks，这样做的好处是你可以获取到最新版本的wine和winetricks。（写此文章时最新版本为wine9.0）但是从Ubuntu存储库里安装，更加方便快捷，大大简化了安装流程和时间，还规避了墙内网络偶尔连接不上wine存储库的问题。虽然不是最新版本，但对于安装微信来说足够了。</p><pre><code class="language-shell">sudo dpkg --add-architecture i386
sudo apt update
sudo apt install wine
sudo apt install winetricks</code></pre><h2 style="" id="%E4%BD%BF%E7%94%A8winetricks%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%8432%E4%BD%8D%E5%AE%B9%E5%99%A8">使用winetricks创建一个新的32位容器</h2><p style="">打开winetricks图形化页面，创建一个新的容器，容器选择32位的，容器名称自己填一个，我建议填写wechat方便识别。</p><p style="">创建好之后选择管理wechat容器，记住窗口上方的当前容器路径备用。</p><h2 style="" id="%E9%85%8D%E7%BD%AEwechat%E5%AE%B9%E5%99%A8">配置wechat容器</h2><p style="">常规情况下，是需要选择第一项，安装Windows DDL或组件，然后安装riched20和msls31。但大部分情况下，一番尝试后你只会获得报错。这个时候如果你打开 容器路径/drive_c/windows/，你会发现里面组件齐全只是没启用。</p><p style="">选择“运行wine配置程序”，切换到“函数库”选项卡，添加函数“riched20（原装先于内建）”和“msls31（原装先于内建）”。再切换到“显示”选项卡，将屏幕分辨率调整到196dpi。确认。</p><h2 style="" id="%E5%AE%89%E8%A3%85%E5%AD%97%E4%BD%93">安装字体</h2><p style="">此时容器内还缺少字体。你可以尝试在winetricks里选择“安装字体”，安装Arial字体。但大概率会遇到和上面一样的报错。</p><p style="">打开 容器路径/drive_c/windows/Fonts$文件夹，向里面导入中文字体。神奇的是，经过我的尝试似乎只要是常用的中文字体就可以，宋体微软雅黑华文字体似乎都可以。</p><p style="">附上微软雅黑字体的<a href="https://pan.baidu.com/s/1MVLYt4RSigj4CJ3qHuOOsg?pwd=7cfx" target="_blank"><strong><em><u>下载</u></em></strong></a>链接 </p><h1 style="" id="%E5%AE%89%E8%A3%85%E5%BE%AE%E4%BF%A1">安装微信</h1><p style="">在微信官网下载32位版本的安装包。</p><p style="">打开安装包下载的位置，在此创建一个终端。</p><pre><code>WINEPREFIX=容器路径 wine WeChatSetup_x86.exe</code></pre><p style="">等待安装包加载完成后，安装界面即可正常打开。此时会发现经过配置后，安装界面的大小是正常的，否则没有配置过的界面是过小的。正常安装即可，安装完成后在桌面和应用抽屉里就会出现“微信”和“卸载微信”两个图标。此时微信可以正常打开登录，能够完成聊天传文件等大部分工作。关闭微信时直接杀掉进程即可。</p><p style=""></p><blockquote><p style="">附上几张配置图</p><p style=""><img src="https://s2.loli.net/2024/02/14/GSuWjV17vHcpzqJ.png" width="50%" height="auto" style="display: inline-block"></p><p style=""><img src="https://s2.loli.net/2024/02/14/rmVIOM79PREbufs.png" width="50%" height="auto" style="display: inline-block"></p><p style=""><img src="https://s2.loli.net/2024/02/14/Grj9ZwOXvJdcBWp.png" width="50%" height="auto" style="display: inline-block"></p></blockquote><p style=""></p>]]></description><guid isPermaLink="false">/archives/ewvcleIR</guid><dc:creator>烏托邦</dc:creator><category>杂七杂八</category><category>教程</category><pubDate>Wed, 14 Feb 2024 12:55:00 GMT</pubDate></item><item><title><![CDATA[联想yoga系列安装Ubuntu的注意事项]]></title><link>https://b.utopias.site/archives/eqM1O3Z5</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E8%81%94%E6%83%B3yoga%E7%B3%BB%E5%88%97%E5%AE%89%E8%A3%85Ubuntu%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9&amp;url=/archives/eqM1O3Z5" width="1" height="1" alt="" style="opacity:0;">
<p style="">笔者机型联想yoga14s2021 同样适配于同型号不同年份设备 也可能适配联想小新系列部分机型</p>
<h2 style="" id="%E6%88%91%E8%AF%A5%E5%AE%89%E8%A3%85%E5%93%AA%E4%B8%AA%E7%89%88%E6%9C%AC">我该安装哪个版本</h2>
<p style=""><strong>（省流：Ubuntu的最新版本即可）</strong></p>
<ul>
 <li>
  <p style="">Ubuntu 20 及以前版本太老了，<s>没测试</s>且不推荐（更新：20.04可用）</p>
 </li>
 <li>
  <p style="">Ubuntu 22 全版本不推荐但能用。能够正常显示，但独显识别异常需要手动配置驱动。另外笔记本键盘在配置grub后有概率依旧无法使用，记得备好外置键盘。触控板可以正常使用。</p>
 </li>
 <li>
  <p style="">Ubuntu 23.04<strong><u> 不可用不可用不可用</u></strong>！！！ 安装完黑屏，疑似nvidia独立显卡驱动自动适配异常导致。除非你想自己区配置独显驱动，否则不要安装这个版本。<strong>NVIDIA FUCK YOU！</strong></p>
 </li>
 <li>
  <p style=""><strong>Ubuntu 23.10</strong> 自20以来<strong>适配相当好的一个版本</strong> nvidia独立显卡识别正常 显示正常不闪屏 驱动能够自动适配（前提是安装时勾选了安装第三方驱动）笔记本键盘安装后一就无法使用 但配置grub后可正常使用 甚至有概率键盘背光能够调节</p>
 </li>
 <li>
  <p style="">(<strong>首选</strong>)Ubuntu 24 系列目前<strong>适配最好</strong>的一个版本 解决了一直以来的键盘问题 现在笔记本键盘无需配置就可以直接使用 只是没有背光调节</p>
 </li>
</ul>
<h2 style="" id="%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B">安装过程</h2>
<p style="">省略</p>
<h2 style="" id="%E5%AE%89%E8%A3%85%E5%90%8E%E7%9A%84%E9%85%8D%E7%BD%AE%EF%BC%8824%E7%89%88%E6%9C%AC%E6%97%A0%E9%9C%80%E9%85%8D%E7%BD%AE%EF%BC%89">安装后的配置（24版本无需配置）</h2>
<p style="">打开终端</p>
<p style="">sudo vim /etc/default/grub
 <br>
 (没有vim的 sudo apt install vim)</p>
<p style="">修改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"</p>
<p style="">为GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.dumbkbd"</p>
<p style="">(如果你有闪屏问题 尤其是Ubuntu22 也可以在后面继续加上 i915.enable_psr=0)</p>
<p style="">ESC :wq 保存退出</p>
<p style="">刷新grub并重启系统</p>
<p style="">sudo update-grub</p>
<p style="">sudo reboot</p>
<p style="">重启完成后你的笔记本键盘就可以用了</p>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/eqM1O3Z5</guid><dc:creator>烏托邦</dc:creator><category>杂七杂八</category><pubDate>Wed, 14 Feb 2024 11:47:00 GMT</pubDate></item><item><title><![CDATA[通过S3协议把甲骨文存储桶当图床用]]></title><link>https://b.utopias.site/archives/3IbatYVc</link><description><![CDATA[<img src="https://b.utopias.site/plugins/feed/assets/telemetry.gif?title=%E9%80%9A%E8%BF%87S3%E5%8D%8F%E8%AE%AE%E6%8A%8A%E7%94%B2%E9%AA%A8%E6%96%87%E5%AD%98%E5%82%A8%E6%A1%B6%E5%BD%93%E5%9B%BE%E5%BA%8A%E7%94%A8&amp;url=/archives/3IbatYVc" width="1" height="1" alt="" style="opacity:0;">
<h1 style="" id="%E5%85%88%E6%89%AF%E7%82%B9%E5%88%AB%E7%9A%84">先扯点别的</h1>
<p style="">手里恰好有一个闲置的甲骨文云账号，闲来无事就搭了个网站。正好Blog需要图床，原本想用 <a href="http://原本想用sm.ms">sm.ms </a>的，但是本着白嫖就要白嫖干净的原则，正好白嫖一下甲骨文云的对象存储桶当作图床用。</p>
<h1 style="" id="%E6%95%99%E7%A8%8B">教程</h1>
<h2 style="" id="1-%E5%88%9B%E5%BB%BA%E5%AD%98%E5%82%A8%E6%A1%B6">1 创建存储桶</h2>
<p style="">前提是你得先有一个甲骨文云的账号，没有的自己想办法。</p>
<p style="">1.1 进入甲骨文控制台，点击<strong>左上角-存储-存储桶</strong> 。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2F97036C6E-943C-4DFF-9FC0-9D858750ABAC.png&amp;size=m" alt="97036C6E-943C-4DFF-9FC0-9D858750ABAC.png" width="526px" height="Infinitypx" style="display: inline-block"></p>
<p style="">1.2 创建一个存储桶。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FB68045B0-176C-49FA-9C51-344BC528F165.png&amp;size=m" alt="B68045B0-176C-49FA-9C51-344BC528F165.png" width="100%" height="100%" style="display: inline-block"></p>
<p style="">1.3 点击进入刚创建的存储桶，记住存储桶的名称空间。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FE79FEF2A-5713-4B40-A901-6F1DE84EA647.png&amp;size=m" alt="E79FEF2A-5713-4B40-A901-6F1DE84EA647.png" width="100%" height="100%" style="display: inline-block"></p>
<h2 style="" id="2-%E8%8E%B7%E5%8F%96%E5%9B%BE%E5%BA%8A%E5%89%8D%E7%BC%80">2 获取图床前缀</h2>
<p style="">2.1 在存储桶界面，点击左下角<strong>预先验证的请求-创建预先验证的请求</strong>。起个名称，选择<strong>存储桶-允许对象读写-启用对象列出</strong>，根据需求设置到期时间（尽可能长吧），点击<strong>创建预先验证的请求</strong>。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2F3FAEE159-5848-4E03-A5AD-45561CE1AD9F.png&amp;size=m" alt="3FAEE159-5848-4E03-A5AD-45561CE1AD9F.png" width="100%" height="100%" style="display: inline-block"></p>
<p style="">2.2 这里控制台给出了两个URL前缀，记住其中一个。正如页面提醒，建议选择第二个。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FBFEBE092-F3A9-4D76-9B48-6AFC7E0FE595.png&amp;size=m" alt="BFEBE092-F3A9-4D76-9B48-6AFC7E0FE595.png" width="100%" height="100%" style="display: inline-block"></p>
<h2 style="" id="3-%E8%8E%B7%E5%8F%96%E5%AE%A2%E6%88%B7%E5%AE%A2%E6%88%B7%E5%AF%86%E9%92%A5">3 获取客户客户密钥</h2>
<p style="">3.1 鼠标移至头像，点击<strong>我的概要信息</strong>。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2F3F86B647-BA24-47D7-B66C-E274402AFD6B.png&amp;size=m" alt="3F86B647-BA24-47D7-B66C-E274402AFD6B.png" width="40%" height="100%" style="display: inline-block"></p>
<p style="">3.2 点击左下角<strong>客户密钥-生成密钥</strong>，起个名字后点击生成密钥。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FD0EA9DB7-2555-46D2-8B4F-364BAFFB03B2.png&amp;size=m" alt="D0EA9DB7-2555-46D2-8B4F-364BAFFB03B2.png" width="990px" height="544px" style="display: inline-block"></p>
<p style="">3.3 记住此密钥，这个密钥不会出现第二次。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FE4BDB12C-921C-429C-BF91-0C3160CF9905.png&amp;size=m" alt="E4BDB12C-921C-429C-BF91-0C3160CF9905.png" width="50%" height="100%" style="display: inline-block"></p>
<p style="">3.4 记住密钥id。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FA4502A48-5E20-4338-ACEF-4AA1585DE672.png&amp;size=m" alt="A4502A48-5E20-4338-ACEF-4AA1585DE672.png" width="100%" height="100%" style="display: inline-block"></p>
<h2 style="" id="4-%E8%AE%BE%E7%BD%AEpicgo">4 设置PicGo</h2>
<p style="">4.1 打开PicGo-<strong>插件设置</strong>，下载<strong>s3-lls</strong>这个插件。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FFDBB0B17-CBB3-4829-BED0-BFB61AE928D4.png&amp;size=m" alt="FDBB0B17-CBB3-4829-BED0-BFB61AE928D4.png" width="100%" height="100%" style="display: inline-block"></p>
<p style="">4.2 打开<strong>图床设置-Amazon S3</strong>。</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2FCA5069B8-1A04-44CF-9559-68732B659F9F.png&amp;size=m" alt="CA5069B8-1A04-44CF-9559-68732B659F9F.png" width="100%" height="100%" style="display: inline-block"></p>
<p style="">4.4 设置S3插件</p>
<ul>
 <li>
  <p style="">应用密钥ID：填入3.4获取的ID</p>
 </li>
 <li>
  <p style="">应用密钥：填入3.3获取的密钥</p>
 </li>
 <li>
  <p style="">桶：填入1.2存储桶的名称</p>
 </li>
 <li>
  <p style="">文件路径：参照表格，举个例子：{year}/{month}/{md5}.{extName}</p>
 </li>
</ul>
<div style="overflow-x: auto; overflow-y: hidden;">
 <table style="width: 347px">
  <colgroup>
   <col style="width: 100px">
   <col style="width: 247px">
  </colgroup>
  <tbody>
   <tr style="height: 60px;">
    <th colspan="1" rowspan="1" colwidth="100">
     <p style="">payload</p>
    </th>
    <th colspan="1" rowspan="1" colwidth="247">
     <p style="">描述</p>
    </th>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{year}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">当前日期 - 年</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{month}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">当前日期 - 月</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{day}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">当前日期 - 日</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{fullName}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">完整文件名（含扩展名)</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{fileName}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">文件名（不含扩展名）</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{extName}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">扩展名（不含`.`）</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{md5}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">图片 MD5 计算值</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{sha1}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">图片 SHA1 计算值</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{sha256}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">图片 SHA256 计算值</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{timestamp}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">Unix 时间戳</p>
    </td>
   </tr>
   <tr style="height: 60px;">
    <td colspan="1" rowspan="1" colwidth="100">
     <p style=""><code>{timestampMS}</code></p>
    </td>
    <td colspan="1" rowspan="1" colwidth="247">
     <p style="">Unix 时间戳（毫秒)</p>
    </td>
   </tr>
  </tbody>
 </table>
</div>
<ul>
 <li>
  <p style="">权限：private</p>
 </li>
</ul>
<ul>
 <li>
  <p style="">地区：空，我们在下面的自定义节点和自定义域名中设置</p>
 </li>
 <li>
  <p style="">自定义节点：</p>
 </li>
</ul>
<p style=""><code>$namespace.compat.objectstorage.$region.oci.customer-oci.com</code></p>
<p style="">namespace:替换成1.3存储桶的名称空间</p>
<p style="">region:填写你的甲骨文云服务地区，在网址里就能找到</p>
<p style=""><img src="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Faxt01pjjfwgo.objectstorage.ap-chuncheon-1.oci.customer-oci.com%2Fn%2Faxt01pjjfwgo%2Fb%2Fbucket-pic%2Fo%2F2024%2F04%2F82FF5177-F640-47BB-9032-D122F3BECB97.png&amp;size=m" alt="82FF5177-F640-47BB-9032-D122F3BECB97.png" width="100%" height="100%" style="display: inline-block"></p>
<ul>
 <li>
  <p style="">自定义域名：填入2.2获取的URL前缀</p>
 </li>
 <li>
  <p style="">下面两个选项默认打开即可</p>
 </li>
</ul>
<p style="">4.5 <strong>完工</strong>！你可以上传图片试试了。</p>
<p style=""></p>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/3IbatYVc</guid><dc:creator>烏托邦</dc:creator><enclosure url="https://b.utopias.site/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fsource.utopias.site%2Fbucket-pic%2F2024%2F04%2FA56FA21D-AB98-456C-AF57-B10E96061677.png&amp;size=m" type="image/jpeg" length="17299"/><category>教程</category><pubDate>Mon, 20 Nov 2023 08:10:00 GMT</pubDate></item></channel></rss>