Edit Notes - Rearrange, Appendix, Bugfixes.
This commit is contained in:
380
docs/notes/Maintenance/ArchInstall.md
Normal file
380
docs/notes/Maintenance/ArchInstall.md
Normal file
@@ -0,0 +1,380 @@
|
||||
---
|
||||
date: 2024-06-15
|
||||
category:
|
||||
- 批注
|
||||
- 折腾流程
|
||||
tag:
|
||||
- Arch Linux
|
||||
- KDE
|
||||
- Wayland
|
||||
- X11
|
||||
star: true
|
||||
---
|
||||
|
||||
# Arch Linux 个人安(折)装(腾)流程
|
||||
<!-- https://www.glowmem.com/archives/archlinux-note -->
|
||||
<!-- https://arch.icekylin.online/guide/-->
|
||||
|
||||
::: details 我选择 Arch 的理由
|
||||
1. 比起“服务”,我还是更倾向于把操作系统当作纯正的工具。可能这就是旧信息时代遗老吧。
|
||||
2. “缘,妙不可言”。
|
||||
3. 具体工作具体分析吧。跨平台开发 Arch 也挺舒服的。但 Adobe 全家桶就显然不适合了。
|
||||
:::
|
||||
|
||||
最近重新组织了下家里的设备,咱的笔记本也是先后经历了 Arch 转 Win11 再转 Arch 的路子。时至今日,我曾经跟着律回指南安装 Arch 的步骤有些不再适用,有些需要补充。总而言之,还是重新整理一下我的流程吧。
|
||||
|
||||
> [!important]
|
||||
> 由于 Arch 更迭速度比较快,下面的参考链接以及这篇笔记本身的内容可能随时失效。
|
||||
> 在安装、使用过程中遇到的,这里没有提及的问题,还请自行 Google、Bing 或 Baidu。
|
||||
>
|
||||
> 如果你觉得 Arch 滚动更新很累、玩不太明白,不妨还是先上手`Pop!_OS`或者`Ubuntu`。
|
||||
>
|
||||
> 此外,也可以多多留意其他人总结的 Arch 折腾小技巧,说不定会有意外收获。
|
||||
|
||||
## 参考链接
|
||||
|
||||
本文有参考以下的安装教程:
|
||||
|
||||
1. [律回彼境:Arch Linux 折腾指南&记录](https://www.glowmem.com/archives/archlinux-note)(以下简称“律回指南”)
|
||||
2. [Nakano Miku:Arch 简明指南](https://arch.icekylin.online/guide/)(以下简称“Miku 指南”)
|
||||
3. [Arch Wiki:Installation Guide](https://wiki.archlinux.org/title/Installation_guide)
|
||||
|
||||
## I. 前期准备
|
||||
|
||||
- 下载安装镜像:[清华镜像 (最新版本)](https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest)、[官方下载](https://archlinux.org/download/)。
|
||||
|
||||
> 烧录过程不再赘述,推荐用 Ventoy 统一管理安装镜像。[参见 Ventoy 中文主页](https://www.ventoy.net/cn/)
|
||||
|
||||
- 固件^1^:启用 UEFI、禁用安全启动(Secure Boot)。
|
||||
|
||||
> 近十几年的主板大都支持 UEFI,我也懒得花篇幅去讲传统 BIOS 引导。对于 Arch Linux 的 UEFI 引导方式,我[另有一篇笔记](./ArchUEFI.md)讨论,可供部署阶段参考。
|
||||
> 至于 Secure Boot,不用想了,给`.efi`启动文件签名着实是件麻烦事。~~对我而言折腾这个没有意义。~~
|
||||
|
||||
- 网络^2^:如需连接 WiFi,提前把 WiFi 名字(SSID)改成英文。
|
||||
|
||||
> 安装全程在命令行(CLI)环境进行,并且 LiveCD(维护环境,下同)**显示不出中文,也打不出中文**。
|
||||
|
||||
> [!tip]
|
||||
> 如果只是迁移系统,那么进入维护环境之后只需`rsync`做全盘搬运即可(当然前提是目标**盘**要比原**系统**的实际占用空间要大)。可参见 [lin.moe](https://lin.moe/tutorial/2020/04/arch_migrate/)。
|
||||
|
||||
## II. LiveCD 基础配置
|
||||
|
||||
与[律回指南 Ch.1](https://glowmem.com/archives/archlinux-note#%E4%B8%80%E8%BF%9E%E6%8E%A5%E7%BD%91%E7%BB%9C%E5%92%8C%E6%97%B6%E5%8C%BA%E9%85%8D%E7%BD%AE) 相同,但省略了分配固定 IP 的一步(我完全可以`ip addr`猹询)。
|
||||
|
||||
## III. 分区
|
||||
对于固态硬盘,**不提倡建立过多的分区**。那么在 UEFI 启动、GPT 分区表的系统盘上,至少可以这么分:
|
||||
|
||||
- EFI 启动分区[^esp]:挂载`/efi`或`/boot`[^esp_mountpoint]
|
||||
- 系统分区:挂载根目录`/`
|
||||
|
||||
我个人在此基础上,倾向于*在硬盘(逻辑扇区的)末端*开多一个交换分区。
|
||||
|
||||
[^esp]: GPT 分区表有专门的“EFI System”分区类型(即 ESP),当然新款的主板也会*连带扫描 FAT 分区*;对于 MBR 分区表,则扫描**活动**的 FAT 分区。参见 [(译)UEFI 启动的实际工作原理](https://www.cnblogs.com/mahocon/p/5691348.html)。
|
||||
|
||||
[^esp_mountpoint]: ESP 装载`/boot`系经典分区法。后来有说法称“直接暴露 Linux 内核并不安全”,所以又有将 ESP 装入`/boot/efi`的分法(Ubuntu Server 24.04.2 即如此)。现在(至少在 Arch 里)则推荐直接挂载到`/efi`。
|
||||
|
||||
详细的分区步骤参见 Miku 指南。由于该指南假定保留 Windows 系统分区,其对分区方案的介绍实际上拆成了两部分:
|
||||
|
||||
- :new: [全新安装](https://arch.icekylin.online/guide/rookie/basic-install-detail#%F0%9F%86%95-%E5%85%A8%E6%96%B0%E5%AE%89%E8%A3%85)
|
||||
- [7. 分区和格式化(使用 Btrfs 文件系统)](https://arch.icekylin.online/guide/rookie/basic-install.html#_7-%E5%88%86%E5%8C%BA%E5%92%8C%E6%A0%BC%E5%BC%8F%E5%8C%96-%E4%BD%BF%E7%94%A8-btrfs-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)
|
||||
|
||||
然后是挂载。务必注意**先挂载`/`**!此外,**不要把不同分区、子卷挂到同一个挂载点上**;**有分交换分区的话记得`swapon`**。
|
||||
|
||||
## IV. pacman 配置
|
||||
|
||||
### i. 换源
|
||||
|
||||
Linux 的包管理器默认食用国外的软件源,`pacman`也一样。因此,非常建议先换用国内镜像,加快包下载速度。
|
||||
|
||||
然鹅在更换之前可能需要等待片刻:一经联网,`reflector`会自动筛选**最新**的 20 个镜像站,然后才从快到慢排序^3^。如果换源过早,很可能会被`reflector`摘桃子。
|
||||
|
||||
编辑`/etc/pacman.d/mirrorlist`(`vim`还是`nano`请自便):
|
||||
```ini
|
||||
# 在文件开头起一空行,复制下列镜像源:
|
||||
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
|
||||
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
|
||||
Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch
|
||||
```
|
||||
> [!tip]
|
||||
> 变更后的`mirrorlist`会在 Arch 安装过程中被复制过去。这样后续就不需要再做一遍换源了。
|
||||
|
||||
### ii. 自身配置
|
||||
默认`pacman`是逐个下载软件的。但哪怕是 1MB/s 小水管,并行下载四、五个软件包也绰绰有余了。
|
||||
|
||||
编辑`/etc/pacman.conf`:
|
||||
|
||||
1. 找到`# Misc options`,删掉`Color` `ParallelDownloads = 5`前面的注释`#`:
|
||||
```ini
|
||||
# Misc options
|
||||
#UseSyslog
|
||||
Color # 输出彩色日志
|
||||
#NoProgressBar
|
||||
CheckSpace
|
||||
#VerbosePkgLists
|
||||
ParallelDownloads = 5 # 最大并行下载数(根据你的网速自行斟酌,不建议写太大)
|
||||
```
|
||||
|
||||
2. 翻页到文件末尾,删掉`[multilib]`和底下`Include =`这两行的注释`#`。
|
||||
> `multilib`是 32 位软件源。默认下载的包都是`x86_64`的,而有一些程序仍需要 32 位的库。
|
||||
|
||||
> [!note]
|
||||
> 很遗憾,经实测 pacman 配置并不会复制过去。在安装完系统`arch-chroot`进去进一步配置时,你需要重复做一遍上述操作。
|
||||
|
||||
## V. 正式部署
|
||||
|
||||
参见 [Miku 指南—基础安装—9. 安装系统](https://arch.icekylin.online/guide/rookie/basic-install.html#_9-%E5%AE%89%E8%A3%85%E7%B3%BB%E7%BB%9F)。或者像律回指南那样顺手装一些工具也无何不可:
|
||||
|
||||
```sh
|
||||
pacstrap -K /mnt base linux linux-firmware base-devel linux-headers \
|
||||
vi vim nano git wget tmux openssh networkmanager htop ntfs-3g \
|
||||
intel-ucode # or `amd-ucode`
|
||||
```
|
||||
|
||||
::: warning “密钥环不可写”报错
|
||||
之前出现过`pacman-init.service`意外暴死,导致找不到密钥环的情况:
|
||||
```log
|
||||
(126/126) checking keys in keyring
|
||||
warning: Public keyring not found; have you run `pacman-key --init`?
|
||||
downloading required keys...
|
||||
error: keyring is not writable
|
||||
...
|
||||
error: failed to commit transaction (unexpected error)
|
||||
```
|
||||
对此,[这篇讨论贴](https://bbs.archlinux.org/viewtopic.php?id=283075)中有人提供了个取巧的方案:
|
||||
```sh
|
||||
pacman-key --init
|
||||
pacman-key --populate
|
||||
```
|
||||
实测可用。至于成因,贴中有人指出是系统时钟未校准导致,但我当时是来不及`timedatectl`就已经暴死了,具体原因不明。
|
||||
:::
|
||||
|
||||
然后`genfstab -U /mnt > /mnt/etc/fstab`生成挂载表;
|
||||
再`arch-chroot /mnt`切换进新系统里,继续配置吧。
|
||||
|
||||
---
|
||||
|
||||
接下来在`chroot`环境里的配置我参考了[律回指南 Ch.4](https://glowmem.com/archives/archlinux-note#%E5%9B%9B%E7%B3%BB%E7%BB%9F%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE),大体也符合官方文档的流程:调整时区、系统编码、设置主机名、root 密码、新建用户、配置 EFI 引导。
|
||||
|
||||
不过在`visudo`那一步我没有启用“免密`sudo`”(如下),律回本人也意识到免密`sudo`并不安全。
|
||||
```
|
||||
## Same thing without a password
|
||||
#%wheel ALL=(ALL:ALL) NOPASSWD: ALL
|
||||
```
|
||||
|
||||
> [!note]
|
||||
> 除了上述标准流程之外,后续有些步骤也可以提前在`chroot`里完成。但**如果你是初次上手,还是一步一步慢慢来吧**。
|
||||
|
||||
## VI. 新系统的配置
|
||||
跟着律回指南的三、四章装好系统之后,重启登入新系统的终端。
|
||||
首先通过`nmtui`连上 WiFi。
|
||||
|
||||
### i. CN 源和 AUR 助手
|
||||
在**联好网的新系统**里配置`archlinuxcn`源:再次打开`/etc/pacman.conf`,末尾添加如下小节
|
||||
```ini
|
||||
[archlinuxcn]
|
||||
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
|
||||
```
|
||||
并安装 CN 源的签名密钥和 AUR 助手:
|
||||
```bash
|
||||
sudo pacman -S archlinuxcn-keyring # 安装密钥环
|
||||
sudo pacman -S yay paru # 安装 AUR 助手
|
||||
```
|
||||
::: warning 密钥环缺少信任
|
||||
若 CN 源的包安装失败,遭遇`signature ... is marginal trust`报错,可本地信任那个人的 Key。之前`farseerfc`掉过一次,以他为例:
|
||||
```sh
|
||||
sudo pacman-key --lsign-key "farseerfc@archlinux.org"
|
||||
```
|
||||
然后重试即可。不过截至 25 年国庆为止,`farseerfc`的信任已经恢复,我安装时并未遭遇类似情况。
|
||||
:::
|
||||
|
||||
### ii. 硬件(一)音频安装
|
||||
|
||||
音频分为固件(或者说驱动)和管理套件两部分:
|
||||
```bash
|
||||
# 音频固件
|
||||
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf
|
||||
# pipewire 及其音频管理套件
|
||||
sudo pacman -S pipewire gst-plugin-pipewire pipewire-alsa pipewire-jack pipewire-pulse wireplumber
|
||||
```
|
||||
::: details pulseaudio
|
||||
除了 pipewire 音频方案之外另有`pulseaudio`可供选择。但务必注意:音频管理套件**只能二选一,不可以混装**。
|
||||
|
||||
另外,由于 pipewire 本身不单只负责音频管理的工作,如需装 pulseaudio 仍需安装`pipewire` `gst-plugin-pipewire`两个包。
|
||||
相应地,其余的包可换用如下平替:
|
||||
|
||||
- `pipewire-alsa` → `pulseaudio-alsa`
|
||||
- `pipewire-jack` → `jack2`
|
||||
- `pipewire-pulse` → `pulseaudio`
|
||||
- `wireplumber` → `pipewire-media-session`(pipewire 弃用)
|
||||
|
||||
> 由于 pipewire 那边有 wireplumber 代替,所以这个包被他们自行标记为“过时”。
|
||||
> 但 pulseaudio 仍需要这个包。
|
||||
:::
|
||||
|
||||
显卡驱动等其他硬件设施需要等装好桌面环境再考虑,在只有字符色块滚过的纯终端环境里也没有折腾显卡驱动的必要。
|
||||
|
||||
### iii. KDE 桌面环境
|
||||
|
||||
跟完前面的内容之后,你便拥有了一个无 GUI 的终端 Arch 系统。但作为日常使用的话,图形桌面肯定必不可少。
|
||||
|
||||
本文与那两篇参考外链一样**采用 KDE 桌面环境**。当然除了 KDE 之外,你也可以考虑 GNOME 桌面环境 ~~(只是我用腻了)~~;
|
||||
也可以考虑散装方案(比如`hyprland`~~,只是我没折腾成功~~)。
|
||||
|
||||
```bash
|
||||
# 分别安装 xorg 套件、sddm 登录管理器、KDE 桌面环境,以及配套软件
|
||||
sudo pacman -S xorg
|
||||
sudo pacman -S plasma sddm konsole dolphin kate okular spectacle partitionmanager ark filelight gwenview
|
||||
# 启用 sddm 服务,重启进 SDDM 用户登录
|
||||
sudo systemctl enable sddm
|
||||
sudo reboot now
|
||||
```
|
||||
|
||||
::: info KDE 6 vs KDE 5?
|
||||
目前最新版本为 KDE 6。但律回指南发布于 23 年 11 月,介绍的是 KDE 5。
|
||||
话虽如此,倒也不必惊慌。`pacman`以及`yay` `paru`之流均**默认安装最新版**,上述**安装 KDE 5 的步骤仍可用于安装 KDE 6**。
|
||||
:::
|
||||
|
||||
重启后在用户登录界面输入密码回车,恭喜你,距离投入日常使用只剩几步之遥了。之后对 KDE
|
||||
和系统的配置**大部分**仍可参考[律回指南 Ch.6](https://glowmem.com/archives/archlinux-note#%E5%85%AD%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE)。
|
||||
|
||||
::: note 关于 Wayland 和 X
|
||||
KDE 的图形实现默认已经是 Wayland 了。在开机后输入用户密码的界面处,找找屏幕边角,你可以看到默认选用`Plasma (Wayland)`。
|
||||
点击它,你可以选择换用`Plasma (X11)`。
|
||||
尽管 X11 有个“锁屏黑屏”[^x11_lockscreen]的问题,但目前来说我还是推荐换回 X11。
|
||||
|
||||
[^x11_lockscreen]: KDE 的默认 Breeze 主题锁屏时大概率会出现黑屏、惟有鼠标的现象。在 7 月中旬时已经发现该现象已经蔓延到自定义主题了。查了下 Google 以及 Arch、Manjaro、KDE 的一些讨论帖,尚没有有效的解决方案。
|
||||
当然有一些主题可能能够解除这个“病征”,像 Nordic Dark 以及 Lavanda。但这种 work around 可能还是因人而异。
|
||||
:::
|
||||
|
||||
### iv. 硬件(二)显卡驱动与蓝牙
|
||||
|
||||
> “so NVIDIA, F**K YOU! ”——Linus Torvalds
|
||||
|
||||
AMD 或 NVIDIA 显卡可参见[律回指南 §6.4](https://glowmem.com/archives/archlinux-note#4%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8%E5%AE%89%E8%A3%85)
|
||||
和 [Miku 指南—进阶安装—显卡驱动](https://arch.icekylin.online/guide/rookie/graphic-driver.html)篇。
|
||||
但我是锐炬核显捏,只需要在 Konsole 终端里`sudo pacman -S`安装英特尔的驱动:
|
||||
|
||||
- `mesa` `lib32-mesa`(OpenGL)
|
||||
- `vulkan-intel` `lib32-vulkan-intel`(Vulkan)
|
||||
- `intel-media-driver`(VAAPI 解码器,OBS 需要)
|
||||
|
||||
如果有蓝牙的话,在 Konsole 里启用(并立即启动)蓝牙服务:
|
||||
```bash
|
||||
sudo systemctl enable --now bluetooth
|
||||
```
|
||||
> 之前误以为`bluetooth`是 Arch 本身就有的服务,结果发现是桌面环境依赖了蓝牙组件包`bluez`。
|
||||
|
||||
### v. 额外中文字体和输入法
|
||||
|
||||
律回指南安装的字体分别是 Noto 系列(Linux 常用的 Unicode 字体)和思源系列(也算是 Noto 系列的子集)。
|
||||
其中 Noto 系列的汉字部分由于一些神秘的原因[^cjk_issues_ref],不做额外配置的话,渲染出来只能说……能用。
|
||||
|
||||
[^cjk_issues_ref]: 参见 [Arch Wiki:关于中文字被异常渲染成日文异体字的说明](https://wiki.archlinux.org/title/Localization/Simplified_Chinese#Chinese_characters_displayed_as_variant_(Japanese)_glyphs)^2^以及 [Arch 中文论坛:noto-fonts-cjk 打包变化可能导致的回落字体选取问题](https://bbs.archlinuxcn.org/viewtopic.php?pid=60100)^2^。
|
||||
|
||||
::: note fontconfig
|
||||
`wqy-zenhei`^extra^(文泉驿)和`misans`^aur^会在安装过程中自动帮你配置 fontconfig,因此安装完这两款字体之后系统默认用这些字体显示。
|
||||
如果你希望使用未经适配的字体,那么需要在 KDE 设置里装好字体后,额外做字体配置。
|
||||
|
||||
示例:[思源系列字体配置](../../shared/01-Prefer.conf) By [@Vescrity](https://github.com/Vescrity)
|
||||
注意:用户级字体配置需放在`~/.config/fontconfig/conf.d`目录中。
|
||||
另注:使用`fc-cache -vf`刷新字体缓存。
|
||||
:::
|
||||
|
||||
至于输入法,现阶段推荐直接安装`fcitx5`,参见 [Miku 指南—进阶安装—常用应用—10. 输入法](https://arch.icekylin.online/guide/rookie/desktop-env-and-app.html#_10-%E5%AE%89%E8%A3%85%E8%BE%93%E5%85%A5%E6%B3%95)。
|
||||
|
||||
至此,Arch 的安装告一段落,你可以像捣腾 Windows 那样玩转 Arch 了。
|
||||
|
||||
---
|
||||
|
||||
## 附录:系统美化
|
||||
|
||||
> “爱美之心,人皆有之。”
|
||||
|
||||
> [!tip]
|
||||
> - **风格统一**是美观的必要条件。
|
||||
> - 少搞“侵入性”美化。或者说,需要**修改系统文件、注入系统进程、破坏系统稳定的美化尽量少做**。
|
||||
> - **谨遵发布页面附送的安装指引**(KDE、GNOME 主题可以参考项目 GitHub),否则可能安装不全。
|
||||
|
||||
### I. 主题
|
||||
主题这边我也没啥好推荐的,虽然 KDE 6 现在也出现了一些比较好看的主题,但终究是因人而异吧。
|
||||
|
||||
我想说明的是,KDE 商店的多数主题在 **X11 会话、125% 甚至更高缩放率**下会出现“非常粗窗口边框,使我的窗口肥胖”的现象(至少我的笔记本如此)。
|
||||
我个人目前是直接修改主题 Aurorae 配置文件,利用二分法逐步找到四条边的最适 Padding。
|
||||
网上貌似也有“把缩放调回 100%,但是更改字体 DPI”的做法,但个人觉得显示效果应该好不到哪去(
|
||||
|
||||
### II. 仿 Mac 上下双栏布局
|
||||
KDE 原生的桌面 UI 就挺 Windows 的,但胜在自由度足够高。
|
||||
我**个人觉得** Mac OS 那种双栏比较好看、比较方便,所以稍微按照如下配置调整了面板布局。
|
||||
|
||||
仅供参考咯。
|
||||
|
||||
::: details Dock 栏
|
||||
即原本的任务栏。
|
||||
- 位于底部、居中、适宜宽度、取消悬浮、避开窗口
|
||||
- 除“图标任务管理器”外,其余组件全部移除。
|
||||
:::
|
||||
|
||||
::: details Finder 栏
|
||||
即“应用程序菜单栏”(可在 *编辑模式—添加面板* 处找到)
|
||||
- 位于顶部、居中、填满宽度、取消悬浮、常驻显示
|
||||
- 自左到右依次为:
|
||||
- 应用程序启动器(类比开始菜单)
|
||||
- 窗口列表
|
||||
- 全局菜单(默认提供)
|
||||
- “面板间距”留白
|
||||
- 数字时钟
|
||||
- 日期保持在时间旁边,而不是上下两行
|
||||
- 字号略小于菜单栏高度,凭感觉捏
|
||||
- “面板间距”留白
|
||||
- 系统监视传感器
|
||||
- 横向柱状图(平均 CPU 温度、最高 CPU 温度)
|
||||
- 仅文字(网络上行、下行速度;网络上传、下载的总流量)
|
||||
- 系统托盘
|
||||
:::
|
||||
|
||||
除了 Finder 栏外,可以在系统设置里更改屏幕四周的鼠标表现。
|
||||
比如,鼠标移动到左上角可以自动弹出“应用程序启动器”,移到右上角可以切换你的桌面,等等。
|
||||
|
||||
## 附录:GPG 密钥配置
|
||||
主要讨论配置提交签名(Commit Signing)时遇到的问题。
|
||||
|
||||
### I. VSCode 提交签名
|
||||
大体上跟着 [Commit Signing - VSCode Wiki](https://github.com/microsoft/vscode/wiki/Commit-Signing) 就可以了。唯一需要留意的是`pinentry`。
|
||||
|
||||
VSCode 的主侧栏“源代码管理”页提交时并不会走终端,也就莫得 pinentry 的 CUI;莫得 pinentry 输密码验证,提交就签不了名。
|
||||
虽然有人好像搞了个`pinentry-extension`出来,但 6 月初我去看的时候它连说明书都莫得,也没有上架,那用集贸。
|
||||
|
||||
所以我选择编辑`~/.gnupg/gpg-agent.conf`:
|
||||
```properties
|
||||
default-cache-ttl 21600
|
||||
pinentry-program /usr/bin/pinentry-qt
|
||||
```
|
||||
保存后重启`gpg-agent`:`gpg-connect-agent reloadagent /bye`。
|
||||
|
||||
::: info 其他端 pinentry
|
||||
理论上`pinentry`自身可以根据 XDG 后端选择适用的版本:
|
||||
```sh
|
||||
ls /usr/bin | grep 'pinentry'
|
||||
echo GETPIN | pinentry
|
||||
```
|
||||
你可以用这两条命令看看都支持什么后端,以及它会自动选择哪个。像 niri 通常会装 gnome 后端,测试结果也的确会出`pinentry-gnome3`的密码框。
|
||||
:::
|
||||
|
||||
除此之外,`pinentry`需要指定 tty,否则找不到 IO 设备也会炸。解法:`export GPG_TTY=$(tty)`。
|
||||
|
||||
经测试,大部分终端均能在 SSH 连接中调出 CUI。若 VSCode Remote-SSH 打开的终端签不了名,检查一下是不是终端分割得太小了。
|
||||
|
||||
### II. GPG 密钥备份(导出导入)
|
||||
之前并没有意识到备份 key 的重要性,结果重装 Arch 重新配置提交签名时,
|
||||
我发现 GitHub 和腾讯 Coding 会重置提交验证(同一个邮箱只能上传一个公钥),届时就是我痛苦的 rebase 重签了。
|
||||
~~不过好在受影响的多数只是我的个人项目,变基无伤大雅。~~
|
||||
```bash
|
||||
gpg --list-secret-keys --keyid-format LONG
|
||||
# export
|
||||
gpg -a -o public-file.key --export <keyid>
|
||||
gpg -a -o private-file.key --export-secret-keys <keyid>
|
||||
# import
|
||||
gpg --import ~/public-file.key
|
||||
gpg --allow-secret-key-import --import ~/private-file.key
|
||||
```
|
||||
重新导入 Key 之后,可能还需要`gpg --edit-key`更改密码(`passwd`)、重设信任(`trust`)。
|
||||
226
docs/notes/Maintenance/ArchUEFI.md
Normal file
226
docs/notes/Maintenance/ArchUEFI.md
Normal file
@@ -0,0 +1,226 @@
|
||||
---
|
||||
date: 2024-10-24
|
||||
category: 折腾流程
|
||||
tag:
|
||||
- Arch Linux
|
||||
- Grub
|
||||
- UEFI
|
||||
- UKI
|
||||
---
|
||||
|
||||
# Arch Linux UEFI 启动二三事
|
||||
|
||||
由于我对 Linux 乃至整个 UEFI 的启动机制尚且“浅尝辄止”,本文并不会展开很多硬核内容,只是对我个人使用过的启动方案做个总结。
|
||||
|
||||
::: tip 引导和启动
|
||||
在维基百科中二者似乎是同一概念[^wikipedia_booting],搜索“启动程序”会跳转到[“引导程序”](https://zh.wikipedia.org/wiki/%E5%95%9F%E5%8B%95%E7%A8%8B%E5%BC%8F)的介绍。
|
||||
|
||||
[^wikipedia_booting]: 另见英文维基:[Booting](https://en.wikipedia.org/wiki/Booting)。
|
||||
|
||||
国内很多折腾 WinPE 的人(包括我)对此也并没有很明确的区分;当然有些博客则对开机装载 Linux 的过程拆分成引导、启动两个阶段。本文为了方便起见,用词不作区分。
|
||||
:::
|
||||
|
||||
在此感谢岛风 [@frg2089](https://github.com/frg2089) 指路。
|
||||
|
||||
## UEFI 启动简述:启动项管理
|
||||
|
||||
> UEFI 规范定义了名为“UEFI 启动管理器”的一项功能……(它)是一种固件策略引擎,可通过修改固件架构中定义的全局 NVRAM 变量来进行配置。启动管理器将尝试按全局 NVRAM 变量定义的顺序依次加载 UEFI 驱动和 UEFI 应用程序(包括 UEFI 操作系统启动装载程序)。……
|
||||
> ::: right
|
||||
> ——[(译)UEFI 启动:实际工作原理](https://www.cnblogs.com/mahocon/p/5691348.html)
|
||||
> :::
|
||||
|
||||
本“议题”只讨论 UEFI 原生启动项和回退路径启动项。恕不对 BIOS 兼容的部分作详细展开。
|
||||
|
||||
### i. 原生启动项
|
||||
用 Windows 7 及更高版本系统的朋友肯定知道这个东西:Windows Boot Manager。`bootmgr`它代替了`ntldr`,从此便沿用至今。
|
||||
|
||||
事实上,Windows Boot Manager 是系统安装完成后,初次加载系统时为其创建的**原生启动项**。它明确指出需要启动**指定设备中**的**指定引导文件**(即`bootmgfw.efi`)。
|
||||
|
||||
即便 WinToGo 也是如此——在以 U 盘身份进入 WTG 系统时,Windows 也会悄悄地把原生启动项建立好。然后重启之后再按快捷键进入启动菜单,你**可能**会在**部分主板上**发现有两个启动项,指向同一个设备:
|
||||
```
|
||||
Windows Boot Manager ( Koi Series Pro ...)
|
||||
USB HDD: Koi Series Pro ...
|
||||
```
|
||||
需要注意的是,原生启动项是**存储在主板里的**(更准确的说,是全局 NVRAM 变量)。有些主板在检测到原生启动项失效(找不到指定引导文件)后,会自行删除该启动项。比如安装 Grub 后更换过硬盘,后来又把原盘插回去,可能仍然找不到 Grub 启动项。
|
||||
|
||||
### ii. 回退路径启动项
|
||||
对于 WinPE、Windows 安装镜像而言,它们并非用于长线运行,不可能到处添加原生启动项,那么 UEFI 如何认出它们捏?
|
||||
还记得上面提到的同一设备双启动项吗?UEFI 固件是能够找到可启动设备,并且尝试启动的。但它是依据什么去找的捏?
|
||||
|
||||
UEFI 固件首先会**遍历各硬盘的 ESP 分区**,并在其中查找`\EFI\BOOT\boot{cpu_arch}.efi`。前面的这一固定路径就称为**回退路径**,通过查找回退路径建立的启动项就称作**回退路径启动项**。其中,`cpu_arch`即 CPU 架构,已知的有:
|
||||
- `x64`:x86-64
|
||||
- `ia32`:x86-32
|
||||
- `ia64`:Itanium
|
||||
- `arm`:AArch32,即 arm32 ~~(胳膊 32)~~
|
||||
- `aa64`:AArch64,即 arm64 ~~(64 条胳膊)~~
|
||||
|
||||
> [!note]
|
||||
> UEFI 的路径系统与 Windows 类似:以`\`分隔,不区分大小写。
|
||||
|
||||
如果同一硬盘、同一 CPU 架构存在多个匹配的 EFI 文件(比如,可能有两个 ESP 分区,分开装不同系统的 EFI),那么**只会选第一个有效的**去执行。
|
||||
|
||||
对于 WinPE U 盘,通常它们是 MBR 分区表,那么会考虑更泛用的搜索:采用 **FAT** 文件系统的**活动分区**;
|
||||
对于 GPT 分区表,可以直接搜索 ESP 分区。当然如今的主板并不会卡那么死,哪怕只是普通的 FAT 分区,也会尝试搜索、执行。
|
||||
|
||||
也就是说,哪怕原生启动项意外被固件扬了,只要还有回退启动项,便仍可从同一个硬盘启动系统。
|
||||
|
||||
::: info
|
||||
实际上`bcdboot`工具会在 ESP 分区里同时写入`bootx64.efi`和`bootmgfw.efi`。前者即回退路径启动项。
|
||||
|
||||
有关`bootx64.efi`、`bootmgr(.efi)`和`bootmgfw.efi`的关系可能有些复杂,[微软文档](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcd-system-store-settings-for-uefi?view=windows-11)也只隐晦地给出了一部分,谷歌了一圈各种观点都有。本着实事求是的原则,我不会糅合这些观点提出假设,只附上几个问题:
|
||||
- Windows 的`bootx64.efi`分别在本机 Windows、WinToGo 和 WinPE 中起到什么作用?它是否真的等同于(或者等价于)`bootmgfw.efi`(或是`bootmgr`)?
|
||||
- 到底是 fwbootmgr(即`bootmgfw.efi`)调用 bootmgr,还是反过来呢?二者是谁“悄悄地”为 UEFI NVRAM 添加原生启动项?
|
||||
:::
|
||||
|
||||
## 启动加载器(以 Grub 为主)
|
||||
这也是最广泛使用的启动方式 ~~,Windows 也干了~~。在 Linux 当中,最常用的加载器是 Grub。当然,也有使用 rEFInd 的。
|
||||
|
||||
启动加载器(bootloader)本身作为跳板,被 UEFI 固件加载后,需要根据配置找到真正的 Linux 内核,并经由内核引导用户硬盘上的 Arch 系统。而在 Windows 中,`boot[a-z]{3,4}.efi`会根据`BCD`配置文件,执行硬盘其中一个 Windows 副本中的`winload.efi`,并将该副本的其余加载流程交给它完成。
|
||||
|
||||
正常使用 Windows 单系统的用户可能对启动过程并无察觉,但一旦与 Linux 混用,你就需要**留意 Linux 的加载器会不会被 Windows 刷下去(甚至被覆盖)**。除此之外,固件和内核之间隔着加载器这么一块跳板,势必会拖慢引导流程。因此就个人来说,我不会再考虑 Grub 这类方案了。
|
||||
|
||||
### i. 修复 Grub 引导
|
||||
Windows 启不动我们会尝试修复引导,Arch 亦然。修复 Grub 引导实际上就是**重走 Grub 安装流程**:
|
||||
|
||||
- `mount`挂载相应分区;
|
||||
- `genfstab`重建挂载表(如有必要);
|
||||
> 个人建议无论如何都重建一遍`fstab`。反正刷完绝对是最新的。
|
||||
- `arch-chroot`切换进硬盘上的系统;
|
||||
- `grub-install`重建 grub 引导。
|
||||
- `grub-mkconfig`重建 grub 配置(可能不需要……?)。
|
||||
|
||||
### ii. 改用回退启动项
|
||||
事实上,需要反复重建 Grub 引导的一大原因就在于,Grub 只会写入它自己的`grubx64.efi`,以及原生启动项:
|
||||
|
||||

|
||||
|
||||
那么办法也很简单:像 Windows 那样也建一个回退路径启动项。最简单的做法当然是复制改名,若求稳妥可以考虑用`grub-install`刷:
|
||||
```sh
|
||||
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB --removable
|
||||
```
|
||||
当然如果是像图中那样不止一个 Grub,甚至同盘 Windows 和 Arch 双系统,那我不推荐你这么做。
|
||||
|
||||
> [!warning]
|
||||
> 不要在这里试图用软链接节省空间!
|
||||
|
||||
## 固件直接引导(EFIStub)
|
||||
Grub 本身写入 ESP 的内容不多,配置啊、Linux 内核啊都在`/boot`。有人便主张把`/boot`还给`/`,ESP 分区实际挂载`/efi`。
|
||||
而岛风则提出了更激进的主张:让固件直接引导内核。
|
||||
|
||||
> An EFI boot stub (aka EFI stub) is **a kernel that is an EFI executable**,
|
||||
> i.e. that can directly be booted from the UEFI.
|
||||
> ::: right
|
||||
> ——[Arch Wiki: EFIStub](https://wiki.archlinux.org/title/EFISTUB)
|
||||
> :::
|
||||
|
||||
根据 Wiki,**默认情况下** Arch Linux 的内核本身就是可启动 EFI,只是需要附加[**内核参数**](https://wiki.archlinux.org/title/Kernel_parameters#Parameter_list):
|
||||
```
|
||||
# 为便于阅读,这里分了三行。
|
||||
root=UUID=7a6afcd0-a25a-4a6c-bf7b-920b53097eae
|
||||
resume=UUID=b84ae173-edbc-442c-b00b-5c47eef203f1
|
||||
rw loglevel=3 quiet initrd=\intel-ucode.img initrd=\initramfs-linux.img
|
||||
```
|
||||
::: details 内核参数详解
|
||||
Grub 等启动加载器的本职工作就是帮你引导内核,因此它们的配置文件已经包含完整的内核参数了。
|
||||
我上面列的内核参数是参照 Wiki 自行搭配,确认可行的参数。你也可以查 Wiki 自行组合。
|
||||
- `root`:`/`分区。目前只见到 UUID 填法。
|
||||
- `rw rootflags=subvol=@`:对`/`分区挂载的附加属性,比如可读写、指定 Btrfs 子卷。
|
||||
- `resume`:休眠使用的交换分区,同样只见到 UUID 填法。休眠时会在指定 Swap 里创建内存映像。
|
||||
- `loglevel=3 quiet`:内核加载时的附加属性,如日志等级之类。
|
||||
- `initrd=\intel-ucode.img`:加载的初始化内存盘 (Init RAM Disk)。
|
||||
一个`.img`一条`initrd=`,路径用`\`分隔,顺序自左向右(可以参见 grub 的配置文件)
|
||||
|
||||
> [!note]
|
||||
> 个人觉得这里 initrd 称作“初始化映像”更合适,毕竟需要填`.img`嘛。
|
||||
:::
|
||||
|
||||
LiveCD 里的`efibootmgr`工具可以直接操作固件的启动项。当然若是遵照律回指南和 Miku 指南,那么`efibootmgr`业已安装到你的系统中,你可以在运行中的本机 Arch 系统中折腾:
|
||||
```bash
|
||||
# 首先确定你要操作的硬盘和分区,不要搞错。UUID 马上就会用到。
|
||||
lsblk -o name,mountpoint,uuid
|
||||
# 参见 Wiki,以 Btrfs 为例,仅供参考
|
||||
sudo efibootmgr --create --disk /dev/nvme0n1 --part 1 \
|
||||
--label "Arch Linux" --loader /vmlinuz-linux \
|
||||
--unicode 'root=UUID=f6419b76-c55b-4d7b-92f7-99c3b04a2a6f rw rootflags=subvol=@ loglevel=3 quiet initrd=\intel-ucode.img initrd=\initramfs-linux.img'
|
||||
```
|
||||
::: note 创建启动项命令详解
|
||||
- `--part 1`:你的 ESP 分区序号。根据`lsblk`的树状图顺序判别。
|
||||
- `--label "Arch Linux"`:启动项名称。大多数固件并不支持中文。
|
||||
- `--unicode`后面跟内核参数。
|
||||
:::
|
||||
|
||||
归根结底,EFIStub 代替了启动加载器,由我们用户手动建立 UEFI 原生启动项。但这种方式硬要说优点吧……可能也就比 Grub 快那么几秒而已。维护起来并不比 Grub 轻松多少。
|
||||
|
||||
## 统一内核映像(UKI)
|
||||
在应用 EFIStub 的时候我就在想,有没有可能写一个`bootx64.efi`,直接带内核参数启动`vmlinuz-linux`呢。后面偶然找到了“统一内核映像”的介绍,豁然开朗。
|
||||
|
||||
> A unified kernel image (UKI) is a **single executable** which can be **booted directly from UEFI firmware**, or automatically sourced by boot loaders with little or no configuration.
|
||||
> ::: right
|
||||
> ——[Arch Wiki: Unified Kernel Image](https://wiki.archlinux.org/title/Unified_kernel_image)
|
||||
> :::
|
||||
|
||||
根据介绍,UKI 实际上就是将内核引导的资源整合起来,打包而成的 EFI 可执行文件。某种意义上这也算是一种「固件直接引导」,只不过 EFIStub 只创建原生启动项,而它两种启动项都可以做。
|
||||
|
||||
::: info UKI 通常包含……
|
||||
> 摘自 [UAPI Group Specifications](https://uapi-group.org/specifications/specs/unified_kernel_image/)。
|
||||
|
||||
- EFI 执行代码(决定它“可执行 EFI”的本质)
|
||||
- Linux 内核
|
||||
- 【可选】内核参数
|
||||
- 【可选】初始化内存盘
|
||||
- 【可选】CPU 微码
|
||||
- 【可选】描述信息、启动屏幕图、设备树……(不重要)
|
||||
|
||||
只要集成了 EFI 执行代码和 Linux 内核,就可以称作统一内核映像了。
|
||||
:::
|
||||
|
||||
接下来以`mkinitcpio`为例。
|
||||
|
||||
### i. 内核参数
|
||||
Wiki 中介绍了两种方法:
|
||||
- 向`/etc/cmdline.d/`里投喂`.conf`配置(文件名随意)。比如`root.conf`决定`/`如何挂载,等等。
|
||||
- 直接把所有参数搓成一行 echo 喂给`/etc/kernel/cmdline`文件。
|
||||
|
||||
于我而言,显然第二种更方便。
|
||||
```bash
|
||||
# 我在 LiveCD 里 arch-chroot 进去做的。别问我为什么没权限。
|
||||
echo 'root=UUID=... resume=UUID=... rw loglevel=3 quiet' > /etc/kernel/cmdline
|
||||
```
|
||||
与 EFIStub 不同,这里不需要指定`initrd=`——工具会自己打包。
|
||||
|
||||
> [!warning]
|
||||
> 若启用“安全启动”,且 UKI 封装了内核参数,则 UEFI 固件会无视外部传入的其余参数。
|
||||
|
||||
::: info [GPT 分区自动挂载](https://wiki.archlinuxcn.org/wiki/Systemd#GPT%E5%88%86%E5%8C%BA%E8%87%AA%E5%8A%A8%E6%8C%82%E8%BD%BD)
|
||||
跟 [@Vescrity](https://github.com/Vescrity)讨论的时候我俩都觉得分区 UUID 太长了,于是他尝试省略掉`root=`参数。
|
||||
就结果来看还真可行,顺带附上他的折腾记录:[Yukitoha Blogs:从统一内核镜像启动](https://vescrity.github.io/post/UKI/)。
|
||||
:::
|
||||
|
||||
### ii. 预设文件
|
||||
编辑`/etc/mkinitcpio.d/linux.preset`。
|
||||
```properties
|
||||
#PRESETS=('default' 'fallback')
|
||||
PRESETS=('default')
|
||||
|
||||
#default_config="/etc/mkinitcpio.conf"
|
||||
#default_image="/boot/initramfs-linux.img"
|
||||
#default_uki="/efi/EFI/Linux/arch-linux.efi"
|
||||
default_uki="/efi/EFI/BOOT/bootx64.efi"
|
||||
default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"
|
||||
```
|
||||
本身 UKI 默认是丢到`esp\EFI\Linux\arch-linux*.efi`里的,相对来说已经比较通用(Grub 可以直接读,据说`systemd-boot`也可以扫描到,也可以直接刷进 NVRAM)。但我尝试 UKI 本就是为了摒弃前面两种方案,殊途同归反倒不值得这么整了。所以我个人选择直接让 UEFI 固件直接加载回退路径启动项。
|
||||
|
||||
### iii. 创建映像
|
||||
按需建立路径,并跑一遍生成:
|
||||
```bash
|
||||
mkdir -p /efi/EFI/BOOT/
|
||||
mkinitcpio -p linux
|
||||
```
|
||||
如有必要,清理系统中废旧的启动文件(Grub、……),并用`efibootmgr`手动清理遗留的原生启动项。
|
||||
|
||||
---
|
||||
|
||||
建完之后退出系统,重启按快捷键进入启动菜单,这下该有你硬盘的 UEFI 回退路径启动项了:
|
||||
```
|
||||
HDD: PM8512GPKTCB4BACE-E162
|
||||
```
|
||||
221
docs/notes/Maintenance/JellyfinFileOrg.md
Normal file
221
docs/notes/Maintenance/JellyfinFileOrg.md
Normal file
@@ -0,0 +1,221 @@
|
||||
---
|
||||
category: 折腾流程
|
||||
tag:
|
||||
- Jellyfin
|
||||
- 影音服务器
|
||||
- 媒体库
|
||||
- 刮削
|
||||
- 文件管理
|
||||
---
|
||||
|
||||
# 影音服务器——有关 Jellyfin 的文件归集
|
||||
|
||||
> [!important]
|
||||
> 本文仅探讨音、视、图、文在纳入 Jellyfin 媒体库时应该如何整理、刮削,**并不涉及工具本身的部署以及媒体库的建立**。如有需求还请另行查找教程,或翻阅[官方文档](https://jellyfin.org/docs/general/installation/)。
|
||||
|
||||
> ~~Emby 支持文件夹,Jellyfin 不支持,Emby 赢一半!(~~
|
||||
|
||||
Plex 怎样我不清楚,但 Emby 对文件摆放的要求的确是比 Jellyfin 宽松得多的。但在好友的撺掇下,我还是换用 Jellyfin 了。~~……然后,就被 Jellyfin 的刮削和文件结构要求气晕。~~
|
||||
|
||||
::: note 我个人的大致分类
|
||||
- 电子书(Books)
|
||||
- 漫画(Comics)
|
||||
- 小说(Novels)
|
||||
- 音频
|
||||
- 音乐(CloudMusic)
|
||||
- 音声(DLsite、ASMR 虚拟主播的录播转码)
|
||||
- 视频、图片
|
||||
- 音声(实写录播)
|
||||
- 画师的差分图(Fanbox、Patreon,等等)
|
||||
- MMD
|
||||
- 可爱的女装照(不是我的,我的[都发出来惹](../../diaries/dress/readme.md))
|
||||
|
||||
虽然上述一些内容的说法已经比较直白,但真的点出来是什么东西就还是有点超过了哈。
|
||||
:::
|
||||
|
||||
有人可能会问,为什么音声会分音、视频呢?呐就要讨论下 Jellyfin 的媒体库了。
|
||||
|
||||
## 媒体库的类型
|
||||
|
||||
无论 Emby 还是 Jellyfin(我想 Plex 也一样),对于媒体内容的界定通常比较分明。这当然可称得上一件好事,但视频不仅仅是影片,音频也不仅仅是歌曲。对于没办法归类成“剧集”的,尚有“家庭视频和照片”这种分类,这也就能够解释为何我把视频和图片归为一大类;然鹅对于没办法归类成“专辑”的,私密马赛,我莫得选择。
|
||||
|
||||

|
||||
|
||||
然后……接下来就讲讲音乐、书籍、家庭视频和照片怎么整理文件夹结构吧。电影和节目这块网上应该也有不少教程。“混合电影和电视”这一项据官网称**已经弃用,不推荐选**。
|
||||
|
||||
::: tip 或者参考这些博客
|
||||
毕竟我是死宅嘛。!!死宅真恶心。!!
|
||||
|
||||
- [《利用 Jellyfin+Bangumi 打造更舒适的动画媒体库》(初之音)](https://www.himiku.com/archives/deploy-a-more-comfortable-animation-library-with-jellyfin-and-bangumi.html)
|
||||
- [《打造你的同人音声媒体库》(Hinata Rin)](https://blog.hinatarin.com/2021/09/27/build-your-own-doujin-voice-media-library/index.html)
|
||||
:::
|
||||
|
||||
## 书籍
|
||||
|
||||
::: details 官方给出的电子书摆放
|
||||
```
|
||||
Books
|
||||
├── Audiobooks
|
||||
│ ├── Author
|
||||
│ │ ├── Book1
|
||||
│ │ │ └── Book1.flac
|
||||
│ │ └── Book2
|
||||
│ │ └── Book2.mp3
|
||||
│ └── Book3
|
||||
│ ├── Book3.aac
|
||||
│ ├── content.opf
|
||||
│ └── cover.jpg
|
||||
├── Books
|
||||
│ └── Author
|
||||
│ ├── Book4
|
||||
│ │ └── Book4.epub
|
||||
│ ├── Book5
|
||||
│ │ └── Book5.epub
|
||||
│ ├── Book6
|
||||
│ │ ├── Book6.epub
|
||||
│ │ ├── cover.png
|
||||
│ │ └── metadata.opf
|
||||
│ └── Book7
|
||||
│ └── Book7.pdf
|
||||
└── Comics
|
||||
├── Plastic Man (1944)
|
||||
│ └── Plastic Man #002 (1944).cbz
|
||||
├── Attack on Titan (2012)
|
||||
│ └── Attack on Titan #001 (2012).pdf
|
||||
└── Comic (2008)
|
||||
├── ComicInfo.xml
|
||||
└── Comic #001 (2008).cbr
|
||||
```
|
||||
:::
|
||||
简而言之,对于每一“本”书,最好**单独开辟一个文件夹**,然后文件夹里**只摆放该书的单文件“合订本”**(比如`Books/王道24寄网/王道24寄网.pdf`)。
|
||||
|
||||
但这么分在我看来十分甚至九分的抽象,因为我手里的大多数小说和漫画都莫得有效的标签,甚至绝大多数是由纯文本导出 PDF 而来。因此,比起官版墨迹的组织方式,不妨就按各人的阅读习惯组织起来,不支持的格式导出成 ~~PDF~~ EPUB,就可以了。
|
||||
|
||||
> [!note]
|
||||
> 旧版 Jellyfin 的 PDF 阅读器在 PC 端有可能加载不出来。而且就阅读体验来说或许还不如下载到手机里用 WPS 阅读。~~所以服务器端真的没有像番茄免费小说那样的电子书架吗(~~
|
||||
|
||||
## 家庭视频与照片
|
||||
|
||||
这一分类也是差不多的随性。官方也莫得文档来强制约束应当是什么样的文件组织。以《绝区零》铃妹的一组差分图为例:
|
||||
|
||||

|
||||
|
||||
## 音乐
|
||||
|
||||
然后就是重头戏了,音乐。开篇我提过,我借助音乐媒体库还托管一些同人音声,那么对于音声的管理也是同样的。
|
||||
|
||||
::: details 官方给出的音乐摆放
|
||||
```
|
||||
Music
|
||||
├── Some Artist
|
||||
│ ├── Album A
|
||||
│ │ ├── Song 1.flac
|
||||
│ │ ├── Song 2.flac
|
||||
│ │ └── Song 3.flac
|
||||
│ └── Album B
|
||||
│ ├── Track 1.m4a
|
||||
│ ├── Track 2.m4a
|
||||
│ └── Track 3.m4a
|
||||
└── Album X
|
||||
├── Whatever You.mp3
|
||||
├── Like To.mp3
|
||||
├── Name Your.mp3
|
||||
└── Music Files.mp3
|
||||
```
|
||||
:::
|
||||
|
||||
### 歌曲的刮削与组织
|
||||
|
||||
::: info 媒体刮削
|
||||
刮削——或者我更愿意称之为“打标”或者“tagging”——指的是从特定渠道(一定是互联网吗?未必)获取到这份音/视频的元数据信息(作者、标题、流派、专辑、发行年份,等等),并且填充进媒体文件的附加信息位(通常位于文件尾部),又或者单独整理成`.nfo`之类的数据库的行为。
|
||||
|
||||
这一词不仅限于音频,视频也是有元数据信息的,比如内嵌字幕(不同于剪辑、特效软件直接打在视频流上的文本框字幕)。
|
||||
|
||||
非要说的话,我更倾向于:“刮削”一词不过是老烧们捏出来唬人的,所谓的专有术语罢了。
|
||||
:::
|
||||
|
||||
我的歌曲大多下载自网易云,通常来说都是刮削好的`mp3`和`flac`文件,但也有些许例外,比如 VIP 歌曲复制链接跑去在线工具抓取下载得来的音频文件,呐怎么办呢?
|
||||
|
||||
之前看到的[《基于 Jellyfin 和音流的 nas 影音库搭建及踩坑》(少数派)](https://sspai.com/post/90896)一文推荐了“音乐标签”这么个工具,支持从网易云、QQ 等多个国内源抓取、刮削音频。此外,Mp3tag([官网下载](https://www.mp3tag.de/en/download.html)、[官方文档](https://docs.mp3tag.de/))也可以从 MusicBrainz 等国外源抓取、刮削。
|
||||
|
||||
个人建议刮削阶段还是用国内源比较好,因为接下来我要讲一个“洛天依作品集”的故事:
|
||||
|
||||

|
||||
|
||||
但刮削工具也并非万能。比如《紫罗兰永恒花园 OST》的很多歌就被“音乐标签”那软件霍霍了个遍:
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
刮削完了需要按上面的官方要求组织这些歌曲,毕竟 Jellyfin 不支持读取音乐标签自动聚合(这点在上面援引的博客中也吐槽了)。我个人用 Mp3tag 做批量重命名。相比起音乐标签,Mp3tag 重命名时允许用函数格式化字符串,比如`$replace`、`$num`,方便一点。
|
||||
|
||||
Jellyfin 的音频搜集**仅以专辑为依据**。官方文档自己也说“as long as each album is contained within one folder”,翻译过来就是“只需确保一张专只在一个文件夹(子树)”。所以文件结构自然也以专辑为准。
|
||||
|
||||
::: details 分碟
|
||||
顺带一提,基于上述准则,以及我自己组织音声的实践来看。有如下几种错误例,Jellyfin 会拆分成多个同名的专辑:
|
||||
1. 同一张专按分碟**分成多个文件夹(树)**,违反单子树要求
|
||||
```
|
||||
Author
|
||||
\AlbumA Vol.X
|
||||
\AlbumA Vol.Y
|
||||
\AlbumB Vol.X
|
||||
```
|
||||
这种情形会在媒体库里拆出两个 AlbumA(分别为盘号 X 和盘号 Y)。
|
||||
|
||||
2. 非数字光盘号(音乐专辑诚然如此,然鹅音声有 Omake)
|
||||
```
|
||||
\Album
|
||||
\Vol.1
|
||||
\Vol.2
|
||||
\Vol.Omake
|
||||
```
|
||||
这种情形 Omake 会被拆出去,也就是两张封面一样的 Album 专辑。
|
||||
|
||||
3. 文件夹不显式标明盘号,指望用`.mp3`文件里的盘号让 Jellyfin 自动刮削
|
||||
```
|
||||
\Album
|
||||
\Asahina Akari POV
|
||||
\Mahiro Yuzuki POV
|
||||
\Mahiro Yuri POV
|
||||
```
|
||||
Jellyfin 会这么看:把 Album 当成 Artist,把三个 POV 当成三张独立专辑。也就是拆成三张同名专辑。
|
||||
|
||||
---
|
||||
|
||||
正确的组织方式应为:
|
||||
```
|
||||
Author
|
||||
\AlbumA
|
||||
\Vol.X
|
||||
\Vol.Y
|
||||
\AlbumB
|
||||
```
|
||||
~~所以说就不能直接读音乐标签做自动聚合马?~~
|
||||
:::
|
||||
|
||||
### 音频音声的刮削与组织
|
||||
|
||||
不同于歌曲的刮削,音声**通常是没有标签**的。所以,首先需要人为对这些音声进行分类:DLsite 贩售的?主包的订阅限定?还是说有什么特征,是剧情音声?催眠音声?普通的奥数魔刃?
|
||||
|
||||
如果有些音声实在没有头猪,至少也用“散装”之类的文件夹包起来,**尽量确保所有的“文件”都被文件夹收纳好,避免裸放在媒体库文件夹下,也避免文件夹和音声文件混着存放**[^mixed_album]。
|
||||
|
||||
[^mixed_album]: 避免音声文件和文件夹混在一起,是因为:
|
||||
- 假若该文件并没有任何标签,那么只能在 Jellyfin 音乐媒体库的“歌曲”那一页翻来覆去才找得到;
|
||||
- 假如该文件有打标签,那么所有和它混在一起的文件夹,里面的音声分类(哪怕自身有打标)均会被覆盖为该文件的标签。
|
||||
|
||||
::: tip 理想的文件树(简化版本,但仍可能加载较慢)
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A(["音声"]) --> B(["DLsite"]) & D(["订阅限定"]) & E(["音声录播"])
|
||||
B --> B1(["RJ416817"]) --> n1(("\*.mp3"))
|
||||
D --> D1(["希丝奈cisne"]) --> D11(["24-11"]) --> n21(("\*.mp3"))
|
||||
D1 --> D12(["八月舰长音声"]) --> n22(("\*.mp3"))
|
||||
E --> E1(["mahoulelys"]) --> n3(("\*.mp4.mp3"))
|
||||
```
|
||||
或者说,尽可能保证所有的**文件**均在平衡树的叶子节点处。
|
||||
:::
|
||||
|
||||
分类完毕之后,再对这些音声做批量的打标。
|
||||
|
||||
DLsite 上贩售的音声可用 Python 第三方库`dvtag`打标(从 DLsite 获取元数据可能需要代理),具体可参见开篇的参考博客;像音声录播通常就以主播为单位收纳好;至于可能存在子文件夹的订阅限定,可以用 Mp3tag 批量为这些音声的作者、年份字段打上标注,或是在专辑字段打上“谁谁的限定音声”,都行。
|
||||
227
docs/notes/Maintenance/SelfHosted.md
Normal file
227
docs/notes/Maintenance/SelfHosted.md
Normal file
@@ -0,0 +1,227 @@
|
||||
---
|
||||
category: 灵机一动
|
||||
tag:
|
||||
- RDP
|
||||
- 串流
|
||||
- SSH
|
||||
---
|
||||
|
||||
# 自组服务:让老机器“物尽其用”
|
||||
|
||||
今年的 618 读者们都有过什么盘算呢?换机还是装新机?我嘛……显然是没有条件(米)去换代的,所以如何利用好现有的条件首先就是个问题。之前偶然借助 Hyper-V 得知了 RemoteApps 这项功能,但跑虚拟机[^vm]始终是我个人比较抵触的事情(问就是配置不够分),于是我将目光盯向了 17 年买的老华硕笔记本。这就是咱“自组服务”最初的尝试了。
|
||||
|
||||
[^vm]: 这里仅指传统意义的虚拟机,也就是 VMWare、VirtualBox 之类“模拟一套硬件”的硬件抽象层虚拟化。广义的虚拟机实际上就是虚拟化:Java 语言也有我们熟悉的 JVM 虚拟机,这是编程语言层的虚拟。此外还有 QEMU、Wine、Linux Docker 等在别的层级实现的虚拟化。
|
||||
|
||||
## 基础设施
|
||||
|
||||
首先除非你想要亲自呆在老机器旁边操作,否则肯定需要远程连接到那台老机器上的,也就需要保证**别的设备能和老机器互通**。
|
||||
|
||||
如果两台机同在一个内网(比如以 WiFi、有线等方式,设备间连接同一个路由器),那么通常来说需要**固定老机器的 IP**,否则刚搭的“自组服务”可能没几天就飘不知道哪去,得登进路由器里查咯。固定 IP 可以在老机器的系统里操作,等会具体到系统上再分别讨论;一些路由器也支持用户登录进去固定主机的 IP,但我家网关莫得这个功能。
|
||||
|
||||
若并非同一内网,则更麻烦亿些。我个人折腾过可行的最简方案是 Zerotier **虚拟组网**,毕竟当时对寄网了解有限,搜**内网穿透**也只能搜出来“喂我花生”之类的东西(我家网关也只支持某某壳子)。
|
||||
|
||||
:::: details 配置 Zerotier One
|
||||
首先当然得有那么个内网。在 [Zerotier](https://my.zerotier.com/login) 上注册/登录账号(可能比较卡,毕竟国外平台),`Create A Network`创建虚拟内网。免费版(截至目前)至多允许同一网络 25 个设备,但对于我来说足够了。
|
||||
|
||||
接下来图省事的朋友点进新建的网络,记一下`Network ID`就可以直接安装 Zerotier 客户端了。
|
||||
|
||||
::: details 或者,进一步配置虚拟内网
|
||||
主要关注以下项:
|
||||
|
||||
- `Basics` 网络基础设置
|
||||
- `Name` 给你的内网重新起个拟人的名字。
|
||||
- `Access Control`一般来说保持默认的`Private`(也就是必须你在账号上同意设备加入)即可。
|
||||
- `Advanced` 高级设置
|
||||
- `Manage Routes`相当于路由表了(左边是被访的内网网段,右边是 Zerotier 虚拟 IP)。
|
||||
可以看看[这篇博客](https://stray.love/jiao-cheng/zerotier-zhong-jie-jiao-cheng)了解一下。
|
||||
- `IPv4 Auto-Assign`里挑一个容易记的 IP 池。比如我就选`10.147.17.*`。
|
||||
- `IPv6 Auto-Assign`就随意了。说来 IPv6 现阶段不就是公网吗(
|
||||
- `DNS`参见[英文文档](https://docs.zerotier.com/dns/)。
|
||||
|
||||
然后在设备加入虚拟内网之后,可以在`Members`里找到这个设备,手工给它分配个静态 IP。
|
||||
:::
|
||||
|
||||
::: tabs#zerotierInstall
|
||||
@tab Windows
|
||||
Windows 安装之后在开始菜单找到 ZeroTier,然后可以看到任务栏里出现了 ZeroTier 的图标。右键图标,在菜单里直接`Join Network`,粘贴刚刚的`Network ID`,回车即可。
|
||||
|
||||
顺带一提,记得在右键菜单里勾上`Start UI at Login`,也就是开机启动。
|
||||
|
||||
@tab Linux systemd
|
||||
可以通过官网提供的[命令行](https://www.zerotier.com/download/#linux)、部分包管理器等方式安装 Zerotier One。
|
||||
|
||||
安装之后记得确认一下 Zerotier 服务是否开启:
|
||||
```bash
|
||||
sudo systemctl status zerotier-one.service
|
||||
```
|
||||
如`systemctl`显示该服务`disabled`、`inactive (dead)`,说明没有启动,启用并立即启动它:
|
||||
```bash
|
||||
sudo systemctl enable --now zerotier-one.service
|
||||
```
|
||||
于是就可以使用 Zerotier CLI 了。
|
||||
|
||||
我的场景比较简单,不考虑自建 moon 的情况下直接加入虚拟内网:
|
||||
```sh
|
||||
sudo zerotier-cli join Network_ID
|
||||
sudo zerotier-cli listnetworks
|
||||
```
|
||||
|
||||
@tab Docker
|
||||
[官方文档](https://docs.zerotier.com/docker/)的做法是拉一个 centos 在里面用 systemd 方式安装,属于是脱裤子放屁。
|
||||
|
||||
网上有一些现成的镜像,像`zerotier`和`zerotier-synology`(群晖用的),这里摘录一下用`zerotier/zerotier`的流程:
|
||||
|
||||
> [!warning]
|
||||
> **此方案尚未测试,谨慎复制**!建议在其他**有测试结果的**博客、专栏中获取适合的方案!
|
||||
|
||||
```sh
|
||||
docker pull zerotier/zerotier
|
||||
# 务必注意网络通信方式!
|
||||
docker run -d --name zt --network host zerotier/zerotier
|
||||
docker exec -it zerotier bash
|
||||
zerotier-cli join Network_ID
|
||||
zerotier-cli listnetworks
|
||||
```
|
||||
:::
|
||||
|
||||
在设备加入虚拟内网之后,需要再次登上账号同意设备加入(默认建立的是私有内网,需要号主同意加入),并且给它分配固定 IP。
|
||||
::::
|
||||
|
||||
> [!warning]
|
||||
> 在配置基础设施、远程连接的时候,还请**不要**断开老机器的屏幕——至少等能连上了再拔线。
|
||||
|
||||
## Windows——性能分摊
|
||||
|
||||
相信大多数人玩电脑接触最多的还是 Windows 系统,那么对于如何使用它,想必都是很有经验的罢。根据老机器配置的不同,它承担负载的多寡也自然各有参差。
|
||||
|
||||
### 固定 IP
|
||||
|
||||
- Win11 参考[电脑屋](https://www.diannaowu.com/jc/212.html)的教程;
|
||||
- Win8.1 及以下通常还是从控制面板固定,也参考[电脑屋](https://www.diannaowu.com/jc/231.html)。
|
||||
- Win10 除了控制面板法,也可以直接在“设置—网络和 Internet—状态”中找到上网的网络(通常标以太网或者 WiFi),点进底下的属性,往下划拉到 IP 设置那边手动分配 IP。
|
||||
|
||||
### 远程连接
|
||||
|
||||
白嫖国产软件的免费服务也可以,最常见的当属向日葵了吧。但我是受不了手机端向日葵广告满天飞,所以还是折腾 Windows 自带的 RDP 吧。
|
||||
|
||||
欲使用 RDP 连接,需要启用 Windows 的远程控制功能。据微软称家庭版只能它控别人,不能别人控它。但我都 LTSC 2021 起手了,又有何惧。
|
||||
远程控制选项可在以下两个入口找到(以 Win10、11 为准,不推荐“开发人员设置”):
|
||||
|
||||
- 设置—系统—远程桌面,启用之(顺便根据指引把“睡眠”禁用掉、把“网络发现”打开);
|
||||
- 打开“系统属性”[^sysdm]的“远程”选项卡,允许远程连接、勾上“仅允许……”选项(恕我懒得打全称)。
|
||||
|
||||
[^sysdm]: 通常是在“控制面板—系统”(早期 Windows)或“设置—系统—关于”(Win10、11)里跳转。也可`Win+R`直接执行`%windir%\system32\sysdm.cpl`。
|
||||
|
||||
然后就可以使用 RDP 连接了。控制端可以用`mstsc`(Windows)、Windows App(Android,原“RD 桌面”)、FreeRDP 以及 Remmina(Linux),等等。
|
||||
|
||||
::: warning
|
||||
微软账号现在推行免密登录,取而代之的是用 2FA 工具验证登录码,这种方式[**不适用于**](https://support.microsoft.com/zh-cn/account-billing/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-microsoft-%E5%B8%90%E6%88%B7%E8%BF%9B%E8%A1%8C%E6%97%A0%E5%AF%86%E7%A0%81%E8%AE%BF%E9%97%AE-674ce301-3574-4387-a93d-916751764c43) RDP 连接。
|
||||
此外,实测发现,微软文档所述的“应用密码”也无法作为凭据。**推荐用本地、带密码的账户托管老机器,密码留空进行远控需要额外做组策略配置,恕不展开。**
|
||||
:::
|
||||
|
||||
然后该干嘛干嘛。顺带一提,*远控的鼠标一般是不记录位移、只改变坐标的*,也就是说《原神》这类游戏远程玩效果并不佳;但《剑网三》重制版则更建议远程玩,因为接下来讲的 Moonlight 串流没法向它传递键盘输入。
|
||||
|
||||
### 串流
|
||||
这里的串流主要是指类似“云原神”那样的——老机器跑游戏,其他设备接收画面、回传操作的——类似看别人直播的模式。顺带一提,自己直播也是一种串流,只不过方向相反:是你这边把音画上传[^limited_upload]到直播平台。
|
||||
|
||||
串流自建云游戏的主要方式是 Moonlight+Sunshine 和 Parsec,其中前者结合 Zerotier 虚拟组网,甚至可以异地云玩。有关的配置方式可以参考[知乎专栏](https://zhuanlan.zhihu.com/p/718510054)或者 B 站搜索“自建云原神”之类的关键词(也可以看看“阿西西”这个 UP 主的魔改 Moonlight 客户端)。咱已经很久没搞了,讲出来也不一定对,就略过吧。
|
||||
|
||||
[^limited_upload]: 目前国内的 ISP(又或者运营商)对上传带宽限制得很死,个人通常不会允许大规模的上传(尤其 BT、PT、PCDN,其中以 PCDN 为甚——很多软件都会在运行时偷偷跑上传),否则容易吃传单(据说可以投诉,但我这人懒得扯皮);企业商宽、专线通常会给多一点,但就极客湾的遭遇来看似乎也仅仅是“一点”,而且价格比较高昂。可能云游戏亏损就是亏损在这吧。
|
||||
|
||||
### 文件共享
|
||||
|
||||
最简单的就是 Windows 自带的 Samba(SMB)文件共享,也就是右键文件/文件夹属性里边的“共享”选项卡。
|
||||
|
||||
此外还有其他参考:
|
||||
|
||||
- 网络文件系统 NFS:参见[微软文档](https://learn.microsoft.com/zh-cn/windows-server/storage/nfs/nfs-overview)
|
||||
- WebDav 服务器(需要 IIS):参见[微软文档](https://learn.microsoft.com/zh-cn/iis/install/installing-publishing-technologies/installing-and-configuring-webdav-on-iis#enabling-webdav-publishing-by-using-iis-manager),或参考[《Windows 开启 WebDAV》(少数派)](https://sspai.com/post/78540)
|
||||
|
||||
### 其他服务
|
||||
|
||||
- 推流机(挂着直播平台的直播软件,开第三方推流接收内网 OBS 推过来的 rtmp 串流)
|
||||
- 挂下载(主要是各种限速客户端的下载,或者数据量大的下载)
|
||||
- 自动化脚本
|
||||
- RemoteApps(迫真“家庭”版 Office,当然还有 Adobe 全家桶,等等)
|
||||
- ……
|
||||
|
||||
## Linux——Web 接口
|
||||
|
||||
Linux 通常还是作为服务器而非日用的系统使用,所以相比费劲折腾 VNC 等远程桌面,不妨就让它挂一些长线运行的服务好了。而既然莫得远程桌面,这些长线服务很显然只剩 WebUI 这一种可视化的选择。当然如果你更偏好 CLI(命令行界面),那也不是不行。
|
||||
|
||||
### 固定 IP
|
||||
|
||||
不同的发行版主要用到的网络管理工具都不太一样。
|
||||
|
||||
- 像 Arch Linux 安装阶段会用`systemd-networkd`分配固定 IP;
|
||||
- 而 Ubuntu 虽然也有上述服务,但更多在用`Netplan`(参见 [FreeCodeCamp](https://www.freecodecamp.org/chinese/news/setting-a-static-ip-in-ubuntu-linux-ip-address-tutorial/));
|
||||
- 还可以用`ifconfig`做**临时**配置:
|
||||
|
||||
```bash
|
||||
ifconfig # 查看所有网卡的配置信息
|
||||
ifconfig eth0 # 查看某网卡的配置信息,如 eth0
|
||||
ifconfig eth0 172.16.129.108 netmask 255.255.255.0 # 配置网卡的临时生效的IP地址
|
||||
route add default gw 172.16.129.254 # 配置网关
|
||||
```
|
||||
|
||||
总之,具体问题(发行版)具体分析,像`/etc/sysconfig/network-scripts`这种上古教程还是不要无脑跟了。~~我的 Ubuntu Server 24.04.2 LTS 连`sysconfig`都莫得。~~
|
||||
|
||||
### SSH 远程连接
|
||||
|
||||
安装`openssh`包,并启用`sshd`服务。多数软件包管理器应该都支持 SSH。以咱的 Ubuntu Server 为例:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install openssh
|
||||
sudo systemctl enable --now sshd
|
||||
sudo systemctl status sshd
|
||||
```
|
||||
|
||||
### 部署服务(分层讨论)
|
||||
|
||||
首先说一下分层怎么回事。有些服务可能是通过容器分发的,那么 Docker 就是这些服务的下层,为这些服务提供支持(有点绕口?);而 Docker、npm 之类通常又依赖国外的源(像 DockerHub、npmjs),于是代理又是容器的下层。~~当然正经分类起来这些都属于应用层。只是细化一下粒度便于讨论。~~
|
||||
|
||||
::: details 代理层(以 Mihomo 为例)
|
||||
Mihomo 可以理解为 Clash 的后继,所幸 Clash 的许多配置还是能兼容的(至少我的机场订阅可以直接覆盖使用)。但更好的办法还是编写配置文件了。
|
||||
|
||||
我参考了“虚空终端”[^yuanshen]文档的 GeoX [快捷配置](https://wiki.metacubex.one/example/conf/):
|
||||
```yaml
|
||||
geox-url:
|
||||
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||
```
|
||||
但遗憾的是在代理尚未配置好的情况下,似乎哪怕是`jsdelivr`镜像都很难获取到 Geo 信息。那么还是手动下载吧。
|
||||
实际上只需下载`geoip.dat`并更名`GeoIP.dat`、`geosite.dat`更名`GeoSite.dat`(Linux 对文件名大小写敏感),丢进 mihomo 配置目录即可(也就是`config.yaml`所在位置)。
|
||||
|
||||
[^yuanshen]: 文档简介就是这么写的:“‘虚空终端’是一个基于开源项目‘原神’的二次开发版本”。或许是起名灵感,又或者是避嫌。
|
||||
:::
|
||||
|
||||
::: note 应用支持层
|
||||
主要就是 Docker。Docker 的安装参见官方文档。出于一些原因,现行很多镜像源并不可靠也并不完整,不如直接配置代理(参见[《如何配置 docker 通过代理服务器拉取镜像》(博客园)](https://www.cnblogs.com/abc1069/p/17496240.html))。
|
||||
|
||||
`pnpm`或者说`node`直接上官网复制 Linux 安装脚本就彳亍,但**不建议去装 Docker 镜像**[^pnpm_docker_image]!
|
||||
|
||||
[^pnpm_docker_image]: 个人理解吧……Docker 镜像通常是部署用的,比如 CI/CD runner 跑工作流,需要拉`node`容器生成我这博客的`dist`成品。直接拿来开发个人觉得不太妥。
|
||||
:::
|
||||
|
||||
::: details 应用层
|
||||
这块不是重点,各种服务有它自己的参考文档。
|
||||
|
||||
- `webmin`:提供 WebUI 以配置服务器的系统,以及监测服务器的性能占用。
|
||||
- `aria2`与`AriaNg`:提供直链、BT、PT 下载支持。参见[《手把手教你使用 Docker 搭建 aria2+AriaNg,打造自己的离线下载服务器》(博客园)](https://www.cnblogs.com/wqp001/p/14709997.html) [^ariang_baidupan]。
|
||||
- `jellyfin` `emby`:影音服务器。有关 Jellyfin 的刮削会专门另开一篇讨论。
|
||||
- `vscode-server`:控制端可利用 VSCode 配合 Remote-SSH 插件连上服务器,做些跨平台开发……或者 Linux Native 开发。~~真有人在 Linux 编译 MSVC x86-64 吗?有的话浇我。~~
|
||||
- `ssh`:Xshell 做些命令行活计,Xftp 做些文件交换活计。
|
||||
- `nfs`:和前面 Windows 一样,可以挂共享文件系统。
|
||||
- ……
|
||||
|
||||
[^ariang_baidupan]: 自从 !!Pandownload!! 被赐似之后,这种套取直链的油猴插件就多半是骗钱引流的“浑水”了,**不建议尝试**!但当年这玩意能火,或许也说明有些慢速下载获取到合适的直链、搭配代理,确实能提速吧。
|
||||
:::
|
||||
|
||||
## 后记
|
||||
|
||||
通篇看下来,我的服务场景都挺简单的,不是吗?说实话……我并不熟悉寄网(哪怕为了跨考自学过 408),平时也没有太多 Web 编程的实践和需求。能简单搭这么一个自用的服务便已经方便我不少了。若是真正的大佬,或许还会利用反代、软路由等种种轮子实现更加 NB 的东西吧。
|
||||
|
||||
不过反正我这人也没什么水平,笔记也不过抛砖引玉。菜逼有菜逼的天马行空,简单点写,懂的都懂。
|
||||
BIN
docs/notes/Maintenance/esp_without_bootARCH.webp
Normal file
BIN
docs/notes/Maintenance/esp_without_bootARCH.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/notes/Maintenance/jellyfin_content_type.webp
Normal file
BIN
docs/notes/Maintenance/jellyfin_content_type.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
BIN
docs/notes/Maintenance/jellyfin_home_visual.webp
Normal file
BIN
docs/notes/Maintenance/jellyfin_home_visual.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
docs/notes/Maintenance/luotianyi_question_mark.webp
Normal file
BIN
docs/notes/Maintenance/luotianyi_question_mark.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 192 KiB |
BIN
docs/notes/Maintenance/musictag_misfetch.webp
Normal file
BIN
docs/notes/Maintenance/musictag_misfetch.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 184 KiB |
Reference in New Issue
Block a user