Files
pages/2025/11/01/mirrors.html
2025-12-31 16:00:29 +00:00

389 lines
30 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>让博客永恒的探索 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="让博客永恒的探索" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="Mayx Forever Project Phase II" />
<meta property="og:description" content="Mayx Forever Project Phase II" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2025-11-01T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="让博客永恒的探索" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2025-11-01T00:00:00+08:00","datePublished":"2025-11-01T00:00:00+08:00","description":"Mayx Forever Project Phase II","headline":"让博客永恒的探索","mainEntityOfPage":{"@type":"WebPage","@id":"/2025/11/01/mirrors.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2025/11/01/mirrors.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2025/11/01/mirrors.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1767196818" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Thu, 01 Jan 2026 00:00:18 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2025-11-01T00:00:00+08:00">1 November 2025</time> - 字数统计3374 - 阅读大约需要12分钟 - Hits: <span id="/2025/11/01/mirrors.html" class="visitors">Loading...</span></small>
<h1 class="p-name">让博客永恒的探索</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Sat, 01 Nov 2025 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章讲述了作者为了提高博客的可靠性探索利用被滥用的Git平台进行博客镜像的想法和实践。作者发现一些Git实例存在大量空仓库和异常用户怀疑是SEO公司滥用因此决定利用这些平台进行博客镜像备份以应对平台倒闭或数据丢失的风险。作者选择Gitea和Forgejo平台作为目标编写脚本自动注册账号并导入博客仓库实现了自动化镜像分发。作者也意识到此类平台的稳定性存在不确定性并思考了“量”和“质”两种方式确保博客永恒性的优劣最终认为建立一个活跃的、自动执行维护操作的网络可能更有效。文章最后展示了作者创建的Git镜像列表并表达了对博客永恒性的思考。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#被spam滥用的git实例">被SPAM滥用的Git实例</a></li><li><a href="#永恒的探索">永恒的探索</a></li><li><a href="#镜像的分发">镜像的分发</a></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>Mayx Forever Project Phase II<!--more--></p>
<h1 id="起因">
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因
</h1>
<p>在前段时间,我通过<a href="https://github.com/ecosyste-ms/repos">Ecosyste.ms: Repos</a>找到了不少Git平台的实例也在探索的过程中发现和了解了<a href="/2025/08/10/tilde.html">Tilde社区</a>。当然仅仅是这样显然还不够,里面的实例太多了,显然还有一些其他值得探索的东西。 </p><p>
在我查看这里面的某些Gitea实例时发现了一些奇怪的事情有些实例的仓库数和用户数多得离谱正常来说除了几个大的平台绝大多数应该只有几十到几百个仓库这就让我有点好奇了。于是当我点进去之后发现里面有一大堆仓库都是空的而且用户名和仓库名都非常有规律看起来都是一组单词加4位数字命名的显然这不是正常现象应该是一种有组织的行为。</p>
<h1 id="被spam滥用的git实例">
<a href="#被spam滥用的git实例"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 被SPAM滥用的Git实例
</h1>
<p>于是我就简单看了一下这些异常的仓库和用户的规律可以发现每个用户都填了个人主页地址然后个人简介里大都是一段广告词。另外这些个人主页的地址看起来很多都是利用公开可注册的服务比如开源的有各种Git平台、Wiki以及论坛还有一些允许用户写个人主页的新闻网站。在这其中Git平台大多都没有广告文章基本上都是通过个人主页地址链接到网站而Wiki之类的就会写一些篇幅比较长的广告文章。 </p><p>
另外这些平台但凡还在开放注册就会被以大约每分钟一次的速度自动注册新账号……所以这种事情到底是谁在干呢我翻了几个仓库里面的广告多种多样有些看起来还算正常还有一些看起来有些黑产。其中我发现有一家叫做“悠闲羊驼SEO”的网站看介绍主要是给加密货币、对冲基金和博彩网站提供SEO优化的再加上这些被滥用的平台里也有不少类似的广告所以我怀疑这些滥用的行为就是这家SEO公司做的虽然没有证据😂</p>
<h1 id="永恒的探索">
<a href="#永恒的探索"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 永恒的探索
</h1>
<p>看到这么多Git平台被滥用我就有个想法之前为了保证可靠性给博客加了不少<a href="/proxylist.html">镜像</a>,除此之外也在互联网档案馆、<a href="https://archive.softwareheritage.org/">Software Heritage</a>、Git Protect等存档服务中上传了备份而且也在IPFS和Arweave等Web3平台上有相应的副本但是我觉得还不够再大的平台也有可能会倒闭IPFS不Pin还会被GC至于Arweave前段时间看了一眼整个网络才几百个节点感觉一点也不靠谱……所以我应该好好利用这些平台提高我博客的可靠性。 </p><p>
既然那些Spammer只是为了SEO去滥用这些平台不如让我利用这些平台给我的博客进行镜像吧至于使用哪个平台……显然用Git平台方便一些所以接下来就该考虑一下怎么样分发了。</p>
<h1 id="镜像的分发">
<a href="#镜像的分发"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 镜像的分发
</h1>
<p>在Git平台中也有很多选择最知名的是GitLab不过GitLab有点复杂接口不太好用……而且很多实例没有开镜像仓库的功能毕竟如果我每次更新都给一堆仓库推送太费时间了我打算让各个平台主动从GitHub上拉取我的最新代码。正好Gogs系列的平台基本上都默认支持镜像仓库不过在我实际使用的时候发现Gogs默认情况下注册要验证码……写识别验证码感觉又挺麻烦而Gogs的两个分支——Gitea和Forgejo反倒没有……还挺奇怪所以接下来我的目标主要就是Gitea和Forgejo的实例了。 </p><p>
既然决定好目标我就得先发现它们了那些Spammer在注册的时候会在个人主页里写不同的网站其中也有一些类Gogs平台那么我可以先找一个Gitea平台用接口读取这些网站然后再调类Gogs专属的接口来检测这些网站哪个是类Gogs平台于是我就写了个<a href="https://github.com/Mabbs/spam_gogs-like_scanner/blob/main/main.py">脚本</a>来找到它们。 </p><p>
找到这些平台之后就该注册了还好Gitea和Forgejo默认没有验证码注册起来也很简单随便写了个函数实现了一下</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">register_account</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">resp</span> <span class="o">=</span> <span class="n">session</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="s">"/user/sign_up"</span><span class="p">)</span>
<span class="n">soup</span> <span class="o">=</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">resp</span><span class="p">.</span><span class="n">text</span><span class="p">,</span> <span class="s">"html.parser"</span><span class="p">)</span>
<span class="n">csrf_token</span> <span class="o">=</span> <span class="n">soup</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">"input"</span><span class="p">,</span> <span class="p">{</span><span class="s">"name"</span><span class="p">:</span> <span class="s">"_csrf"</span><span class="p">}).</span><span class="n">get</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">"_csrf"</span><span class="p">:</span> <span class="n">csrf_token</span><span class="p">,</span>
<span class="s">"user_name"</span><span class="p">:</span> <span class="n">username</span><span class="p">,</span>
<span class="s">"email"</span><span class="p">:</span> <span class="n">email</span><span class="p">,</span>
<span class="s">"password"</span><span class="p">:</span> <span class="n">password</span><span class="p">,</span>
<span class="s">"retype"</span><span class="p">:</span> <span class="n">password</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">"Content-Type"</span><span class="p">:</span> <span class="s">"application/x-www-form-urlencoded"</span><span class="p">}</span>
<span class="n">resp</span> <span class="o">=</span> <span class="n">session</span><span class="p">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="s">"/user/sign_up"</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
<span class="k">if</span> <span class="s">"flash-success"</span> <span class="ow">in</span> <span class="n">resp</span><span class="p">.</span><span class="n">text</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s">"Successfully registered at </span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s"> with username: </span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s">, email: </span><span class="si">{</span><span class="n">email</span><span class="si">}</span><span class="s">, password: </span><span class="si">{</span><span class="n">password</span><span class="si">}</span><span class="s">"</span>
<span class="p">)</span>
<span class="n">save_to_file</span><span class="p">(</span>
<span class="s">"instances_userinfo.csv"</span><span class="p">,</span> <span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s">,</span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s">,</span><span class="si">{</span><span class="n">email</span><span class="si">}</span><span class="s">,</span><span class="si">{</span><span class="n">password</span><span class="si">}</span><span class="s">"</span>
<span class="p">)</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Failed to register at </span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s">."</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">False</span>
<span class="k">except</span> <span class="nb">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Error registering at </span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">False</span>
</code></pre></div></div>
<p>注册完之后就该导入仓库了只是通过模拟前端发包的方式在Gitea和Forgejo中不同版本的表现可能不太一样所以我想用API实现但是API又得有API Key生成API Key还得模拟前端发包😥……所以怎么都绕不过。 </p><p>
不过这个生成API Key还挺麻烦有些版本不需要配权限范围有些配权限的参数还不一样……不过我就是随便一写凑合用吧像那些专业的Spammer应该是有更强大的脚本判断各种情况。 </p><p>
最后我还是选择用API导入又写了个函数</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">import_repos</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="p">.</span><span class="n">post</span><span class="p">(</span>
<span class="n">url</span><span class="o">=</span><span class="n">url</span> <span class="o">+</span> <span class="s">"/api/v1/repos/migrate"</span><span class="p">,</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span>
<span class="s">"Authorization"</span><span class="p">:</span> <span class="s">"token "</span> <span class="o">+</span> <span class="n">token</span><span class="p">,</span>
<span class="p">},</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span>
<span class="s">"repo_name"</span><span class="p">:</span> <span class="s">"blog"</span><span class="p">,</span>
<span class="s">"mirror_interval"</span><span class="p">:</span> <span class="s">"1h"</span><span class="p">,</span>
<span class="s">"mirror"</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="s">"description"</span><span class="p">:</span> <span class="s">"Mayx's Home Page"</span><span class="p">,</span>
<span class="s">"clone_addr"</span><span class="p">:</span> <span class="s">"https://github.com/Mabbs/mabbs.github.io"</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">response</span><span class="p">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">201</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="s">"Repository import initiated successfully."</span><span class="p">)</span>
<span class="n">save_to_file</span><span class="p">(</span><span class="s">"repo_list.txt"</span><span class="p">,</span> <span class="n">url</span> <span class="o">+</span> <span class="s">"/mayx/blog"</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Failed to initiate repository import. Status code: </span><span class="si">{</span><span class="n">response</span><span class="p">.</span><span class="n">status_code</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Response: </span><span class="si">{</span><span class="n">response</span><span class="p">.</span><span class="n">text</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">False</span>
<span class="k">except</span> <span class="nb">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Error updating website: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">False</span>
</code></pre></div></div>
<p>脚本写好之后我就只需要重复扫描、注册、导入的步骤就行了这样我的镜像就会越来越多而且用类Gogs的实例还有一个好处就是不需要我手动推送它会自动定时拉取我的仓库保持最新这样也许只要人类文明存在我的博客就会在某处存在吧🤣。 </p><p>
最后我创建的Git镜像可以在<a href="/other_repo_list.html">这里</a>看到看起来还是挺壮观啊😋。只不过像这种会被Spammer随便注册的Git平台实例很难说它能活多久如果没人管而且是云服务器也许到期就没了有人管的话应该不会允许这么多Spam行为吧……</p>
<h1 id="感想">
<a href="#感想"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 感想
</h1>
<p>不知道用“量”来确保博客的永恒更可靠……还是用“质”的方式更好呢?其实我觉得还得是活动的更好,就像我以前所说的,如果有<a href="/2024/11/02/trojan.html#%E6%84%9F%E6%83%B3">僵尸网络</a>,自动帮我执行发现并推送的操作,也许比等着这些实例逐渐消失更好吧……只不过那样可能就不太友好了😂。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=Git"><em>Git</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=Gitea"><em>Gitea</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E9%95%9C%E5%83%8F"><em>镜像</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=Forever"><em>Forever</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2025-11-01-mirrors.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2025/11/01/mirrors.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2025/10/12/recover.html">
上一篇一次找回GitHub上被删除仓库的经历
</a>
</span>
<br />
<span class="next">
<a href="/2025/12/01/linux.html">
下一篇在浏览器中运行Linux的各种方法
</a>
</span>
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2025/11/01/mirrors', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2025/11/01/mirrors.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-01-01 00:00:18<br /> 总字数614622 - 文章数178 - <a href="/atom.xml" >Atom</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>