使用 Leap Micro 5.4 Beta 在家中体验无广告网上冲浪
2023-03-28 | Hanjingxue Boling | CC-BY-SA-3.0
我们的不可变主机操作系统 Leap Micro 5.4 Beta 版现已推出。该更新使 SELinux 默认进入强制模式并进行了调整。Leap Micro 不是传统的发行版,而是用于运行虚拟机和容器化工作负载的轻量级主机操作系统。
Leap Micro 是 SUSE 的 SLE Micro 的 openSUSE 等价物。
在本文中,我想向您展示如何实际使用它来增强您在家中的日常无广告体验。我能够在 15 分钟内在虚拟机中复制整个设置,包括下载镜像。
我对 Leap Micro 的个人用例是尽可能多的无广告浏览、本地服务的 DNS 条目以及一个 Nextcloud 实例,作为在我妻子的 iPhone、儿童平板电脑和我的 Android 手机之间共享图片和视频的桥梁。
我的私人家庭服务器配置是 Raspberry Pi 4 8GB 和一块通过 USB 3.0 转 SATA III 连接至 Raspberry 的 1TB SDD。我通过 TP Link Deco X20 接入网络。我还使用 Deco 的端口映射和静态公网 IP 向公网公开服务。
RPI 有一个基于其 MAC 地址的保留地址,以保持简单配置。如果你有一个动态公网 IP,你可以考虑一些动态 DNS(DDNS)解决方案。
我个人很高兴在装载有 Leap Micro 5.3 以及 Pi-hole 的 Raspberry Pi 4 8GB 上使用所描述的设置,以实现无广告浏览和将我的 NextCloud 实例映射到本地地址。
如果您只想测试一下,虚拟机也可以运行此方案;只需确保虚拟机的虚拟网络接口处于桥接模式或使用传入连接转发。您只需单击两次,即可使用 NetworkManager 轻松完成设置。 否则,您将无法访问虚拟机服务的 Web 管理,并且这篇文章变得毫无意义。
我在使用 Leap Micro 时得到的好处是机器不需要我的任何关注。该系统有自动更新和自我修复功能。电脑会在(默认设置)定义的维护窗口期内自动重新启动到更新的快照,如果有需要我注意的问题,那么我只需通过 Web 浏览器中的 Cockpit 界面解决它。
Leap Micro 是一个具有只读根目录的不可变操作系统。openSUSE 通过 btrfs 快照和工具解决了这个问题,这些工具在系统识别到引导至新快照失败时,自动回滚并引导到以前的快照。
获取 Leap Micro 5.4 Beta
什么是自安装镜像(self-install image)?
自安装镜像本质上是一个将 Leap Micro 的预配置镜像写入磁盘并将系统分区扩大到磁盘大小的可引导镜像。因此,在虚拟机中的安装耗时不到两分钟(虚拟硬盘也是一个文件,我将其存放在一块 pcie 4.0 M.2 SSD 上)。
请从 https://get.opensuse.org/leapmicro/5.4/ 下载自安装镜像;请确保为 arm 设备选择正确的 x86-64 或 AArch64 架构。因为本文使用虚拟机进行演示,我们将使用 x86-64 自安装镜像。
如果您使用的是物理设备,请使用 zypper 安装镜像烧录工具。其他发行版的用户可以安装(例如来自 Flathub 的)Fedora Media Writer。请使用您选择的工具将下载的镜像写入 USB 闪存驱动器。
$ sudo zypper in imagewriter # 对于openSUSE 用户
$ flatpak --user install org.fedoraproject.MediaWriter #对于其他发行版用户
如果您在 Windows 上阅读本文,请按照此说明操作。
注意:对于未启用 USB 引导的情况下使用 Raspberry Pi 的用户:请直接下载预配置镜像并通过以下命令将其写入 SD 卡。其余步骤相同。
xzcat [image].raw.xz | dd bs=4M of=/dev/sdX iflag=fullblock oflag=direct status=progress; sync
在安装过程中需要避免用户交互吗?
希望在安装过程中避免用户交互的用户(例如,没有将外围控制设备连接到机器)可以使用 Ignition 或 Combustion 为系统进行初始设置。对于该用例,请使用预配置镜像写入您自己的磁盘驱动器。自安装媒介需要用户确认覆盖磁盘。请查看此视频教程以获取更多信息。
将自安装镜像写入 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 网络。您可以通过 此服务器的 IP 地址:9090
访问系统,并以 root 身份登录到 cockpit。
注意:对于家庭用途,我强烈建议不要将此端口公开至公网,并仅将其保留在本地网络中用于管理(至少我是这样设置的)。您可以完全跳过 SSH,因为 cockpit 允许您通过网络浏览器访问终端。
$ systemctl enable --now cockpit.socket
Podman vs Docker
在本教程中,我们将 Pi-hole 作为容器化工作负载运行。Leap Micro 默认使用 podman。Cockpit 有一个很棒的 podman 插件,因此您可以直接从 cockpit 拉取并运行容器。
除非建议的部署非常以 Docker 为中心,否则您应该能使用 podman-docker 将 docker 容器逐个替换为 podman 容器,同时负载不受影响。
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
然后 reboot
。所有更改都已在当前环境的 btrfs 快照中完成,因此我们必须重新启动系统才能看到更改。幸运的是,原始的 Leap Micro 的重启时间不到 10 秒。
注意:在不重启的情况下安装附加工具的推荐方法是使用 Distrobox。
部署 Pi-hole
我们将按照 https://github.com/pi-hole/docker-pi-hole#readme 中的说明进行操作。这部分花了我两分钟的时间。
这本质上是从在后台运行 Pi-hole 容器的自述文件中复制粘贴的。请更改密码并设置您的时区。请特别注意 host-to-container 的 -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 "" pihole
如果你搞错了配置,请运行:
# docker rm -f pihole # ^ re-do the above
进入 Pi-hole 网页管理
此时容器化的 Pi-hole 已经被 daemon 化了,您可以通过 此服务器的 IP 地址:8888/admin
访问接口。
有一个默认列表;但是,我觉得它不足以让我获得无广告的 YouTube 体验。您可以使用内置工具查找更多广告列表。
使用外部域名访问具有本地 IP 的服务
这在我们后面的 Nextcloud 示例中特别有用。在这里,我使用本地 IP 为我的公共域创建本地 DNS 记录,因此我可以使用外部域名访问我的 NextCloud 实例,但与本地 IP 交互。
使用带有广告列表的新家庭 DNS 服务器
最后一步是将路由器的 DHCP 服务器配置为使用新的 pi-hole 实例作为 DNS 服务器。 请仔细检查您的终端设备是否将其用作 DNS 服务器。否则,它将没有效果。在示例案例中,我在 TP-Link Deco 的 DHCP 设置中手动将 DNS 条目设置为(在我的示例中为)192.168.68.69。
提示:我发现这个功能是为了在我试图调试访问某些网站的问题时,暂时禁止阻断。
至此,我们完成了。祝你玩得开心!
原文:Hands-on, Ad-free browsing at your home with Leap Micro 5.4 Beta,作者:Lubos Kocman