<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
  <title>红枫吟 - 生活</title>
    <subtitle>风落花语风落天，花落风雨花落田.</subtitle>
  <link href="https://honmaple.me/posts/life/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://honmaple.me/posts/life/"/>
  <generator uri="https://github.com/honmaple/snow">Snow</generator>
    <updated>Fri, 10 Jul 2026 03:44:01 +0000</updated>
  <id>https://honmaple.me</id>
    <entry xml:lang="zh">
      <title>原神深渊讨论</title>
      <link href="https://honmaple.me/posts/2026/07/talk-about-genshin-abyss/" rel="alternate"></link>
      <published>Sun, 05 Jul 2026 13:32:57 +0000</published>
      <updated>Fri, 10 Jul 2026 03:44:01 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/07/talk-about-genshin-abyss/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/07/talk-about-genshin-abyss/</id>
      <summary type="html">&lt;blockquote&gt;
&lt;p&gt;最近在网上关于原神&lt;strong&gt;法涅斯&lt;/strong&gt;的立场和别人有了争论，事情的起因是我看到小破站的评论区里总是会有人赞同法涅斯，认为是法涅斯拯救了提瓦特，但对于原神世界观的历史来说，这确实挺奇怪的，法涅斯已经是一个非常明确的侵略者，我真的想不通为什么会有那么多人认可法涅斯的做法，于是有了以下的讨(争)论(议)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A： 法涅斯这种明确的侵略者都有人洗地啊，如果法涅斯不来，龙族的月幕计划也就是现在的虚假之天就会成功，火龙修库特尔也有抗击深渊的文本，即使是葬火之战深渊尼伯龙根归来那也是清醒的尼伯龙根，唤醒修库特尔，囚禁三月女神，改造天基武器，最后才向法涅斯宣战，你管这叫被深渊控制？最后散落在提瓦特的深渊那也是尼伯龙根战败后才掉落的深渊碎片。换句话说，就算提瓦特被毁灭，那也是人家龙族内部的事，法涅斯这个侵略怎么者在某些人口中还变得高大上起来了&lt;/p&gt;
&lt;p&gt;B： 尼伯龙根给火龙喂深渊喂的神志不清怎么不说&lt;/p&gt;
&lt;p&gt;A： 我勒个依旧幻想，官方设定里只有&quot;漆黑的龙王携带深渊力量归来&quot;&quot;火龙修库特尔后来受到深渊侵蚀...&lt;/p&gt;</summary>
      <content type="html">&lt;blockquote&gt;
&lt;p&gt;最近在网上关于原神&lt;strong&gt;法涅斯&lt;/strong&gt;的立场和别人有了争论，事情的起因是我看到小破站的评论区里总是会有人赞同法涅斯，认为是法涅斯拯救了提瓦特，但对于原神世界观的历史来说，这确实挺奇怪的，法涅斯已经是一个非常明确的侵略者，我真的想不通为什么会有那么多人认可法涅斯的做法，于是有了以下的讨(争)论(议)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A： 法涅斯这种明确的侵略者都有人洗地啊，如果法涅斯不来，龙族的月幕计划也就是现在的虚假之天就会成功，火龙修库特尔也有抗击深渊的文本，即使是葬火之战深渊尼伯龙根归来那也是清醒的尼伯龙根，唤醒修库特尔，囚禁三月女神，改造天基武器，最后才向法涅斯宣战，你管这叫被深渊控制？最后散落在提瓦特的深渊那也是尼伯龙根战败后才掉落的深渊碎片。换句话说，就算提瓦特被毁灭，那也是人家龙族内部的事，法涅斯这个侵略怎么者在某些人口中还变得高大上起来了&lt;/p&gt;
&lt;p&gt;B： 尼伯龙根给火龙喂深渊喂的神志不清怎么不说&lt;/p&gt;
&lt;p&gt;A： 我勒个依旧幻想，官方设定里只有&amp;quot;漆黑的龙王携带深渊力量归来&amp;quot;&amp;quot;火龙修库特尔后来受到深渊侵蚀&amp;quot;，并没有任何一句写&amp;quot;尼伯龙根给修库特尔喂深渊&amp;quot;。还神志不清，你以为象拟聚星是什么时候造的，即使神志不清都能造出比肩三月的东西，火龙王可太厉害了&lt;/p&gt;
&lt;p&gt;B： 那我问你修库特尔为什么会被深渊污染？&lt;/p&gt;
&lt;p&gt;A： 修库特尔被深渊污染只是结果，又不是过程，受到深渊侵蚀不等于是尼伯龙根强行给火龙注入深渊。深渊本质是什么，一切不会发生命运的恨意，你说火龙从冰封中醒来发现龙族的处境会不会产生恨意，尼伯龙根带领火龙大战法涅斯时会不会长时间与深渊接触才被深渊侵蚀。火龙的大权是智慧，会不会因为自恃本身的实力主动接触深渊。官方没有的文本和设定，不是只有对龙族不利的一面的才是真实&lt;/p&gt;
&lt;p&gt;B： 纳塔人类没崛起前是火龙一族在肘击深渊，他们研究了那么多针对深渊的东西最后没办法搞了维奇洛波奇特利准备拉着深渊爆，火龙怎么会选择自己去吃深渊。然后终北祷歌说了尼伯龙根是外出的时候被污染了，而且和法打的时候为什么会被深渊污染，法又不用深渊力量&lt;/p&gt;
&lt;p&gt;A： 尼伯龙根都被法涅斯肘翻了，难不成火龙还想着老老实实对抗深渊，然后让法涅斯坐收其成，火龙没这么伟大吧，而且这只是火龙接触深渊的一种可能。另外，与深渊并肩作战也会接触深渊，不是只有和深渊对抗才会接触，而接触了深渊就有可能被深渊侵蚀&lt;/p&gt;
&lt;p&gt;B： 你的想法最大的问题就是只有火龙王被污染了，其他火龙都没有不是吗？而且你但凡好好过了火龙支线，你就知道修库特尔对库库尔坎的做法是默许的，火龙王要真是想吃深渊拉着纳塔爆的性格为什么要默许库库尔坎去找其他方法？他准许了至高领主的不同尝试，就是因为他不知道作何选择才是对的，和你说的为了不让天理吃好处就去尝试用深渊爆完全对不上&lt;/p&gt;
&lt;p&gt;A： 不是已经说了吗，这只是火龙接触深渊的一种可能，又不是一定。大战法涅斯时其它火龙最多利用龙族科技插手，而且根据目前已知信息，修库特尔的实力几乎是七龙王之最，所以才能和尼伯龙根并肩作战，所以才可能长时间接触深渊。另外，我可从未说过是因为不想法涅斯坐收其成，所以就要拉着纳塔爆，顺序不要搞反。我从头到尾论证的只是修库特尔在尼伯龙根被法涅斯肘翻之后，是有可能主动接触深渊然后才被深渊侵蚀，毕竟深渊力量属于天外的力量，而龙王已经是提瓦特的顶点，想要战胜法涅斯，接受外来的力量的有可能的。&lt;/p&gt;
&lt;p&gt;A： 最直观的例子还有阿佩普，阿佩普在尼伯龙根被肘翻之后主动去接触深渊，却被天钉阻止，如果我说火龙修库特尔这时候也去接触了深渊，却因为没有天钉阻止成功接触深渊，这是不是也是一种可能&lt;/p&gt;
&lt;p&gt;B： 所以修库特尔根本就没有去摸深渊的理由，他后面一直在寻求的是如何让火龙一族继续延续，和你说的为了战胜法去摸深渊完全不匹配，只有草龙在目睹牢尼陨落后将深渊视作战胜天理的办法。最后根本没有火龙和尼一起去打天理的文案，换句话说如果火龙和尼一起去打天理了凭什么火龙没挨揍，一直到希巴拉克来杀火龙&lt;/p&gt;
&lt;p&gt;B： 你不要假设了，自己去看看受龙所选者支线里火龙王是一个什么样的设定，阿佩普就是被坑了去吃深渊然后一直被折磨到小草神来帮忙，火龙一族一直在抗击深渊然后你却假设火龙王带头去使用深渊&lt;/p&gt;
&lt;p&gt;A： 不是你先开始假设火龙被尼伯龙根喂了深渊吗，我才举例火龙是有可能主动接触深渊的，都是官方没有的文本和设定，总不能你的假设就是真实，我的假设就只是一个假设。绕来绕去都是要等后续的剧情文本，所以就不要把你认为的论点当成确定的结论来说&lt;/p&gt;
&lt;p&gt;B： 我后续会去看火山书到底有没有明确说是尼喂的，然后火山书里库库尔坎明确说过，阴影之敌不可饶恕，不可能火龙一族都抵抗深渊然后火龙王自己去摸，无论我对不对，你一定不对&lt;/p&gt;
&lt;p&gt;A： 何来不对呢，无论是创造维奇洛波奇特利，或是阴影之敌不可饶恕，再是想拉着纳塔一起爆，那都是修库特尔已经被深渊侵蚀之后的事了。你看再多的文本，只要官方没有明确火龙是怎样被深渊侵蚀，火龙主动接触深渊，因自身恨意被深渊侵蚀，被尼伯龙根强行喂了深渊，这都是其中的一种可能&lt;/p&gt;
&lt;p&gt;B： 因为火龙一族一直在和深渊作斗争，这么简单的理由很难理解吗？&lt;/p&gt;
&lt;p&gt;A： 因为龙族的王，最高的王，提瓦特的王已经被法涅斯这个侵略者肘翻了，想要战胜侵略者，只能依靠天外的力量，即使这个力量是深渊，这很难理解吗？&lt;/p&gt;
&lt;p&gt;B： 到最后龙族都在打深渊，你到底看没看过火山书，我受不了了&lt;/p&gt;
&lt;p&gt;A： 阿佩普主动接触深渊难不成是假的，为了得到禁忌知识与赤王做交易难不成也是假的&lt;/p&gt;
&lt;p&gt;B： 草龙就是不知道深渊的危害被坑了才吃的深渊？然后一直被折磨到小草来帮她，你看她现在怎么不吃了？&lt;/p&gt;
&lt;p&gt;A： 又是把结论当过程，草龙不知道，难道火龙就知道吗，还是说火龙明明知道却故意瞒着草龙&lt;/p&gt;
&lt;p&gt;B： 我求你去看看火山书修库特尔到底是一个怎样的形象，都说了火龙和草龙被牢尼坑了，你但凡了解过修库特尔的形象怎么会假设他会去主动吃深渊&lt;/p&gt;
&lt;p&gt;A： 修库特尔是什么形象，在龙族学者眼中它还是一个性格温和的王，但就是这个性格温和的王却把纳塔几乎所有的天使都屠杀殆尽，你说它性格温和还是性格暴虐。同样的，用龙族眼中的修库特尔形象来论证修库特尔不会主动吃深渊，不亚于用艾莉丝眼中的小可莉完全就是一个乖孩子&lt;/p&gt;
&lt;p&gt;B： 你亲眼看到巨大的双翅自外界而来，那原本光辉伟大的身形如此可悲，竟已完全沉入恐怖的阴影。 漆黑的火焰燎烧大地，以至于白树也近乎枯竭，最后的使者，其漫光的轮廓亦支离破碎，只能寄身于根脉 断绝的残叶。 你告诉我这说的是修库特尔还是尼伯龙根，尼伯龙根回来是不是被污染了，纳塔地脉被打烂，夜神龟进去修补地脉顺便躲着，深渊因为开了口子可以更方便的入侵纳塔&lt;/p&gt;
&lt;p&gt;B： 碰了深渊就一定点，修库特尔主动去吃深渊那就是坑整个纳塔的火龙，天理去圣土化会导致纳塔火龙慢慢退化，火龙一族要么开摆要么寻找方法对抗这个；你去摸深渊那就直接点，有什么好说的？&lt;/p&gt;
</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>博客SEO优化</title>
      <link href="https://honmaple.me/posts/2025/11/博客SEO优化/" rel="alternate"></link>
      <published>Mon, 24 Nov 2025 21:22:57 +0000</published>
      <updated>Mon, 24 Nov 2025 22:02:35 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/11/博客SEO优化/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/11/博客SEO优化/</id>
      <summary type="html">
&lt;p&gt;
博客已经建立十多年了，SEO优化还是头一次。事情起因是我想要禁止Google索引首页以外的分页内容，比如：&lt;code&gt;index2.html&lt;/code&gt;、&lt;code&gt;index3.html&lt;/code&gt;，所以我询问了 &lt;b&gt;Gemini&lt;/b&gt; 如何在 &lt;code&gt;robots.txt&lt;/code&gt; 里实现该功能，&lt;b&gt;Gemini&lt;/b&gt; 确实给了我相应的解决方式
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;User-agent: *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;Allow: /index.html$
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;Disallow: /index*.html&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
但同时它也建议我不要这么做，&lt;b&gt;⚠️ 重要SEO风险提示&lt;/b&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
虽然这样做能满足你“禁止索引分页”的技术需求，但在 SEO 策略上...&lt;/p&gt;&lt;/blockquote&gt;</summary>
      <content type="html">
&lt;p&gt;
博客已经建立十多年了，SEO优化还是头一次。事情起因是我想要禁止Google索引首页以外的分页内容，比如：&lt;code&gt;index2.html&lt;/code&gt;、&lt;code&gt;index3.html&lt;/code&gt;，所以我询问了 &lt;b&gt;Gemini&lt;/b&gt; 如何在 &lt;code&gt;robots.txt&lt;/code&gt; 里实现该功能，&lt;b&gt;Gemini&lt;/b&gt; 确实给了我相应的解决方式
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;User-agent: *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;Allow: /index.html$
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;Disallow: /index*.html&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
但同时它也建议我不要这么做，&lt;b&gt;⚠️ 重要SEO风险提示&lt;/b&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
虽然这样做能满足你“禁止索引分页”的技术需求，但在 SEO 策略上，&lt;b&gt;直接在 robots.txt 禁止分页通常是不推荐的&lt;/b&gt;，原因如下：
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;导致孤岛页面（Orphan Pages）&lt;/b&gt;： 如果爬虫无法访问 &lt;code&gt;/index2.html&lt;/code&gt;，它就无法抓取第 2 页上列出的&lt;b&gt;文章或商品链接&lt;/b&gt;。这意味着你网站第 2 页之后的所有内容可能都无法被搜索引擎发现和收录。
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;权重无法传递&lt;/b&gt;： 分页通常用于传递网站权重。阻断爬虫会导致权重无法流动到深层页面。
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;b&gt;更好的替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你只是不希望分页出现在搜索结果中，但希望爬虫能抓取分页里的内容，建议使用 &lt;code&gt;meta&lt;/code&gt; 标签 而不是 &lt;code&gt;robots.txt&lt;/code&gt;：
&lt;/p&gt;

&lt;p&gt;
在 &lt;code&gt;/index2.html&lt;/code&gt;, &lt;code&gt;/index3.html&lt;/code&gt; 等页面的 &lt;code&gt;head&lt;/code&gt; 区域加入：
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;robots&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;noindex, follow&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;
其它需要添加的 &lt;code&gt;meta&lt;/code&gt; 标签（&lt;b&gt;以下内容基于Gemini的回答&lt;/b&gt;）
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;基础核心类 (Technical &amp; SEO)&lt;/h2&gt;
&lt;p&gt;
   这些是网站正常运行和被收录的基础，缺一不可。
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;字符编码 (Charset)&lt;/b&gt;: 防止网页出现乱码，确保浏览器正确识别中文。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;charset&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;视口设置 (Viewport)&lt;/b&gt;: 这是移动端 &lt;b&gt;SEO&lt;/b&gt; 的核心。 它告诉浏览器如何调整页面的尺寸和缩放。如果不加，手机打开网页字体会非常小，Google 会判定为“移动端不友好”而降低排名。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;页面描述 (Description)&lt;/b&gt;: 这是搜索结果中标题下方的那段黑色小字。
      &lt;b&gt;要点&lt;/b&gt;： 包含品牌名、核心业务、优势，并带有号召性用语。长度控制在 150 字符（英文）或 80 字（中文）左右。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;description&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;[品牌名]是全球领先的在线教育平台，提供编程、设计、营销等实战课程。新用户注册立享7天免费试学，立即开启你的职业进阶之路！&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;爬虫控制 (Robots)&lt;/b&gt;:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;robots&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;index, follow&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;index&lt;/code&gt;: 允许收录本页。
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;follow&lt;/code&gt;: 允许顺着本页链接爬取更多页面。
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;社交分享类 (Open Graph &amp; Twitter)&lt;/h2&gt;
&lt;p&gt;
   当你的首页链接被分享到 &lt;b&gt;微信&lt;/b&gt;、&lt;b&gt;Facebook&lt;/b&gt;、&lt;b&gt;Twitter&lt;/b&gt;、&lt;b&gt;Discord&lt;/b&gt; 时，这些标签决定了显示的&lt;b&gt;卡片样式&lt;/b&gt;（标题、简介、缩略图）。如果没有这些，分享出去可能只有一个光秃秃的链接。
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;Open Graph (通用协议)&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;[品牌名] - 让学习更简单的在线课堂&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:description&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;加入超过100万学员的社区，探索500+门专业课程。&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:url&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:image&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/images/share-cover.jpg&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:type&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;website&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;Twitter Card (推特专用)&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:card&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;summary_large_image&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:title&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;[品牌名] - 官方网站&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:description&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;这里填入简短的品牌介绍...&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:image&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/images/twitter-share.jpg&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;极其重要的辅助标签&lt;/h2&gt;
&lt;p&gt;
   虽不是 &lt;code&gt;meta&lt;/code&gt;，但必须放在 &lt;code&gt;head&lt;/code&gt; 里
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;规范链接 (Canonical Link)&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
      这是首页 SEO 的救命稻草。 首页通常有多个入口，比如：
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;example.com&lt;/code&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;www.example.com&lt;/code&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;www.example.com/index.html&lt;/code&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
      如果不加 &lt;code&gt;canonical&lt;/code&gt; 标签，搜索引擎可能认为这是三个重复的网站，分散权重。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;link&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rel&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;canonical&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/&amp;#34;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      注意：必须指向你希望作为唯一标准的那个 URL（通常带 &lt;code&gt;https&lt;/code&gt; 和 &lt;code&gt;www&lt;/code&gt;，且不带 &lt;code&gt;index.html&lt;/code&gt;）。
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;网站图标 (Favicon)&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;link&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rel&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;icon&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/favicon.ico&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;image/x-icon&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-4&quot;&gt;不需要添加的标签 (避坑指南)&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;SEO, 优化, 排名...&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
   &lt;b&gt;原因&lt;/b&gt;： Google 早在 10 多年前就宣布完全忽略这个标签。现在添加它不仅没用，还等于把你的关键词策略直接暴露给竞争对手看。
&lt;/p&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>博客增加闲言碎语页面</title>
      <link href="https://honmaple.me/posts/2025/11/博客增加闲言碎语页面/" rel="alternate"></link>
      <published>Wed, 12 Nov 2025 17:37:49 +0000</published>
      <updated>Sat, 11 Jul 2026 01:29:20 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/11/博客增加闲言碎语页面/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/11/博客增加闲言碎语页面/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
主要用于记录一些短文或吐槽，这些内容不适合作为博客文章出现，该功能类似我很久之前实现过的&lt;b&gt;时间轴&lt;/b&gt;，但上次更新&lt;b&gt;时间轴&lt;/b&gt;已经是6年前的事情了，而且&lt;b&gt;时间轴&lt;/b&gt;所使用的后端服务还是我十年前写的一个基于 &lt;code&gt;Python+Flask&lt;/code&gt; 的博客。近几年我一直在使用 &lt;a href=&quot;https://github.com/usememos/memos&quot;&gt;usememos&lt;/a&gt; 作为个人朋友圈的替代品，此次也是准备将 &lt;code&gt;memos&lt;/code&gt; 利用起来，在博客内嵌入一个新的&lt;b&gt;闲言碎语&lt;/b&gt;的页面
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;实现&lt;/h2&gt;
&lt;p&gt;
   我使用的博客系统是我自己写的 &lt;a href=&quot;https://github.com/honmaple/snow&quot;&gt;Snow静态博客生成器&lt;/a&gt;，所以实现也很方便。
&lt;/p&gt;

&lt;p&gt;
   首先添加一个新的页面 &lt;code&gt;content/pages/memos.org&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+TITLE&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: 闲言碎语&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+PROPERTY&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: SLUG...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
主要用于记录一些短文或吐槽，这些内容不适合作为博客文章出现，该功能类似我很久之前实现过的&lt;b&gt;时间轴&lt;/b&gt;，但上次更新&lt;b&gt;时间轴&lt;/b&gt;已经是6年前的事情了，而且&lt;b&gt;时间轴&lt;/b&gt;所使用的后端服务还是我十年前写的一个基于 &lt;code&gt;Python+Flask&lt;/code&gt; 的博客。近几年我一直在使用 &lt;a href=&quot;https://github.com/usememos/memos&quot;&gt;usememos&lt;/a&gt; 作为个人朋友圈的替代品，此次也是准备将 &lt;code&gt;memos&lt;/code&gt; 利用起来，在博客内嵌入一个新的&lt;b&gt;闲言碎语&lt;/b&gt;的页面
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;实现&lt;/h2&gt;
&lt;p&gt;
   我使用的博客系统是我自己写的 &lt;a href=&quot;https://github.com/honmaple/snow&quot;&gt;Snow静态博客生成器&lt;/a&gt;，所以实现也很方便。
&lt;/p&gt;

&lt;p&gt;
   首先添加一个新的页面 &lt;code&gt;content/pages/memos.org&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+TITLE&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: 闲言碎语&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+PROPERTY&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: SLUG memos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+PROPERTY&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: COMMENT True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+begin_export &lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;memos&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;data-src&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://memos.libforest.com&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;  &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;entry-loading&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;    &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;fa fa-spinner fa-spin&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;i&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;span&lt;/span&gt;&amp;gt;加载中...&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;span&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://s.libforest.com/static/js/marked.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/static/js/memos.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+end_export&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   使用 &lt;code&gt;data-src&lt;/code&gt; 设置后端 &lt;b&gt;memos&lt;/b&gt; 的服务接口，而 &lt;b&gt;memos&lt;/b&gt; 的开放接口是 &lt;code&gt;https://{api}/api/v1/memo&lt;/code&gt;,  返回数据如下
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;memos&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;memos/GorXqRpEUPCE3jVjY9pp8W&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;state&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;NORMAL&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;createTime&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;2025-11-11T08:57:38Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;updateTime&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;2025-11-11T08:57:38Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;测试图片&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;pinned&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#66d9ef&quot;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;resources&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;resources/VPqiT6yFj2nBgyGsKtUWjj&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;02.png&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;image/png&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;size&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;1107605&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;memo&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;memos/GorXqRpEUPCE3jVjY9pp8W&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;17&lt;/span&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;18&lt;/span&gt;&lt;span&gt;            ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;19&lt;/span&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;20&lt;/span&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;21&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;nextPageToken&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;CAoQCg==&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;22&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   使用&lt;code&gt;JS&lt;/code&gt;请求就是
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;document.&lt;span style=&quot;color:#a6e22e&quot;&gt;addEventListener&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;DOMContentLoaded&amp;#34;&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;async&lt;/span&gt; () =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;dom&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; document.&lt;span style=&quot;color:#a6e22e&quot;&gt;querySelector&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;#memos&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;dom&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;getAttribute&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;data-src&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;resp&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fetch&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/api/v1/memos&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;resp&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;json&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;data&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;memos&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;9&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
   &lt;b&gt;注意：&lt;/b&gt;
   我正在使用的memos版本在查询接口上的参数需要进行一层转换，必须使用生成的&lt;code&gt;protobuf&lt;/code&gt;文件才行，这在单独的JS文件中不好实现，所以暂不支持添加参数查询，目前也只是显示第一页总共10条的数据，这对于我来说已经足够了，如果有需要&lt;code&gt;下一页&lt;/code&gt;  ，可以利用返回数据里的 &lt;code&gt;nextPageToken&lt;/code&gt;，将其作为查询参数添加到请求URL中
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;`${api}/api/v1/memos?page_token=${nextPageToken}`&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   获取到数据后就能转换成 &lt;code&gt;HTML&lt;/code&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;内容处理&lt;/b&gt;: &lt;b&gt;memos&lt;/b&gt; 的内容基于&lt;code&gt;Markdown&lt;/code&gt;，所以我引入了 &lt;code&gt;marked.js&lt;/code&gt; 作为解析库，同时还需要对标签进行解析和渲染
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;memoTag&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;extensions&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;memoTag&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;level&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;inline&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;start&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;) { &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;indexOf&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;); },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;tokenizer&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rule&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;/^#([^\s#]+)(\s*)/&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rule&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;exec&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;                &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;span class=&amp;#34;memo-tag&amp;#34;&amp;gt;#&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;[&lt;span style=&quot;color:#ae81ff&quot;&gt;1&lt;/span&gt;]&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;                &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;[&lt;span style=&quot;color:#ae81ff&quot;&gt;2&lt;/span&gt;].&lt;span style=&quot;color:#a6e22e&quot;&gt;endsWith&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;                &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;memoTag&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;raw&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;[&lt;span style=&quot;color:#ae81ff&quot;&gt;0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;17&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;18&lt;/span&gt;&lt;span&gt;                };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;19&lt;/span&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;20&lt;/span&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;21&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;renderer&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;token&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;22&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;token&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;23&lt;/span&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;24&lt;/span&gt;&lt;span&gt;    }],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;25&lt;/span&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;26&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;setOptions&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;27&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;breaks&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;28&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;smartypants&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;29&lt;/span&gt;&lt;span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;30&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;use&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memoTag&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;31&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;parse&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;资源处理&lt;/b&gt;: 资源应该是包括图片、音频、视频等多种类型的，目前我只处理了图片类型，这也是基于我的需求
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;renderContent&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;map&lt;/span&gt;((&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/file/&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;filename&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;?thumbnail=true&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;style&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;max-height: 16rem;border-radius: 0.5rem;object-fit: contain;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;a href=&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34; data-fancybox=&amp;#34;image&amp;#34;&amp;gt;&amp;lt;img data-src=&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34; class=&amp;#34;lazyload&amp;#34; style=&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34; /&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;length&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color:#ae81ff&quot;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;parse&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;)&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;            &amp;lt;div style=&amp;#34;display: flex;gap: 0.5rem; align-items: baseline;&amp;#34;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;join&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;            &amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;parse&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;)&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
   或许可以把该功能作为 &lt;code&gt;shortcodes&lt;/code&gt; 使用， 完整代码可以在 &lt;a href=&quot;https://honmaple.me/static/js/memos.js&quot;&gt;memos.js&lt;/a&gt; 查看
&lt;/p&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;其它&lt;/h2&gt;
&lt;p&gt;
   如果需要一个 &lt;b&gt;memos&lt;/b&gt; 客户端，可以试试我写的 &lt;a href=&quot;https://apps.apple.com/cn/app/红枫笔记/id6743336280?platform=iphone&quot;&gt;红枫笔记&lt;/a&gt;，除了支持本地笔记外，还支持 memos、blinko等远程服务的管理
&lt;/p&gt;

&lt;div class=&quot;gallery gallery-grid&quot;&gt;
  
&lt;p&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2025/10/maple-note-06.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2025/10/maple-note-06.jpg-thumb&quot;
         alt=&quot;maple-note-06.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/libs/glightbox/glightbox.min.css&quot;&gt;
  &lt;script src=&quot;https://honmaple.me/libs/vanilla-lazyload/lazyload.min.js&quot; defer&gt;&lt;/script&gt;
  &lt;script src=&quot;https://honmaple.me/libs/glightbox/glightbox.min.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lazyload.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lightbox.js&quot; defer&gt;&lt;/script&gt;

   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2025/10/maple-note-07.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2025/10/maple-note-07.jpg-thumb&quot;
         alt=&quot;maple-note-07.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/css/gallery.css&quot;&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>关于B站上传视频缓慢问题</title>
      <link href="https://honmaple.me/posts/2025/10/关于B站上传视频缓慢问题/" rel="alternate"></link>
      <published>Sun, 19 Oct 2025 14:21:49 +0000</published>
      <updated>Sun, 19 Oct 2025 14:30:23 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/10/关于B站上传视频缓慢问题/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/10/关于B站上传视频缓慢问题/</id>
      <summary type="html">
&lt;p&gt;
网上找到一种解决方式
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 打开 &lt;a href=&quot;https://member.bilibili.com/preupload?r=ping&quot;&gt;https://member.bilibili.com/preupload?r=ping&lt;/a&gt; 进行测速，找到上传速度最快的地址，比如
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;?&lt;/span&gt;os&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;upos&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;zone&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;cs&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;upcdn&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;attx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 复制参数 &lt;code&gt;&amp;upcdn=attx&lt;/code&gt; 到原上传地址，比如原地址为
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;</summary>
      <content type="html">
&lt;p&gt;
网上找到一种解决方式
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 打开 &lt;a href=&quot;https://member.bilibili.com/preupload?r=ping&quot;&gt;https://member.bilibili.com/preupload?r=ping&lt;/a&gt; 进行测速，找到上传速度最快的地址，比如
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;?&lt;/span&gt;os&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;upos&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;zone&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;cs&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;upcdn&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;attx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 复制参数 &lt;code&gt;&amp;upcdn=attx&lt;/code&gt; 到原上传地址，比如原地址为
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   修改后为
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;upcdn&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;attx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 然后就可以上传视频了
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>Windows优化记录</title>
      <link href="https://honmaple.me/posts/2025/10/windowsyou-hua-ji-lu/" rel="alternate"></link>
      <published>Sat, 11 Oct 2025 19:09:27 +0000</published>
      <updated>Sat, 11 Oct 2025 19:19:38 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/10/windowsyou-hua-ji-lu/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/10/windowsyou-hua-ji-lu/</id>
      <summary type="html">&lt;h2 id=&quot;heading-1&quot;&gt;去除快捷方式小箭头&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v 29 /d &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%systemroot%&lt;span style=&quot;color:#e6db74&quot;&gt;\system32\imageres.dll,197&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /t reg_sz /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;attrib -s -r...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</summary>
      <content type="html">&lt;h2 id=&quot;heading-1&quot;&gt;去除快捷方式小箭头&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v 29 /d &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%systemroot%&lt;span style=&quot;color:#e6db74&quot;&gt;\system32\imageres.dll,197&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /t reg_sz /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;attrib -s -r -h &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%userprofile%&lt;span style=&quot;color:#e6db74&quot;&gt;\AppData\Local\iconcache.db&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;del&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%userprofile%&lt;span style=&quot;color:#e6db74&quot;&gt;\AppData\Local\iconcache.db&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /f /q
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-2&quot;&gt;恢复快捷方式小箭头&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg delete &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v 29 /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-3&quot;&gt;交换大写锁定和右CTRL&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;Windows Registry Editor Version 5.00
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;Scancode Map&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,e0,00,00,00,00
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;使用方法: 更改拓展名为&lt;code&gt;.reg&lt;/code&gt;, 双击运行&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1d,00,3a,00 表示将Caps键替换为Left Ctl&lt;/li&gt;
&lt;li&gt;3a,00,1d,e0表示将RightCtrl替换为Caps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-4&quot;&gt;恢复大写锁定和右CTRL&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;Windows Registry Editor Version 5.00
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layout]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;Scancode Map&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;=-
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-5&quot;&gt;恢复windows10右键菜单&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /f /ve
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe &amp;amp; &lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-6&quot;&gt;恢复windows11右键菜单&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg delete &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe &amp;amp; &lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-7&quot;&gt;windows11暂停更新&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v FlightSettingsMaxPauseDays /t reg_dword /d 9999 /f
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</content>
        <category term="Tech"></category>
    </entry>
    <entry xml:lang="zh">
      <title>MacOS环境配置</title>
      <link href="https://honmaple.me/posts/2025/04/macoshuan-jing-pei-zhi/" rel="alternate"></link>
      <published>Fri, 18 Apr 2025 15:53:20 +0000</published>
      <updated>Sun, 10 May 2026 17:47:17 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/04/macoshuan-jing-pei-zhi/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/04/macoshuan-jing-pei-zhi/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
最近实在没忍住，以 &lt;b&gt;2944&lt;/b&gt; 的价格入手了一台 &lt;b&gt;mac mini m4&lt;/b&gt; 丐版，而我之前一直使用的是一台2019年 &lt;b&gt;Intel&lt;/b&gt; 芯片的 &lt;b&gt;macbook pro&lt;/b&gt;，因为刚开始使用，开发环境还没配置好，所以还没感觉到明显地提升，但至少我的桌面倒是干净了不少。
&lt;/p&gt;

&lt;p&gt;
此次入手 &lt;b&gt;mac mini&lt;/b&gt; 后我使用 &lt;b&gt;迁移助理&lt;/b&gt; 对旧数据进行迁移，不幸的是，由于是 &lt;b&gt;Intel&lt;/b&gt; 迁移至 &lt;b&gt;Apple Silicon&lt;/b&gt;，所以出现了各种各样的问题，尤其是 &lt;code&gt;Bad CPU type in executable...&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
最近实在没忍住，以 &lt;b&gt;2944&lt;/b&gt; 的价格入手了一台 &lt;b&gt;mac mini m4&lt;/b&gt; 丐版，而我之前一直使用的是一台2019年 &lt;b&gt;Intel&lt;/b&gt; 芯片的 &lt;b&gt;macbook pro&lt;/b&gt;，因为刚开始使用，开发环境还没配置好，所以还没感觉到明显地提升，但至少我的桌面倒是干净了不少。
&lt;/p&gt;

&lt;p&gt;
此次入手 &lt;b&gt;mac mini&lt;/b&gt; 后我使用 &lt;b&gt;迁移助理&lt;/b&gt; 对旧数据进行迁移，不幸的是，由于是 &lt;b&gt;Intel&lt;/b&gt; 迁移至 &lt;b&gt;Apple Silicon&lt;/b&gt;，所以出现了各种各样的问题，尤其是 &lt;code&gt;Bad CPU type in executable&lt;/code&gt; 错误，导致 git、python等二进制文件全部不可用，最后只能重置系统并重头开始配置(注：重置系统只需要到 &lt;code&gt;设置 -&gt; 通用 -&gt; 传输与还原 -&gt; 抹掉所有内容和设置&lt;/code&gt;，不用长按开机键进入选项抹掉磁盘)
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;设置&lt;/h2&gt;
&lt;h3 id=&quot;heading-1.1&quot;&gt;App Store&lt;/h3&gt;
&lt;p&gt;
    因为我一般都是美区ID+国区商店，所以打开 &lt;b&gt;App Store&lt;/b&gt;，在左上方的菜单栏中找到 &lt;code&gt;商店 -&gt; 退出登录&lt;/code&gt;，并登入国区ID
&lt;/p&gt;

&lt;h3 id=&quot;heading-1.2&quot;&gt;终端&lt;/h3&gt;
&lt;p&gt;
    我还是习惯使用 &lt;code&gt;bash&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;chsh -s /bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    并且有使用了十多年的PS1配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;git_status&lt;span style=&quot;color:#f92672&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    cmd&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;git branch 2&amp;gt; /dev/null | sed -e &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;/^[^*]/d&amp;#39;&lt;/span&gt; -e &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;s/[(（]//&amp;#39;&lt;/span&gt; -e &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;s/[）)]//&amp;#39;&lt;/span&gt;  -e &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;s/* \(.*\)/(\1)/&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    echo -en &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;\033[32m&lt;/span&gt;$cmd&lt;span style=&quot;color:#e6db74&quot;&gt;\033[0m&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;proxy_status&lt;span style=&quot;color:#f92672&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#f92672&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;[&lt;/span&gt; -z &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;http_proxy&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;||&lt;/span&gt; echo -en &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;\033[32m[PROXY]\033[0m&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;PS1&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;\$(proxy_status)\[\e[0;37m\]\342\224\214\342\224\200 \[[\e[0;33m\]\u\[\e[0;37m\]]\342\224\200[\[\e[1;33m\]\w\[\e[0;37m\]]\$(git_status)\n\[\e[0;37m\]\342\224\224\342\224\200\342\224\200\342\225\274\[\e[0m\] &amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    如果 &lt;code&gt;~/.bashrc&lt;/code&gt; 不生效，需要添加文件 &lt;code&gt;~/.bash_profile&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;[&lt;/span&gt; -r $HOME/.bashrc &lt;span style=&quot;color:#f92672&quot;&gt;]&lt;/span&gt;; &lt;span style=&quot;color:#66d9ef&quot;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    source $HOME/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;必备软件&lt;/h2&gt;
&lt;p&gt;
   微信、QQ、QQ音乐、网易云音乐、Localsend等软件可以在商店里直接下载
&lt;/p&gt;

&lt;h3 id=&quot;heading-2.1&quot;&gt;homebrew&lt;/h3&gt;
&lt;p&gt;
    这应该是每个Mac用户的必备软件了吧
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;/bin/bash -c &amp;#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
    如果安装速度太慢或是下载部分内容时完全卡住，可以先行安装科学上网工具
&lt;/p&gt;

&lt;p&gt;
    然后添加以下内容到 &lt;code&gt;~/.bashrc&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;/opt/homebrew/bin:$PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; which brew &amp;gt; /dev/null;&lt;span style=&quot;color:#66d9ef&quot;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    export HOMEBREW_NO_AUTO_UPDATE&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#75715e&quot;&gt;# export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#75715e&quot;&gt;# export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#75715e&quot;&gt;# export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;    eval &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;$(&lt;/span&gt;brew shellenv&lt;span style=&quot;color:#66d9ef&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;9&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.2&quot;&gt;betterdisplay&lt;/h3&gt;
&lt;p&gt;
    由于我使用的是一个2K显示器，所以需要开启HIDPI
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask betterdisplay&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.3&quot;&gt;clash-verge-rev&lt;/h3&gt;
&lt;p&gt;
    如果之前是通过dmg文件安装的，需要先卸载，然后重新使用brew安装，方便升级和管理
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask clash-verge-rev&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.4&quot;&gt;folo&lt;/h3&gt;
&lt;p&gt;
    RSS信息聚合阅读器
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask folo&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.5&quot;&gt;google-chrome&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask google-chrome&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
    如果在登陆账号时总是提示请求取消，并且登陆失败，开启全局代理即可
&lt;/p&gt;

&lt;h3 id=&quot;heading-2.6&quot;&gt;yabai&lt;/h3&gt;
&lt;p&gt;
    macos端的平铺窗口管理
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install koekeishiya/formulae/yabai
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;yabai --start-service&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.7&quot;&gt;hammerspoon&lt;/h3&gt;
&lt;p&gt;
    主要用于搭配 &lt;b&gt;yabai&lt;/b&gt; 使用
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask hammerspoon&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    我的配置在 &lt;a href=&quot;https://github.com/honmaple/dotfiles/tree/master/macos&quot;&gt;https://github.com/honmaple/dotfiles/tree/master/macos&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;heading-2.8&quot;&gt;Localsend&lt;/h3&gt;
&lt;p&gt;
    一个内网文件传输工具，可以在商店直接下载，或者使用
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask localsend&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.9&quot;&gt;inkscape&lt;/h3&gt;
&lt;p&gt;
    一个矢量图绘制软件
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask inkscape&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.10&quot;&gt;wireshark&lt;/h3&gt;
&lt;p&gt;
    抓包工具
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask wireshark&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.11&quot;&gt;字体&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 终端字体
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask font-maple-mono-nf&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-2.12&quot;&gt;其它&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install rg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;brew install tree htop
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;brew install --cask visual-studio-code&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 域名扫描
      &lt;a href=&quot;https://github.com/brandonyoungdev/tldx&quot;&gt;https://github.com/brandonyoungdev/tldx&lt;/a&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install tldx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      使用方式
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;tldx -r &amp;#39;lib[a-z]{2}&amp;#39; -t com,me,io --only-available&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;开发软件&lt;/h2&gt;
&lt;h3 id=&quot;heading-3.1&quot;&gt;Emacs&lt;/h3&gt;
&lt;p&gt;
    emacs永存，虽然我是邪恶的evil用户
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask railwaycat/emacsmacport/emacs-mac&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;quelpa&lt;/code&gt; 依赖
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install gnu-tar&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;toml&lt;/code&gt; 格式化工具
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install taplo&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-3.2&quot;&gt;Docker&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask docker&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.3&quot;&gt;Ruby&lt;/h3&gt;
&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt;配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export GEM_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/ruby/gem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export GEM_PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/ruby/gem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;export GEM_SPEC_CACHE&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/ruby/gem/specs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$GEM_HOME/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.4&quot;&gt;Python&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install pyenv pyenv-virtualenv&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt;配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; which pyenv &amp;gt; /dev/null;&lt;span style=&quot;color:#66d9ef&quot;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    export PYENV_ROOT&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/python/pyenv
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$PYENV_ROOT/bin:$PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    eval &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;$(&lt;/span&gt;pyenv init -&lt;span style=&quot;color:#66d9ef&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; which pyenv-virtualenv-init &amp;gt; /dev/null; &lt;span style=&quot;color:#66d9ef&quot;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;    eval &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;$(&lt;/span&gt;pyenv virtualenv-init -&lt;span style=&quot;color:#66d9ef&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;9&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export PYTHONUSERBASE&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/python
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export PYTHONHISTFILE&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/python/history
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/python/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    开发依赖:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;python3 -m pip install --user python-lsp-server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;python3 -m pip install --user python-lsp-ruff&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.5&quot;&gt;Golang&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install go&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt;配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export GOPROXY&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;https://goproxy.cn,direct
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export GOPATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/golang
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/golang/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    开发依赖:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;go install golang&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;org&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;x&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;tools&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;gopls&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;@&lt;/span&gt;latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;go install honnef&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;co&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;go&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;tools&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;cmd&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;staticcheck&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;@&lt;/span&gt;latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;go install golang&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;org&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;x&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;mobile&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;cmd&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;gomobile&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;@&lt;/span&gt;latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;gomobile init&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.6&quot;&gt;Protobuf&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install protobuf bufbuild/buf/buf&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 Go
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;go install github.com/favadi/protoc-go-inject-tag@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 Dart
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;dart --disable-analytics
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;dart pub global activate protoc_plugin 21.1.2&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-3.7&quot;&gt;Android&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask android-studio&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    然后打开 &lt;b&gt;android-studio&lt;/b&gt;, 并配置 &lt;b&gt;HTTP手动代理&lt;/b&gt;，设置sdk目录为 &lt;code&gt;$HOME/repo/android/sdk&lt;/code&gt;，设置完成后到达 &lt;code&gt;Welcome to Android Studio&lt;/code&gt; 界面，点击 &lt;code&gt;More Actions -&gt; SDK Manager&lt;/code&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 SDK Platforms: 勾选 &lt;code&gt;Android 12.0&lt;/code&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 SDK Tools: 勾选 &lt;code&gt;NDK(Side by side)&lt;/code&gt; 和 &lt;code&gt;Android SDK Command-line Tools (latest)&lt;/code&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt;配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export ANDROID_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/android/sdk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export NDK_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;$ANDROID_HOME&lt;span style=&quot;color:#e6db74&quot;&gt;/ndk/26.2.11394342&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;export JAVA_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;/Applications/Android Studio.app/Contents/jbr/Contents/Home&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$ANDROID_HOME/platform-tools:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.8&quot;&gt;Flutter&lt;/h3&gt;
&lt;p&gt;
    下载 &lt;a href=&quot;https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_arm64_3.29.3-stable.zip&quot;&gt;flutter_macos_arm64_3.29.3-stable.zip&lt;/a&gt; 并解压到 &lt;code&gt;~/repo&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;unzip &lt;span style=&quot;color:#f92672&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;Downloads&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;flutter_macos_arm64_3&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#ae81ff&quot;&gt;29.3&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;stable&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;zip&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;d &lt;span style=&quot;color:#f92672&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;repo&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    安装 &lt;b&gt;rosetta&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;sudo softwareupdate --install-rosetta --agree-to-license&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    安装 &lt;b&gt;cocoapods&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;export&lt;/span&gt; GEM_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt;HOME&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;repo&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;ruby&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;gem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;export&lt;/span&gt; PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt;GEM_HOME&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;bin:&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt;PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;gem install cocoapods &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;user&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;install &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;V&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
    因为系统内置的ruby版本是 &lt;code&gt;2.6.10&lt;/code&gt;，这导致 &lt;b&gt;cocoapods&lt;/b&gt; 的部分依赖无法安装，并出现类似下面的错误
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;ERROR:  Error installing cocoapods:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    The last version of securerandom (&amp;gt;= 0.3) to support your Ruby &amp;amp; RubyGems was 0.3.2. Try installing it with `gem install securerandom -v 0.3.2` and then running the current command again
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    securerandom requires Ruby version &amp;gt;= 3.1.0. The current ruby version is 2.6.10.210.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
    本来还想按照提示处理，但处理完一个又来一个，处理完一个又来一个，太过麻烦。还有一种方法是安装新版本的ruby
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install ruby&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
    然后使用新版本ruby的gem安装 &lt;b&gt;cocoapods&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;/opt/homebrew/Cellar/ruby/3.4.3/bin/gem install cocoapods -V&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    这时使用 &lt;code&gt;flutter doctor&lt;/code&gt; 会出现下面错误
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;[!] Xcode - develop for iOS and macOS (Xcode 16.3)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    ✗ CocoaPods installed but not working.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;        You appear to have CocoaPods installed but it is not working.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;        This can happen if the version of Ruby that CocoaPods was installed with is different from the one being used to invoke it.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;        This can usually be fixed by re-installing CocoaPods.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;      For re-installation instructions, see https://guides.cocoapods.org/using/getting-started.html#installation
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;[✓] Chrome - develop for the web&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    通过使用 &lt;code&gt;pod --version&lt;/code&gt; 查看
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;/opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1421:in &amp;#39;block in Gem::Specification#activate_dependencies&amp;#39;: Could not find &amp;#39;nkf&amp;#39; (&amp;gt;= 0) among 100 total gem(s) (Gem::MissingSpecError)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;Checked in &amp;#39;GEM_PATH=/Users/xxxx/repo/ruby/gem&amp;#39; at: /Users/xxxx/repo/ruby/gem/specifications/CFPropertyList-3.0.7.gemspec, execute `gem env` for more information
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1407:in &amp;#39;Array#each&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1407:in &amp;#39;Gem::Specification#activate_dependencies&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1389:in &amp;#39;Gem::Specification#activate&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1423:in &amp;#39;block in Gem::Specification#activate_dependencies&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1407:in &amp;#39;Array#each&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1407:in &amp;#39;Gem::Specification#activate_dependencies&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1389:in &amp;#39;Gem::Specification#activate&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1423:in &amp;#39;block in Gem::Specification#activate_dependencies&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1407:in &amp;#39;Array#each&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1407:in &amp;#39;Gem::Specification#activate_dependencies&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems/specification.rb:1389:in &amp;#39;Gem::Specification#activate&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems.rb:290:in &amp;#39;block in Gem.activate_bin_path&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems.rb:289:in &amp;#39;Thread::Mutex#synchronize&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;    from /opt/homebrew/Cellar/ruby/3.4.3/lib/ruby/3.4.0/rubygems.rb:289:in &amp;#39;Gem.activate_bin_path&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;17&lt;/span&gt;&lt;span&gt;    from /Users/xxxx/repo/ruby/gem/bin/pod:25:in &amp;#39;&amp;lt;main&amp;gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    尝试安装 &lt;code&gt;nkf&lt;/code&gt; 终于解决了 &lt;b&gt;cocoapods&lt;/b&gt; 的安装问题
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;/opt/homebrew/Cellar/ruby/3.4.3/bin/gem install nkf -V&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt; 配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;alias flutter&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;flutter --no-version-check&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export PUB_HOSTED_URL&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;https://pub.flutter-io.cn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;export FLUTTER_STORAGE_BASE_URL&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;https://storage.flutter-io.cn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/flutter/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    如果需要使用 &lt;code&gt;fvm&lt;/code&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 安装
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;dart pub global activate fvm&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 卸载
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;dart pub global deactivate fvm&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;~/.bashrc&lt;/code&gt; 配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export FVM_CACHE_PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/flutter/fvm&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 查看可使用的版本
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;fvm releases&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 切换版本
      在flutter项目下执行
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;fvm use 3.39.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;fvm use 3.38.10&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 设置全局版本
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;fvm global 3.29.3&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      然后修改 &lt;code&gt;.bashrc&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/flutter/fvm/default/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-3.9&quot;&gt;Node&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install node&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt;配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export NODE_PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/npm/lib/node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/npm/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    开发依赖:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;npm install -g yarn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;npm install -g pnpm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;npm install -g typescript-language-server typescript
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;npm install -g @vue/language-server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;npm install -g @tailwindcss/language-server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;npm install -g emmet-ls
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;npm install -g prettier
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;npm install -g js-beautify&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    设置 &lt;code&gt;pnpm&lt;/code&gt; 缓存路径，注意: &lt;code&gt;pnpm&lt;/code&gt; 配置文件存储在 &lt;code&gt;~/Library/Preferences/pnpm/rc&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;pnpm config set store-dir ~/repo/pnpm&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    其它:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;npm install -g @quasar/cli&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.10&quot;&gt;Rust&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install rustup
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;rustup-init&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;~/.bashrc&lt;/code&gt;配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;export CARGO_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/rust/cargo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;export CARGO_TARGET_DIR&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/rust/cargo/build
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;export RUSTUP_HOME&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/rust/rustup
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;export RUSTUP_DIST_SERVER&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;https://rsproxy.cn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;export RUSTUP_UPDATE_ROOT&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;https://rsproxy.cn/rustup
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;export PATH&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;$HOME/repo/rust/cargo/bin:$PATH&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h2 id=&quot;heading-4&quot;&gt;AI软件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 opencode
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;- brew install opencode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;+ brew install anomalyco/tap/opencode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
     如果安装时报错
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;It&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;seems&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;that&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;your&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;package&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;manager&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;failed&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;to&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;install&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;the&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;right&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;of&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;the&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;opencode&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;CLI&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;your&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;platform&lt;/span&gt;. &lt;span style=&quot;color:#a6e22e&quot;&gt;You&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;can&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;manually&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;installing&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;the&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;opencode-darwin-arm64&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
     则可以使用 &lt;code&gt;npm install -g opencode-ai&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
     桌面版本
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install --cask opencode-desktop&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 claude-code
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install claude-code --cask&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 trae
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install trae --cask&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 codex
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install codex --cask
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;brew install codex-app --cask&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
        <category term="Tech"></category>
    </entry>
    <entry xml:lang="zh">
      <title>绿联Nas优化</title>
      <link href="https://honmaple.me/posts/2023/12/lu-lian-nasyou-hua/" rel="alternate"></link>
      <published>Tue, 12 Dec 2023 21:54:12 +0000</published>
      <updated>Wed, 06 Mar 2024 15:09:26 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2023/12/lu-lian-nasyou-hua/" type="text/html"/>
      <id>https://honmaple.me/posts/2023/12/lu-lian-nasyou-hua/</id>
      <summary type="html">
&lt;p&gt;
记录一下，每次升级系统都要重新改一次
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;禁用迅雷&lt;/h2&gt;
&lt;p&gt;
   找到 &lt;code&gt;/ugreen/thunder/xunlei-pan/start.sh&lt;/code&gt; 文件，注释掉倒数第二行
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;#su - $thunderName ...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   运行 &lt;code&gt;/ugreen/thunder/xunlei-pan/stop.sh&lt;/code&gt; 关闭当前进程
&lt;/p&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;禁用移动云盘&lt;/h2&gt;
&lt;p&gt;
   删除 &lt;code&gt;/data/nas_server/cmcc_svr&lt;/code&gt; 文件
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;mv /data/nas_server...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</summary>
      <content type="html">
&lt;p&gt;
记录一下，每次升级系统都要重新改一次
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;禁用迅雷&lt;/h2&gt;
&lt;p&gt;
   找到 &lt;code&gt;/ugreen/thunder/xunlei-pan/start.sh&lt;/code&gt; 文件，注释掉倒数第二行
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;#su - $thunderName ...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   运行 &lt;code&gt;/ugreen/thunder/xunlei-pan/stop.sh&lt;/code&gt; 关闭当前进程
&lt;/p&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;禁用移动云盘&lt;/h2&gt;
&lt;p&gt;
   删除 &lt;code&gt;/data/nas_server/cmcc_svr&lt;/code&gt; 文件
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;mv /data/nas_server/cmcc_svr /data/nas_server/cmcc_svr.bak&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   关闭当前进程
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;ps axuf | grep cmcc | grep -v grep | awk &amp;#39;{printf $2}&amp;#39; | xargs kill -9&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h2 id=&quot;heading-3&quot;&gt;禁用p2px&lt;/h2&gt;
&lt;p&gt;
   新建一个脚本 &lt;code&gt;/root/script/myp2p&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;[&lt;/span&gt; -e &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/data/nas_server/p2px/p2px&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;]&lt;/span&gt;; &lt;span style=&quot;color:#66d9ef&quot;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    mv /data/nas_server/p2px/p2px /data/nas_server/p2px/p2px.bak
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;killall -q -9 p2px &lt;span style=&quot;color:#f92672&quot;&gt;||&lt;/span&gt; true&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   在 &lt;code&gt;/etc/crontabs/root&lt;/code&gt; 文件添加一个定时任务
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;*/3 * * * * /root/script/myp2p&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h2 id=&quot;heading-4&quot;&gt;ssh自启动&lt;/h2&gt;
&lt;p&gt;
   新建一个脚本 &lt;code&gt;/root/script/myscript&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;run_myscript&lt;span style=&quot;color:#f92672&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;    mkdir -m &lt;span style=&quot;color:#ae81ff&quot;&gt;0700&lt;/span&gt; -p /var/empty
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;    netstat -anp | grep 0.0.0.0:922 | grep sshd | grep -v grep &lt;span style=&quot;color:#f92672&quot;&gt;||&lt;/span&gt; /usr/sbin/sshd -D
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;    sleep &lt;span style=&quot;color:#ae81ff&quot;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#75715e&quot;&gt;# zerotier相关&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;    lsmod | grep tun | grep -v grep &lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod &lt;span style=&quot;color:#ae81ff&quot;&gt;666&lt;/span&gt; /dev/net/tun &lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker restart zerotier
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;    ip route | grep 10.8.235 | grep -v grep &lt;span style=&quot;color:#f92672&quot;&gt;||&lt;/span&gt; ip route add 10.8.235.0/24 via 192.168.100.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;run_myscript &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;echo &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;date&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt; &amp;gt; /tmp/myscript.txt&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   添加到自启动
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;ln -s  /root/script/myscript /etc/rc.d/S99myscript&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</content>
        <category term="Tech/Geek"></category>
    </entry>
    <entry xml:lang="zh">
      <title>文件同步和备份</title>
      <link href="https://honmaple.me/posts/2023/08/文件同步和备份/" rel="alternate"></link>
      <published>Fri, 04 Aug 2023 15:30:04 +0000</published>
      <updated>Thu, 21 Sep 2023 11:13:21 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2023/08/文件同步和备份/" type="text/html"/>
      <id>https://honmaple.me/posts/2023/08/文件同步和备份/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
最近在写一个文件同步和备份的软件，特此记录
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;同步&lt;/h2&gt;
&lt;h3 id=&quot;heading-1.1&quot;&gt;单向同步&lt;/h3&gt;
&lt;h4 id=&quot;heading-1.1.1&quot;&gt;同步选项&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 选项一: 源目录的文件和目标目录的文件都发生修改:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 覆盖文件: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 跳过文件: 不作任何处理
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 选项二: 源目录的文件被删除时，是否删除目标目录的文件
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;heading-1.1.2&quot;&gt;同步逻辑&lt;/h4&gt;
&lt;p&gt;
     &lt;b&gt;第一次同步&lt;/b&gt;会获取源目录和目标目录所有文件的信息, 并将信息写入本地。这时源目录下所有文件都是新增的。&lt;b&gt;后续同步&lt;/b&gt;会获取源目录和目标目录所有文件的信息, 并对比本地信息的修改来进行同步。
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;无修改&lt;/b&gt;: 无操作
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;新增文件&lt;/b&gt;: 对比信息文件判断是否新增
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录新增文件: &lt;b&gt;选项一...&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
最近在写一个文件同步和备份的软件，特此记录
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;同步&lt;/h2&gt;
&lt;h3 id=&quot;heading-1.1&quot;&gt;单向同步&lt;/h3&gt;
&lt;h4 id=&quot;heading-1.1.1&quot;&gt;同步选项&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 选项一: 源目录的文件和目标目录的文件都发生修改:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 覆盖文件: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 跳过文件: 不作任何处理
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 选项二: 源目录的文件被删除时，是否删除目标目录的文件
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;heading-1.1.2&quot;&gt;同步逻辑&lt;/h4&gt;
&lt;p&gt;
     &lt;b&gt;第一次同步&lt;/b&gt;会获取源目录和目标目录所有文件的信息, 并将信息写入本地。这时源目录下所有文件都是新增的。&lt;b&gt;后续同步&lt;/b&gt;会获取源目录和目标目录所有文件的信息, 并对比本地信息的修改来进行同步。
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;无修改&lt;/b&gt;: 无操作
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;新增文件&lt;/b&gt;: 对比信息文件判断是否新增
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录新增文件: &lt;b&gt;选项一&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;修改文件&lt;/b&gt;: 对比信息文件判断是否修改
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录修改文件: &lt;b&gt;选项一&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录删除文件: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;删除文件&lt;/b&gt;: 对比信息文件判断是否删除
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录修改文件: &lt;b&gt;选项一&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录删除文件: 无操作
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-1.2&quot;&gt;镜像同步&lt;/h3&gt;
&lt;h4 id=&quot;heading-1.2.1&quot;&gt;同步选项&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 单向同步选项一: 覆盖文件
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 单向同步选项二: 同步删除目标目录的文件
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;heading-1.2.2&quot;&gt;同步逻辑&lt;/h4&gt;
&lt;p&gt;
     逻辑同单向同步
&lt;/p&gt;

&lt;h3 id=&quot;heading-1.3&quot;&gt;双向同步&lt;/h3&gt;
&lt;h4 id=&quot;heading-1.3.1&quot;&gt;同步选项&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 选项一: 源目录的文件和目标目录的文件都发生修改:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 保留最新的文件: 对比文件修改时间，如果源目录的文件最新, 则覆盖目标目录的文件; 反之，覆盖源目录的文件
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 以源目录为准: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 以目标目录为准: &lt;b&gt;源目录 &amp;lt;- 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 跳过文件: 不作任何处理
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 选项二: 源目录的文件被删除时，是否删除目标目录的文件
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 选项三: 目标目录的文件被删除时，是否删除源目录的文件
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;heading-1.3.2&quot;&gt;同步逻辑&lt;/h4&gt;
&lt;p&gt;
     &lt;b&gt;第一次同步&lt;/b&gt;会获取源目录和目标目录所有文件的信息, 并将信息写入本地。这时源目录下所有文件都是新增的。&lt;b&gt;后续同步&lt;/b&gt;会获取源目录和目标目录所有文件的信息, 并对比本地信息的修改来进行同步。
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;无修改&lt;/b&gt;: 对比信息文件判断
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录新增文件: &lt;b&gt;源目录 &amp;lt;- 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录修改文件: &lt;b&gt;源目录 &amp;lt;- 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录删除文件: &lt;b&gt;源目录 &amp;lt;- 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;新增文件&lt;/b&gt;: 对比信息文件判断是否新增
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录新增文件: &lt;b&gt;选项一&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;修改文件&lt;/b&gt;: 对比信息文件判断是否修改
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录修改文件: &lt;b&gt;选项一&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录删除文件: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 源目录&lt;b&gt;删除文件&lt;/b&gt;: 对比信息文件判断是否删除
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录无修改: &lt;b&gt;源目录 -&amp;gt; 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录修改文件: &lt;b&gt;源目录 &amp;lt;- 目录目录&lt;/b&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 目标目录删除文件: 无操作
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>绿联云Nas新版本v3.4.0固件开启SSH</title>
      <link href="https://honmaple.me/posts/2023/07/ugreen-nas-open-ssh/" rel="alternate"></link>
      <published>Fri, 14 Jul 2023 17:51:50 +0000</published>
      <updated>Tue, 30 Jun 2026 13:14:25 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2023/07/ugreen-nas-open-ssh/" type="text/html"/>
      <id>https://honmaple.me/posts/2023/07/ugreen-nas-open-ssh/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
之前老的方式&lt;b&gt;固定前缀加远程协助验证码&lt;/b&gt;在更新到最新版本的&lt;b&gt;v3.4.0&lt;/b&gt;后已经失效，想要开启ssh只能使用另一种方式，也希望绿联云官方在系统更加完善(&lt;b&gt;权限管理、软件卸载&lt;/b&gt;)前不要再继续封堵开启的方式，当然，如果能提供官方的开启方式更好
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;b&gt;免责声明：本教程所提供的内容仅供学习交流使用，请勿用于商业及非法用途，因此产生的任何法律纠纷均与本人无关！如有侵权，请您联系我，我将立刻删除该内容&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注：此教程可能会造成未知的后果，在此期间所造成的系统风险请自行承担&lt;/b&gt;
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;创建随机镜像&lt;/h2&gt;
&lt;p&gt;
   首先拉取一个镜像，我这里选择 &lt;code&gt;nginx:stable-alpine&lt;/code&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-01.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-01.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-01.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/libs/glightbox/glightbox.min.css&quot;&gt;
  &lt;script src=&quot;https://honmaple.me/libs/vanilla-lazyload/lazyload.min.js&quot; defer&gt;&lt;/script&gt;
  &lt;script src=&quot;https://honmaple.me/libs/glightbox/glightbox.min.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lazyload.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lightbox.js&quot; defer&gt;&lt;/script&gt;

&lt;/p&gt;

&lt;p&gt;
   然后点击创建容器，存储空间&lt;b&gt;添加一个任意目录&lt;/b&gt;，挂载到 &lt;code&gt;/data&lt;/code&gt; 下...&lt;/p&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
之前老的方式&lt;b&gt;固定前缀加远程协助验证码&lt;/b&gt;在更新到最新版本的&lt;b&gt;v3.4.0&lt;/b&gt;后已经失效，想要开启ssh只能使用另一种方式，也希望绿联云官方在系统更加完善(&lt;b&gt;权限管理、软件卸载&lt;/b&gt;)前不要再继续封堵开启的方式，当然，如果能提供官方的开启方式更好
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;b&gt;免责声明：本教程所提供的内容仅供学习交流使用，请勿用于商业及非法用途，因此产生的任何法律纠纷均与本人无关！如有侵权，请您联系我，我将立刻删除该内容&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注：此教程可能会造成未知的后果，在此期间所造成的系统风险请自行承担&lt;/b&gt;
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;创建随机镜像&lt;/h2&gt;
&lt;p&gt;
   首先拉取一个镜像，我这里选择 &lt;code&gt;nginx:stable-alpine&lt;/code&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-01.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-01.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-01.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/libs/glightbox/glightbox.min.css&quot;&gt;
  &lt;script src=&quot;https://honmaple.me/libs/vanilla-lazyload/lazyload.min.js&quot; defer&gt;&lt;/script&gt;
  &lt;script src=&quot;https://honmaple.me/libs/glightbox/glightbox.min.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lazyload.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lightbox.js&quot; defer&gt;&lt;/script&gt;

&lt;/p&gt;

&lt;p&gt;
   然后点击创建容器，存储空间&lt;b&gt;添加一个任意目录&lt;/b&gt;，挂载到 &lt;code&gt;/data&lt;/code&gt; 下，&lt;b&gt;其它参数为默认&lt;/b&gt;，然后下一步，先&lt;b&gt;不要点击完成&lt;/b&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-02.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-02.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-02.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;抓包获取Token&lt;/h2&gt;
&lt;p&gt;
   打开 &lt;b&gt;wireshark&lt;/b&gt; 进行抓包，输入筛选参数
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;ip.dst_host == 192.168.31.65 and http and http.request.method==POST&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   然后返回绿联云，点击完成，这时会在 &lt;b&gt;wireshark&lt;/b&gt; 窗口看到一条HTTP请求
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-03.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-03.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-03.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   点击这条请求，然后 &lt;b&gt;右键 -&amp;gt; Follow -&amp;gt; HTTP Stream&lt;/b&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-04.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-04.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-04.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   这时会看到具体的&lt;b&gt;HTTP请求头和请求参数&lt;/b&gt;，在下方的Find里输入 &lt;code&gt;create&lt;/code&gt; 进行查找，然后将红色内容复制到本地，将请求参数 &lt;code&gt;{&quot;_query&quot;...}&lt;/code&gt; 复制到一个 &lt;b&gt;json&lt;/b&gt; 文件
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-05.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-05.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-05.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   接着修改 &lt;b&gt;json&lt;/b&gt; 文件，找到&lt;b&gt;HostConfig -&amp;gt; Mounts&lt;/b&gt;，将里面的 &lt;b&gt;Source&lt;/b&gt; 参数修改为 &lt;code&gt;/&lt;/code&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-06.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-06.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-06.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h2 id=&quot;heading-3&quot;&gt;手动创建容器&lt;/h2&gt;
&lt;p&gt;
   首先到绿联云删除刚开始创建的容器
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-07.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-07.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-07.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   然后使用命令行手动请求创建容器，其中 &lt;b&gt;ugreen.json&lt;/b&gt; 为抓包获取并修改后的参数文件，请求头保持一致
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-08.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-08.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-08.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   创建完成后，返回绿联云，刷新并查看详情，可以看到绿联系统的根目录已经挂载到容器内部
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-09.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-09.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-09.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h2 id=&quot;heading-4&quot;&gt;修改SSH配置&lt;/h2&gt;
&lt;p&gt;
   使用终端进入Docker内部
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-10.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-10.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-10.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   然后添加公钥到root目录，怎么生成公私钥这里不再叙述。
   查看sshd的配置，默认是不允许使用公钥匙登录的，所以需要修改 &lt;code&gt;PubkeyAuthentication no&lt;/code&gt; 为 &lt;code&gt;PubkeyAuthentication yes&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-11.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-11.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-11.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

   接着到&lt;b&gt;设备管理 -&amp;gt; 远程协助 -&amp;gt; 开启远程调试功能&lt;/b&gt;，重启sshd就是关闭远程调试然后重新打开
&lt;/p&gt;

&lt;h2 id=&quot;heading-5&quot;&gt;SSH登录&lt;/h2&gt;
&lt;p&gt;
   最后就可以使用ssh公钥登录绿联云系统了
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-12.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-SSH-12.jpg-thumb&quot;
         alt=&quot;DX4600Pro-SSH-12.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h2 id=&quot;heading-6&quot;&gt;问题排查&lt;/h2&gt;
&lt;p&gt;
   如果无法使用ssh公钥登录，可以查看系统的ssh登录日志
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;grep ssh /data/data/nas_server/log/system/*syslog | less&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   如果提示 &lt;code&gt;Authentication refused: bad ownership or modes for directory /root&lt;/code&gt;，则执行
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;chmod go-w /data/root&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   如果提示 &lt;code&gt;ssh-rsa: signature algorithm not supported&lt;/code&gt;，则添加下面配置到&lt;b&gt;sshd_config&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;PubkeyAcceptedKeyTypes=+ssh-rsa&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h2 id=&quot;heading-7&quot;&gt;其它&lt;/h2&gt;
&lt;p&gt;
   升级到&lt;b&gt;v3.4.0&lt;/b&gt;后，目前觉得还不错，其中&lt;b&gt;批量重命名，TMDB接口，自定义Hosts&lt;/b&gt;等都是非常有用的功能，也希望绿联能再接再厉，我们这些用户也能和绿联Nas一同成长。
&lt;/p&gt;

&lt;p&gt;
   对了，之前文件同步会修改源文件权限的问题已经被修复，&lt;b&gt;Very Good&lt;/b&gt;
&lt;/p&gt;</content>
        <category term="Tech/Geek"></category>
    </entry>
    <entry xml:lang="zh">
      <title>绿联DX4600 Pro虚拟机探索</title>
      <link href="https://honmaple.me/posts/2023/07/绿联DX4600 Pro虚拟机探索/" rel="alternate"></link>
      <published>Thu, 06 Jul 2023 00:18:35 +0000</published>
      <updated>Wed, 15 Nov 2023 15:15:48 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2023/07/绿联DX4600 Pro虚拟机探索/" type="text/html"/>
      <id>https://honmaple.me/posts/2023/07/绿联DX4600 Pro虚拟机探索/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
本次探索源于上次发现可以&lt;b&gt;使用Docker来管理群晖虚拟机&lt;/b&gt;，而绿联本身是自带&lt;b&gt;kvm&lt;/b&gt;内核模块的，但是要等到绿联官方支持虚拟机，又不知道会等到猴年马月。所以我有一个大胆的想法，能否使用Docker搭建一个可以自由管理虚拟机的程序，最起码可以安装一个windows替换掉绿联内置的有着各种限制的迅雷
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;b&gt;注意：非专业人士请勿模仿，除非你知道什么是KVM，在此期间所造成的系统风险请自行承担&lt;/b&gt;
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;虚拟机管理&lt;/h2&gt;
&lt;p&gt;
   选择了我之前使用过的 &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 来管理 &lt;code&gt;KVM&lt;/code&gt;，说实话，这个管理程序比起威联通群晖这些官方自带确实不太好用，但用于测试还是足够了，如果有更好更方便的推荐请在评论区留言
&lt;/p&gt;

&lt;p&gt;
   &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 没有官方的  &lt;code&gt;Docker&lt;/code&gt; 镜像，只能自己编译，虽然它本身带有一个 &lt;b&gt;Dockerfile&lt;/b&gt;，但如果自己构建会遇到各种各样的问题，下面是我遇到的部分问题
&lt;/p&gt;

&lt;h3 id=&quot;heading-1.1&quot;&gt;Ubuntu版本问题&lt;/h3&gt;
&lt;p&gt;
    &lt;b&gt;retspen...&lt;/b&gt;&lt;/p&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
本次探索源于上次发现可以&lt;b&gt;使用Docker来管理群晖虚拟机&lt;/b&gt;，而绿联本身是自带&lt;b&gt;kvm&lt;/b&gt;内核模块的，但是要等到绿联官方支持虚拟机，又不知道会等到猴年马月。所以我有一个大胆的想法，能否使用Docker搭建一个可以自由管理虚拟机的程序，最起码可以安装一个windows替换掉绿联内置的有着各种限制的迅雷
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;b&gt;注意：非专业人士请勿模仿，除非你知道什么是KVM，在此期间所造成的系统风险请自行承担&lt;/b&gt;
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;虚拟机管理&lt;/h2&gt;
&lt;p&gt;
   选择了我之前使用过的 &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 来管理 &lt;code&gt;KVM&lt;/code&gt;，说实话，这个管理程序比起威联通群晖这些官方自带确实不太好用，但用于测试还是足够了，如果有更好更方便的推荐请在评论区留言
&lt;/p&gt;

&lt;p&gt;
   &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 没有官方的  &lt;code&gt;Docker&lt;/code&gt; 镜像，只能自己编译，虽然它本身带有一个 &lt;b&gt;Dockerfile&lt;/b&gt;，但如果自己构建会遇到各种各样的问题，下面是我遇到的部分问题
&lt;/p&gt;

&lt;h3 id=&quot;heading-1.1&quot;&gt;Ubuntu版本问题&lt;/h3&gt;
&lt;p&gt;
    &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 默认是基于一个 &lt;b&gt;Ubuntu22.04&lt;/b&gt; 的镜像构建，但是，如果自行构建会发现旧版本的 &lt;b&gt;Docker&lt;/b&gt; 和 &lt;b&gt;Ubuntu22.04&lt;/b&gt; 根本不兼容
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 报错一
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;The following signatures couldn&amp;#39;t be verified because the public key is not available: NO_PUBKEY 871920D1991BC93C&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      搜索了一下，说是可以使用 &lt;code&gt;apt-key&lt;/code&gt; 命令添加公钥解决，实际上
      
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-01.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-01.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-01.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/libs/glightbox/glightbox.min.css&quot;&gt;
  &lt;script src=&quot;https://honmaple.me/libs/vanilla-lazyload/lazyload.min.js&quot; defer&gt;&lt;/script&gt;
  &lt;script src=&quot;https://honmaple.me/libs/glightbox/glightbox.min.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lazyload.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lightbox.js&quot; defer&gt;&lt;/script&gt;

&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 报错二
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg are ignored as the file is not readable by user &amp;#39;_apt&amp;#39; executing apt-key.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      这个报错可以通过&lt;b&gt;删除gpg文件忽略&lt;/b&gt;，但实际上没什么用。
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    真正的解决方式是&lt;b&gt;升级自身的Docker版本&lt;/b&gt;，最小要到 &lt;code&gt;20.0&lt;/code&gt; 以上，因为我使用的Mac，最新版本的Docker也不过是 &lt;code&gt;19.03.13&lt;/code&gt;，所以没办法使用升级Docker的方式解决，只能降级Ubuntu的版本
&lt;/p&gt;

&lt;p&gt;
    一开始我直接把版本降到最熟悉的18.04，但在安装Python库发现部分库的指定版本要求Python3.8，否则找不到指定版本
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-02.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-02.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-02.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
    如果使用 &lt;code&gt;apt&lt;/code&gt; 直接安装 &lt;code&gt;Python3.8&lt;/code&gt;，会发现有两个问题：
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 其中一个依赖 &lt;code&gt;python3-lxml&lt;/code&gt; 没有3.8的版本，直接安装会同时安装 &lt;code&gt;Python3.6&lt;/code&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;venv&lt;/code&gt; 无法使用
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
    后面甚至想要忽略Python版本强行安装
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;pip3 install -r conf/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --ignore-requires-python&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    但仍然是一堆报错
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-03.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-03.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-03.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
    所以再次测试升级到 &lt;b&gt;20.04&lt;/b&gt; 的版本，还好 &lt;b&gt;20.04&lt;/b&gt; 安装的Python3正是 &lt;code&gt;Python3.8&lt;/code&gt;，故此正常
&lt;/p&gt;

&lt;h3 id=&quot;heading-1.2&quot;&gt;Libvirt安装依赖&lt;/h3&gt;
&lt;p&gt;
    由于 &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 是依赖libvirt对虚拟机进行管理的，而绿联使用的系统本身没有libvirt进程，所以我将在Docker内部安装，在此期间也遇到了部分问题，下面对部分依赖包统一说明一下
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;libvirt-daemon&lt;/b&gt; &lt;br /&gt;
      libvirtd的进程包
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;libvirt-daemon-system&lt;/b&gt; &lt;br /&gt;
      libvirtd的默认配置包，如果不安装需要手动编写配置
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;iptables&lt;/b&gt; &lt;br /&gt;
      libvirtd的依赖，不安装启动libvirtd时会报错
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;dnsmasq&lt;/b&gt; &lt;br /&gt;
      libvirtd的依赖，不安装kvm的默认网络无法启动，导致后续建立的虚拟机无法联网
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;qemu-kvm&lt;/b&gt; &lt;br /&gt;
      不安装导致后续新建虚拟机时可选的架构和芯片组为空
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;qemu-utils&lt;/b&gt; &lt;br /&gt;
      不安装导致虚拟机无法使用qcow2，只能使用raw格式
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;virt-manager(可选)&lt;/b&gt; &lt;br /&gt;
      通过命令行管理虚拟机
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;构建Docker&lt;/h2&gt;
&lt;p&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-04.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-04.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-04.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   修改完 &lt;b&gt;Ubuntu版本&lt;/b&gt; 和添加 &lt;b&gt;KVM所需依赖&lt;/b&gt; 后，就能成功构建Docker(实际构建大小在&lt;b&gt;1.4G&lt;/b&gt;左右)。
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-05.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-05.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-05.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h3 id=&quot;heading-2.1&quot;&gt;导入镜像&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 首先先导出镜像
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;docker save -o webvirtcloud.tar webvirtcloud:test-2&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 上传到绿联Nas，可以同时上传后面创建虚拟机所用的iso文件
       
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-06.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-06.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-06.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 打开绿联Docker，在镜像管理里选择从设备导入镜像
       
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-07.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-07.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-07.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;heading-2.2&quot;&gt;ssh登录&lt;/h3&gt;
&lt;p&gt;
    老传统了，这里就不再过多叙述，具体可看 &lt;del&gt;&lt;a href=&quot;https://honmaple.me/articles/2023/06/绿联DX4600%20Pro禁用迅雷和中国移动云盘进程.html&quot;&gt;绿联DX4600 Pro禁用迅雷和中国移动云盘进程&lt;/a&gt;&lt;/del&gt; &lt;a href=&quot;https://honmaple.me/articles/2023/07/ugreen-nas-open-ssh.html&quot;&gt;绿联云Nas新版本v3.4.0固件开启SSH&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;heading-2.3&quot;&gt;运行Docker&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;docker run --rm -p 8088:80 -p 6080:6080 --device=/dev/kvm --privileged webvirtcloud:test-2&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;8088&lt;/code&gt; 是 &lt;b&gt;retspen/webvirtcloud&lt;/b&gt; 界面端口，启动后可以通过 &lt;code&gt;NasIP:8088&lt;/code&gt; 访问，&lt;code&gt;6080&lt;/code&gt; 是 &lt;b&gt;VNC&lt;/b&gt; 端口，启动虚拟机后可以直接使用浏览器访问
&lt;/p&gt;

&lt;p&gt;
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-08.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-08.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-08.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h3 id=&quot;heading-2.4&quot;&gt;启动libvirtd&lt;/h3&gt;
&lt;p&gt;
    由于我只修改了Dockerfile里的依赖，所以&lt;b&gt;libvirtd&lt;/b&gt;只能手动启动，如果想要自动启动的可以添加启动脚本到 &lt;code&gt;/etc/service&lt;/code&gt; 目录
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 进入&lt;b&gt;Docker内部&lt;/b&gt;：
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;docker exec -it {镜像名} bash&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 修改&lt;b&gt;配置文件&lt;/b&gt;: 使用 vi 打开 &lt;code&gt;/etc/libvirt/libvirtd.conf&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;- unix_sock_group = &amp;#34;libvirt&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;+ unix_sock_group = &amp;#34;www-data&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 启动&lt;b&gt;libvirtd&lt;/b&gt;:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;libvirtd -d&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 启动&lt;b&gt;virtlogd&lt;/b&gt;：
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;virtlogd -d&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;管理界面&lt;/h2&gt;
&lt;p&gt;
   通过 &lt;code&gt;NasIP:8088&lt;/code&gt; 访问管理界面，默认用户名和密码都是 &lt;b&gt;admin&lt;/b&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-09.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-09.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-09.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   登录成功后，点击&lt;b&gt;计算节点 -&amp;gt; 本地&lt;/b&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-10.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-10.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-10.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   然后添加一个&lt;b&gt;本地节点&lt;/b&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-11.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-11.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-11.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   添加后正常情况就会显示&lt;b&gt;已连接&lt;/b&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-12.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-12.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-12.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
   接着继续点击右边的&lt;b&gt;眼睛图案 -&amp;gt; 选择存储 -&amp;gt; 右上角的+号&lt;/b&gt;，添加两个存储
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-13.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-13.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-13.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 test: 路径为 &lt;code&gt;/var/lib/libvirt/images&lt;/code&gt;，用于存放虚拟机文件
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 iso:  路径为 &lt;code&gt;/var/lib/libvirt/iso&lt;/code&gt;，存放iso镜像文件
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
   然后返回绿联Nas的ssh界面，复制iso文件到Docker内部，或者在执行Docker命令时使用 &lt;code&gt;-v /mnt/xxxx/Docker/webvirtcloud/iso:/var/lib/libvirt/iso&lt;/code&gt; 将文件提前挂载到Docker内部
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-14.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-14.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-14.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;h3 id=&quot;heading-3.1&quot;&gt;创建虚拟机&lt;/h3&gt;
&lt;p&gt;
    一切准备就绪，现在我们就能创建虚拟机了。
&lt;/p&gt;

&lt;p&gt;
    选择&lt;b&gt;实例 -&amp;gt; 创建&lt;/b&gt;
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-15.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-15.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-15.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
    点击下一个，注意：&lt;b&gt;webvirtcloud&lt;/b&gt; 这里的操作有些反人类，最好选择&lt;b&gt;规格 -&amp;gt; 应用&lt;/b&gt;，不要使用自定义和模版，否则无法挂载&lt;b&gt;CD-ROM&lt;/b&gt;。我这里选择30G的mini，存储一定要改成 &lt;b&gt;test&lt;/b&gt;，然后创建
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-16.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-16.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-16.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-17.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-17.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-17.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
    点击创建后会到实例页面，先不要启动，到&lt;b&gt;设置 -&amp;gt; 磁盘&lt;/b&gt;挂载想要安装的系统iso文件，然后在旁边的启动顺序里确认&lt;b&gt;启动第一项&lt;/b&gt;是iso所在的磁盘
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-18.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-18.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-18.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-19.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-19.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-19.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-20.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-20.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-20.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
    接着就可以开机了，开机后可以点击&lt;b&gt;访问 -&amp;gt; 控制台&lt;/b&gt;使用VNC打开系统安装界面，安装完成后记得重新调整启动顺序以及卸载iso镜像
    
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-21.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2023/07/DX4600Pro-KVM-21.png-thumb&quot;
         alt=&quot;DX4600Pro-KVM-21.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;p&gt;
    至此，使用第三方Docker搭建的绿联Nas虚拟机管理也就完成了，如果急需使用虚拟机功能，又想保留绿联Nas的系统，随绿联一起“成长”的用户可以利用此功能创建虚拟机，如果不着急的可以等官方的实现
&lt;/p&gt;

&lt;h2 id=&quot;heading-4&quot;&gt;其它&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 没有修改libvirtd里的 &lt;code&gt;unix_sock_group&lt;/code&gt; 配置为 &lt;b&gt;www-data&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;Failed to connect socket to &lt;span style=&quot;color:#e6db74&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/var/run/libvirt/libvirt-sock&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;&lt;/span&gt;: Permission denied&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 Docker内部(不是绿联系统)执行 &lt;code&gt;chmod 666 /dev/kvm&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;libvirt 错误- internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied 2023-07-05T16:17:57.942238Z qemu-system-x86_64: failed to initialize KVM: Permission denied&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 未安装&lt;b&gt;dnsmasq&lt;/b&gt;，如果手动安装，使用 &lt;code&gt;virsh net-start default&lt;/code&gt; 手动启动
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;libbvirt 错误- Requested operation is not valid: network &amp;#39;default&amp;#39; is not active&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 未安装&lt;b&gt;qemu-utils&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;internal error: creation of non-raw file images is not supported without qemu-img.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
   注意：文章中并未修改绿联Nas本身的系统，所有的安装包和修改文件配置都是在Docker内部进行
&lt;/p&gt;</content>
        <category term="Tech/Geek"></category>
    </entry>
</feed>
