<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>StageGuard</title>
  
  <subtitle>🔥BLOG🔥</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://stageguard.top/"/>
  <updated>2020-05-23T16:29:03.912Z</updated>
  <id>https://stageguard.top/</id>
  
  <author>
    <name>StageGuard</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>0202年能在安卓手机上玩QQ机器人吗</title>
    <link href="https://stageguard.top/2020/04/01/run-qqbot-on-termux-android/"/>
    <id>https://stageguard.top/2020/04/01/run-qqbot-on-termux-android/</id>
    <published>2020-04-01T11:42:01.000Z</published>
    <updated>2020-05-23T16:29:03.912Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>此教程将手把手教你怎么在手机qq上跑一个qq机器人</p></blockquote><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>2019年1月1日，腾讯宣布关闭WebQQ服务，很多基于WebQQ的QQ机器人都失效了。似乎QQ机器人的时代结束了…..</p><p>结束了吗？<br></span><span style='color:#ff2e2e;'>没有！</span></p><p>WebQQ没了，我们可以用其他协议啊！<br>据此，CoolQ和Mirai脱颖而出。</p><p>本文将介绍如何用开源库Mirai搭建基于安卓QQ协议的QQ机器人。</p><hr><h1 id="开源库介绍"><a href="#开源库介绍" class="headerlink" title="开源库介绍"></a>开源库介绍</h1><h2 id="Mirai"><a href="#Mirai" class="headerlink" title="Mirai"></a><a href="https://github.com/mamoe/mirai" target="_blank" rel="noopener">Mirai</a></h2><div align="center"><p><img width="160" src="http://img.mamoe.net/2020/02/16/a759783b42f72.png" alt="logo"></br></p><img width="95" src="http://img.mamoe.net/2020/02/16/c4aece361224d.png" alt="title"><p><a href="https://gitter.im/mamoe/mirai?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge" target="_blank" rel="noopener"><img src="/" alt="Gitter" class="lazyload" data-src="https://badges.gitter.im/mamoe/mirai.svg"></a></p><p><img src="/" alt="Gradle CI" class="lazyload" data-src="https://github.com/mamoe/mirai/workflows/Gradle%20CI/badge.svg?branch=master"></p><p><a href="https://bintray.com/him188moe/mirai/mirai-core/" target="_blank" rel="noopener"><img src="/" alt="Download" class="lazyload" data-src="https://api.bintray.com/packages/him188moe/mirai/mirai-core/images/download.svg"></a> </p><p>Mirai 是一个在全平台下运行，提供 QQ Android 和 TIM PC 协议支持的高效率机器人框架</p><p>这个项目的名字来源于</p><p><a href = "http://www.kyotoanimation.co.jp/">京都动画</a>作品<a href = "https://zh.moegirl.org/zh-hans/%E5%A2%83%E7%95%8C%E7%9A%84%E5%BD%BC%E6%96%B9">《境界的彼方》</a>的<a href = "https://zh.moegirl.org/zh-hans/%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5">栗山未来(Kuriyama <b>Mirai</b>)</a></p><p><a href = "https://www.crypton.co.jp/">CRYPTON</a>以<a href = "https://www.crypton.co.jp/miku_eng">初音未来</a>为代表的创作与活动<a href = "https://magicalmirai.com/2019/index_en.html">(Magical <b>Mirai</b>)</a></p>图标以及形象由画师<a href = "">DazeCake</a>绘制</div></br>Mirai使用Kotlin开发，生成的java程序(jar)理论上可以在任何支持java的平台使用。下面来简单了解一下Mirai的结构(部分)...<p><span style='color:#ff2e2e;'>Mirai的核心<a href="https://github.com/mamoe/mirai" target="_blank" rel="noopener"><strong>MiraiCore</strong></a></span>：与腾讯QQ服务器直接对接，处理接收并发送原始消息。</p><p><span style='color:#ff2e2e;'>Mirai的主程序(启动器)<a href="https://github.com/mamoe/mirai-console" target="_blank" rel="noopener"><strong>mirai-console-wrapper</strong></a></span>：启动bot控制台，可以接收与发送消息，同时向外部提供接收与发送消息的接口。</p><p><span style='color:#ff2e2e;'>Mirai插件</span>：基于消息接口为主程序<strong>mirai-console-wrapper</strong>提供各种各样的拓展功能，如天气查询，点歌，涩图等等…</p><p>其中一个插件<strong>mirai-api-http</strong>将消息的接收和发送接口以本地http/websocket服务的方式部署，只需要post/get就能实现消息的接收与发送，这就为使用其他语言开发Mirai功能提供了一个更简单的平台，基于此已有<a href="https://github.com/NatriumLab/python-mirai" target="_blank" rel="noopener"><strong>python-mirai</strong></a>，<a href="https://github.com/RedBeanN/node-mirai" target="_blank" rel="noopener"><strong>nodejs-mirai</strong></a>和<a href="https://github.com/Logiase/gomirai" target="_blank" rel="noopener"><strong>gomirai</strong></a>三种非Kotlin/Java语言的SDK，以及接下来这个教程使用的RhinoJS也属于一种SDK。</p><p>Mirai也可以通过<a href="https://github.com/iTXTech/mirai-native" target="_blank" rel="noopener"><strong>mirai-native</strong></a>插件实现与CoolQ插件的对接。</p><p><img src="/" alt="Mirai详细结构图" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-qqbot-android/img1.jpeg"></p><hr><h2 id="Mozilla-Rhino-JavaScript-in-Java"><a href="#Mozilla-Rhino-JavaScript-in-Java" class="headerlink" title="Mozilla Rhino: JavaScript in Java"></a><a href="https://github.com/mozilla/rhino" target="_blank" rel="noopener">Mozilla Rhino</a>: JavaScript in Java</h2><p><img src="/" alt="Rhino" class="lazyload" data-src="https://developer.mozilla.org/@api/deki/files/832/=Rhino.jpg"></p><p>Rhino is an implementation of JavaScript in Java.</p><p>Rhino是一个可以在JavaScript上运行Java程序的库。<br>我们可以通过JavaScript脚本访问mirai http api快速实现mirai功能开发。<span style='color:#3e3e3e;'><br><del>既然rhino能运行Java程序那为什么不直接使用mirai的java库而使用http api呢，因为我不会！(后续我会研究把rhino也做成mirai插件)</del></span></p><hr><h2 id="mirai-rhinojs-sdk"><a href="#mirai-rhinojs-sdk" class="headerlink" title="mirai-rhinojs-sdk:"></a><a href="https://github.com/StageGuard/mirai-rhinojs-sdk" target="_blank" rel="noopener">mirai-rhinojs-sdk</a>:</h2><p>这是我自己编写&amp;维护的一个小项目，为Mirai API Http提供封装好的适用于Mozilla Rhino的SDK。</p><hr><h1 id="手机跑QQ机器人大概思路"><a href="#手机跑QQ机器人大概思路" class="headerlink" title="手机跑QQ机器人大概思路"></a>手机跑QQ机器人大概思路</h1><p>我们可以使用强大的Termux运行java以运行mirai和rhino。<br>但有个问题是：直接在termux环境运行java是有bug的，该bug导致java无法解析域名，也就是说mirai的自动更新和post/get httpapi会报错！<br>既然Termux环境不行，那就用proot模拟一个其他linux的环境！</p><p><span style='color:#ff2e2e;'>所以，本教程大概思路如下：①配置mirai&amp;rhino运行环境(proot linux和java等) → ②配置开发环境(link文件等) → ③提供一些参考文档</span></p><p>闲言少述，现在开始！</p><hr><h1 id="详细过程"><a href="#详细过程" class="headerlink" title="详细过程"></a>详细过程</h1><p>你首先需要下载万能的<a href="https://stageguard.github.io/2019/07/30/run-gogs-on-android/#%E2%91%A0-Termux" target="_blank" rel="noopener">Termux</a>，这是一切的开端。</p><h2 id="①配置mirai-amp-rhino运行环境"><a href="#①配置mirai-amp-rhino运行环境" class="headerlink" title="①配置mirai&amp;rhino运行环境"></a>①配置mirai&amp;rhino运行环境</h2><h3 id="安装proot-linux"><a href="#安装proot-linux" class="headerlink" title="安装proot linux"></a>安装proot linux</h3><blockquote><p>如果你提前已安装任意一proot linux发行版，可以跳过这一步。<br><span style='color:#ff2e2e;'>请不要使用<code>zsh</code>终端。</span></p></blockquote><p>在Termux终端运行以下代码以更新软件包至最新并安装<code>wget</code>和<code>proot</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line">apt install wget proot -y</span><br></pre></td></tr></table></figure><p>授予Termux存储空间访问权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">termux-setup-storage</span><br></pre></td></tr></table></figure><p>你可以在外部存储空间创建一个文件夹，该文件夹存放你的mirai bot源码(js)，然后将其链接至termux：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ln -s /storage/emulated/0/QBotSourceCode ~/QBotSourceCode</span><br></pre></td></tr></table></figure><p>下载一个linux rootfs，这里我用<code>ubuntu/bionic</code>作为示范：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ubuntu/bionic/arm64/default/20200331_07%3A53/rootfs.tar.xz -O ~/ubuntu.tar.xz</span><br></pre></td></tr></table></figure><p>创建一个文件夹并将rootfs解压进去：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">mkdir ubuntu</span><br><span class="line">mv ubuntu.tar.xz ubuntu/</span><br><span class="line"><span class="built_in">cd</span> ubuntu</span><br><span class="line"><span class="comment">#解压</span></span><br><span class="line">xz -d ubuntu.tar.xz</span><br><span class="line">tar -xvf ubuntu.tar</span><br><span class="line"><span class="comment">#删除压缩包</span></span><br><span class="line">rm ubuntu.tar</span><br><span class="line"><span class="built_in">cd</span> ~</span><br></pre></td></tr></table></figure><p>创建一个proot启动脚本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">touch startubuntu.sh</span><br><span class="line"><span class="built_in">echo</span> -e <span class="string">"#! /bin/bash\nunset LD_PRELOAD\nproot --link2symlink -S ubuntu -b /sys -b /dev -b /proc -b ~/QBotSourceCode -w /root /usr/bin/env -i HOME=/root LANG=C.UTF-8 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin TERM=xterm-256color /bin/bash --login"</span> &gt; ~/startubuntu.sh</span><br><span class="line">chmod +x startubuntu.sh</span><br></pre></td></tr></table></figure><blockquote><p>注意脚本中的<code>-S ubuntu</code>和<code>-b ~/QBotSourceCode</code>，这两个目录分别为<span style='color:#ff2e2e;'>linux proot根目录</span>和<span style='color:#ff2e2e;'>上面链接到termux内部的源码目录</span>，如果你用了其他名称请别忘了改这里的目录！</p></blockquote><p>启动proot linux：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./startubuntu.sh</span><br></pre></td></tr></table></figure><p>出现了新的bash即为成功运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">u0_a207@localhost ~&gt; chmod +x startubuntu.sh</span><br><span class="line">u0_a207@localhost ~&gt; ./startubuntu.sh</span><br><span class="line">groups: cannot find name <span class="keyword">for</span> group ID 3003</span><br><span class="line">groups: cannot find name <span class="keyword">for</span> group ID 9997</span><br><span class="line">groups: cannot find name <span class="keyword">for</span> group ID 20207</span><br><span class="line">groups: cannot find name <span class="keyword">for</span> group ID 50207</span><br><span class="line">root@localhost:~<span class="comment">#</span></span><br></pre></td></tr></table></figure><p><img src="/" alt="proot linux" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-qqbot-android/img2.png"></p><blockquote><p>接下来的操作都将在proot linux里进行，如果你退出了proot linux，下次再启动<code>startubuntu.sh</code>脚本即可。</p></blockquote><h3 id="配置java环境和mirai-amp-rhino环境"><a href="#配置java环境和mirai-amp-rhino环境" class="headerlink" title="配置java环境和mirai&amp;rhino环境"></a>配置java环境和mirai&amp;rhino环境</h3><p>这样在外部对应文件夹里创建文件就也会”同步到<code>source</code>文件夹了”</p><blockquote><p>请将链接文件夹名称设为<code>source</code>。</p></blockquote><p>在proot linux中运行以下代码以配置一下dns并更新软件包至最新并安装<code>java jdk 11</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">rm /etc/resolv.conf</span><br><span class="line">touch /etc/resolv.conf</span><br><span class="line"><span class="built_in">echo</span> -e <span class="string">"nameserver 8.8.8.8\nnameserver 8.8.4.4"</span> &gt; /etc/resolv.conf</span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line">apt install openjdk-11-jdk vim wget -y</span><br></pre></td></tr></table></figure><p>下载mirai-console-wrapper，mirai-api-http和rhino：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/mamoe/mirai-console-wrapper/releases/download/1.2.0/mirai-console-wrapper-1.2.0-all.jar -Omirai-console.jar</span><br><span class="line"><span class="comment">#创建插件文件夹</span></span><br><span class="line">mkdir plugins &amp;&amp; <span class="built_in">cd</span> plugins</span><br><span class="line">wget https://github.com/mamoe/mirai-api-http/releases/download/v1.7.0/mirai-api-http-v1.7.0.jar -Omirai-api-http-v1.7.0.jar</span><br><span class="line"><span class="comment">#创建mirai http api配置文件</span></span><br><span class="line">mkdir MiraiAPIHTTP</span><br><span class="line">touch MiraiAPIHTTP/setting.yml</span><br><span class="line"><span class="comment">#写入配置</span></span><br><span class="line"><span class="built_in">echo</span> -e <span class="string">"port: 8080\nauthKey: stageguard"</span> &gt; MiraiAPIHTTP/setting.yml</span><br><span class="line"><span class="built_in">cd</span> ..</span><br><span class="line"><span class="comment">#下载Rhino</span></span><br><span class="line">wget https://github.com/mozilla/rhino/releases/download/Rhino1_7_12_Release/rhino-1.7.12.jar -Orhino.jar</span><br></pre></td></tr></table></figure><blockquote><p>注意最后一行中的<code>port</code>和<code>authKey</code>，它们分别指定了<span style='color:#ff2e2e;'>http api服务运行端口</span>和<span style='color:#ff2e2e;'>验证密钥</span>，如需要更改请自行更改。<br/><span style='color:#ff2e2e;'>目前Mirai处于开发期，更新频率较快，如果有奇奇怪怪的bug请检查mirai-console-wrapper和mirai-api-http是否有更新。<br/>若更新也不能解决bug，请前往对应项目提交issue</span>。</p></blockquote><p>启动mirai-console-wrapper：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -jar mirai-console.jar</span><br></pre></td></tr></table></figure><p>首次启动会让你选择版本，我们选择<code>pure</code>版。<br>选择后会下载mirai core，只需要等待即可。<br><img src="/" alt="mirai console启动成功" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-qqbot-android/img3.png"></p><blockquote><p>注：若选错版本，请删除<code>content</code>文件夹后再重新启动。<br>若出现<code>Connection closed by peer</code>错误，请多试几次。</p></blockquote><p>这样我们就成功启动了mirai console了。<br>输入<code>/login qq号 qq密码</code>登录一个机器人。</p><p><img width="300" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-qqbot-android/img4.png"></br><br>登录成功，已经可以看到发送的消息了。</p><p><span style='color:#ff2e2e;'>至此，环境配置告一段落，接下来的内容你得会点儿JavaScript才能看得懂。</br>如果不懂JavaScript，你可以照葫芦画瓢。</span></p><hr><h1 id="编写定制化bot功能"><a href="#编写定制化bot功能" class="headerlink" title="编写定制化bot功能"></a>编写定制化bot功能</h1><blockquote><p>上一个proot linux会话窗口保留挂mirai console，用<code>startubuntu.sh</code>脚本新开一个proot linux。</p></blockquote><h2 id="新建一个js脚本，复制以下内容"><a href="#新建一个js脚本，复制以下内容" class="headerlink" title="新建一个js脚本，复制以下内容"></a>新建一个js脚本，复制以下内容</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//导入MiraiQQBot库</span></span><br><span class="line">(<span class="function"><span class="keyword">function</span>(<span class="params">http_get</span>) </span>&#123;</span><br><span class="line">  <span class="built_in">eval</span>(http_get(<span class="string">"https://raw.githubusercontent.com/StageGuard/mirai-rhinojs-sdk/master/source/wrapper.js"</span>));</span><br><span class="line">&#125;(<span class="function">(<span class="params">url</span>) =&gt;</span> &#123;</span><br><span class="line">  <span class="keyword">var</span> connection = (<span class="keyword">new</span> java.net.URL(url)).openConnection(), bufferedReader, line, result = <span class="string">""</span>;</span><br><span class="line">  connection.setDoInput(<span class="literal">true</span>);</span><br><span class="line">  <span class="keyword">var</span> bufferedReader = <span class="keyword">new</span> java.io.BufferedReader(<span class="keyword">new</span> java.io.InputStreamReader(connection.getInputStream()));</span><br><span class="line">  <span class="keyword">while</span> ((line = bufferedReader.readLine()) != <span class="literal">null</span>) result += (line + <span class="string">"\n"</span>);</span><br><span class="line">  bufferedReader.close(); <span class="keyword">return</span> result;</span><br><span class="line">&#125;));</span><br><span class="line"><span class="comment">//注册一些常量对象到全局对象</span></span><br><span class="line">Mirai.registerClasses2Object(scope);</span><br><span class="line"><span class="comment">//http api服务器地址</span></span><br><span class="line">Mirai.setServer(<span class="string">"http://localhost:8080/"</span>);</span><br><span class="line"><span class="comment">//验证密钥</span></span><br><span class="line">Mirai.setAuthKey(<span class="string">"stageguard"</span>);</span><br><span class="line"><span class="comment">//创建新的bot</span></span><br><span class="line"><span class="keyword">var</span> bot = Mirai.createNewBot(你的bot qq号);</span><br><span class="line"></span><br><span class="line"><span class="comment">//订阅bot消息</span></span><br><span class="line">bot.subscribe(&#123;</span><br><span class="line">  <span class="comment">//订阅群组消息</span></span><br><span class="line">  group: <span class="function">(<span class="params">group, sender, message</span>) =&gt;</span> &#123;</span><br><span class="line">    group.send(message);</span><br><span class="line">  &#125;,</span><br><span class="line">  friend: <span class="function">(<span class="params">sender, message</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">if</span>(message.get(POKE).getName() == SIXSIXSIX) &#123;</span><br><span class="line">      sender.send(Poke(LIKE));</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;,</span><br><span class="line"> &#125;);</span><br></pre></td></tr></table></figure><h2 id="运行脚本"><a href="#运行脚本" class="headerlink" title="运行脚本"></a>运行脚本</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -jar rhino.js -f 脚本名称.js</span><br></pre></td></tr></table></figure><p>出现以下日志，即为运行成功</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Bot xxxxxxxxxx created.</span><br><span class="line">Verification thread started for xxxxxxxxxx.</span><br><span class="line">Message subscription thread started for xxxxxxxxxx.</span><br><span class="line">Session is verified: xxxx</span><br></pre></td></tr></table></figure><p>现在，你的bot就是复读机了(</p><p>尝试对你的BOT发送戳一戳中的666。</p><p><img src="/" alt="Poke消息" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/mirai-rhinojs-sdk/static/poke.png"></p><p>这仅仅是基本功能，更多sdk方法请看<a href="https://stageguard.top/p/mirai-rhinojs-sdk.html">SDK文档</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;blockquote&gt;
&lt;p&gt;此教程将手把手教你怎么在手机qq上跑一个qq机器人&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;2019年1月1日，
      
    
    </summary>
    
    
    
      <category term="qqbot" scheme="https://stageguard.top/tags/qqbot/"/>
    
      <category term="termux" scheme="https://stageguard.top/tags/termux/"/>
    
  </entry>
  
  <entry>
    <title>《Sky光·遇》(Android版) 安装教程</title>
    <link href="https://stageguard.top/2020/03/03/sky_installation_tutorial/"/>
    <id>https://stageguard.top/2020/03/03/sky_installation_tutorial/</id>
    <published>2020-03-03T14:44:10.000Z</published>
    <updated>2020-03-26T13:12:24.488Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>此教程将提供几种不同方式的《Sky光·遇》(Android版)安装教程。</br>此教程仅在群内公开过，相关资源文件都在群内。若您从其他地方得知此教程，欢迎<a href="https://jq.qq.com/?_wv=1027&k=5oDqJGe" target="_blank" rel="noopener">加群(1073603175)</a>获取资源。</p></blockquote><h1 id="目录-Catalog"><a href="#目录-Catalog" class="headerlink" title="目录(Catalog)"></a>目录(Catalog)</h1><ul><li><a href="https://stageguard.top/p/sky_installation_tutorial.html#%E9%80%9A%E8%BF%87Play%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85">通过Play商店安装</a></li><li><a href="https://stageguard.top/p/sky_installation_tutorial.html#%E9%80%9A%E8%BF%87%E6%B8%B8%E6%88%8F%E5%AE%89%E8%A3%85%E5%8C%85%E7%9B%B4%E6%8E%A5%E5%AE%89%E8%A3%85">通过游戏安装包直接安装</a></li><li><a href="https://stageguard.top/p/sky_installation_tutorial.html#%E9%80%9A%E8%BF%87%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E5%AE%89%E8%A3%85">通过第三方应用安装</a></li></ul><blockquote><p>该游戏对Android的版本要求在<strong>8.0(Oreo)</strong>及以上，如果您的设备未达到要求，那就洗洗睡吧。</p></blockquote><hr><h1 id="通过Play商店安装"><a href="#通过Play商店安装" class="headerlink" title="通过Play商店安装"></a>通过Play商店安装</h1><blockquote><p>此操作有一定困难性，如果不愿意折腾请用后两种方法。</br>安装前请确保有日本或新加坡地区的VPN。</p></blockquote><h2 id="①-通过SafetyNet检验"><a href="#①-通过SafetyNet检验" class="headerlink" title="① 通过SafetyNet检验"></a>① 通过SafetyNet检验</h2><p>谷歌有一套自己的检测方式来检测设备是否”安全”，若设备无法通过检验，Google就会对您的Play商店做出限制(如无法搜到一些应用，《Sky光·遇》在内)</p><h3 id="如何查看是否通过了检验？"><a href="#如何查看是否通过了检验？" class="headerlink" title="如何查看是否通过了检验？"></a>如何查看是否通过了检验？</h3><p><a href="https://github.com/topjohnwu/Magisk" target="_blank" rel="noopener">Magisk Manager</a>中的”SafetyNet检验”功能查看。<br>项目<code>ctsProfile</code>和<code>basicIntegrity</code>都通过才能称为通过SafetyNet检验。</p><img align="center" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/magisk.jpg" height="350"><p>您也可以在Play商店的设置中查看。</p><img align="center" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/play_settings.jpg" height="350"><h3 id="未通过检验怎么办？"><a href="#未通过检验怎么办？" class="headerlink" title="未通过检验怎么办？"></a>未通过检验怎么办？</h3><img align="center" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/failed.jpg" height="200"><p><span style='color:#ff0000;'>●如果您的设备<strong>未获取</strong>root权限</span></p><p>这是由于该设备的Widevine安全级别被Google认定为L3，无法解决，请移步<a href="https://stageguard.top/p/sky_installation_tutorial.html#%E9%80%9A%E8%BF%87%E6%B8%B8%E6%88%8F%E5%AE%89%E8%A3%85%E5%8C%85%E7%9B%B4%E6%8E%A5%E5%AE%89%E8%A3%85">通过游戏安装包直接安装</a>。</p><p><span style='color:#ff0000;'>●如果您的设备<strong>已获取</strong>root权限</span></p><p>即使Widevine安全级别为L3，也可以通过Magisk模块欺骗Play服务通过检验。请按照以下步骤进行：</p><p>①下载并通过recovery刷入<a href="https://github.com/topjohnwu/Magisk" target="_blank" rel="noopener">Magisk</a>。</p><blockquote><p>详细教程不在教程范围内，请移步酷安。</p></blockquote><p>②在Magisk Manager的模块仓库搜索并刷入SafetyPatch。</p><p><img src="/" alt="搜索结果" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/safetypatch.jpg"><br><img src="/" alt="刷入成功" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/flash_done.jpg"></p><blockquote><p><span style='color:#ff0000;'>❗<strong>注：MIUI可能会卡米，请谨慎操作。</strong></span></br>若您安装了<strong>MagiskHide Props Config</strong>模块，由于功能与SafetyPatch重叠，请先禁用或删除。</p></blockquote><p>③清除”<strong>Google Play服务</strong>“和”<strong>Google Play商店</strong>“的应用数据。</p><p>④如果您安装了EdXposed Framework，请移除EdXposed的Magisk模块。</p><p>⑤重启设备(如果您进行了第④步，请继续往下进行，否则结束)。</p><p>⑥在EdXposed Manager的设置中开启<code>应用名单模式</code>和<code>通过SafetyNet校验</code>。</p><p><img src="/" alt="应用名单模式" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/edxp_applist.jpg"><br><img src="/" alt="通过SafetyNet校验" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/edxp_safetynet.jpg"></p><p>⑥重新刷入EdXposed并重启设备。</p><blockquote><p>为了保险你也可以等一切操作结束后再刷入EdXposed。</p></blockquote><p>按照以上步骤操作后，您可以再次查看SafetyNet检验，这时应该就可以通过了。</p><h2 id="②-添加-更改日区地址"><a href="#②-添加-更改日区地址" class="headerlink" title="② 添加/更改日区地址"></a>② 添加/更改日区地址</h2><blockquote><p>如果您已设置请忽略这一步</p></blockquote><p>①登录<a href="https://payments.google.com" target="_blank" rel="noopener">https://payments.google.com</a>，左上角打开Drawer。</p><img align="center" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/payment_drawer.jpg" height="350"><p>②依次点击 地址 → 添加新地址。</p><p>③国家选择日本，邮编等信息请自行百度。</p><p>④保存。</p><p>⑤如怕不保险请关闭其他地区的付款资料。</p><h2 id="如果不出意外的话，现在进入Play商店搜索sky光遇，就能看到并且可以下载了。"><a href="#如果不出意外的话，现在进入Play商店搜索sky光遇，就能看到并且可以下载了。" class="headerlink" title="如果不出意外的话，现在进入Play商店搜索sky光遇，就能看到并且可以下载了。"></a>如果不出意外的话，现在进入Play商店搜索sky光遇，就能看到并且可以下载了。</h2><img align="center" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/search.jpg" height="350"><blockquote><p>如果您有登录并同步的需求，则还需要下载”<strong>Google Play游戏</strong>“应用。</p></blockquote><hr><h1 id="通过游戏安装包直接安装"><a href="#通过游戏安装包直接安装" class="headerlink" title="通过游戏安装包直接安装"></a>通过游戏安装包直接安装</h1><h2 id="使用SAI安装"><a href="#使用SAI安装" class="headerlink" title="使用SAI安装"></a>使用SAI安装</h2><blockquote><p>MIUI用户请先在开发者选项里关闭MIUI优化。</p></blockquote><p>①在群文件下载apks格式的《Sky光·遇》安装包，和SAI(<a href="https://www.coolapk.com/apk/com.aefyr.sai" target="_blank" rel="noopener">在酷安查看</a>)。</p><p>②打开SAI，找到apks安装包，选择安装即可。</p><p>③安装完成后就可以卸载SAI了。</p><blockquote><p>这种方式的安装无法及时收到应用更新，需要经常查看是否有新版本的安装包(每次更新我都会提供在群里)。</p></blockquote><h2 id="如果您遇到卡在Installing不动的情况，您可以换一种方式："><a href="#如果您遇到卡在Installing不动的情况，您可以换一种方式：" class="headerlink" title="如果您遇到卡在Installing不动的情况，您可以换一种方式："></a>如果您遇到卡在Installing不动的情况，您可以换一种方式：</h2><p>①下载MT管理器(<a href="https://www.coolapk.com/apk/bin.mt.plus" target="_blank" rel="noopener">在酷安查看</a>)</p><p>②找到apks安装包，选择转化apk。</p><p><img src="/" alt="MT管理器转化apk" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/mt_transfer.jpg"></p><p>③稍等片刻，转化完成后直接安装即可。</p><hr><h1 id="通过第三方应用安装"><a href="#通过第三方应用安装" class="headerlink" title="通过第三方应用安装"></a>通过第三方应用安装</h1><p>您可以通过<a href="https://www.coolapk.com/apk/com.gh.gamecenter" target="_blank" rel="noopener">光环助手</a>，<a href="https://m.biubiu001.com/" target="_blank" rel="noopener">biubiu加速器</a>或<a href="https://uu.163.com/" target="_blank" rel="noopener">网易UU加速器</a>安装，请确保安装的是”完整版”。</p><hr><p>欢迎加群来玩儿~</p><img align="center" src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/sky-installation/qrcode.jpg" height="200">]]></content>
    
    <summary type="html">
    
      
      
        &lt;blockquote&gt;
&lt;p&gt;此教程将提供几种不同方式的《Sky光·遇》(Android版)安装教程。&lt;/br&gt;此教程仅在群内公开过，相关资源文件都在群内。若您从其他地方得知此教程，欢迎&lt;a href=&quot;https://jq.qq.com/?_wv=1027&amp;k=5oDqJGe
      
    
    </summary>
    
    
    
      <category term="sky" scheme="https://stageguard.top/tags/sky/"/>
    
  </entry>
  
  <entry>
    <title>解析从网易云音乐下载的歌曲的注释(comment)</title>
    <link href="https://stageguard.top/2019/10/27/analyze-163-music-key/"/>
    <id>https://stageguard.top/2019/10/27/analyze-163-music-key/</id>
    <published>2019-10-27T04:02:15.000Z</published>
    <updated>2020-02-05T14:42:24.441Z</updated>
    
    <content type="html"><![CDATA[<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=28941711&auto=1&height=66"></iframe><h1 id="注释在哪？"><a href="#注释在哪？" class="headerlink" title="注释在哪？"></a>注释在哪？</h1><p><strong>一般都在歌曲信息中的<code>Comment</code>tag里</strong></p><p><img src="/" alt="歌曲信息" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/analyze-163-key-img/img1.jpg"></p><p><code>163 key(Don&#39;t modify):cEgtqHxwpdRKcBCRPBlPktlHhmrTcizixpMvRszN1/sZ0gy+N274P2oM4whlpjf68/CYfBUMSElfSAgEmYkCQmlEYxdk+sa5nTNnLYD4I/bhISnv3oWNkuPcFHCrKpXn5bK99KPYVBa9GWHSdIQ9iAPk3OvoJgDi7ZOaIGL0HRoavADBJTVIaucFJJpEKEgFJSTKOS/rPJCugJZfDvu1HMx7aZY51kPCnSYf6eZu+zAEJrClm8yr8qsRUQSHV4i04gSqSgkVsi6l2rehn+71/HceHpuFZ+5Hxe8tYopPGnoU0+3JCKdgVMytrPGmXQCmrJYjp67MD6hT+yYmNq2t0FIbJuHl/wFSUgiICpV2L8WqQ9gynXkcD2TIMVFGsq5HsOzGe/XsriuT50Hhsc25M8BsOle3HohsQ4/ck4CmWpKJ/RXhbEbR3JdJD7FgjurJ/7qGh/cjJal34h7VbXiuB9P9ZQs2+5ivQ6ce7hKSKxQ=</code></p><p><strong>格式是：<code>163 key(Don&#39;t modify):</code> + 加密代码</strong></p><h2 id="有什么用？"><a href="#有什么用？" class="headerlink" title="有什么用？"></a>有什么用？</h2><p>网易云音乐会根据comment信息将歌曲文件与其服务器资源匹配，要不然你以为你播放的从网易云音乐下载的本地音乐是怎么有歌词的(解析comment获取歌曲信息后拉取本地缓存或服务器资源)</p><h1 id="解密过程"><a href="#解密过程" class="headerlink" title="解密过程"></a>解密过程</h1><h2 id="AES解密"><a href="#AES解密" class="headerlink" title="AES解密"></a>AES解密</h2><p><strong>Text</strong> : <code>163 key(Don&#39;t modify)</code>后面的所有字符串<br><strong>Format</strong> : Base64<br><strong>Mode</strong> : ECB<br><strong>Key Size</strong> : <code>128</code><br><strong>Serect Key</strong> : <code>#14ljk_!\]&amp;0U&lt;&#39;(</code></p><h3 id="结果："><a href="#结果：" class="headerlink" title="结果："></a>结果：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cEgtqHxwpdRKcBCRPBlPktlHhmrTcizixpMvRszN1&#x2F;sZ0gy+N274P2oM4whlpjf68&#x2F;CYfBUMSElfSAgEmYkCQmlEYxdk+sa5nTNnLYD4I&#x2F;bhISnv3oWNkuPcFHCrKpXn5bK99KPYVBa9GWHSdIQ9iAPk3OvoJgDi7ZOaIGL0HRoavADBJTVIaucFJJpEKEgFJSTKOS&#x2F;rPJCugJZfDvu1HMx7aZY51kPCnSYf6eZu+zAEJrClm8yr8qsRUQSHV4i04gSqSgkVsi6l2rehn+71&#x2F;HceHpuFZ+5Hxe8tYopPGnoU0+3JCKdgVMytrPGmXQCmrJYjp67MD6hT+yYmNq2t0FIbJuHl&#x2F;wFSUgiICpV2L8WqQ9gynXkcD2TIMVFGsq5HsOzGe&#x2F;XsriuT50Hhsc25M8BsOle3HohsQ4&#x2F;ck4CmWpKJ&#x2F;RXhbEbR3JdJD7FgjurJ&#x2F;7qGh&#x2F;cjJal34h7VbXiuB9P9ZQs2+5ivQ6ce7hKSKxQ&#x3D;</span><br></pre></td></tr></table></figure><p>↓</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bXVzaWM6eyJmb3JtYXQiOiJmbGFjIiwibXVzaWNJZCI6Mjg5NDE3MTEsIm11c2ljTmFtZSI6ImRyb3AgcG9wIGNhbmR5IiwiYXJ0aXN0IjpbWyLjgozjgpLjgosiLDk5MDI4OV0sWyLjgq7jgqxQIiw4MDQzNTVdXSwiYWxidW0iOiJObyB0aXRsZeKIkiIsImFsYnVtSWQiOjI5NDMzNjMsImFsYnVtUGljRG9jSWQiOjg4OTI4NTAwNDU3OTQ4OTMsImFsYnVtUGljIjoiaHR0cDpcL1wvcDIubXVzaWMuMTI2Lm5ldFwvY1pQeDNwZUdUdVdFSV9HYVpCNUNEZz09XC84ODkyODUwMDQ1Nzk0ODkzLmpwZyIsIm12SWQiOjAsImZsYWciOjAsImJpdHJhdGUiOjExOTM5ODQsImR1cmF0aW9uIjoyMjQ5NzMsImFsaWFzIjpbXSwidHJhbnNOYW1lcyI6W119</span><br></pre></td></tr></table></figure><p><img src="/" alt="AES解密" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/analyze-163-key-img/img2.jpg"></p><h2 id="Base64解密"><a href="#Base64解密" class="headerlink" title="Base64解密"></a>Base64解密</h2><p><strong>Text</strong> : AES解密后的字符串</p><h3 id="结果：-1"><a href="#结果：-1" class="headerlink" title="结果："></a>结果：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bXVzaWM6eyJmb3JtYXQiOiJmbGFjIiwibXVzaWNJZCI6Mjg5NDE3MTEsIm11c2ljTmFtZSI6ImRyb3AgcG9wIGNhbmR5IiwiYXJ0aXN0IjpbWyLjgozjgpLjgosiLDk5MDI4OV0sWyLjgq7jgqxQIiw4MDQzNTVdXSwiYWxidW0iOiJObyB0aXRsZeKIkiIsImFsYnVtSWQiOjI5NDMzNjMsImFsYnVtUGljRG9jSWQiOjg4OTI4NTAwNDU3OTQ4OTMsImFsYnVtUGljIjoiaHR0cDpcL1wvcDIubXVzaWMuMTI2Lm5ldFwvY1pQeDNwZUdUdVdFSV9HYVpCNUNEZz09XC84ODkyODUwMDQ1Nzk0ODkzLmpwZyIsIm12SWQiOjAsImZsYWciOjAsImJpdHJhdGUiOjExOTM5ODQsImR1cmF0aW9uIjoyMjQ5NzMsImFsaWFzIjpbXSwidHJhbnNOYW1lcyI6W119</span><br></pre></td></tr></table></figure><p>↓</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">music: &#123;</span><br><span class="line">"format": "flac",</span><br><span class="line">"musicId": 28941711,</span><br><span class="line">"musicName": "drop pop candy",</span><br><span class="line">"artist": [</span><br><span class="line">["れをる", 990289],</span><br><span class="line">[<span class="string">"ギガP"</span>, <span class="number">804355</span>]</span><br><span class="line">],</span><br><span class="line">"album": "No title−",</span><br><span class="line">"albumId": 2943363,</span><br><span class="line">"albumPicDocId": 8892850045794893,</span><br><span class="line">"albumPic": "http:\/\/p2.music.126.net\/cZPx3peGTuWEI_GaZB5CDg==\/8892850045794893.jpg",</span><br><span class="line">"mvId": 0,</span><br><span class="line">"flag": 0,</span><br><span class="line">"bitrate": 1193984,</span><br><span class="line">"duration": 224973,</span><br><span class="line">"alias": [],</span><br><span class="line">"transNames": []</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="/" alt="AES解密" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/analyze-163-key-img/img3.jpg"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=330 height=86 src=&quot;//music.163.com/outchain/player?type=2&amp;id=2894
      
    
    </summary>
    
    
    
      <category term="netease" scheme="https://stageguard.top/tags/netease/"/>
    
  </entry>
  
  <entry>
    <title>不需要root/μpn进行TerrariaPE多人联机</title>
    <link href="https://stageguard.top/2019/08/29/terrariape-multiplayer-via-frp/"/>
    <id>https://stageguard.top/2019/08/29/terrariape-multiplayer-via-frp/</id>
    <published>2019-08-28T23:59:15.000Z</published>
    <updated>2020-02-15T11:33:27.744Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>此教程将教你如何使用Frp内网穿透进行TerrariaPE互联网联机</br><strong>因为懒，<del>基本全部</del>部分文章引用本博客之前的文章，望悉知</strong></p></blockquote><p><span style='color:#ff0000;'></span></p><h1 id="1-原理"><a href="#1-原理" class="headerlink" title="1. 原理"></a>1. 原理</h1><p>很简单，服务端开启本地多人游戏，再通过内网穿透，别人就可以连接你的本地服务器</p><h2 id="为什么要这么做，frp相比vpn优点在哪？"><a href="#为什么要这么做，frp相比vpn优点在哪？" class="headerlink" title="为什么要这么做，frp相比vpn优点在哪？"></a>为什么要这么做，frp相比vpn优点在哪？</h2><ul><li>操作简单，不需要太多额外软件(只需要1个)</li><li>成本低，不需要购买服务器，有许多免费的frp服务供应商</li><li>frp在电脑上也同样可用，同时电脑上有Terraria服务端，配合frp内网穿透，就可以自己组建小型服务器</li></ul><hr><h1 id="2-准备工作"><a href="#2-准备工作" class="headerlink" title="2. 准备工作"></a>2. 准备工作</h1><h2 id="起码得有点linux基础"><a href="#起码得有点linux基础" class="headerlink" title="起码得有点linux基础"></a>起码得有点linux基础</h2><p>毕竟termux是全linux指令操作，不会点指令是不行的</p><h2 id="Termux"><a href="#Termux" class="headerlink" title="Termux"></a>Termux</h2><h3 id="传送门：准备工作-Termux"><a href="#传送门：准备工作-Termux" class="headerlink" title="传送门：准备工作 Termux"></a>传送门：<a href="https://stageguard.github.io/2019/07/30/run-gogs-on-android/#%E2%91%A0-Termux" target="_blank" rel="noopener">准备工作 Termux</a></h3><p>(引用前文章)</p><blockquote></blockquote><h2 id="Frp二进制程序"><a href="#Frp二进制程序" class="headerlink" title="Frp二进制程序"></a>Frp二进制程序</h2><h3 id="传送门：Frp二进制程序"><a href="#传送门：Frp二进制程序" class="headerlink" title="传送门：Frp二进制程序"></a>传送门：<a href="https://stageguard.github.io/2019/07/30/run-gogs-on-android/#%E2%91%A2-Frp%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%A8%8B%E5%BA%8F-%E5%8F%AF%E9%80%89" target="_blank" rel="noopener">Frp二进制程序</a></h3><p>(引用前文章，建议在termux中使用指令下载)</p><h1 id="操作步骤"><a href="#操作步骤" class="headerlink" title="操作步骤"></a>操作步骤</h1><h3 id="安装nano文本编辑器"><a href="#安装nano文本编辑器" class="headerlink" title="安装nano文本编辑器"></a>安装nano文本编辑器</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install nano -y</span><br></pre></td></tr></table></figure><blockquote><p><span style='color:#ff2e2e;'><strong>如果你是root过的手机，请不要图方便使用用MT管理器等安卓应用编辑termux内部的文件，否则后果不堪设想</strong></span></p></blockquote><h3 id="解压Frp："><a href="#解压Frp：" class="headerlink" title="解压Frp："></a>解压Frp：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#解压缩</span></span><br><span class="line">tar -xvzf frp_0.27.0_linux_arm64.tar.gz</span><br><span class="line"><span class="comment">#更改成好记的文件夹名</span></span><br><span class="line">mv frp_0.27.0_linux_arm64 frp</span><br><span class="line"><span class="comment">#删除压缩包</span></span><br><span class="line">rm frp_0.27.0_linux_arm64.tar.gz</span><br></pre></td></tr></table></figure><p><img src="/" alt="Frp压缩包中的内容" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/trfrppe-img/img1.jpg"></p><h3 id="配置frpc-ini："><a href="#配置frpc-ini：" class="headerlink" title="配置frpc.ini："></a>配置frpc.ini：</h3><p>进入frp文件夹</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> frp</span><br><span class="line">nano frpc.ini</span><br></pre></td></tr></table></figure><p><strong>使用以下模板配置frpc.ini<br>井号一行(蓝色)的字可以不用输入，只是备注作用</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line"><span class="comment">#服务商提供的服务器</span></span><br><span class="line"><span class="comment">#这里我公开一个免费的frp服务商</span></span><br><span class="line"><span class="comment">#请不要过度使用</span></span><br><span class="line">server_addr = frp.lndex.ml</span><br><span class="line"><span class="comment">#服务商提供的端口</span></span><br><span class="line">server_port = 7000</span><br><span class="line"><span class="comment">#服务商提供的连接标识</span></span><br><span class="line">token = frp.lndex.ml</span><br><span class="line">dns_server = 1.1.1.1</span><br><span class="line"></span><br><span class="line"><span class="comment">#随意定义一个新的组</span></span><br><span class="line"><span class="comment">#这里我定义的是stageguard_tr</span></span><br><span class="line"><span class="comment">#注意组名称不能与已存在的组名称重复</span></span><br><span class="line"><span class="comment">#如有疑问，请查询xxx.xxx.xxx:7500查看是否有重复</span></span><br><span class="line">[stageguard_tr]</span><br><span class="line"><span class="comment">#由于tr服务端通过tcp协议开启服务器</span></span><br><span class="line"><span class="comment">#所以这里设置tcp模式</span></span><br><span class="line"><span class="built_in">type</span> = tcp</span><br><span class="line"><span class="comment">#本地IP与端口</span></span><br><span class="line"><span class="comment">#TerrariaPE本地服务器默认端口为7777</span></span><br><span class="line">local_ip = 192.168.1.2</span><br><span class="line">local_port = 7777</span><br><span class="line"><span class="comment">#请使用服务商指定范围内的端口</span></span><br><span class="line"><span class="comment">#此服务商指定的范围为：41001-42000</span></span><br><span class="line">remote_port = 41875</span><br><span class="line"><span class="comment">#这项配置请看下文</span></span><br><span class="line"><span class="comment">#custom_domains =</span></span><br><span class="line">subdomain = stageguard-terraria</span><br></pre></td></tr></table></figure><p><img src="/" alt="frpc.ini配置" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/trfrppe-img/img2.jpg"></p><h3 id="传送门：custom-domains和subdomain配置问题-如果你使用其他frp服务供应商"><a href="#传送门：custom-domains和subdomain配置问题-如果你使用其他frp服务供应商" class="headerlink" title="传送门：custom_domains和subdomain配置问题(如果你使用其他frp服务供应商)"></a>传送门：<a href="https://stageguard.github.io/2019/07/30/run-gogs-on-android/#%E2%91%A1-custom-domains%E5%92%8Csubdomain%E9%85%8D%E7%BD%AE%E9%97%AE%E9%A2%98" target="_blank" rel="noopener"><code>custom_domains</code>和<code>subdomain</code>配置问题(如果你使用其他frp服务供应商)</a></h3><p>编辑完成后依次按：</p><p><code>CTRL</code>(termux上) → <code>X</code> → <code>y</code> → <code>回车</code>(输入法上)</p><h3 id="启动frp-client"><a href="#启动frp-client" class="headerlink" title="启动frp client"></a>启动frp client</h3><p>在termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./frpc -c frpc.ini</span><br></pre></td></tr></table></figure><p><img src="/" alt="frpc启动成功" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/trfrppe-img/img3.jpg"><br>这样就成功穿透了</p><h3 id="启动TerrariaPE，并开启本地服务器"><a href="#启动TerrariaPE，并开启本地服务器" class="headerlink" title="启动TerrariaPE，并开启本地服务器"></a>启动TerrariaPE，并开启本地服务器</h3><p>不用我讲了</p><p>启动完成后其他人就能通过：<br>IP: <code>stageguard-terraria.frp.lndex.ml</code><br>端口: <code>41875</code><br>访问你的本地服务器了！</p><p><img src="/" alt="成功例子" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/trfrppe-img/img4.jpg"></p><h2 id="结束服务"><a href="#结束服务" class="headerlink" title="结束服务"></a>结束服务</h2><p>按<code>CTRL + C</code>即可</p><h2 id="再次启动"><a href="#再次启动" class="headerlink" title="再次启动"></a>再次启动</h2><p>如果你退出termux了，请按照如下指令再次启动frpc</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> frp</span><br><span class="line">./frpc -c frpc.ini</span><br></pre></td></tr></table></figure><hr><h1 id="3-常见问题："><a href="#3-常见问题：" class="headerlink" title="3. 常见问题："></a>3. 常见问题：</h1><h2 id="dial-tcp-lookup-xxx-xxx-xxx-on-1-53-read-udp-1-xxxxx-gt-1-53-read-connection-refused"><a href="#dial-tcp-lookup-xxx-xxx-xxx-on-1-53-read-udp-1-xxxxx-gt-1-53-read-connection-refused" class="headerlink" title="dial tcp: lookup xxx.xxx.xxx on [::1]:53: read udp [::1]:xxxxx-&gt;[::1]:53: read: connection refused"></a>dial tcp: lookup xxx.xxx.xxx on [::1]:53: read udp [::1]:xxxxx-&gt;[::1]:53: read: connection refused</h2><p>解决：dns解析问题，在frpc.ini的common项中添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dns_server &#x3D; 1.1.1.1</span><br></pre></td></tr></table></figure><h2 id="authorization-failed"><a href="#authorization-failed" class="headerlink" title="authorization failed"></a>authorization failed</h2><p>解决：请检查<code>frpc.ini</code>中的<code>token</code>是否正确</p><h2 id="欢迎在评论区补充其他问题"><a href="#欢迎在评论区补充其他问题" class="headerlink" title="欢迎在评论区补充其他问题:)"></a><span style='color:#2e97ff;'><strong>欢迎在评论区补充其他问题:)</strong></span></h2><p>参考资料：</p><p><a href="https://stageguard.github.io/2019/07/30/run-gogs-on-android" target="_blank" rel="noopener">站内run-gogs-on-android</a></p><p><del>要饭！</del></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;blockquote&gt;
&lt;p&gt;此教程将教你如何使用Frp内网穿透进行TerrariaPE互联网联机&lt;/br&gt;&lt;strong&gt;因为懒，&lt;del&gt;基本全部&lt;/del&gt;部分文章引用本博客之前的文章，望悉知&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span sty
      
    
    </summary>
    
    
    
      <category term="frp" scheme="https://stageguard.top/tags/frp/"/>
    
      <category term="terraria" scheme="https://stageguard.top/tags/terraria/"/>
    
  </entry>
  
  <entry>
    <title>Android运行Docker！(Termux + QEMU + linux_alpine, qemu网络映射)</title>
    <link href="https://stageguard.top/2019/08/15/run-docker-on-qemu-alpine/"/>
    <id>https://stageguard.top/2019/08/15/run-docker-on-qemu-alpine/</id>
    <published>2019-08-15T14:26:31.000Z</published>
    <updated>2020-02-26T05:56:18.306Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>此教程将教你如何在Android端搭docker</p></blockquote><h1 id="1-Docker"><a href="#1-Docker" class="headerlink" title="1. Docker"></a>1. Docker</h1><p>Docker是一个开放源代码软件项目，让应用程序部署在软件货柜下的工作可以自动化进行，借此在Linux操作系统上，提供一个额外的软件抽象层，以及操作系统层虚拟化的自动管理机制。</p><p>(来自<a href="https://zh.m.wikipedia.org/wiki/Docker" target="_blank" rel="noopener">https://zh.m.wikipedia.org/wiki/Docker</a>)</p><h3 id="·-为什么在android不能使用docker"><a href="#·-为什么在android不能使用docker" class="headerlink" title="· 为什么在android不能使用docker"></a><strong>· 为什么在android不能使用docker</strong></h3><p>众多厂商阉割掉了cgroup和namespace等docker需要的功能</p><h3 id="·-你为什么还说要在android运行docker，标题党！"><a href="#·-你为什么还说要在android运行docker，标题党！" class="headerlink" title="· 你为什么还说要在android运行docker，标题党！"></a><strong>· 你为什么还说要在android运行docker，标题党！</strong></h3><p>……<br>所以我们这次用QEMU虚拟机模拟x86_64的linux系统</p><h3 id="·-效率怎样"><a href="#·-效率怎样" class="headerlink" title="· 效率怎样"></a><strong>· 效率怎样</strong></h3><p><span style='color:#ff1734;'><strong>非常低</strong></span>，在我骁龙625设备上运行docker指令大概需要15秒才有反应(alpine standard版)</p><h3 id="·-那些有啥用啊"><a href="#·-那些有啥用啊" class="headerlink" title="· 那些有啥用啊"></a><strong>· 那些有啥用啊</strong></h3><p><del>没什么用，就是折腾，看着别人抱怨android不能运行docker而我能运行的感觉很爽，至少能运行</del></p><p> (废话连篇)</p><hr><h1 id="2-准备工作"><a href="#2-准备工作" class="headerlink" title="2. 准备工作"></a>2. 准备工作</h1><h2 id="①-Termux"><a href="#①-Termux" class="headerlink" title="①. Termux"></a>①. Termux</h2><h3 id="请看上一篇文章：准备工作-Termux"><a href="#请看上一篇文章：准备工作-Termux" class="headerlink" title="请看上一篇文章：准备工作 Termux"></a>请看上一篇文章：<a href="https://stageguard.github.io/2019/07/30/run-gogs-on-android/#%E2%91%A0-Termux" target="_blank" rel="noopener">准备工作 Termux</a></h3><h2 id="②-Alpine-Linux系统镜像"><a href="#②-Alpine-Linux系统镜像" class="headerlink" title="②. Alpine Linux系统镜像"></a>②. Alpine Linux系统镜像</h2><h3 id="Small-Simple-Secure"><a href="#Small-Simple-Secure" class="headerlink" title="Small. Simple. Secure."></a><strong>Small. Simple. Secure.</strong></h3><h3 id="Alpine-Linux-is-a-security-oriented-lightweight-Linux-distribution-based-on-musl-libc-and-busybox"><a href="#Alpine-Linux-is-a-security-oriented-lightweight-Linux-distribution-based-on-musl-libc-and-busybox" class="headerlink" title="Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox."></a>Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.</h3><p>(来自<a href="https://alpinelinux.org/" target="_blank" rel="noopener">https://alpinelinux.org/</a>)</p><p>使用Alpine的原因：</p><ul><li>体积占用小，完全安装后的镜像不到1gb</li><li>安装快(废话)</li><li>内存占用小，idle状态仅占用30多MB内存</li></ul><h3 id="传送门："><a href="#传送门：" class="headerlink" title="传送门："></a>传送门：</h3><p>standard-x86_64: <a href="http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-standard-3.10.1-x86_64.iso" target="_blank" rel="noopener">alpine-standard-3.10.1-x86_64.iso(v3.10.1, OfficialSite)</a>，或者在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-standard-3.10.1-x86_64.iso</span><br></pre></td></tr></table></figure><p>virtual-x86_64: <a href="http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso" target="_blank" rel="noopener">alpine-virt-3.10.1-x86_64.iso(v3.10.1, OfficialSite)</a>，或者在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso</span><br></pre></td></tr></table></figure><blockquote><p>官网上写到visual版与standard版相似但对虚拟机有特殊优化。<br>standard版我已测试成功，这次使用visual版。</p></blockquote><h2 id="③-VNC-Viewer-可选"><a href="#③-VNC-Viewer-可选" class="headerlink" title="③. VNC Viewer (可选)"></a>③. VNC Viewer (可选)</h2><p>用来连接qemu虚拟机的”显示器”，还可以连接蓝牙/OTG鼠标和键盘，非常强大</p><blockquote><p>为什么是可选，因为qemu有不输出图像模式(-nographic)，直接在termux控制台输出，不需要”显示器”，但是有可能翻车。</p></blockquote><h3 id="传送门：-1"><a href="#传送门：-1" class="headerlink" title="传送门："></a>传送门：</h3><p><a href="https://play.google.com/store/apps/details?id=com.realvnc.viewer.android" target="_blank" rel="noopener">VNC Viewer(GooglePlay)</a></p><hr><h1 id="3-详细过程"><a href="#3-详细过程" class="headerlink" title="3. 详细过程"></a>3. 详细过程</h1><h2 id="Ⅰ-安装依赖"><a href="#Ⅰ-安装依赖" class="headerlink" title="Ⅰ. 安装依赖"></a>Ⅰ. 安装依赖</h2><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pkg install x11-repo unstable-repo</span><br><span class="line">pkg install qemu-utils qemu-system-x86_64</span><br></pre></td></tr></table></figure><h2 id="Ⅱ-创建虚拟镜像-硬盘"><a href="#Ⅱ-创建虚拟镜像-硬盘" class="headerlink" title="Ⅱ. 创建虚拟镜像(硬盘)"></a>Ⅱ. 创建虚拟镜像(硬盘)</h2><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">qemu-img create -f qcow2 virt-alpine.img 5g</span><br></pre></td></tr></table></figure><p><img src="/" alt="创建镜像" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img1.jpg"></p><blockquote><p>参数中<code>5g</code>代表创建一个最大容量为5g的镜像，可调节，最少2g以保证docker能正常安装。</p></blockquote><h2 id="Ⅲ-启动虚拟机"><a href="#Ⅲ-启动虚拟机" class="headerlink" title="Ⅲ. 启动虚拟机"></a>Ⅲ. 启动虚拟机</h2><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">qemu-system-x86_64 -hda virt-alpine.img -cdrom alpine-virt-3.10.1-x86_64.iso -boot d -m 512 -nographic</span><br></pre></td></tr></table></figure><p>参数解释：</p><ul><li><code>-hda</code> : 启动的虚拟硬盘</li><li><code>-cdrom</code> : 启动的光盘镜像文件(相当于用光盘安装windows)</li><li><code>-boot</code> : 启动槽位，选d <del>(我也不是太清楚)</del></li><li><code>-m</code> : 内存大小，单位mb</li><li><code>-nographic</code> : 无图像模式，直接在控制台输出</li><li><code>--vnc :1</code> : 以vnc为图像模式输出到”显示器”，并占用vnc 1端口</li></ul><blockquote><p>先使用<code>-nographic</code>模式启动，若长时间没出现alpine bootlog这界面，则先按<code>CTRL+X+A</code>结束进程(或用<code>htop</code>杀掉qemu进程)，再用<code>--vnc :1</code> vnc图像模式启动<br><img src="/" alt="alpine bootlog" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img2.jpg"><br><strong>如何连接：</strong></p></blockquote><ol><li>打开VNC Viewer</li><li>点击右下角加号(+)</li><li>Address填<code>localhost:1</code>(<code>--vnc</code>占用的端口)，name随意</li><li>点击CREATE→CONNECT，就可以连接了<br></br>(用VNC Viewer操作可能会麻烦，建议用蓝牙/OTG鼠标键盘)<br><img src="/" alt="用VNC连接qemu&quot;显示器&quot;" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img3.jpg"></li></ol><h2 id="Ⅳ-安装Alpine到虚拟硬盘"><a href="#Ⅳ-安装Alpine到虚拟硬盘" class="headerlink" title="Ⅳ. 安装Alpine到虚拟硬盘"></a>Ⅳ. 安装Alpine到虚拟硬盘</h2><h3 id="·-使用root账户登录："><a href="#·-使用root账户登录：" class="headerlink" title="· 使用root账户登录："></a>· 使用root账户登录：</h3><p><img src="/" alt="登录到alpine" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img4.jpg"></p><h3 id="·-配置网络："><a href="#·-配置网络：" class="headerlink" title="· 配置网络："></a>· 配置网络：</h3><p>在alpine中，使用vi编辑器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/network/interfaces</span><br></pre></td></tr></table></figure><p>添加如下配置</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">auto lo</span><br><span class="line">iface lo inet loopback</span><br><span class="line">auto eth0</span><br><span class="line">iface eth0 inet dhcp</span><br></pre></td></tr></table></figure><p>保存后重启网络：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/etc/init.d/networking restart</span><br></pre></td></tr></table></figure><p><img src="/" alt="网络重启成功" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img5.jpg"><br>这样alpine就能访问互联网了</p><h3 id="·-设置软件源："><a href="#·-设置软件源：" class="headerlink" title="· 设置软件源："></a>· 设置软件源：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">setup-alpine</span><br></pre></td></tr></table></figure><p>选择21(清华大学源)，等待更新即可</p><h3 id="·-安装："><a href="#·-安装：" class="headerlink" title="· 安装："></a>· <span style='color:#ff1734;'>安装：</span></h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">setup-alpine</span><br></pre></td></tr></table></figure><p><strong>详细配置：</strong></p><ol><li><code>Select keyboard layout: cn</code> (选择CN键盘布局)</li><li><code>Select variant</code> (cn)</li><li><code>Enter system hostname: stageguard</code> (输入hostname名称，随意)</li><li><code>Which one do you want to initialize? (or &#39;?&#39; or &#39;done&#39;) [eth0]</code></li><li><code>Ip address for eth0? (or &#39;dhcp&#39;, &#39;none&#39;, &#39;?&#39;) [10.0.2.15] dhcp</code> (选dhcp)</li><li><code>Changing password for root</code> (修改root用户密码)</li><li><code>Which timezone are you in? (&#39;?&#39; for list) [UTC] Asia/Shanghai</code> (时区填Asia/Shanghai)</li><li><code>HTTP/FTP proxy URL? (e.g. &#39;http://proxy:8080&#39;, or &#39;none&#39;) [none]</code> (代理地址，默认none)</li><li><code>Enter mirror number (1-47) or URL to add (or r/f/e/done) [f]: 21</code> (选择软件源，21(清华源))</li><li><code>Which SSH server? (&#39;openssh&#39;, &#39;dropbear&#39; or &#39;none&#39;) [openssh]</code> (SSH服务器，选择openssh(默认))</li><li><span style='color:#ff0040;'><code>Which disk(s) would you like to use? (or &#39;?&#39; for help or &#39;none&#39;) [none]sda</code> (安装在何处，选sda)</span></li><li><span style='color:#ff0040;'><code>How would you like to use it? (&#39;sys&#39;, &#39;data&#39;, &#39;lvm&#39; or &#39;?&#39; for help) [?] sys</code> (安装方式，选sys)</span></li><li><code>WARNING: Erase the above disk(s) and continue? [y/N]: y</code> (清除整个硬盘，y(是))</li></ol><blockquote><p>若出现网络问题：<br> <img src="/" alt="网络问题" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img6.jpg"><br>应该是默认dns服务器异常。<br>编辑<code>/etc/resolv.conf</code><br>将<code>10.0.2.3</code>改为<code>8.8.8.8</code>即可</br><code>bashvi /etc/resolv.conf</code></p></blockquote><p><code>Installing system on /dev/sda3:</code><br><code>initramfs: creating /boot/it.....</code><br><code>Installation is complete. Please reboot.</code></p><p>安装完成，现在关闭虚拟机</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poweroff</span><br></pre></td></tr></table></figure><h2 id="Ⅴ-启动Alpine并安装docker"><a href="#Ⅴ-启动Alpine并安装docker" class="headerlink" title="Ⅴ. 启动Alpine并安装docker"></a>Ⅴ. 启动Alpine并安装docker</h2><h3 id="·-启动qemu虚拟机"><a href="#·-启动qemu虚拟机" class="headerlink" title="· 启动qemu虚拟机"></a>· 启动qemu虚拟机</h3><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">qemu-system-x86_64 -hda virt-alpine.img -boot c -m 512 -netdev user,id=nde1,hostfwd=tcp::2222-:22 -device e1000,netdev=nde1,id=d-net1 -nographic</span><br></pre></td></tr></table></figure><p>参数解释：</p><ul><li><code>-hda</code> : 启动的虚拟硬盘</li><li><code>-boot</code> : 启动槽位，选c <del>(我也不是太清楚)</del></li><li><code>-m</code> : 内存大小，单位mb</li><li><code>-netdev</code> : 网络配置，详情请看<a href="https://wiki.qemu.org/Documentation/Networking" target="_blank" rel="noopener">QEMU_Wiki:Documentation/Networking</a></li><li><code>-device</code> : 设备配置(当前指向网络设备)</li><li><code>-nographic</code> : 无图像模式，直接在控制台输出</li><li><code>--vnc :1</code> : 以vnc为图像模式输出到”显示器”，并占用vnc 1端口</li></ul><blockquote><p><code>-netdev</code>参数中的<code>hostfwd</code>可以映射网络，当前配置会将虚拟机中22(SSH默认)端口映射到物理网络的2222端口上。</p></blockquote><h3 id="·-配置SSHD-可选"><a href="#·-配置SSHD-可选" class="headerlink" title="· 配置SSHD(可选)"></a>· 配置SSHD(可选)</h3><p>在Alpine中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p>取消注释PermitRootLogin并修改为yes<br> <img src="/" alt="修改sshd_config" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img7.jpg"><br>重启sshd</p><p>现在外部ssh就可以登录alpine的root账户了<br>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh root@localhost -p 2222</span><br></pre></td></tr></table></figure><h3 id="·-添加community源"><a href="#·-添加community源" class="headerlink" title="· 添加community源"></a>· 添加community源</h3><p>在alpine中，docker在其comminuty源里</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/apk/repositories</span><br></pre></td></tr></table></figure><p>取消注释comminuty源<br><img src="/" alt="alpine源" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img8.jpg"><br>修改完成后，执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apk update</span><br></pre></td></tr></table></figure><h3 id="·-安装docker"><a href="#·-安装docker" class="headerlink" title="· 安装docker"></a>· 安装docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apk add docker</span><br></pre></td></tr></table></figure><p><img src="/" alt="安装完成" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img9.jpg"></p><h3 id="·-修改docker为开机-虚拟机-启动，启动docker"><a href="#·-修改docker为开机-虚拟机-启动，启动docker" class="headerlink" title="· 修改docker为开机(虚拟机)启动，启动docker"></a>· 修改docker为开机(虚拟机)启动，启动docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#使docker开机启动</span></span><br><span class="line">rc-update add docker</span><br><span class="line"><span class="comment">#开启docker服务</span></span><br><span class="line">service docker start</span><br><span class="line"><span class="comment">#后台启动</span></span><br><span class="line">setsid containerd</span><br><span class="line">setsid dockerd</span><br></pre></td></tr></table></figure><p><img src="/" alt="docker启动完成" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img10.jpg"></p><h3 id="·-测试"><a href="#·-测试" class="headerlink" title="· 测试"></a>· 测试</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker info</span><br></pre></td></tr></table></figure><p><img src="/" alt="docker info" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-docker-img/img11.jpg"></p><h1 id="DOCKER-安装完成！"><a href="#DOCKER-安装完成！" class="headerlink" title="DOCKER 安装完成！"></a><strong><em>DOCKER 安装完成！</em></strong></h1><p>参考资料：</p><p><a href="https://github.com/diogok/termux-qemu-alpine-docker/blob/master/README.md" target="_blank" rel="noopener">https://github.com/diogok/termux-qemu-alpine-docker/blob/master/README.md</a><br><a href="https://stageguard.gitee.io/2019/07/30/run-gogs-on-android/" target="_blank" rel="noopener">https://stageguard.gitee.io/2019/07/30/run-gogs-on-android/</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;blockquote&gt;
&lt;p&gt;此教程将教你如何在Android端搭docker&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;1-Docker&quot;&gt;&lt;a href=&quot;#1-Docker&quot; class=&quot;headerlink&quot; title=&quot;1. Docker&quot;&gt;&lt;/a&gt;1.
      
    
    </summary>
    
    
    
      <category term="qemu" scheme="https://stageguard.top/tags/qemu/"/>
    
      <category term="docker" scheme="https://stageguard.top/tags/docker/"/>
    
      <category term="alpine" scheme="https://stageguard.top/tags/alpine/"/>
    
  </entry>
  
  <entry>
    <title>Android搭建私人Git服务！(Termux + MySQL + Gogs 的搭建，运行，Frp内网穿透)</title>
    <link href="https://stageguard.top/2019/07/30/run-gogs-on-android/"/>
    <id>https://stageguard.top/2019/07/30/run-gogs-on-android/</id>
    <published>2019-07-29T17:18:00.000Z</published>
    <updated>2020-02-26T05:56:00.426Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>此教程将教你如何在Android端搭建Gogs服务端(使用MySQL数据库)<br><span style='color:#ff2e2e;'><strong>原文已修改，此教程并不针对无基础的新手</strong></span></p></blockquote><h1 id="0x00-前言"><a href="#0x00-前言" class="headerlink" title="0x00 前言"></a>0x00 前言</h1><h2 id="什么是Gogs"><a href="#什么是Gogs" class="headerlink" title="什么是Gogs"></a>什么是Gogs</h2><p>Gogs 是一款极易搭建的自助 Git 服务。</p><h2 id="开发目的"><a href="#开发目的" class="headerlink" title="开发目的"></a>开发目的</h2><p>Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发，并且支持 Go 语言支持的 所有平台，包括 Linux、Mac OS X、Windows 以及 ARM 平台。</p><hr><h1 id="0x01-准备工作"><a href="#0x01-准备工作" class="headerlink" title="0x01 准备工作"></a>0x01 准备工作</h1><h2 id="①-Termux"><a href="#①-Termux" class="headerlink" title="① Termux"></a>① Termux</h2><p>Termux是一款非常强大的终端模拟软件，拥有真实的Linux指令，并且有apt软件包管理程序，可以说没有桌面linux系统，它就是最好的替代品(当然我们这次在手机上，当然没有桌面linux系统)！</p><h3 id="传送门："><a href="#传送门：" class="headerlink" title="传送门："></a>传送门：</h3><p><a href="https://www.coolapk.com/apk/com.termux" target="_blank" rel="noopener">Termux(CoolApk, v0.65)</a><br><a href="https://play.google.com/store/apps/details?id=com.termux" target="_blank" rel="noopener">Termux(Google Play, v0.73)</a></p><h2 id="②-Gogs二进制程序"><a href="#②-Gogs二进制程序" class="headerlink" title="② Gogs二进制程序"></a>② Gogs二进制程序</h2><p>核心部件，包括可执行二进制文件gogs，用于开启本地git服务。</p><h3 id="传送门：-1"><a href="#传送门：-1" class="headerlink" title="传送门："></a>传送门：</h3><p><a href="https://github.com/gogs/gogs/releases/download/v0.11.86/linux_armv5.zip" target="_blank" rel="noopener">linux_armv5.zip(Github, v0.11.86)</a>，或者</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/gogs/gogs/releases/download/v0.11.86/linux_armv5.zip</span><br></pre></td></tr></table></figure><h2 id="③-Frp二进制程序-可选"><a href="#③-Frp二进制程序-可选" class="headerlink" title="③ Frp二进制程序 (可选)"></a>③ Frp二进制程序 (可选)</h2><p>可选部件，当你想公布你的git服务到互联网但由于NAT层导致无法端口映射时用到。</p><h3 id="传送门"><a href="#传送门" class="headerlink" title="传送门"></a>传送门</h3><p>ARM32：<a href="http://diannaobos.iok.la:81/frp/frp-v0.27.0/frp_0.27.0_linux_arm.tar.gz" target="_blank" rel="noopener">frp_0.27.0_linux_arm.tar.gz(OfficialWebsite, v0.27.0)</a>，或者：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http://diannaobos.iok.la:81/frp/frp-v0.27.0/frp_0.27.0_linux_arm.tar.gz</span><br></pre></td></tr></table></figure><p>ARM64：<a href="http://diannaobos.iok.la:81/frp/frp-v0.27.0/frp_0.27.0_linux_arm64.tar.gz" target="_blank" rel="noopener">frp_0.27.0_linux_arm64.tar.gz(OfficialWebsite, v0.27.0)</a>，或者：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http://diannaobos.iok.la:81/frp/frp-v0.27.0/frp_0.27.0_linux_arm64.tar.gz</span><br></pre></td></tr></table></figure><hr><h1 id="0x02-详细过程"><a href="#0x02-详细过程" class="headerlink" title="0x02 详细过程"></a>0x02 详细过程</h1><h2 id="Ⅰ-Termux环境配置"><a href="#Ⅰ-Termux环境配置" class="headerlink" title="Ⅰ. Termux环境配置"></a>Ⅰ. Termux环境配置</h2><p><img src="/" alt="Termux" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img1.jpg"></p><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pkg install -y unstable-repo</span><br><span class="line">pkg install -y mariadb git wget tar unzip zip neofetch nano</span><br></pre></td></tr></table></figure><h2 id="Ⅱ-解压缩下载的文件"><a href="#Ⅱ-解压缩下载的文件" class="headerlink" title="Ⅱ. 解压缩下载的文件"></a>Ⅱ. 解压缩下载的文件</h2><blockquote><p>注意：如果你已在termux外部下载gogs(和frp)的压缩包的话，请使用<code>mv</code>指令将其移动到<code>/data/data/com.termux/files/home/</code>(这个路径可以简写成英文波浪号”~”)<br>如果想从termux内部下载，请使用”准备工作”中的<code>wget</code>指令下载gogs(和frp)</p></blockquote><h3 id="在Termux中："><a href="#在Termux中：" class="headerlink" title="在Termux中："></a>在Termux中：</h3><p>解压Gogs：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#解压缩</span></span><br><span class="line">unzip linux_armv5.zip</span><br><span class="line"><span class="comment">#删除压缩包</span></span><br><span class="line">rm linux_armv5.zip</span><br></pre></td></tr></table></figure><p><img src="/" alt="gogs压缩包中的内容" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img2.jpg"></p><p>解压Frp：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#解压缩</span></span><br><span class="line">tar -xvzf frp_0.27.0_linux_arm64.tar.gz</span><br><span class="line"><span class="comment">#更改成好记的文件夹名</span></span><br><span class="line">mv frp_0.27.0_linux_arm64 frp</span><br><span class="line"><span class="comment">#删除压缩包</span></span><br><span class="line">rm frp_0.27.0_linux_arm64.tar.gz</span><br></pre></td></tr></table></figure><p><img src="/" alt="Frp压缩包中的内容" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img10.jpg"></p><h2 id="Ⅲ-MySQL-Database-数据库-配置"><a href="#Ⅲ-MySQL-Database-数据库-配置" class="headerlink" title="Ⅲ. MySQL Database(数据库)配置"></a>Ⅲ. MySQL Database(数据库)配置</h2><blockquote><p>注意：可能稍微有些难度，本人也是菜鸡<br><del>已经会mysql的大神请灵活变通</del></p></blockquote><h3 id="①-查看当前用户名："><a href="#①-查看当前用户名：" class="headerlink" title="① 查看当前用户名："></a>① 查看当前用户名：</h3><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">neofetch</span><br></pre></td></tr></table></figure><p><img src="/" alt="neofetch" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img3.jpg"></p><p>得知我们当前用户名为<code>u0_a284</code></p><h3 id="②-启动本地MySQL服务"><a href="#②-启动本地MySQL服务" class="headerlink" title="② 启动本地MySQL服务"></a>② 启动本地MySQL服务</h3><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysqld</span><br></pre></td></tr></table></figure><p><img src="/" alt="MySQL服务端启动成功" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img4.jpg"></p><h3 id="③-添加当前账户并给予数据库操作权限-amp-amp-创建Gogs数据库"><a href="#③-添加当前账户并给予数据库操作权限-amp-amp-创建Gogs数据库" class="headerlink" title="③ 添加当前账户并给予数据库操作权限 &amp;&amp; 创建Gogs数据库"></a>③ 添加当前账户并给予数据库操作权限 &amp;&amp; 创建Gogs数据库</h3><p>首次初始化MySQL服务器时会创建名字为root的账户</p><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysql -u root -p</span><br></pre></td></tr></table></figure><p>输入密码为：<code>root</code></p><blockquote><p>注：输入时不显示，输入完按回车就行</p></blockquote><p><img src="/" alt="成功登入MySQL数据库管理控制台" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img5.jpg"></p><p>在MySQL控制台中添加我们从<code>neofetch</code>指令中查询到的用户并授予数据库最高操作权限</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">CREATE USER &#39;用户&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;密码&#39;; # 创建用户</span><br><span class="line">GRANT ALL ON *.* TO &#39;用户&#39;@&#39;localhost&#39;; # 授予该用户最高权限</span><br><span class="line">CREATE DATABASE 数据库名称; #用来存放gogs账户信息的数据库，名称随意</span><br><span class="line">exit # 退出MySQL控制台</span><br></pre></td></tr></table></figure><blockquote><p>注：① 这样创建的用户只能从本地访问这个数据库(因为设定的localhost)<br>② 注意是否有单引号<br>③ 数据库名称要记住，之后要用</p></blockquote><p>每次操作出现<code>Query OK, x rows affected (x.xxxx sec)</code>就代表该操作成功！</p><h2 id="Ⅳ-安装Gogs"><a href="#Ⅳ-安装Gogs" class="headerlink" title="Ⅳ. 安装Gogs"></a>Ⅳ. 安装Gogs</h2><h3 id="①-创建一个文件夹用来存放gogs里的用户创建的repo"><a href="#①-创建一个文件夹用来存放gogs里的用户创建的repo" class="headerlink" title="① 创建一个文件夹用来存放gogs里的用户创建的repo"></a>① 创建一个文件夹用来存放gogs里的用户创建的repo</h3><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~</span><br><span class="line">mkdir gogs-repo</span><br></pre></td></tr></table></figure><h3 id="②-启动Gogs-Web-Server端"><a href="#②-启动Gogs-Web-Server端" class="headerlink" title="② 启动Gogs Web Server端"></a>② 启动Gogs Web Server端</h3><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./gogs/gogs web</span><br></pre></td></tr></table></figure><p><img src="/" alt="Gogs服务端启动成功" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img6.jpg"></p><h3 id="③-安装Gogs！"><a href="#③-安装Gogs！" class="headerlink" title="③ 安装Gogs！"></a><span style='color:#ff2e2e;'>③ <strong>安装Gogs！</strong></span></h3><p>浏览器进入<code>http://localhost:3000</code></p><p>请<span style='color:#ff2e2e;'><strong>仔细</strong></span>按照图中标识的项目设置<br><img src="/" alt="&lt;span style=&#39;color:#ff2e2e;&#39;&gt;Setup 1&lt;/span&gt;" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img7.jpg"><br><img src="/" alt="&lt;span style=&#39;color:#ff2e2e;&#39;&gt;Setup 2&lt;/span&gt;" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img8.jpg"></p><p>配置完成后点击安装<br>稍等片刻安装，完成后出现登录界面<br><img src="/" alt="Gogs登录界面" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img9.jpg"></p><p>至此，Gogs服务端(本地)已安装完成</p><h2 id="Ⅴ-使用Frp将gogs公布到互联网上"><a href="#Ⅴ-使用Frp将gogs公布到互联网上" class="headerlink" title="Ⅴ. 使用Frp将gogs公布到互联网上"></a>Ⅴ. 使用Frp将gogs公布到互联网上</h2><blockquote><p>由于我本人没有Frp服务器，所以用的Frp官网上免费的frp服务器，token请从<a href="https://diannaobos.com/frp/" target="_blank" rel="noopener">中文官网</a>加群获取<br>如果你有自己的服务商，你可以使用你自己的<br><del>讲真这不是广告，谁让我没钱2333</del></p></blockquote><h3 id="①-配置frpc-ini"><a href="#①-配置frpc-ini" class="headerlink" title="① 配置frpc.ini"></a>① <strong>配置frpc.ini</strong></h3><p>使用<code>nano</code>(或者其他)编辑文件frpc.ini</p><p>如何编辑，请看图。<br><img src="/" alt="frpc.ini配置" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img11.jpg"></p><h3 id="②-custom-domains和subdomain配置问题"><a href="#②-custom-domains和subdomain配置问题" class="headerlink" title="② custom_domains和subdomain配置问题"></a>② <code>custom_domains</code>和<code>subdomain</code>配置问题</h3><p>二级域名有两种配置方式：</p><ol><li>自定义一个以服务商域名为基础的域名，该域名会解析到服务商的主服务器。</li><li>直接定义二级域名。</li></ol><blockquote><p>可以通过访问frps dashboard查看其他人的配置来确定服务商指定的方式(默认xxx.xxx.xxx:7500查看)，或直接由服务商告知<br>默认用户名和密码都是<code>admin</code></p></blockquote><p>例如：</p><p>该服务商采用的第一种方法定义二级域名<br><img src="/" alt="第一种方式" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img12.jpg"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#subdomain &#x3D; </span><br><span class="line">custom_domains &#x3D; gogs.frpzj.kskxs.com</span><br></pre></td></tr></table></figure><p>该服务商采用的第二种方法定义二级域名<br><img src="/" alt="第二种方式" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img13.jpg"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">subdomain &#x3D; gogs</span><br><span class="line">#custom_domains &#x3D;</span><br></pre></td></tr></table></figure><h3 id="③-启动Frp客户端"><a href="#③-启动Frp客户端" class="headerlink" title="③ 启动Frp客户端"></a>③ 启动Frp客户端</h3><p>在Termux中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./frpc -c frpc.ini</span><br></pre></td></tr></table></figure><p><img src="/" alt="成功运行frpc" class="lazyload" data-src="https://cdn.jsdelivr.net/gh/StageGuard/stageguard.github.io/img/run-gogs-img/img14.jpg"></p><p>直接访问定义的二级域名即可<code>http://gogs.frpzj.kskxs.com:8081/</code></p><blockquote><p>注意端口，在上上图能看到，提供第一种方式的服务商提供的端口为<code>8081</code>，第二种方式的服务商提供的端口为<code>7000</code></p></blockquote><hr><h1 id="0x03-终止服务："><a href="#0x03-终止服务：" class="headerlink" title="0x03 终止服务："></a>0x03 终止服务：</h1><blockquote><p>终止frp客户端快捷键：<code>CTRL + C</code><br>终止gogs web端快捷键：<code>CTRL + C</code><br>终止mysql 数据库指令：<code>killall -SIGTERM mysqld</code><br><del>或者直接硬核清理Termux进程</del></p></blockquote><hr><h1 id="0x04-常见问题："><a href="#0x04-常见问题：" class="headerlink" title="0x04 常见问题："></a>0x04 常见问题：</h1><h2 id="dial-tcp-lookup-xxx-xxx-xxx-on-1-53-read-udp-1-xxxxx-gt-1-53-read-connection-refused"><a href="#dial-tcp-lookup-xxx-xxx-xxx-on-1-53-read-udp-1-xxxxx-gt-1-53-read-connection-refused" class="headerlink" title="dial tcp: lookup xxx.xxx.xxx on [::1]:53: read udp [::1]:xxxxx-&gt;[::1]:53: read: connection refused"></a>dial tcp: lookup xxx.xxx.xxx on [::1]:53: read udp [::1]:xxxxx-&gt;[::1]:53: read: connection refused</h2><p>解决：dns解析问题，在frpc.ini的common项中添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dns_server &#x3D; 1.1.1.1</span><br></pre></td></tr></table></figure><h2 id="欢迎在评论区补充其他问题"><a href="#欢迎在评论区补充其他问题" class="headerlink" title="欢迎在评论区补充其他问题:)"></a><span style='color:#2e97ff;'><strong>欢迎在评论区补充其他问题:)</strong></span></h2><hr><p><span style='color:#2e97ff;'>教程终于肝地差不多了呢<br>这是我第一次正式写博客，有点激动！！<br>如果你觉得对你有用的话，也可以考虑捐赠一波(你在想peach)</span></p><p>参考资料：</p><p><a href="https://gogs.io/docs" target="_blank" rel="noopener">https://gogs.io/docs</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;blockquote&gt;
&lt;p&gt;此教程将教你如何在Android端搭建Gogs服务端(使用MySQL数据库)&lt;br&gt;&lt;span style=&#39;color:#ff2e2e;&#39;&gt;&lt;strong&gt;原文已修改，此教程并不针对无基础的新手&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blo
      
    
    </summary>
    
    
    
      <category term="frp" scheme="https://stageguard.top/tags/frp/"/>
    
      <category term="git" scheme="https://stageguard.top/tags/git/"/>
    
      <category term="gogs" scheme="https://stageguard.top/tags/gogs/"/>
    
  </entry>
  
</feed>
