使用 Leap Micro 5.4 Beta 进行实践、无广告浏览
2023年3月28日 | Lubos Kocman | CC-BY-SA-3.0
我们的不可变 HostOS Leap Micro 5.4 的 Beta 版本现已发布。此更新默认启用 SELinux 并进行了调整。Leap Micro 不是传统的发行版,而是用于运行虚拟机和容器化工作负载的轻量级 HostOS。
Leap Micro 是 openSUSE 对 SUSE 的 SLE Micro 的等效版本。
在本文中,我想向您展示如何将其用于实际增强您在家中的无广告体验。我能够在 VM 中复制整个设置,包括下载镜像,并在 15 分钟内完成。
我个人使用 Leap Micro 的用例是尽可能多的无广告浏览、本地服务的 DNS 条目以及 Nextcloud 实例作为桥梁,在妻子 iPhone、孩子平板电脑和我的 Android 手机之间共享图片和视频。
我的私人家庭设置是 Raspberry Pi 4 8GB,通过 USB 3.0 连接到 SATA III 的 1TB SDD。我通过 TP Link Deco X20 进行网格连接。我使用 Deco 的端口映射通过静态公共 IP 将服务暴露到公共网络。
RPI 基于其 MAC 地址保留了一个地址,以保持简单。如果您有动态公共地址,可以考虑使用一些动态 DNS (DDNS) 解决方案。
我正在我的 8GB Raspberry Pi 4 上使用描述的设置,Leap Micro 5.3 与 Pi-hole 结合使用,以实现无广告浏览和将我的 NextCloud 实例映射到本地地址。
如果您只想测试它,虚拟机也可以工作;只需确保 VM 的虚拟网络接口处于桥接模式或使用传入连接的转发。这可以使用 NetworkManager 仅用两次点击轻松设置。否则,您将无法访问 VM 服务的 Web 管理,并且本文将变得毫无意义。
我认为使用 Leap Micro 的好处是机器不需要我的任何关注。我已经启用了自动更新和自我修复。机器会在定义的维护窗口(默认设置)中自动重启到更新的快照,如果出现需要我关注的问题,我只需使用 Web 浏览器中的 Cockpit 界面解决问题即可。

Leap Micro 是一个具有只读根的不可变操作系统。openSUSE 通过 btrfs 快照和工具来解决这个问题,这些工具可以实现自动回滚并在系统识别到启动到新快照失败时启动到以前的快照。
获取 Leap Micro 5.4 Beta
什么是自安装镜像?
自安装镜像本质上是一个可启动镜像,它将 Leap Micro 的预配置镜像写入磁盘并将系统分区扩展到磁盘大小。这样,在我的 VM 中安装时间少于两分钟(VM 存储是一个文件,我有一个 PCI-e 4 gen M.2 SSD)。
从 https://get.opensuse.net.cn/leapmicro/5.4/ 下载自安装镜像,确保正确选择架构 x86-64 或 AArch64 用于 arm 设备。我们将使用自安装 x86-64 镜像,因为本文使用 VM 进行演示。

如果您使用的是物理设备,请使用 zypper 安装镜像写入器。其他发行版的用户可以从 Flathub 安装例如 Fedora Media Writer。使用您选择的工具将下载的镜像写入 USB 闪存驱动器。
$ sudo zypper in imagewriter
或者
$ flatpak --user install org.fedoraproject.MediaWriter
如果您在 Windows 上阅读本文,请遵循这些说明:https://en.opensuse.net.cn/SDB:Create_a_Live_USB_stick_using_Windows
注意 - 使用未启用 USB 启动的 Raspberry Pi 的用户:请直接下载预配置镜像并使用以下命令将其写入 SD 卡。其余步骤相同。
xzcat [image].raw.xz | dd bs=4M of=/dev/sdX iflag=fullblock oflag=direct status=progress; sync
需要避免安装过程中的用户交互?
希望避免安装过程中用户交互的用户(例如,由于没有连接到机器的外围设备)可以使用 Ignition 或 Combustion https://en.opensuse.net.cn/Portal:MicroOS/Combustion 为他们完成初始设置。对于这种情况,请使用您将自行写入磁盘的预配置镜像。自安装介质需要用户确认覆盖磁盘。请观看此视频教程了解更多信息 https://www.youtube.com/watch?v=ft8UVx9elKc
将自安装镜像写入 USB 驱动器
如果使用虚拟机,可以跳过此步骤。确保您有用于将镜像写入驱动器的工具,例如我们的 镜像写入器 或例如来自 Flathub 的 Fedora Media Writer,如果您使用的是不可变系统并希望避免重启。
启动镜像
为了演示,我将使用在 GNOME Boxes 中运行的 Leap Micro 5.4 Beta x86-64 自安装镜像。

自安装镜像非常简单。如前所述,它本质上是一个可启动镜像,它将 Leap Micro 的预配置镜像写入磁盘并将系统分区扩展到磁盘大小。

大约一分钟后,我们已经启动到部署的 Leap Micro 5.4 Beta。

启动本身需要几秒钟,我们进入了来自我们的最小镜像(以前称为 JeOS)的简单首次启动向导。

首次启动向导允许您选择时区、语言和 root 密码,您的 Leap Micro 5.4 即可准备使用(可以使用 Ignition/Combustion 自动化)。初始配置后两分钟即可完成。

进入 cockpit
每日消息 (MOTD) 建议您启用 cockpit web。它可以通过 ip.address.of.this.server:9090 访问。以 root 用户身份登录 cockpit。
注意:出于家庭目的,我强烈建议不要将此端口暴露到公共网络,并仅将其用于本地网络管理,或者至少我的设置就是这样。由于 cockpit 允许您通过 Web 浏览器访问终端,因此您可以完全跳过 SSH。
$ systemctl enable --now cockpit.socket

Podman vs Docker
在本教程中,我们将 Pi-hole 作为容器化工作负载运行。Leap Micro 默认使用 podman。Cockpit 有一个不错的 podman 插件,因此您可以直接从 cockpit 拉取和运行容器。
除非建议的部署非常以 Docker 为中心,否则您应该能够将 docker 替换为 podman 或 podman-docker 即可。
Pi-hole 在其示例中宣传 Docker;我们可以利用这个机会向您展示如何在 transactional-update 系统上安装其他软件。
您可以使用 transactional-update pkg install docker 或最好使用 transactional-update shell,它会带您进入新创建快照的 chroot shell。在那里,您可以像在传统系统上一样继续工作。
# sudo transactional-update shell # zypper install docker # systemctl enable docker # exit # reboot
不要忘记退出 transactional-update shell(输入 exit)并在之后重启。所有更改都已完成到当前环境的 btrfs 快照中,因此我们必须重启它才能看到更改。幸运的是,香草 Leap Micro 的重启时间少于 10 秒
注意:推荐的安装其他工具而无需重启的方法是使用 Distrobox

部署 Pi-hole
我们将遵循 https://github.com/pi-hole/docker-pi-hole#readme 中的说明。这部分我用了字面上的两分钟。
这本质上是从 readme 中复制粘贴的,用于在后台运行 Pi-hole 容器。请更改密码并设置您的时区。请特别注意主机到容器的端口映射 -p HOST_PORT:CONTAINER_PORT,尤其是在运行多个工作负载时。
-p 8888:80 表示我们将主机端口 8888 映射到容器中的端口 80(Web 管理界面)。端口 53(DNS)映射到容器中的相同端口。
您可以将其保存在一个包装器中,例如 /root/pihole_deploy.sh
Docker 卷
在此示例中,我们将本地 /root/etc-pihole 和 /root/etc-dnsmaq.d 目录作为 Docker 卷传递到容器,它们将作为 /etc/pihole 和 /etc/dnsmasq.d 存在于容器中。
# mkdir -p /root/etc-pihole /root/etc-dnsmasq.d
# docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 8888:80 \
-e TZ="Europe/Prague" \
-e WEBPASSWORD="CHANGEME" \
-v "/root/etc-pihole:/etc/pihole" \
-v "/root/etc-dnsmasq.d:/etc/dnsmasq.d" \
--dns=127.0.0.1 --dns=1.1.1.1 \
--restart=unless-stopped \
--hostname pi.hole \
-e VIRTUAL_HOST="pi.hole" \
-e PROXY_LOCATION="pi.hole" \
-e FTLCONF_LOCAL_IPV4="127.0.0.1" \
pihole/pihole:latest
请等待直到状态显示为健康。你可以使用以下命令主动检查状态。
# docker inspect -f "{{.State.Health.Status}}" pihole
清理,以防你搞砸了
# docker rm -f pihole # ^ 重做以上步骤
访问 Pi-hole Web 管理界面
此时,容器化的 Pi-hole 已经作为守护进程运行,你可以通过 ip.address.of.this.server:8888/admin 访问界面
有一个默认列表;但是,我认为它不足以提供我无广告的 YouTube 体验。你可以使用内置工具查找更多广告列表。

使用本地 IP 访问具有外部域的服务
这在后面的 Nextcloud 示例中特别有用。我在这里为我的公共域创建本地 DNS 记录,使用本地 IP,以便我可以使用外部域名访问我的 NextCloud 实例,但与本地 IP 进行交互。

使用带有广告列表的新家庭 DNS 服务器
最后一步是配置你的路由器的 DHCP 服务器,使用你的新 pi-hole 实例作为 DNS 服务器。请仔细检查你的终端设备是否正在使用它作为 DNS 服务器。否则,它将不会生效。在示例中,我手动在我的 TP-Link Deco 的 DHCP 设置中将 DNS 条目设置为 ip.address.of.this.server(在我的例子中是 192.168.68.69)。
提示:我发现了一个临时禁用阻止的功能,以防我在尝试调试访问某些网站的问题时。
完成了。玩得开心!