<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="https://v1sta.xyz/wp-content/plugins/pretty-rss-feeds/xslt/pretty-feed.xsl" type="text/xsl" media="screen" ?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/">

<channel>
	<title>Linux &#8211; 景の域</title>
	<atom:link href="https://v1sta.xyz/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://v1sta.xyz</link>
	<description>远景的幻想空间</description>
	<lastBuildDate>Sat, 04 Apr 2026 03:52:39 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2-60x60.png</url>
	<title>Linux &#8211; 景の域</title>
	<link>https://v1sta.xyz</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://v1sta.xyz/tag/linux/feed/"/>
	<item>
		<title>我能吞下玻璃而不伤身体</title>
		<link>https://v1sta.xyz/life/%e6%88%91%e8%83%bd%e5%90%9e%e4%b8%8b%e7%8e%bb%e7%92%83%e8%80%8c%e4%b8%8d%e4%bc%a4%e8%ba%ab%e4%bd%93/</link>
					<comments>https://v1sta.xyz/life/%e6%88%91%e8%83%bd%e5%90%9e%e4%b8%8b%e7%8e%bb%e7%92%83%e8%80%8c%e4%b8%8d%e4%bc%a4%e8%ba%ab%e4%bd%93/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Sat, 23 Mar 2024 09:13:21 +0000</pubDate>
				<category><![CDATA[日常]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[逆转裁判]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1773</guid>

					<description><![CDATA[私はガラスを食べられます。それは私を傷つけません。 我能吞下玻璃、而不伤身体，这是Ubuntu字体管理器的默认 &#8230; <a href="https://v1sta.xyz/life/%e6%88%91%e8%83%bd%e5%90%9e%e4%b8%8b%e7%8e%bb%e7%92%83%e8%80%8c%e4%b8%8d%e4%bc%a4%e8%ba%ab%e4%bd%93/" class="more-link">继续阅读<span class="screen-reader-text">我能吞下玻璃而不伤身体</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-pullquote"><blockquote><p>私はガラスを食べられます。それは私を傷つけません。</p></blockquote></figure>



<p>我能吞下玻璃、而不伤身体，这是Ubuntu字体管理器的默认文字示例短句。这句话起源于Ethan Mollick在早期互联网上发起的语言学项目，也广泛运用在其他与Linux相关事物的文字段落测试。</p>



<p>等等……我突然想起，这句话说的不就是《逆转裁判3》大学时期的 成步堂龙一 吗？而成步堂也确实吞下了玻璃瓶（证物），而不伤身体，</p>



<p>这么多年居然也没有人发现这个细思恐极的设定么 2333</p>

<p><a href="https://v1sta.xyz/life/%e6%88%91%e8%83%bd%e5%90%9e%e4%b8%8b%e7%8e%bb%e7%92%83%e8%80%8c%e4%b8%8d%e4%bc%a4%e8%ba%ab%e4%bd%93/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/life/%e6%88%91%e8%83%bd%e5%90%9e%e4%b8%8b%e7%8e%bb%e7%92%83%e8%80%8c%e4%b8%8d%e4%bc%a4%e8%ba%ab%e4%bd%93/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" length="199214" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" width="512" height="512" medium="image" type="image/png"/>	</item>
		<item>
		<title>软件路由器迁移记</title>
		<link>https://v1sta.xyz/tech/immortalwrt-softrouter/</link>
					<comments>https://v1sta.xyz/tech/immortalwrt-softrouter/#comments</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Sat, 21 Oct 2023 11:35:15 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[日常]]></category>
		<category><![CDATA[ImmortalWRT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenWRT]]></category>
		<category><![CDATA[Passwall]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1759</guid>

					<description><![CDATA[之前一直想修一下多年未维护的Homelab，尤其是跑在PVE上用于国际上网的OpenWRT虚拟软件路由，已经有 &#8230; <a href="https://v1sta.xyz/tech/immortalwrt-softrouter/" class="more-link">继续阅读<span class="screen-reader-text">软件路由器迁移记</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p>之前一直想修一下多年未维护的Homelab，尤其是跑在PVE上用于国际上网的OpenWRT虚拟软件路由，已经有段时间没有更新，一些软件也都失效了；而第三方一键编译的固件并不开源，存在不透明的后门。</p>



<p>今天抽出了相对空闲的时间和精力，总算能处理这件琐事了，原本运行多时的OpenWRT终于下线，换成了较为规范并且入乡随俗的ImmortalWRT，几乎可以说是无缝迁移。</p>



<span id="more-1759"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">前言</h2>



<p>这个OpenWRT本来是装在一台“网红工控机”上的，不过后来我就把它卖了，选择了扩展性能更强的H110台式平台，后来又因稳定性独立出去、换到了跑了Win10的H81上，当然为了重组服务现在又回来了……</p>



<p>我很久以前便开始研究OpenWRT，这是一个为路由器设计的Linux发行版。不过原版的OpenWRT是欧美开发者维护的，在天朝这边水土不服，缺少一些国内特有的软件和需求。</p>



<p>国内的OpenWRT圈子也很乱，一些“大大”们另起炉灶，但是种种原因不能同步到官方仓库源当中，多个“大大”的版本也互不兼容，好似神仙打架；另外一些编译者也丝毫不遵守开源透明的规则约束，反而持着李彦宏一样的态度，不仅加后门，还带来文革甚至大清时期的思想（高大全、师夷长技以制夷），嗯……这下真是120年清朝老兵了。堆料也非常严重，什么功能都往一个路由器系统上塞。可以说比以前的Android还要混乱。</p>



<p>然而国外的OpenWRT用户，并不需要考虑国内复杂的情况，自然也就没有这些稀奇古怪的东西。尤其是搭配了Proxmox VE这样的系统，也就是当作速度更快的廉价高性能路由使用（以往局域网内上网还需要用到Pentium4做Gateway网关），有了其他虚拟机服务，更没有必要如此折腾。</p>



<p>但在国内的话，这种烂摊子技能还是不能置之不理。比如说Passwall，就好比如在东北农村学会烧炕，显然在城市生活就不需要学习；但只要一天还留在农村生活，就还是要练习这种地域性技能。</p>



<p>SoftRouter这种东西其实是很复杂的，不是术业专攻的人很难理解如何学习。与其随着网红叫做软路由，我更倾向叫他软件路由器，就像捣鼓无线电技术的<strong>软件定义无线电</strong><em>（Software Defined Radio）</em>，<strong>简称SDR</strong>……</p>



<p>巧了，Router的第一个大写字母也是R，反正都是网络通信技术（笑）</p>



<p>在这种环境下，原版的OpenWRT不满足需求，那第三方“另起炉灶”编译的固件也不敢用。</p>



<p>后来我发现了ImmortalWRT，也是基于OpenWRT二次开发的发行版，就像Debian和Ubuntu、Arch和Manjaro的关系，它有一个完善的软件源仓库，比那些野路的第三方编译要靠谱一些。</p>



<p>虽然也是针对国内情况开创的独立分支，不过软件源和兼容性还是相当可观，一些常用的应用都有，维护和上游同步也较为规范与及时。（尽管如今23.05正式发布了，ImmortalWRT仍停留在rc4版本……不过也能用）</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">安装</h2>



<p>ImmortalWRT官方提供了类似原版OpenWRT的在线构建编译服务，默认预装了必备的软件包（如dnsmasq-full），还可以编辑自定义配置，增加 uci-defaults 初始化脚本，设定IP地址之类的项目。</p>



<p><a href="https://firmware-selector.immortalwrt.org/?version=23.05.0-rc4&amp;target=x86%2F64&amp;id=generic">https://firmware-selector.immortalwrt.org/?version=23.05.0-rc4&amp;target=x86%2F64&amp;id=generic</a></p>



<p>默认其实就有qcow2、vmdk等各种虚拟磁盘版本，还有iso格式的安装镜像，但这些需要手动配置IP地址。若使用自定义配置的话，就没有这些预提供的版本下载了。在PVE这类虚拟机平台，需要手动转换虚拟磁盘的格式。</p>



<p>PVE的虚拟机创建步骤就不过多赘述了，基本上大部分操作通过图形界面就能完成了，再就是通过local上传镜像。这方面ImmortalWRT和原版的OpenWRT安装过程大差不差。</p>



<p>主要还是记录转换磁盘格式、并导入存储在local-lvm虚拟机的命令：</p>



<pre class="wp-block-preformatted">#转到iso存储池
cd /var/lib/vz/template/iso/
#转换为qcow2磁盘格式
qemu-img convert -f raw -O   qcow2 immortalwrt-[…].img   […].qcow2
#导入对应ID的虚拟机
qm importdisk [VM ID] [...].qcow2 local-lvm</pre>



<p>转到虚拟机，设置硬盘和启动项，记得把Guest Agent打开，可以加入串口终端，监控和配置系统命令行。</p>



<p>随后开机，如果自定义设定了同网段IP（不能和原来的主路由重叠），不出意外现在就可以访问luci界面了。是的，就这样简单。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>同网段迁移路由结构的话，我是先在虚拟机仅配置了一个LAN桥接网络，并指向为现有的网关和DNS，访问互联网，随后进一步配置需要的软件包；</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://v1sta.xyz/wp-content/uploads/2023/10/image-8.png" data-lbwps-width="409" data-lbwps-height="339" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/10/image-8-300x249.png"><img data-dominant-color="f8f8f8" data-has-transparency="true" style="--dominant-color: #f8f8f8;" fetchpriority="high" decoding="async" width="409" height="339" sizes="(max-width: 409px) 100vw, 409px" src="https://v1sta.xyz/wp-content/uploads/2023/10/image-8.png" alt="" class="wp-image-1761 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/10/image-8.png 409w, https://v1sta.xyz/wp-content/uploads/2023/10/image-8-300x249.png 300w" /></a></figure>
</div>


<p>待一切设定妥当以后（安装软件包、修改防火墙、接口规则），再添加额外的WAN网卡，并保持LAN DHCP打开。把光猫和新的软路由相连，通过PPPoE拨号成功之后，就可以把原来的OpenWRT路由VM关机了。</p>



<p>然后把新的路由系统的LAN设置取消V4网关和DNS，而IP设置为原来的x.1，就不影响原本网段的静态结构拓扑，以及其他设备和软件内的IP设定。就像狸猫换太子一般。</p>



<p>不过域主自己太懒，没有进一步去导入导出端口映射和DHCP绑定的设置，一些设备的IP地址还是发生了变动，但网段结构大体上是没有影响的，尤其是不易更改IP地址的PVE主机。</p>



<h2 class="wp-block-heading">软件配置</h2>



<p>以下是我主要安装的一些额外软件包：（是的，常见的一些L系特色软件，它们在ImmortalWRT官方的软件源就包含了）</p>



<pre class="wp-block-preformatted">luci-app-adbyby-plus
luci-app-advanced-reboot
luci-app-argon-config
luci-app-ddns-go
luci-app-fileassistant
luci-app-firewall
luci-app-frpc
luci-app-ipsec-vpnserver-manyusers
luci-app-openclash
luci-app-openvpn-server
luci-app-opkg
luci-app-passwall
luci-app-softethervpn
luci-app-ttyd
luci-app-udpxy
luci-app-unblockneteasemusic
luci-app-upnp
luci-app-wol
qemu-ga
umdns
kmod-ipt-fullconenat</pre>



<p>Passwall不多提，很多配置用copy paste就能够迁移，只是内核发生了变动，协议是一样的，有的订阅Node不是很好支持。</p>



<p>qemu-ga是非常常见的虚拟机服务，安装以后PVE就可以监控、关闭或重启路由器虚拟机了。</p>



<p>umdns可以开启路由器的mDNS广播，兼容苹果的Bonjour，可以通过 .local 访问主机。fullconenat也没有随默认软件附带，索性就自行安装了。</p>



<p>OpenVPN服务器也回来了，和以前一样，需要在命令行修改 <code>/etc/config/openvpn</code> ，加入 <code>option duplicate_cn '1'</code> 的代码，重新启动就可以允许多设备连接了。顺手配置了一下DDNS，发现原来的过期了，买了一个便宜域名，RDP和Moonlight串流又可以用了，善哉善哉。</p>



<p>SoftEther的话也可以使用，功能很强大，有用户管理功能，但是易用性不如OpenVPN，不太适合跟朋友们联机用。其他几个系统自带的VPN协议，由于版本差异和运营商阻断的关系，我就没连上过……</p>



<p>另外luci界面修改配置以后，有回滚更改的倒计时，默认5秒的生效等待，甚是令人厌烦。对于高性能的x86处理器而言，可以改成更短的时间。只需要编辑 <code>/etc/config/luci</code> 的代码行：</p>



<pre class="wp-block-preformatted">config internal 'apply'
        option rollback '30'
        option holdoff '4'
        option timeout '5'
        option display '1.5'</pre>



<p>我直接更改成更短的时间：</p>



<pre class="wp-block-preformatted">config internal 'apply'
        option rollback '30'
        option holdoff '0.2'
        option timeout '0.3'
        option display '0'</pre>



<p>不过实测保险起见，还是会有2秒左右的生效延迟，但已经足够了。另外新版的Passwall貌似也是直接编辑，不经过luci界面的生效延迟。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>棘手的软件路由器总算告一段落，接下来就要迁移一下PVE主机了。</p>



<p>然后是装个Windows Server重构Minecraft和CS的服务器，之后再研究一下Daphile和HomeAssistant吧……</p>



<p>希望这篇文章记录能帮到一些同好。</p>

<p><a href="https://v1sta.xyz/tech/immortalwrt-softrouter/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/immortalwrt-softrouter/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2023/10/image-8.png" length="16316" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2023/10/image-8.png" width="409" height="339" medium="image" type="image/png"/>	</item>
		<item>
		<title>Dokuwiki 安装记录</title>
		<link>https://v1sta.xyz/tech/dokuwiki-installation/</link>
					<comments>https://v1sta.xyz/tech/dokuwiki-installation/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Tue, 27 Jun 2023 08:31:22 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Dokuwiki]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Webinoly]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1494</guid>

					<description><![CDATA[准备重新启动我的Minecraft服务器了。想着打算开一个服务器的Wiki，记录服务器配置与规则、模组之类的信 &#8230; <a href="https://v1sta.xyz/tech/dokuwiki-installation/" class="more-link">继续阅读<span class="screen-reader-text">Dokuwiki 安装记录</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p>准备重新启动我的Minecraft服务器了。想着打算开一个服务器的Wiki，记录服务器配置与规则、模组之类的信息，供玩家们查阅。</p>



<p>我不太想在VPS上再运行一些带数据库的Web服务，除非用SQLite，所以选择了Dokuwiki，虽然最后发现并不太合适（可能还不如用Typecho+SQLite，奈何Typecho没有我比较喜好的主题）</p>



<span id="more-1494"></span>



<h2 class="wp-block-heading">安装</h2>



<p>这次还是使用我喜爱的Webinoly运维脚本配置，和上次<a href="https://v1sta.xyz/tech/blessing-skin/" data-type="post" data-id="1174">搭建Blessing Skin</a>的过程类似，一行site命令，使用标准的php模板并配置SSL证书，一气呵成：</p>



<pre class="wp-block-preformatted">site [domain.ltd] -php -ssl=on</pre>



<p>打开 Dokuwiki 的<a href="https://download.dokuwiki.org/">官网下载</a>页面，可以选择自定义最小化的编译版本，仅保留需要的插件和语言：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz.png" data-lbwps-width="1920" data-lbwps-height="1079" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-300x169.png"><img data-dominant-color="f3f2f2" data-has-transparency="true" style="--dominant-color: #f3f2f2;" decoding="async" width="1024" height="575" sizes="(max-width: 1024px) 100vw, 1024px" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-1024x575.png" alt="" class="wp-image-1495 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-1024x575.png 1024w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-300x169.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-768x432.png 768w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-1536x863.png 1536w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz.png 1920w" /></a></figure>
</div>


<p>然后点击下载，会自动转到下载页面，下载编译的压缩包，并提示如果没有自动下载则点击链接，复制这个链接即为wget下载链接。注意有下载时限，过一段时间后会过期，因此我也无法提供下载链接。</p>



<p>使用 <code>tar -xvzf</code> 解压后获得名为 <code>dokuwiki</code> 的目录，将其替换默认的 htdocs目录（也可以在nginx配置文件改成 dokuwiki ），并递归设置目录所有者为www-data以取得权限。</p>



<pre class="wp-block-preformatted">tar -xvzf dokuwiki-*.tgz
chown -R www-data:www-data ./htdocs
nginx -s reload</pre>



<p>此时已经可以在浏览器中访问了，在域名后面输入 <code>install.php</code> 就能够访问安装器页面，出于安全原因，这个安装器只能在全新的Dokuwiki使用一次，配置以后还需要移走 install.php 以阻止访问。</p>



<h2 class="wp-block-heading">URL重写</h2>



<p>参考Dokuwiki上的<a href="https://www.dokuwiki.org/rewrite">Rewrite页</a>。可以通过URL重写移除链接中的doku.php字样，需要在配置页 > 高级设置中设定userewrite项为 .htaccess(2)，以及打开canonical 完全标准的URL。</p>



<p>虽然userewrite表述为.htaccess，但并不是Apache HTTP Server特有的重写配置，同样也支持IIS、Nginx等多个其他的Web服务器。在此附上启用Nginx重写功能的片段，顺便设置敏感目录的阻止访问。</p>



<pre class="wp-block-preformatted">location / { try_files $uri $uri/ @dokuwiki; }
 
location @dokuwiki {
        rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
        rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
        rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&amp;id=$2 last;
        rewrite ^/(.*) /doku.php?id=$1&amp;$args last;
    }
 
    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REDIRECT_STATUS 200;
        fastcgi_pass 127.0.0.1:9000;
    }
    
location ~ /(data|conf|bin|inc|vendor)/ {
    deny all;
}</pre>



<p>需注意的是，第一行的 location 配置与 Webinoly自带的 common/phpx.conf 相冲突，需要在站点Nginx主配置注释include后者以识别 @dokuwiki 。</p>



<p>这时URL重写便已经配置好了，如同WP的伪静态一样简单。</p>



<h2 class="wp-block-heading">主题</h2>



<p>Dokuwiki可以安装很多模板主题 (Template) ，它们以Wikipedia的风格居多，也有少数现代扁平化的设计。我比较喜欢 <a href="https://www.dokuwiki.org/template:sprintdoc">SprintDoc</a> 模板，是德国人开发的，基于Material设计语言，简单而优雅，而且有著浓厚的德国工业文件的风格。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-dominant-color="ececed" data-has-transparency="false" style="--dominant-color: #ececed;" decoding="async" width="600" height="316" sizes="(max-width: 600px) 100vw, 600px" src="https://v1sta.xyz/wp-content/uploads/2023/06/image-3.png" alt="" class="wp-image-1496 not-transparent" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/image-3.png 600w, https://v1sta.xyz/wp-content/uploads/2023/06/image-3-300x158.png 300w" /></figure>
</div>


<p>在扩展管理器中搜索 SprintDoc 就可以直接下载，然后去配置页启用template，当然也可以自己下载上传压缩包安装。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">结尾</h2>



<p>最后，我还是放弃了使用Dokuwiki，研究了一会发现，Dokuwiki的结构并不是很适合我。</p>



<p>尽管Dokuwiki是一种纯文件架构（Flat-file CMS）的程序，比较类似的是Grav CMS，但是并不代表从服务器下载文件就能直接所见即所得，除非直接离线存储整个网页。</p>



<p>Dokuwiki特有的synatx格式与富文本编辑器也不太好用，虽说有插件支持Markdown，但不是文件格式存储，依然没什么优势。</p>



<p>其次，Dokuwiki对于英语/拉丁语以外的语言体系的支持并不算好，虽然并不是完全不支持亚洲语系，但是URL只能设定为英文。分类的功能也不太好用，不像Mediawiki的几个站点。</p>



<p>最初的初衷只是为了想要记录一些服务端、客户端区分的MC模组，然而本来就有先人在mcmod百科上记载了，而且也被很多支持BMCLAPI的启动器所引用，我为何不直接写文笔记附上mcmod.cn的链接呢？</p>



<p>可能还是担忧突然一夜之间内容消失的重创。</p>



<p>虽然对一个小服务器没什么影响……我还是用OneNote吧。其实，支持metaweblog发布到WP功能的旧版Word更适合记录啊。</p>

<p><a href="https://v1sta.xyz/tech/dokuwiki-installation/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/dokuwiki-installation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-1024x575.png" length="166770" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_spCPC60oyz-1024x575.png" width="1024" height="575" medium="image" type="image/png"/>	</item>
		<item>
		<title>搭建基于h5ai的文件共享空间：WebDAV篇</title>
		<link>https://v1sta.xyz/tech/file-carbinet-webdav/</link>
					<comments>https://v1sta.xyz/tech/file-carbinet-webdav/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Sun, 25 Jun 2023 06:20:18 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[WebDAV]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1440</guid>

					<description><![CDATA[上篇文章介绍了如何用h5ai搭建资源存放箱，但是h5ai只能共享展示文件列表，并不具备管理文件的功能。

虽然可以通过SFTP上传和管理文件，域主自己也尝试了SSHFS-Win挂载VPS的目录，显然速度并不理想，其他的协议（如FTP、SMB）放在公网不安全、配置证书或VPN又相当麻烦，因此还是要搭建一个WebDAV服务。]]></description>
										<content:encoded><![CDATA[
<p>上篇文章介绍了如何用h5ai搭建资源存放箱，但是h5ai只能共享展示文件列表，并不具备管理文件的功能。</p>



<p>虽然可以通过SFTP上传和管理文件，域主自己也尝试了SSHFS-Win挂载VPS的目录，显然速度并不理想，其他的协议（如FTP、SMB）放在公网不安全、配置证书或VPN又相当麻烦，因此还是要搭建一个WebDAV服务。</p>



<span id="more-1440"></span>



<p>关于上篇搭建h5ai的文章，请点击下方阅读：</p>



<figure class="wp-block-mamaduka-bookmark-card is-style-default"><a class="bookmark-card" href="https://v1sta.xyz/tech/file-carbinet-h5ai/"><div class="bookmark-card__image"><img decoding="async" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_MKhlJzZyao.png"/></div><div class="bookmark-card__content"><div class="bookmark-card__title">搭建基于h5ai的文件共享空间：h5ai篇 &#8211; 景の域</div><div class="bookmark-card__description">最近重新弄了一下Minecraft的服务器，上次说到，HMCL启动器支持通过静态文件列表检查整合包完整性，实现自动更新的功能。</div><div class="bookmark_card__meta"><img decoding="async" class="bookmark_card__meta-icon" src="https://v1sta.xyz/wp-content/uploads/2023/05/cropped-blutorii-16x16.png"/><span class="bookmark_card__meta-publisher">v1sta.xyz</span></div></div></a></figure>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Linux平台有许多WebDAV的服务端，Go、Rust等编写的二进制服务端，如Dave、Davrage，有PHP写的SabreDAV，有Docker运行的容器；一些私有云程序如Nextcloud、Rclone也内建了WebDAV的功能，甚至Nginx、Apache都可以通过模块支持简单的WebDAV协议……</p>



<p>域主在搭建WebDAV的时候，先后尝试了Dave和Davrage，下载了二进制文件，复制到 <code>/usr/local</code> 新建子目录，并用 <code>ln -s</code> 在 <code>/usr/bin</code> 目录下创建软链接、自行编写Systemd Service系统服务，再用Nginx反代，但就是跑不起来……</p>



<pre class="wp-block-preformatted">[Unit]
Description=WebDAV Service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/dave
</pre>



<p>Davrage可算作是Dave的改版，Dave使用yaml配置，而Davrage使用环境变量（Environment）运行，读取命令行参数或者env文件中的变量。</p>



<p>Davrage的更新时间比Dave晚一些。不过都卡在了用户验证的环节，而且没法被Windows系统自带的文件夹映射识别到……</p>



<pre class="wp-block-preformatted">[Unit]
Description=WebDAV Service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/davrage
EnvironmentFile=/usr/local/davrage/env
</pre>



<p>尽管轻量小巧，既然不能用也不过是废柴一个（霖并感），逐放弃。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>后来了解到了Rclone，虽然主要的功能是聚合挂载网络云盘映射到本地，但也可以运行兼容的WebDAV服务。</p>



<p>搭建WebDAV的过程中参考了这篇文章： <a href="https://sharpgan.com/rclone-webdav-service-with-systemd-and-nginx-and-cloudflare/">Rclone搭建Webdav服务+Systemd保活+Nginx反代+CF加速一条龙</a> ，虽然也需要自己创建Systemd服务，至少可以正常运行了。</p>



<p>先创建单独的运行用户，通过wget下载rclone并解压，解压到用户目录下：</p>



<pre class="wp-block-preformatted">adduser webdav
su - webdav &amp;&amp; mkdir rclone &amp;&amp; cd rclone
wget https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip &amp;&amp; mv rclone-v1.62.0-linux-amd64/rclone ./ &amp;&amp; rm -rf rclone-current-linux-amd64*
</pre>



<p>下面是Rclone的Systemd服务配置，需要指定运行参数、路径 （其中 <code>[domain.ltd]</code> 为网站目录的域名），并且单独创建htpasswd的密码文件。</p>



<pre class="wp-block-preformatted">[Unit]
Description=Rclone Webdav Service
After=network.target
[Service]
User=webdav
# Execute `systemctl daemon-reload` after ExecStart= is changed.
ExecStart=/home/webdav/rclone/rclone serve webdav /var/www/[domain.ltd]/htdocs --addr 127.0.0.1:5000 --htpasswd /home/webdav/rclone/htpasswd
[Install]
WantedBy=multi-user.target</pre>



<p>在命令行中创建bcrypt格式的密码文件，其中 <code>[username]</code> 为用户名，可随意填写，随后根据交互式命令输入密码：</p>



<pre class="wp-block-preformatted">apt-get install apache2-utils
cd /home/webdav/rclone
touch htpasswd
htpasswd -B htpasswd [username]</pre>



<p>保存以后重启一下systemd的daemon，再启用Rclone服务配置的自启动项：</p>



<pre class="wp-block-preformatted">systemctl daemon-reload
systemctl enable rclone
systemctl start rclone
systemctl status rclone</pre>



<p>Nginx反代可以使用SSL，由于Rclone的WebDAV服务也附带一个简单的文件列表，建议配置额外的端口号或者子域名访问，不放在主要的443 server 配置中，避免安全性和配置冲突问题。</p>



<pre class="wp-block-preformatted">error_page 405 = @app;
location @app {
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}</pre>



<p>访问浏览器，输入webdav的地址，再输入访问的用户名和密码，即可访问rclone自带的索引列表界面：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png" data-lbwps-width="1027" data-lbwps-height="772" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-300x226.png"><img data-dominant-color="fcfcfc" data-has-transparency="true" style="--dominant-color: #fcfcfc;" loading="lazy" decoding="async" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-1024x770.png" alt="" class="wp-image-1443 has-transparency" width="504" height="378" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-1024x770.png 1024w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-300x226.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-768x577.png 768w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png 1027w" /></a></figure>
</div>


<p>使用资源管理器（Explorer）添加网络向导和映射网络驱动器也可以正常识别：</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA.png" data-lbwps-width="595" data-lbwps-height="534" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA-300x269.png"><img data-dominant-color="fafbfb" data-has-transparency="true" style="--dominant-color: #fafbfb;" loading="lazy" decoding="async" width="595" height="534" sizes="auto, (max-width: 595px) 100vw, 595px" src="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA.png" alt="" class="wp-image-1444 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA.png 595w, https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA-300x269.png 300w" /></a></figure>
</div>


<p>缩略图可以正常显示在映射启动器中：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu.png" data-lbwps-width="1033" data-lbwps-height="729" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-300x212.png"><img data-dominant-color="f9faf9" data-has-transparency="true" style="--dominant-color: #f9faf9;" loading="lazy" decoding="async" width="1024" height="723" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-1024x723.png" alt="" class="wp-image-1445 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-1024x723.png 1024w, https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-300x212.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-768x542.png 768w, https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu.png 1033w" /></a></figure>
</div>


<p>至此，一个基于h5ai和WebDAV的文件共享空间，就搭建完成了。</p>



<p>不过也要想一个好名字……</p>



<p>让我这个域主，为这个共享空间命名吧，闭上眼随意思考一个名字来决定，它会暗示这个空间的存在感，也会暗示这个空间的能力……</p>



<p>文件！是文件的资源，让我为它命名，这个共享空间的名字是……</p>



<p>资源存放箱！<sup>File Carbinet</sup>  能力为列出文件资源的列表在站点上共享</p>



<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=500 height=88 src="//music.163.com/outchain/player?type=2&#038;id=30482386&#038;auto=0&#038;height=66"></iframe>

<p><a href="https://v1sta.xyz/tech/file-carbinet-webdav/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/file-carbinet-webdav/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png" length="26251" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png" width="1027" height="772" medium="image" type="image/png"/>	</item>
		<item>
		<title>搭建基于h5ai的文件共享空间：h5ai篇</title>
		<link>https://v1sta.xyz/tech/file-carbinet-h5ai/</link>
					<comments>https://v1sta.xyz/tech/file-carbinet-h5ai/#comments</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Sat, 24 Jun 2023 12:27:23 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[h5ai]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Webinoly]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1425</guid>

					<description><![CDATA[最近重新弄了一下Minecraft的服务器，上次说到，HMCL启动器支持通过静态文件列表检查整合包完整性，实现自动更新的功能。

不过后续可能会分享更多的文件、图片等，NGINX自带的索引列表过于简陋，索性尝试一下热门的h5ai吧。于是，我基于h5ai搭建了本站的资源存放箱（File Cabinet）共享文件。]]></description>
										<content:encoded><![CDATA[
<p>最近重新弄了一下Minecraft的服务器，上次说到，HMCL启动器支持通过静态文件列表检查整合包完整性，实现自动更新的功能。</p>



<p>不过后续可能会分享更多的文件、图片等，NGINX自带的索引列表过于简陋，索性尝试一下热门的h5ai吧。于是，我基于h5ai搭建了本站的资源存放箱（File Cabinet）共享文件。</p>



<span id="more-1425"></span>



<p>并且考虑到SFTP的速度很慢，实在不想上传几个文件还要打开WinSCP之类的运维工具，顺便也搭建了一个WebDAV服务端，用于管理上传的文件。<em><s>后续再更新</s></em></p>



<p>在此之前我使用的是SSHFS-Win，就是下图这个，它可以在资源管理器（Explorer）挂载目录，类似于RaiDrive之类的第三方软件，不过它是自由免费的开源软件。奈何SFTP的文件传输效率还是太低了些……</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/SSHFS-Win_Manager_LL7NJFVRg1.png" data-lbwps-width="895" data-lbwps-height="495" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/SSHFS-Win_Manager_LL7NJFVRg1-300x166.png"><img data-dominant-color="2e333b" data-has-transparency="true" style="--dominant-color: #2e333b;" loading="lazy" decoding="async" width="895" height="495" sizes="auto, (max-width: 895px) 100vw, 895px" src="https://v1sta.xyz/wp-content/uploads/2023/06/SSHFS-Win_Manager_LL7NJFVRg1.png" alt="" class="wp-image-1426 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/SSHFS-Win_Manager_LL7NJFVRg1.png 895w, https://v1sta.xyz/wp-content/uploads/2023/06/SSHFS-Win_Manager_LL7NJFVRg1-300x166.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/SSHFS-Win_Manager_LL7NJFVRg1-768x425.png 768w" /></a></figure>
</div>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">安装h5ai</h1>



<p>h5ai是一个基于PHP开发的文件共享索引程序，由德国人Lars Jung，全称是 HTML5 Apache Index，本是取代Apache自带的静态文件索引功能，不过也可以支持其他的Web服务器。</p>



<figure class="wp-block-mamaduka-bookmark-card is-style-horizontal"><a class="bookmark-card" href="https://larsjung.de/h5ai/"><div class="bookmark-card__image"><img decoding="async" src="https://larsjung.de/_assets_e6efc6e2a36562198dcc2229a4f45013361fb6d0/images/icon.svg"/></div><div class="bookmark-card__content"><div class="bookmark-card__title">h5ai · modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee · larsjung.de</div><div class="bookmark-card__description">modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee</div><div class="bookmark_card__meta"><img decoding="async" class="bookmark_card__meta-icon" src="https://larsjung.de/_assets_e6efc6e2a36562198dcc2229a4f45013361fb6d0/images/icon.ico"/><span class="bookmark_card__meta-publisher">larsjung.de</span></div></div></a></figure>



<p></p>



<p>h5ai很好安装，打开上面的项目主页，可以看到一个大大的版本号下载按钮，右键复制按钮的链接，通过wget就可以下载到服务器上。目前最新的版本号是0.30.0，用cd命令转到文件共享的虚拟主机（vhost）网站目录内下载并解压。</p>



<pre class="wp-block-preformatted">cd /var/www/[domain.ltd]/htdocs
wget https://release.larsjung.de/h5ai/h5ai-0.30.0.zip
unzip h5ai-0.30.0.zip</pre>



<p>解压后会出现一个名为 _h5ai的文件夹，这是h5ai的程序目录，不过默认是隐藏的，下文会提到如何隐藏前缀文件。</p>



<p>然后编辑虚拟主机的配置文件，添加_h5ai路径的index.php索引程序：</p>



<pre class="wp-block-preformatted">root /var/www/[domain.ltd]/htdocs;

index index.php index.html /_h5ai/public/index.php;

location ~ .*\.(zip|ini|jar)?$ { 
     allow all; 
} 
...</pre>



<p>由于我使用的Webinoly有安全模板限制，默认不能通过直链访问一些压缩包和可执行文件后缀的静态资源，因此也添加了特定的文件后缀赦免。</p>



<p>此时在浏览器中输入文件站的域名，在后方加入 <code>/_h5ai/public/index.php/</code> 访问h5ai的自检（探针）页面，默认无密码就可以进入，编辑option文件添加访问密码。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI.png" data-lbwps-width="1091" data-lbwps-height="733" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI-300x202.png"><img data-dominant-color="fbfbfc" data-has-transparency="true" style="--dominant-color: #fbfbfc;" loading="lazy" decoding="async" width="1024" height="688" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI-1024x688.png" alt="" class="wp-image-1428 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI-1024x688.png 1024w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI-300x202.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI-768x516.png 768w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_a0Koz5SEWI.png 1091w" /></a></figure>
</div>


<p>根据自检页面的指示设定文件和目录的权限、安装需要的扩展等等。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_azuig8NHb4.png" data-lbwps-width="917" data-lbwps-height="678" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_azuig8NHb4-300x222.png"><img data-dominant-color="fafafa" data-has-transparency="true" style="--dominant-color: #fafafa;" loading="lazy" decoding="async" width="917" height="678" sizes="auto, (max-width: 917px) 100vw, 917px" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_azuig8NHb4.png" alt="" class="wp-image-1429 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_azuig8NHb4.png 917w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_azuig8NHb4-300x222.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_azuig8NHb4-768x568.png 768w" /></a></figure>
</div>


<p>一切就绪以后，h5ai就可以正常运行了。</p>



<h1 class="wp-block-heading">配置h5ai</h1>



<p>如果想达到上图域主的效果，还需要设定h5ai的配置。</p>



<p>h5ai的主要配置文件位于 <code>_h5ai/private/conf/options.json</code>  ，可以设定的配置非常多，在此仅列出我主要修改的几项：</p>



<pre class="wp-block-preformatted">"view": {
    "binaryPrefix": false,
    "disableSidebar": false,
    "fallbackMode": false,
    "fastBrowsing": true,
    "fonts": ["Ubuntu", "Roboto", "Helvetica", "Arial", "sans-serif"],
    "fontsMono": ["Ubuntu Mono", "Monaco", "Lucida Sans Typewriter", "monospace"],
    "hidden": ["^\\.", "^_h5ai", "icon.ico"],
    "hideFolders": false,
    "hideIf403": true,
    "hideParentFolder": false,
    "maxIconSize": 40,
    "modes": ["details", "grid", "icons"],
    "modeToggle": false,
    "setParentFolderLabels": true,
    "sizes": [20, 40, 60, 80, 100, 140, 180, 220, 260, 300],
    "theme": "comity",
    "unmanaged": ["index.html", "index.htm", "index.php"],
    "unmanagedInNewWindow": false
},</pre>



<p>这里可以设置UI的显示模式、字体、隐藏文件、主题等等，比如hidden设置隐藏文件可以使用正则、也可以单独匹配文件名，这里我添加了 icon.ico 图标文件。</p>



<h3 class="wp-block-heading">语言设置</h3>



<pre class="wp-block-preformatted">"l10n": {
        "enabled": true,
        "lang": "zh-Hans",
        "useBrowserLang": true
 },</pre>



<p>修改 <code>lang</code> 为简体中文 (zh-Hans) ，默认为英语 (en)。不过h5ai本身亦内置多种语言，<code>useBrowserLang</code> 可根据用户端浏览器自动切换显示的语言。</p>



<h3 class="wp-block-heading">修改谷歌镜像</h3>



<p>h5ai的界面默认使用Google Fonts，可以灵活更换字体，但在国内也可能会出现打不开的现象，好在可以替换成其他链接：</p>



<pre class="wp-block-code"><code>"resources": {
        "scripts": &#91;],
        "styles": &#91;
            "//fonts.googleapis.com/css?family=Ubuntu:300,400,700%7CUbuntu+Mono:400,700"
        ]
},</code></pre>



<p>在 <code>styles</code> 中填写自定义字体的URL，使用Google Fonts的话可以把Ubuntu Mono换成其他的字体名称；</p>



<p>以及将 <code>fonts.googleapis.com</code> 替换为国内可用的字体镜像，比如 <code>fonts.loli.net</code> 的，这个是老生常谈了。</p>



<h3 class="wp-block-heading">添加MD文件备注</h3>



<p>还是在 <code>options.json</code> 中，找到 <code>custom</code> 开头，修改 <code>enable</code> 为 <code>true</code> ，可开启文件页眉/页脚备注，支持Markdown和HTML格式。</p>



<pre class="wp-block-preformatted">"custom": {<br>"enabled": true,<br>"stopSearchingAtRoot": true<br>},</pre>



<p>随后可在文件目录中添加 <code>_h5ai.header.md(.html)</code>&nbsp;和 <code>_h5ai.footer.md(.html)</code> 文件</p>



<h3 class="wp-block-heading">修改根目录标题</h3>



<p>h5ai默认根目录标题显示为当前的域名，可以在 <code>_h5ai/public/js/scripts.js</code> 文件中修改自定义名称</p>



<p>找到PHP域名函数 <code>("/"===t?f.getDomain():n.name)</code> </p>



<p>替换为自定义字符串 <code>("/"===t?'资源存放箱':n.name)</code></p>



<h3 class="wp-block-heading">修改网页标题</h3>



<p>网页标题 (Title) 位于 <code>_h5ai/private/php/pages/index.php</code> 文件中，以 <code>&lt;title&gt;</code> <code>&lt;title/&gt;</code> 开头/结尾的HTML代码：</p>



<pre class="wp-block-preformatted">&lt;title&gt;index - powered by h5ai v0.30.0 (https://larsjung.de/h5ai/)&lt;title/&gt; </pre>



<p>此代码即为网页显示的标题，默认显示h5ai的版本、版权信息，可以将其替换成要显示的自定义文字。</p>



<p>需要在 options.json 关闭面包屑导航的动态标题功能。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>域主顺便用Rclone搭建了额外的WebDAV文件传输和管理服务，天色已晚，待我吃完饭后，放到下篇再写……</p>



<p>嗯……如果在自己的服务器架设Jekyll、Hugo或Grav之类的Markdown博客引擎，也许可以用H5ai作为图床和视频站……</p>

<p><a href="https://v1sta.xyz/tech/file-carbinet-h5ai/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/file-carbinet-h5ai/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_MKhlJzZyao.png" length="745912" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_MKhlJzZyao.png" width="1316" height="742" medium="image" type="image/png"/>	</item>
		<item>
		<title>防范MC模组的Fracturizer蠕虫病毒</title>
		<link>https://v1sta.xyz/tech/minecraft-fracturizer-virus/</link>
					<comments>https://v1sta.xyz/tech/minecraft-fracturizer-virus/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Thu, 22 Jun 2023 04:58:05 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Minecraft]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1414</guid>

					<description><![CDATA[大概是6月高考期间（9号）的时候，爆出了一个消息，说是CurseForge的一些MC模组（Mod）感染了一种名为Fracturizer的病毒，而且能二次传染，通过jar传播，盗取用户的隐私信息……

虽然那个时候我在搬家，没有时间折腾Minecraft，何况我是昨天折腾服务器才知道这则火星新闻的]]></description>
										<content:encoded><![CDATA[
<p>大概是6月高考期间（9号）的时候，爆出了一个消息，说是CurseForge的一些MC模组（Mod）感染了一种名为Fracturizer的病毒，而且能二次传染，通过jar传播，盗取用户的隐私信息……</p>



<p>虽然那个时候我在搬家，没有时间折腾Minecraft，何况我是昨天折腾服务器才知道这则火星新闻的</p>



<p>经过调查以后，所幸也只是一些“排行榜热门”的模组，我玩的基本上是一些小众Mod，没有感染这个病毒。不过还是有必要记录一番。</p>



<span id="more-1414"></span>



<p>国内外的各类玩家和安全论坛、资讯门户几乎都报道了这则重要的消息，在此列出一些我搜集到的链接：</p>



<ul class="wp-block-list">
<li><a href="https://support.curseforge.com/en/support/solutions/articles/9000228509-june-2023-infected-mods-detection-tool/">June 2023 &#8211; Infected mods detection tool &#8211; CurseForge</a></li>



<li><a href="https://www.bilibili.com/read/cv24201292">【安全警告】大量 MC Mod、整合包、服务器插件遭到蠕虫病毒投放，请保持警惕！- 哔哩哔哩</a></li>



<li><a href="https://cert.360.cn/warning/detail?id=6486d92ed5b5ed368982ce1b">安全事件周报 2023-06-05 第23周 &#8211; 360CERT</a> <em><sub>臭名昭著的360也报道了此事</sub></em></li>



<li><a href="https://github.com/fractureiser-investigation/fractureiser/blob/main/lang/zh-CN/docs/users.md">模组玩家自查指南（译文） fractureiser-investigation/fractureiser &#8211; GitHub</a></li>



<li><a href="https://github.com/overwolf/jar-infection-scanner" data-type="URL" data-id="https://github.com/overwolf/jar-infection-scanner">overwolf / jar-infection-scanner &#8211; GitHub</a>  <em>适用Win平台的JAR扫描器</em></li>
</ul>



<p><em>域主用了最后一条的JAR扫描器，并没有发现病毒，不过这个扫描器倒是用MFC写的……</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>据说是CurseForge的数据库被盗，攻击者通过登录知名作者的账号，在CurseForge分发含有病毒的模组等资源，从而进一步传播到国内外的玩家群中（神似马斯克推特被盗发布诈骗链接的乌龙事件）</p>



<p>受病毒影响的整合包和Mod包括了Better MC&nbsp;整合包系列、When Dungeons Arise、Sky Villages、DungeonX、Skyblock Core等等，还有一些Bukkit的插件，由于CurseForge不止托管MC模组，还有WOW的插件等其他游戏的资源，也可能受到了感染。</p>



<p>这个病毒会在系统中添加自身的运行守恒，窃取各个浏览器和游戏平台、社交网络的账号登录凭据（微软、Steam、Discord、Twitter等，还有加密币的钱包）；自动下载其他的恶意病毒，勒索程序、让整个基于Java虚拟机的资源（包括MC本体）感染病毒；通过局域网联机分发到其他电脑上，使得一个网络下的所有电脑成为DDoS僵尸集群……</p>



<p>简直是一个标准的蠕虫病毒行为，就像2017年那会的WannaCry那样。</p>



<p>这个病毒不仅影响主流的Windows，还会影响Linux（但没有表明是否为桌面环境），如果这种病毒会在无头Linux搭建的MC服务器发作，危险性可想而知；不过macOS貌似未受影响，可能是默认有GateKeeper的防护机制，除非用黑苹果关掉了强制应用签名保护。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>总之算是虚惊一场，也不能不闻窗外事。以后也许还会遇到病毒的信息。</p>



<p>然而我还是要排查究竟是哪个Mod不兼容OptiFine导致进不去世界……模组服是真折腾</p>

<p><a href="https://v1sta.xyz/tech/minecraft-fracturizer-virus/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/minecraft-fracturizer-virus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" length="199214" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" width="512" height="512" medium="image" type="image/png"/>	</item>
		<item>
		<title>Proxmox VE 退出集群指令记录</title>
		<link>https://v1sta.xyz/tech/pve-exit-cluster/</link>
					<comments>https://v1sta.xyz/tech/pve-exit-cluster/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Mon, 19 Jun 2023 15:49:15 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PVE]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1411</guid>

					<description><![CDATA[由于PVE的集群机制需要两台宿主机在线运行，才可以启动虚拟机。 我的两台机器只是由于要迁移虚拟机才组成了集群。 &#8230; <a href="https://v1sta.xyz/tech/pve-exit-cluster/" class="more-link">继续阅读<span class="screen-reader-text">Proxmox VE 退出集群指令记录</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p>由于PVE的集群机制需要两台宿主机在线运行，才可以启动虚拟机。</p>



<p>我的两台机器只是由于要迁移虚拟机才组成了集群。<br>两台PVE运行的服务彼此没有关联性，因此，集群也就没有保留的必要性，逐使其两者各自退出。</p>



<span id="more-1411"></span>



<pre class="wp-block-preformatted">systemctl stop pve-cluster.service
systemctl stop corosync.service
pmxcfs -l
rm /etc/pve/corosync.conf
rm -rf /etc/corosync/*
killall pmxcfs
systemctl start pve-cluster.service</pre>



<p>以上的命令请在shell中使用root执行。</p>



<p>原理为：停止PVE和集群的服务，并设置本机操作的宿主为「本地模式」，删除之前的集群配置文件和进程，再次启动单独的PVE服务。</p>



<p>另外，还需要删除本机以外的其他集群节点（Node），以便从Web UI中移除：</p>



<pre class="wp-block-preformatted">cd /etc/pve/nodes
rm -rf [本机之外的其他节点]</pre>

<p><a href="https://v1sta.xyz/tech/pve-exit-cluster/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/pve-exit-cluster/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" length="199214" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" width="512" height="512" medium="image" type="image/png"/>	</item>
		<item>
		<title>博客搬家</title>
		<link>https://v1sta.xyz/tech/%e5%8d%9a%e5%ae%a2%e6%90%ac%e5%ae%b6/</link>
					<comments>https://v1sta.xyz/tech/%e5%8d%9a%e5%ae%a2%e6%90%ac%e5%ae%b6/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Fri, 16 Jun 2023 18:50:32 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FRP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PVE]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1386</guid>

					<description><![CDATA[今天本来想写一下MC服务器插件的记录，突然就出现了「Cookies被阻止或者您的浏览器不支持」的问题，导致域主 &#8230; <a href="https://v1sta.xyz/tech/%e5%8d%9a%e5%ae%a2%e6%90%ac%e5%ae%b6/" class="more-link">继续阅读<span class="screen-reader-text">博客搬家</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p>今天本来想写一下MC服务器插件的记录，突然就出现了「Cookies被阻止或者您的浏览器不支持」的问题，导致域主登不进去WP的仪表后台了……</p>



<p>也不知道是哪里出现的bug，大概率还是FRP穿透和缓存的锅，索性直接把博客搬到VPS上运行了，还好之前就用Webinoly备份了下。</p>



<p>虽然1GB的内存有点吃力，不过MariaDB的占用好像也没那么夸张，虽然很多人当成MySQL……稳定性也比FRP穿透好了很多</p>



<p>还是不换成SQLite了，Webinoly一键安装的WP功能配置需要依赖MySQL引擎，再转换就太麻烦了（尽管我自己的Blessing Skin皮肤站用的也是SQLite数据库）</p>



<p>有点后悔退租了每个月5美元的3C4G的VPS，毕竟还得吃饭。。实话说如果不是做论坛，那么高的性能其实用不到</p>

<p><a href="https://v1sta.xyz/tech/%e5%8d%9a%e5%ae%a2%e6%90%ac%e5%ae%b6/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/%e5%8d%9a%e5%ae%a2%e6%90%ac%e5%ae%b6/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" length="199214" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2.png" width="512" height="512" medium="image" type="image/png"/>	</item>
	</channel>
</rss>
