构建自己的 LXC 镜像模板

Proxmox VE 中,除了虚拟机之外,也有基于 LXC 容器技术的虚拟化方案。Proxmox VE 提供了不少官方镜像,但是也可以根据自己的喜好定制镜像模板,以便更加快速部署,或是满足个人需求。

本文以 Debian 为例,为了创建 LXC 镜像,您需要有一台拥有 root 权限且安装 Debian 操作系统的机器,可以是虚拟机也可以是物理机,服务器版与桌面版均可,但不能是在容器中运行的 Debian。

注意

以下所有命令以 root 权限运行。如果您不是 root 用户,请使用 sudo -i 切换到 root 用户。

安装依赖

我们需要 debootstrap 来创建根文件系统,以及 zstd 来压缩镜像。

1
apt update && apt install debootstrap zstd

创建根文件系统

LXC 容器模板的本质是将 Linux 根文件系统 (/ 路径) 打包成一个 tar 文件并压缩,因此我们只需还原这个过程即可。

对于此,Debian 提供了一个叫做 debootstrap 的工具,可以帮助我们在指定目录下创建一个 Debian 根文件系统。其命令的格式为:debootstrap <release> <target path> <mirror url>

1
debootstrap bookworm ./rootfs http://deb.debian.org/debian/

上面的命令已经创建了一个最简单的 Debian 根文件系统,如果不需要自定义的话,可以直接将该目录打包、压缩、上传到 Proxmox VE 中,作为镜像使用。

阅读更多

在 Linux 下交换 Super (Win) 和 Ctrl 键位

起因是我在 MacOS 下使用 Karabiner-Elements 交换了 Command 和 Option 的位置,以符合 Windows 的操作习惯。而 UTM 虚拟机又做了一次转换,为了让 Linux 中的快捷键使用体验也与 Windows 一致,我需要在 Linux 中交换 Super (Win) 键和 Ctrl 键的位置。

本文仅对 Fedora 40 测试过,并在 Debian 12 下测试无效。

本文所述内容出于满足个人的小众需求,无法作为普适的解决方案。请酌情参考。

首先编辑 ~/.Xmodmap 文件,添加以下内容:

1
2
3
4
5
6
7
8
clear control
clear mod4
keycode 37 = Super_L
keycode 133 = Control_L
keycode 105 = Super_R
keycode 134 = Control_R
add control = Control_L Control_R
add mod4 = Super_L Super_R

然后执行以下命令:

1
xmodmap ~/.Xmodmap

此时可以测试交换是否生效。若生效,则可在 ~/.xinitrc 中添加上述命令,使其在 X11 启动时自动执行。

1
[ -f "$HOME/.Xmodmap" ] && xmodmap "$HOME/.Xmodmap"

参考:Harttle Land: ArchLinux 键盘映射:交换 CapsLock 和 Ctrl

通过 API 删除 Cloudflare 注册的域名

本文叙述的不是删除托管在 Cloudflare 的域名(即在别处注册,将 NS 指向 Cloudflare),而是删除 Cloudflare 注册的域名。

您需要预先在 Shell 中定义以下变量:

1
2
3
export CF_EMAIL=
export CF_GLOBAL_API_KEY=
export CF_ACCOUNT_ID=

删除 Cloudflare 注册域名的 DNS 托管

如果域名是在 Cloudflare 注册的,那么 Cloudflare 控制台将不允许您删除域名的 DNS 托管。但是,您可以通过 API 删除域名的 DNS 托管。

注意

执行此操作有一定的风险,可能导致账户的不一致性,或域名无法再使用。除非确定以后不需要该域名,否则不要执行此操作。

删除在 Cloudflare 注册的域名的 DNS 托管后,有一定概率可以重新添加回来,但也可能会要求更改 NS 记录以重新验证域名的所有权,但 Cloudfalre 注册的域名不支持更改 NS 记录,则陷入死锁、该域名不再可用。

1
2
3
4
5
# 首先定义 Zone ID,可以在 Cloudflare 控制台中查看
export ZONE_ID=
curl -X DELETE \
https://api.cloudflare.com/client/v4/zones/$ZONE_ID \
-H "X-Auth-Email: $CF_EMAIL" -H "X-Auth-Key: $CF_ACCOUNT_ID"

向注册局提交删除域名请求

注意

该操作不可逆,会从注册局处删除该域名并不提供退款,仅当不再需要该域名的时候执行此操作。注册局具体何时会再释放域名也是不确定的。

此 API 接口未被 Cloudflare 官方文档记录,可能导致非预期的错误,或在未来不可用。

1
2
3
4
5
# 首先定义域名
export DOMAIN=example.com
curl -X DELETE \
https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/registrar/domains/$DOMAIN \
-H "X-Auth-Email: $CF_EMAIL" -H "X-Auth-Key: $CF_GLOBAL_API_KEY"

执行命令后,Cloudflare 会向您填写的 Whois 邮箱中发生一份验证码,您需要带上验证码再次请求该 API。

1
2
3
4
5
export AUTH_CODE=
curl -X DELETE \
https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/registrar/domains/$DOMAIN \
-H "X-Auth-Email: $CF_EMAIL" -H "X-Auth-Key: $CF_GLOBAL_API_KEY" \
--data "{\"auth_code\":\"$AUTH_CODE\"}"

使用 Azure 编排模板部署 Azure 学生订阅 VM

本文简述了使用 Azure Template 部署一台 Linux 虚拟机的过程,默认的模板参数已经针对 Azure for Students 订阅进行了修改以防止不必要的扣费,无需后续修改磁盘、IP等参数。您也可以通过更改模板参数使其适用于您的需求。

此方法相比手动创建,具有以下优势:

  • 命名一致:使用一致的驼峰命名方法,避免系统使用默认的随机数命名资源。
  • 快速部署:只需粘贴模板和参数即可完成部署,无需手动完成长达 5 页的虚拟机部署向导,同时避免了手动操作可能带来的错误。

阅读更多

禁用 Office 365 管理员的 Weekly PIM

近期发现 Microsoft 365 (Office 365) 开始定期发送「Weekly PIM Digest」的电子邮件。这对于企业管理来说是必需的安全功能,但是因为我的 Office 365 账户是个人使用,感觉有些烦恼。

查阅发现,该功能可以使用 Microsoft Entra ID (过去称为 Azure AD) 管理中心禁用。以下是具体步骤:

  1. 登录 Azure
  2. 搜索 Microsoft Entra ID 保护 并打开。
  3. 侧边栏选择 每周摘要
  4. 将「发送每周摘要电子邮件」切换为「否」。
  5. 点击「保存」。