Aster At NighT

I deserve a detoured journey to anywhere

0%

阿里云的服务器已经用了快两年了,期间一直用的nginx处理反代和TLS的问题。但最近遇到一件小事,实在让我想要换一种方式来管理这些服务。

起因是我想起一个webdav用来同步zotero的附件,nginx本身提供了一个webdav插件,问题是它默认没有启用,需要在编译时加选项打开。那么这就意味着我得重新自己编译一个nginx出来。可拉到吧,为了方便部署和维护,为什么不用docker整点什么呢?于是我发现了这个 https://github.com/dgraziotin/docker-nginx-webdav-nononsense。

把nginx打包进docker去提供webdav服务!虽然它非常可用,但这就非常离谱了。我用nginx反向代理nginx提供的webdav服务,这好么?这不好。另外,nginx的配置文件实在难写且烦,我大部分的应用都部署在docker里,我需要一个和docker配合地更好的反代工具。

一个可能的选择是我们直接向上到顶,直接上k8s和它的一系列生态工具,我不是很想这么做:

  1. k8s太大了,我这单机1c2g的东西用不着也供不起这尊大佛
  2. k8s需要提供自己的yaml,大部分的应用基本只服务到dockerfile层。少数提供docker compose,如果是k8s yaml的话还得自己转

我甚至不想上docker swarm,在我管不过来这台服务器上的服务前,这服务器就会吃不消了。在这时我看到了一个有趣的项目 https://github.com/lucaslorentz/caddy-docker-proxy。

好吧,这看上去就像是一个入门版的ingress或是traefik什么的。但它应该够用了。它还提供了一些swarm的模板,但我用docker compose就够了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#caddy.yaml
version: "3.7"

# used for specific settings you have outside of your docker config
# ex: proxies to external servers, storage configuration...
# remove this block entirely if not needed (Only used for Docker Swarm)
#configs:
# caddy-basic-content:
# file: ./Caddyfile
# labels:
# caddy:

services:
caddy:
container_name: caddy
image: lucaslorentz/caddy-docker-proxy:ci-alpine
ports:
- 80:80
- 443:443
environment:
- CADDY_INGRESS_NETWORKS=caddy
- CADDY_DOCKER_CADDYFILE_PATH=/Caddyfile
networks:
- caddy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# this volume is needed to keep the certificates
# otherwise, new ones will be re-issued upon restart
- caddy_data:/data
- ./Caddyfile:/Caddyfile
restart: unless-stopped

networks:
caddy:
external: true

volumes:
caddy_data: {}

caddy会帮忙申请证书,可以把之前那个脚本关了。以及另外的,这个玩意会自己从label里面找反代的目标,例如我的pastebin挂在:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# bw.yaml
version: '3'
services:
paste:
container_name: microbin
image: microbin-docker
restart: always
# ports:
# - "127.0.0.1:10001:8080"
volumes:
- ./microbin-data:/app/pasta_data
labels:
caddy: paste.asternight.site
caddy.reverse_proxy: "{{upstreams http 8080}}"
caddy.import: basic_auth
networks:
- caddy

networks:
caddy:
external: true

甚至可以在里面加snippet,我把pastebin的auth挪到了反代层来,好吧,这才是合理的做法!另外,我可能还得单独处理一下我的博客,它是静态文件,不在docker里。在caddy里再挂一个路径

1
- /home/git:/home/git

然后修改一下Caddyfile

1
2
3
4
5
6
7
8
9
10
asternight.site {
root * /home/git
encode gzip
file_server {
hide .git
}
log {
output file /data/log/hexo.log
}
}

完成了,这一下在运维界进步了10年!

Just bought a steamdeck for pure curiosity. The device surprises my in every aspect. It’s not as heavy as expected, pretty durable with tweakable TDP, with a seemingly versatile arch linux base system. However, the system is READONLY, to a degree. From as far as I’ve suffered, the /usr path is readonly, which really forbids almost all pacman packages from being installed. Which is also why I’m writing in English. I cannot install fcitx, thus no IME!!!

There indeed, is a dirty way to solve this. Which is:

1
sudo steamos-readonly disable

The command make steamos a fully writable, normal arch linux distribution. The only bad thing is, after next steamos update, everything you wrote would be reset. I would like some elegant solution to this.

The first thing that comes to me is to check what the heck is readonly at all. Let’s see what mount says.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> mount
/dev/nvme0n1p4 on / type btrfs (rw,relatime,ssd,space_cache=v2,subvolid=5,subvol=/)
/dev/nvme0n1p6 on /var type ext4 (rw,relatime)
overlay on /etc type overlay (rw,relatime,lowerdir=/sysroot/etc,upperdir=/sysroot/var/lib/overlays/etc/upper,workdir=/sysroot/var/lib/overlays/etc/work)
/dev/nvme0n1p8 on /home type ext4 (rw,relatime,x-systemd.growfs)
/dev/nvme0n1p8 on /opt type ext4 (rw,relatime)
/dev/nvme0n1p8 on /root type ext4 (rw,relatime)
/dev/nvme0n1p8 on /srv type ext4 (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,nr_inodes=1048576,inode64)
/dev/nvme0n1p8 on /var/cache/pacman type ext4 (rw,relatime)
/dev/nvme0n1p8 on /var/lib/docker type ext4 (rw,relatime)
/dev/nvme0n1p8 on /var/lib/flatpak type ext4 (rw,relatime)
/dev/nvme0n1p8 on /var/lib/systemd/coredump type ext4 (rw,relatime)
/dev/nvme0n1p8 on /var/log type ext4 (rw,relatime)
/dev/nvme0n1p8 on /var/tmp type ext4 (rw,relatime)
/dev/mmcblk0p1 on /run/media/mmcblk0p1 type ext4 (rw,noatime)

Ok, the /etc is overlayed so it is writable, make sense. But why / is rw?

Now according to this https://www.svenknebel.de/posts/2022/5/2/, /usr/bin/steamos-readonly is a shell script (That’s astonishing). And the readonly is a btrfs tweak, rather than a mount one.

That does not help. I suppose there leaves us to choose among a few other ways.

  1. Turn to homebrew. I saw this online and I’m not so sure why homebrew does not write to /usr. But hey homebrew is nothing related to elegant.
  2. Install everything in container. But how am I supposed to install a container runtime without writing to /usr?
  3. Use a script to automate the installations, ugly.

I’ve tested designating pacman to install packages in a separate root dir, which proves very awkward. The applications are not very friendly and without a chroot they refuse to work properly. And when they do write to writable paths (/etc for configs and services), it does not work as expected.

I guess I’ll try

  1. Use a overlay fs to mimic a writable root.

And here comes https://github.com/ValShaped/rwfus. Which seems to work. Let’s see now if I can use Rime.

God damn it no! When I last installed Rime /usr was readonly, and pacman supposed the installation is successful! fcitx-diagnose gives lots of unfounded dependencies, now I have to reinstall them all, one by one.

And after everything done fcitx5 still does not seem to work properly. The pinyin IME just does not work with no prompts and Rime said an error occured and I should check /tmp/rime.fcitx.ERROR, while there is no such file! There is one post discussing such problem https://forum.suse.org.cn/t/topic/14534, but it seems to be a packing bug rather than a program one. At this point I have no idea how to fix that.

好吧,尝试了一下discover里面的fcitx和rime,完全能用!居然最后靠谱的是应用商店。将 /home/deck/.local/share/fcitx5/rime/build/luna_pinyin.schema.yaml 中的设置改为默认简体后就没有什么问题了。

插曲:在编译yay时,不知是否是之前安装gcc /usr 的写入权限有问题,c标准头文件全都没了。重新安装gcc也不解决问题。我从之前那个chroot版pacman里面拷了一份出来,意外地用起来毫无问题。

总结一下,拿到 steamos 首先先解决只读文件系统的问题,不要直接用 pacman 装东西,不然就会因为 /etc 能写而装进去了,但因为 /usr 不能写而没完全装进去。

灵感来自于若干喜欢奇奇怪怪密码的资源站分享者。

wpass 是一层 7z 的壳,允许你用一个自定义的密码本来记录可能的密码,并在解压时用密码本中的密码尝试解压。它是用 rust 写的,理论上而言它应当能在 linux 上跑,只要你提供可用的 7z 实现。但是 windows 上的一些功能(右键菜单)就没法用了。

使用方法

wpass 可以单独使用,自行编译或者下载编译完成的包都行。使用 wpass -h 以获得帮助。发布的包中附赠了一个 bat 用于注册右键菜单。

密码文件默认为 pass.txt,可以在 config.toml 中修改

wpass 有一个附赠的 gui,如果有人不喜欢命令行可以用 gui,设计参考了 UZIP2

下载链接

https://github.com/AsterNighT/wpass,有问题请在同一位置提 issue。

gui在这里,https://github.com/AsterNighT/wpass-gui,但我太懒了没有放编译完的结果。

注意事项

对于分卷压缩的压缩包请选择第一个分卷解压!选择后面的也许也行?

灵感来自于一部分支持窗口全屏却不支持后台静音的游戏。

Silencer是一款面向 windows 的小工具。它能够自动将后台(非焦点)窗口静音,同时支持白名单。因为基于 Windows Audio API,所以只能在 windows 上跑了。

使用方法

+ 增加白名单,- 删除白名单,没啥好讲的。

下载链接

https://github.com/AsterNighT/silencer,有问题请在同一位置提 issue。

注意事项

因为 chrome 这种有许多进程的怪物,白名单是用进程名而不是PID判断的。如果有两个窗口进程名字一样就会在白名单里视为同一个。

  • 游戏时长:17.6小时
  • 进度:全成就

Ender Lilies 这款游戏,也许首先吸引我的还是人设(谁能拒绝白毛无口萝莉呢?)。整部作品的配乐由 MILI 操刀,亮点频出。游戏手感与技能组合非常有趣,战斗也比较流畅,作为一款独立游戏,可以说是不错了,但是问题也不少。

独一无二的白,与过重的红色

整个游戏的色调都非常灰暗,唯独主角是非常显眼的白色。这一设定不仅在美术上非常优秀,在游戏性上也很好地给主角流出了足够的可识别性。

在临近游戏结尾的最后一大关,整个场景的色调都是红色的,再加上覆盖可活动区域的红雾,看得人眼睛疼。

宁静与不谐的音符

整个游戏的不同地区配乐风格变化非常明显。悬崖村的女声哼唱轻灵悠扬,双生堡垒的音乐非常宁静温暖,边陲都城则多了一分无奈与绝望,配合剧情服用体验非常好。地下墓穴的配乐开头过于高调了,每次传送到这里都有些不舒服,好在推图的时候听着中段觉得还可以。然而最后几张图的配乐实在过于刺耳,包括禁区和最深处。这几段配乐成功勾起了我的不快,然而还得听着这音乐推图,反复死还得反复听。只能说MILI给游戏配乐的度没有抓好。渲染气氛紧张的音乐是必要的,但是过分了。

仓促的地图和 BOSS 设计

整个游戏的地图都有堆怪之嫌,尤其是禁区的肉山和最深处的浮游炮。而游戏前后期的 BOSS 设计多少有些割裂。最后几个 BOSS (米瑞尔,污秽之王)像是赶工出来的,招式数量倒不如开头的几个 BOSS。包括地牢的海尼尔,设计的都多少有些失败,缺少互动性。

无法结尾的剧情

游戏的名字 Ender Lilies 非常巧妙,中文翻译很难体现出其中含义。在游戏的过程中我们会不断遇到长得和主角一样的小女孩的尸体。而到游戏的后期,我们得知其中一个叫做莉莉。在接近结尾处才发现,这些小女孩都是实验产出,她们都叫做莉莉,所以这里的 Lilies 除了解为百合花的复数,也可作莉莉的复数。游戏统共三个结局,且不说主角深藏地下的 B 结局,不论是 A 结局还是 C 结局,边陲之国都已经没有正常的活人了。污秽之雨确实停止了,但那又如何呢?

碎碎念

由于家庭库共享没有办法写评测,外加steam没有提供一个比较好的整合途径,干脆把这个弃用的博客拿来写一写罢了。

太久没有提笔,也该练练。