论坛改版cloudreve更新, 链接 https://disk.monika.love/s/bwpIm

增加了登录引导.

我觉得这玩意但凡给个改css的接口都不用重新编译一遍. 太脑瘫了.

论坛专用css更新:

.buttonchat{

box-shadow: 0 0 5px #000;

transition:all 0.3s ease;z-index:998; position: fixed; right:12%;bottom:10%; width:75px; height:75px; border-radius:50%;color:white; background-color: #f7a1cf; border:none;

}

.buttonchat:hover{

box-shadow: 0 0 8px #000;

transition:all 0.3s ease;transform:scale(1.1);

}

.buttonchat:hover>chtip{

transition:all 0.3s ease;

display:none;

}

.buttonchat>chtip{

transition:all 0.3s ease;

font-size:36px;

}

.buttonchat:hover:after{

transition:all 0.3s ease;

font-weight:bold;

-webkit-text-stroke: 1px #754d63;

content:"Chat!";

}

.buttonchatL{

box-shadow: 0 0 5px #000;

transition:all 0.3s ease;z-index:997; position: fixed; right:12%;bottom:10%; width:50px; height:25px; border-radius:10% 75%;color:white; background-color: #f7a1cf; border:none;

transform: translateX(-35px) translateY(-75px) rotate(70deg);

}

.buttonchatL:hover{

box-shadow: 0 0 8px #000;

transition:all 0.3s ease;

transform: translateX(-32px) translateY(-75px) rotate(77deg);

}

.buttonchatL>chtipL{

transition:all 0.3s ease;

font-size:10px;

}

.buttonchatL:hover>chtipL{

transition:all 0.3s ease;

display:none;

}

.buttonchatL:hover:after{

transition:all 0.3s ease;

font-weight:bold;

-webkit-text-stroke: 1px #754d63;

content:"Disk!";

}

.buttonchatR{

box-shadow: 0 0 5px #000;

transition:all 0.3s ease;z-index:996; position: fixed; right:12%;bottom:10%; width:50px; height:25px; border-radius:75% 10%;color:white; background-color: #f7a1cf; border:none;

transform: translateX(10px) translateY(-75px) rotate(-70deg);

}

.buttonchatR:hover{

box-shadow: 0 0 8px #000;

transition:all 0.3s ease;

transform: translateX(7px) translateY(-75px) rotate(-77deg);

}

.buttonchatR>chtipR{

transition:all 0.3s ease;

font-size:10px;

}

.buttonchatR:hover>chtipR{

transition:all 0.3s ease;

display:none;

}

.buttonchatR:hover:after{

transition:all 0.3s ease;

font-weight:bold;

-webkit-text-stroke: 1px #754d63;

content:"Wiki!";

}

.DiscussionListItem-main mark {

background:#FFFF66 !important;

color: #f44336!important;

}

.ChatHeader

{

background-color: #f7a1cf !important; /* chat header color */

}

.ChatViewport

{

background-image: linear-gradient(to bottom right, #f7a1cf, #E0E0E0);

}

.ChatInput{

background-color: transparent; position:relative;bottom:-5%; width:100%;height:10px;margin:0 0 50px 0;

}

.cip{

position:relative;top:-20px;

}

.send{

top:-10px;

}

#open-file {

width: 100px;

height: 50px;

margin: auto;

border: 1px solid #5B5B5B;

border-radius: 5px;

background-color: #FCFCFC;

cursor: pointer;

}

#open-file:hover {

background-color: #F0F0F0;

}

.facog1{

color:#2c1c24; transition: all 0.2s;

}

.fa-volume-up{

color:#2c1c24; transition: all 0.2s;

}

.fa-bell-slash{

color:#2c1c24; transition: all 0.2s;

}

.fa-window-minimize{

color:#2c1c24; transition: all 0.2s;

}

.fa-angle-double-right{

color:#2c1c24; transition: all 0.2s;position:relative;top:-20px;

}

.fa-upload{

color:#2c1c24; transition: all 0.2s;position:relative;top:-20px;

}

.chlim{

position:relative;top:-20px;

}

.fa-cog:hover{

color:#62003e

}

.fa-volume-up:hover{

color:#62003e

}

.fa-bell-slash:hover{

color:#62003e

}

.fa-window-minimize:hover{

color:#62003e

}

.fa-angle-double-right:hover{

color:#f7a1cf;

}

.fa-upload:hover{

color:#f7a1cf;

}

.ChatList

{

background-color: #f7a1cf !important; /* chatlist background color */

.header {

background-color: #f7a1cf !important; /* chatlist header color */

}

.panel-preview

{

&:hover:not(.active) {

box-shadow: 0 0 0 3px #f7a1cf !important; /* primary hover color #94ddff*/

@media @phone {

background-color: #f7a1cf !important;

}

}

&.active {

box-shadow: 0 0 0 3px #ff6ac3 !important; /* primary color #94ddff*/

}

.message .sender {

color: #f7a1cf !important;

}

}

.panel-add {

&:hover {

box-shadow: 0 0 0 3px #f7a1cf !important;

}

}

}

@media @phone {

.NeonChatFrame.hidden {

margin-bottom: 52px;

}

}

@media (min-width:768px) and (max-width:999px) {

.Search-input input {

width: 30px;

max-width: 120px;

}

.Search.focused .Search-results,.Search.focused input {

width: 120px;

}

.Search.focused {

margin-left: auto

}

.Button-label {

.LinksButton-title {display:none}

}

}

@media (min-width:1000px) and (max-width:1099px) {

.Search-input input {

width: 120px;

max-width: 200px;

}

.Search.focused .Search-results,.Search.focused input {

width: 200px

}

.Search.focused {

margin-left: auto

}

}

@media (min-width:1100px) and (max-width:1399px) {

.Search-input input {

width: 225px;

max-width: 325px;

}

.Search.focused .Search-results,.Search.focused input {

width: 325px

}

.Search.focused {

margin-left: auto

}

}

@media (min-width:1400px) {

.Search-input input {

width: 325px;

max-width: 600px;

}

.Search.focused .Search-results,.Search.focused input {

width: 600px

}

.Search.focused {

margin-left: auto

}

}

@screen-desktop-hd-max: (@screen-desktop-hhd - 1);

@screen-desktop-hhd: 1400px;

@desktop-hd: ~"(min-width: @{screen-desktop-hd}) and (max-width: @{screen-desktop-hd-max})";

@desktop-hhd: ~"(min-width: @{screen-desktop-hhd})";

:root {--screen-desktop-hhd: 1400px;}

@media (min-width: 1400px){

.container {

width:1400px

}

}

.item-like .Button:before {

font-family:'Font Awesome 5 Free';

font-weight:600;

font-size:14px;

content:'\f164';

vertical-align:-1px;

margin-right:4px;

}

.item-reply .Button--link:before {

font-family:'Font Awesome 5 Free';

font-weight:600;

font-size:15px;

content:'\f3e5';

margin-right:4px;

vertical-align:-2px;

}

@media (min-width:999px){

.Post-actions {

position:absolute;right:1em;bottom:0.4em;

}

}

.item-bestAnswer{

button{

background-color:transparent;

color:#936c83;

font-weight:normal;

margin:0px 0px !important;

padding-left:13px;

padding-right:13px;

}

button:hover{background-color:transparent;color:#f7a1cf}

button:active{background-color:transparent;color:#f7a1cf}

.Button:before {

font-family:'Font Awesome 5 Free';

font-weight:600;

font-size:15px;

content:'\f5c0';

margin-right:4px;

vertical-align:-2px;

}

}

.Post{

.item-who-read-unread{

button{

i{position:relative;left:2px;}

span{display:none}

width: 36px;

text-align: center;

padding: 8px 0;

background: transparent;

border-radius: 18px;

}

button:hover{background-color:#181015}

button:active{background-color:#090608}

position:relative;

bottom:-3px;

left:-6px;

}

}

.AlertManager-alert{

.Alert--success{

-webkit-animation:fade-out 6s ease-in-out 0s 1 alternate forwards;

}

@keyframes fade-out {

from {

opacity: 1;

}

to {

opacity: 0;

}

}

.Alert--error{

-webkit-animation:fade-loop 1.5s ease-in-out 0s infinite alternate forwards;

}

@keyframes fade-loop {

0%{opacity: 1;}

100%{opacity: 0.5;}

}

}

.item-moreTags {

a:before {

position:absolute;

color:#936c83;

font-family:'Font Awesome 5 Free';

font-weight:600;

font-size:15px;

content:'\f141';

left:0px;

}

}

@media (min-height:100px) and (max-height:1000px) {

.IndexPage-nav .item-nav{

max-height: calc(~"100vh - 190px") !important;

height: calc(~"100vh - 190px") !important;

}

}

里面有很多内容都已经用不上了, 但是又不敢随便删. 应该没什么大问题.

比起之前的优化了fof/best-answerclarkwinkelmann/flarum-ext-who-read的按钮效果, 并且针对各个可能的分辨率进行了大量优化.

同理, 其它flarum也能用, 但是分辨率优化还得看具体情况才好.

23.11.22更新: 调整了clarkwinkelmann/flarum-ext-who-read的显示效果.

24.1.11更新: 调整了sticky sidenav的显示效果.

我的主网关配置

镜像: https://disk.monika.love/s/ZVaSX

openwrt, 包含无线网卡的驱动和luci.

  • 配置pppoe, 用isp给的账号密码就行.
  • 如果你和我一样有多级路由, 把ipv6分配全部改成中继模式, 并且关闭一级路由的dhcp. 如果不是那就不管.
  • 如果你和我一样有多级路由, 一定别忘了填静态路由表. 要路由一个网域, 一定要把长度带上, 一般是/24.
  • 装ddns-go. 我觉得它比lucky靠谱一些.
  • 装lucky去映射一些无关紧要的网段. lucky删除配置的时候会把后面的弄乱, 别放重要的映射在这里.
  • 装nps, 当vpn去用. 转发端口数量有限的话问题不大.
  • 配置无线. 很奇怪的是ax210只能用N模式发射, 但是这玩意能用就无所谓. 如果你真指望这个上网可以改地区码试试看.
  • 对公网开放访问的服务必须用强密码. 我其实对我的密码也比较没底, 但是爆破和对表肯定弄不出来就行. 一定要看浏览器的密码泄露提醒.
  • nps在openwrt上安装后, 需要自己去修改/etc/init.d/nps, 至少添加boot() {}命令, 不然会自启不了.

然后是提醒我自己的:

  • 论坛服务的主端口是28991, 把它映射到后端的443. 另一个重要的映射是ftp, 21到21就行.
  • 还有ftp的被动网域, 最好加在lucky的第一条, 选择39000-40000.
  • 邮箱服务器的端口有25,110,143,465,587,993,995, 全部映射了就行.
  • openwrt自己有samba4服务和vsftpd, 要转发就先关掉.
  • 及时备份. openwrt的磁盘镜像很小, 备个份完全没损失. 最好每次修改后都备份.

宝塔再次向我证明了它的老血栓.

我找了半天这个没有使用索引的表到底在哪, 最后看了慢日志, 发现行数太少的时候mysql会拒绝使用索引来提速.

但是这种情况也会被记下来, 也不带筛选地就提醒我索引结构出问题了.

出你妈逼.

如果需要成规模, 专业化或者客制化地部署远程桌面:

别用Rustdesk.

我本来是很喜欢Rd的, 今天自建了服务器打算换个id方便管理, 就去看了文档.

你猜怎么着?

这个项目最开始是2020年在v2ex出现的, 满口承诺着完全开源免费.

结果发布仅仅两个版本(114 115)之后就把改id的功能砍了, 加进了Pro.

不支持买断, 还在issue里面说我也要恰饭的. 搞得跟我不要恰饭的一样.

别的就算了 改id这种功能 都自建服务器了还要卡着?

更逆天的是, 美其名曰安全起见, 在12x版本后把社区里琢磨出来改id的办法给堵上了.

最最逆天的是, 把最开始没收费的114版本的服务端从github上删了. 要么交钱, 要么记随机数id.

我已经从我的所有工作配置里把rd删掉了, 之后打算自建一套novnc.

你可以说你免费给用社区版就是大恩大德了, 我是不吃你这套的.

收录 Unihertz Titan UFS版刷机包: https://disk.monika.love/s/ORVHD

不会真的有人和我一样用这种键盘老古董吧.

因为受众实在太小, 所以资料和资源都非常难找. 但discord上非常有钻研精神的老哥们还是找官方弄到了这份ufs版的固件.

这个Titan的闪存有两个版本, 早期一些的是emmc5.1, 后面升级成了ufs2.0 固件就不一样了.

网上勉强能找到的固件只有emmc版本的, 我在这上栽了两个大跟头.

刷写任何错误版本闪存的固件都会导致无限重启循环, 而Titan的启动逻辑甚至都和一般安卓手机不一样…

  • 如果你很不幸地陷入了无限重启, 像正常手机一样长按电源/电源+音量是没用的.
  • 要脱离循环, 你首先需要在设备屏幕刚亮的时候, 就按住音量+. 不要按电源!
  • 接下来你会进入一个"无命令"(no command)界面. 这里是第二个坑, 虽然有躺着的机器人图标, 但现在手机并不是fastboot. 我查了资料, 应该又是一种很罕见的"无指令recovery"模式.
  • 接下来, 先按住电源键, 然后按下音量+, 不要拖太久. 接下来你就可以看到熟悉的recovery界面了.
  • 然后就可以按正常手机的思路排障了, 该干啥干啥.

我上传的固件经过测试可以正常刷写magisk, 照正常流程就行.

只能说unihertz这破厂 真的是.

要不是它长得颇有黑莓风骨, 鬼还买它

收录 壮志凌云(Jets 'N Guns)黄金版: https://disk.monika.love/s/8roId

呃 这个跟技术就没什么关系了, 是一个老游戏.

如果你的童年里接触过这款 画风独特的横板飞行射击爽游, 打算回顾一下就玩吧.

现在看来剧情比较简单, 当个解压游戏还是挺好的.

顺便, 我自己玩的时候出现了"不能用快捷方式"的奇怪问题, 只能直接去点exe. 我猜它是在某处直接调用启动路径来读取资源文件了.

6 天 后

关于交叉编译到底能不能用多线程

在网上看到的说法, 很多人都说多核编译容易出问题, 但是并没有看到有什么人说出来到底是什么问题.

多核编译的优势实在明显, 那就是速度快太多了. 我用单核多核测试了很多次openwrt的编译, 然后:

  • 多核编译应该不存在实质上的"导致问题". 用单核编译能一次成功的固件, 多核也可以.
  • 多核编译最大的问题是日志. 如果其中一个线程发生致命错误, 剩下的线程不会停, 最终编译失败的时候你就找不到真正的问题在哪.
  • 多核编译需要一个很理想的网络环境. 如果你对下载不太自信, 就单核去试试看再说.
  • 一般而言很多编译是会被保留的. 如果你觉得固件的可靠性已经差不多了, 先多核走一次可能会总体上更快.
  • 无论你怎么编, 一定加上要求输出详细日志的参数! 一定一定!
7 天 后

如何给你的pve虚拟机直通显卡

  • 必须在宿主机中手动禁用显卡驱动
  • 必须调整主板为q35, 直通显卡为pcie设备.
  • 好像没有了.

vGPU license的部署(docker): docker run -d -e DLS_URL=你可以持续访问此服务器的url -e DLS_PORT=这个url的port -p 这个url的port:443 makedie/fastapi-dls

我以为我之前说过来着, 居然没有. 也懒得详细解释了. 总之这个能用.

collinwebdesigns/fastapi-dls也提供这个容器镜像.

容器是自带使用说明的, 你也可以直接去https://edgemonix.top:7070/-/readme看.

一份535版本的vGPU驱动: https://disk.monika.love/s/7aWij

实测可以用, 不太远古的gpu, 基本上帕斯卡以后的都能装.

需要的东西里面都有, 怎么处理那个证书服务器就看你自己的了.

如何让openwrt正确地分配ipv6地址:

  • 服务器模式-服务器模式-混合模式. 有时候多层路由下, 同一个设备会被分配多个ipv6地址, 一般来说不打紧.
  • dhcp一定要开! 就算你不打算真的用它的dhcp也一定要开, 关闭动态dhcp即可.
  • 一定不要动wan6! 就算你看不懂它到底在干什么/觉得它啥也没干, 如果你的接口项目表里面已经有至少一个可用的ipv6了, 那就别动wan6!
  • 如果你真的动了wan6, 往往就只能删掉wan重建了. 一般会顺带把wan6生成出来. 如果还没有就回档.

给pptp整了半天没法正常连接, 最后用ubuntu直接就连上了. 然后才意识到服务端没问题.

  • 作为客户端的测试设备, 一定优先用ubuntu或者kali. centos容易出现奇怪的问题.
  • 作为服务端, 如果你自信就用centos吧.
  • 别相信windows自带的任何网络功能. 就是别相信.
16 天 后

如果你使用mailcow发信代理, 比如ses或者什么别的:

把这几个全勾上.

  1. 中继这个域名: 废话, 就是中继这个域名.
  2. 中继所有收件人: 一个和收件身份验证有关的选项. 如果你的postfix日志里面"存在的用户被认为不存在", 可能是没打开这个.
  3. 只为不存在的地址中继: 非常重要. 这个"不存在的地址"指的是路由表上不存在的, 而不是dns上不存在的, 也就是说指本地之外的地址. 如果不勾这个, 本地递送会出现loop被bounce掉的情况.

赛扬的处理器是不适合做核显直通的, 最好别想了.

说的就是你, n5105. 这些东西老老实实用网页, 或者干脆hyperv.

炮制纯净无广告版的netdata docker:

  • docker-compose.yml

    version: '3'

    services:

    netdata:

    image: netdata/netdata

    container_name: netdata

    pid: host

    restart: unless-stopped

    cap_add:

    - SYS_PTRACE

    - SYS_ADMIN

    security_opt:

    - apparmor:unconfined

    volumes:

    - ./nd/ndweb:/usr/share/netdata

    - ./nd/ndconfig:/etc/netdata

    - ./nd/nddata:/var/lib/netdata

    - ./nd/ndcache:/var/cache/netdata

    - /etc/passwd:/host/etc/passwd:ro

    - /etc/group:/host/etc/group:ro

    - /etc/localtime:/etc/localtime:ro

    - /proc:/host/proc:ro

    - /sys:/host/sys:ro

    - /etc/os-release:/host/etc/os-release:ro

    - /var/log:/host/var/log:ro

    - /var/run/docker.sock:/var/run/docker.sock:ro

    environment:

    - DO_NOT_TRACK=1

    - DISABLE_TELEMETRY=1

    - NETDATA_DISABLE_CLOUD=1

    - NETDATA_REQUIRE_CLOUD=0

    ports:

    - "19999:19999"

  • ./nd/ndweb/web/index.html

    <script language="javascript"type="text/javascript"> window.location.href="v1"; </script>

  • rm -rf ./nd/ndweb/web/v2

更适合赛博洁癖体质.

就不登录, 就不更新, 就不看你的推广, 嘻嘻

这他妈又是什么?

我不知道, 我最后放弃思考了, 把内核日志调到了3. 眼不见心不烦.

问题是在宿主机今天的一次system halt之后发生的, 回滚虚拟机没有用.

暂时没有尝试重新插拔什么的. 日志虽然一直在往外冒, 但是网卡并没有连接性问题.

真是莫名其妙.

12.11更新: 在完全冷重启宿主机之后, 问题消失了.

就和它的出现一样莫名其妙.

如果服务器没有稳定的ipv6, 就不要给ftp一个存在AAAA的域名.

我懒得重复一遍为什么了. 这个问题太弱智了.

1 个月 后

如果你的虚拟机有任何直通pci/pcie性质的设备(网卡显卡都算), ballooning就不会起任何作用, 建议关掉.

打赏

  • 5 分 来自: Ἥβη

不要相信任何"自动打开端口"的插件, 至少是最好别相信. 自己在防火墙里写一遍吧.

捐赠页面iframe的php代码, 我自己写(缝合)的:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Donations</title>

<link rel="icon" href="./favicon.ico" type="image/x-icon">

<style type="text/css">

p {overflow:hidden;

text-overflow:ellipsis;

white-space:nowrap;

font-size: 12px;

}

table {table-layout: fixed;

width: 950px;

left:50%;

border-spacing: 0px 10px;

}

body {justify-content: center;

display: flex;

}

img {

border-radius:50%;

left:7px;

position: relative;

}

</style>

</head>

<?php

function getByPage($pagenum,$perpage){

$user_id = "你自己的userid";

$params = json_encode(['page' => $pagenum, 'per_page' => $perpage]);

$ts = time();

$token = '你自己的爱发电开发者token';

$sign = md5(join("",array($token,'params',$params,'ts',$ts,'user_id',$user_id)));

$data = json_encode(["user_id" => $user_id, "params" => $params, "ts" => $ts, "sign" => $sign]);

$opts = array('http' => array('method' => 'POST', 'header' => 'Content-type: application/json' . 'Content-Length: ' . strlen($data) . '\r\n', 'content' => $data));

$context = stream_context_create($opts);

$html = file_get_contents('https://afdian.net/api/open/query-sponsor', false, $context);

return $html;

}

$html = json_decode(getByPage(1,24),true);

#echo $html;

$list_temp = $html;

$count = $list_temp['data']['total_count'];

$pagestoask = intval($count/24)+1;

for ($j=1;$j<$pagestoask;$j++){

${'html'.$j} = json_decode(getByPage($j+1,24),true);

$html = array_merge_recursive($html,${'html'.$j});

}

$list = $html;

#echo json_encode($html);

function cmp($a, $b)

{

if ($a == $b) {

return 0;

}

return ($a < $b) ? 1 : -1;

}

foreach ($list['data']['list'] as $m => $n){

$purctime[$m]['oritime'] = $n['last_pay_time'];

$purctime[$m]['oriid'] = $m;

}

usort($purctime,'cmp');

foreach ($purctime as $key => $value) {

#echo "\$purctime[$key]['oritime']: " . $value['oritime'] . "<br>";

#echo "\$purctime[$key]['oriid']: " . $value['oriid'] . "<br>";

$list['data']['list'][$value['oriid']]['align_id_edge'] = $key;

#echo $list['data']['list'][$value['oriid']]['align_id_edge'];

}

#echo $list;

#echo $count;

echo "<table border='0' cellspacing='0'><tr>";

foreach ($list['data']['list'] as $k => $v){

$list2[$v['align_id_edge']] = $v;

}

#echo json_encode($list2);

for ($i=0;$i<24 && $i<$count;$i++){

$m = $i;

$n = $list2[$m];

#echo $m;

${"tbline".$m} = "";

if (!($m%8)){

echo "</tr><tr>";

}

${"all".$m} = $n;

#echo $k . "\n";

#echo json_encode(${"all".$k}["user"]) . "\n";

${"id".$m} = json_encode(${"all".$m}["user"]["user_id"]);

${"name".$m} = str_replace("爱发电用户_","",trim(json_encode(${"all".$m}["user"]["name"], JSON_UNESCAPED_UNICODE),'\"'));

${"avatar".$m} = json_encode(${"all".$m}["user"]["avatar"]);

echo "<td><img src=${"avatar".$m} height='75px' width='75px' ></img>\n<p align=center>${"name".$m}</p></td>";

}

echo "</tr>";

#$name = $list['data']['list'][1]['user'];

#echo json_encode($name);

?>

我的代码会从接口拉取全部捐赠者, 并按最后捐赠时间重新排序. 官方没有做这个功能, 属于是脑血栓中的脑血栓.

翻页懒得做了, 毕竟没谁会想翻页看这个. 链接也是同理, 自己写并不难.

我写的很多地方很冗杂或者怪异, 属于是能跑就行的典范. 最好别学我.

应该只适用于爱发电, 但是改改接口也能干别的. 看你自己的需要了.

pve纯虚拟化(不用u盘)安装unraid

  1. 下载unraid6.12:https://disk.monika.love/s/RLGuD (转自恩山)
  2. 创建虚拟机, 不要引导介质, 划一块2g左右的硬盘, 系统类型可以选windows.
  3. 删掉tpm和efi, 重建一块efi, 注意去掉"pre-enrolled key"的选项, 不然会读不到unraid的efi.
  4. 这里假设你的虚拟机编号是100, 且没有其它项目占用loop盘符(一般都不会有).
  5. 宿主机控制台:losetup -P /dev/loop0 /dev/pve/vm-100-disk-0 && mkdir /tmount
  6. 宿主机控制台:parted /dev/loop0, 创建分区, 分区表为GPT, 分区类型为FAT32, 然后mkfs.vfat /dev/loop0p1
  7. 宿主机控制台:mount /dev/loop0p1 /tmount
  8. 解压unraid, 用xftp把里面的所有东西传进宿主机的/tmount目录.
  9. 宿主机控制台: mlabel -i /dev/loop0p1 ::UNRAID
  10. 宿主机控制台:cd / && umount /tmount && losetup -d /dev/loop0
  11. 虚拟机-硬件, 确认bios类型是OVMF/UEFI, 机型是q35. 然后虚拟机-选项, 把硬盘设置为第一启动顺序.
  12. 启动试试看吧.

在flarum中使用css3 calc():

我是在修改sticky sidenav左侧栏高度的时候遇到了这个问题, calc(75vh - 25px)居然被变成了50vh.

这个问题的原因是flarum使用了一个叫less的样式管理程序(而且似乎版本很旧). less会自动处理一遍css的内容.

而less的规则不允许不同单位进行运算, 所以会自动统一为第一个单位(hv), 不看调试器还发现不了.

解决办法: ~"code"可以要求less跳过不处理引号内的字段, ~'code'也可以.

所以, calc(~"75vh - 25px")即可.

5 天 后

开启ip forwarding的设备就可以被静态路由视为路由器了.

如果还是不行, 先把防火墙关掉再说!

收录:关于点对点协议与iptables的恩怨情仇的一篇文章

https://www.cnblogs.com/osnosn/p/10703841.html

自己留着备用.

这个配置是在保证网络本身安全的前提下设定的, 也就是说并不防入侵. 生产环境下需要谨慎处理.

iptables需要iptables-save才能保存下来, 不然重启就没了!

需要自动装载的话还要装一个软件包, 网上搜就是.

最近css和js改动有点频繁, 暂时不在帖子里更新了.

稳定下来之后我会传到网盘.

realtime无法正常推送帖子的问题已经被定位且修复.

修复方案是砍掉ip查询功能. 它的逻辑写得很有问题, 直接从_SERVER参数获取地址, 相当于直接把代理机的地址给获取去了. 不知道为什么这会导致查表中ip变成null. 干脆把所有ip写死了.

这样改动之后应该关闭u/v功能选项.

9 天 后

不多说, 自己看

遇到网络问题, 记得检查自己的请求头.

收录修改: 七牛云/又拍云自动更新cdn证书: https://disk.monika.love/s/KRZUP

不做说明, 用得上这玩意的人肯定自己看得懂.

又拍自动续签泛域名要收999, 贼恶心, 用这个+acme/宝塔自动签发都可以搞定.

项目原地址: https://github.com/Angel-fund/sslmanage. 稍微修改了一下占位. 只用又拍的话运行test.py就行.

目前最新版的dcc chat: https://disk.monika.love/s/a4NSR

更新内容基本上就是去掉了第一次点确定的问题.

数据库目录和密码都在里面, 我懒得删了, 反正外部访问不到. 自己要用的话记得改.

真几把累啊.

或许会在什么时候加上头像同步的功能, 想找罪受了的话.

17 天 后

如何正确地在2024年在手机上使用tf卡:

adb shell

su

sm list-disks

sm partition disk:179,0 mixed 80

拔出来, 上读卡器, 用diskgenius重新格式化exfat分区

然后插回去就行了

如果设备此前有过adoptable分区, 备份的应用就必须要设备有adoptable的情况下才能被还原.

这个外存的盘符, 挂载点, 大小并不重要.

终于学会了部署l2tp/ipsec, 可喜可贺.

问题出在端口转发上.

用于网络相关用途的docker, 尽可能使用host网络.

端口转发很多时候都是会出问题的.

与rocket chat样式表有关的目录:

/app/bundle/programs/web.browser/dynamic/node_modules/@rocket.chat/ui-theming/src

/app/bundle/programs/server/npm/node_modules/@rocket.chat/ui-theming/src

nginx, 你是不是有病?

fof/upload, 第72行的!==改成==

pr已交

13 天 后

composer update并不是刷新仓库! 千万别乱update!

关于搜索默认sort的改动方案之一.

网上找的都失效了, 所以自己试着写了一下. 应该不会影响正常信息流.

~/vendor/flarum/core/js/src/static/DiscussionListState.tsx

~/vendor/flarum/core/js/src/components/DiscussionsSearchSource.ts