惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
Jina AI
Jina AI
IT之家
IT之家
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
C
Cyber Attacks, Cyber Crime and Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
CERT Recently Published Vulnerability Notes
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
S
Schneier on Security
The Register - Security
The Register - Security
L
Lohrmann on Cybersecurity
博客园 - 聂微东
有赞技术团队
有赞技术团队
Know Your Adversary
Know Your Adversary
V2EX - 技术
V2EX - 技术
大猫的无限游戏
大猫的无限游戏
Project Zero
Project Zero
Simon Willison's Weblog
Simon Willison's Weblog
Last Week in AI
Last Week in AI
博客园 - Franky
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
H
Hacker News: Front Page
MongoDB | Blog
MongoDB | Blog
W
WeLiveSecurity
Vercel News
Vercel News
C
Check Point Blog
N
News | PayPal Newsroom
A
Arctic Wolf
T
Threat Research - Cisco Blogs
F
Full Disclosure
博客园 - 司徒正美
GbyAI
GbyAI
A
About on SuperTechFans
Webroot Blog
Webroot Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
I
InfoQ
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Latest news
Latest news
Help Net Security
Help Net Security

陈陈菌博客

如何在 podman 容器内使用 systemd 在 podman 运行 GUI 应用的经验总结 管理 podman 容器与镜像的导入或导出 用 xdg-dbus-proxy 解决容器的文件选择器的问题 解决 VSCodium 或 Code-Server 无法安装 GitHub Copilot 问题 不可变发行版 Fedora Silverblue 的体验记录 解决 apt 或 dnf 无法 tab 补全的问题 对 (MPA) 多页面切换实现丝滑动画的探索 让服务在非 Root 权限下使用 80 或 443 端口 AppImage 应用打包快速上手 Flatpak 使用和应用打包快速上手 如何用 webSocket 实现一个实时聊天应用 Linux 内核编译 | 快速上手 | deb 使用 debootstrap 构建 Debian 系根文件系统 高度可定制的 KDE 窗口装饰器 klassy 有关 docker、podman、nspawn、bwrap 的 Linux 容器图形性能测试 创建任意 Linux 容器并支持 GUI 程序 (Docker) 创建任意 Linux 容器并支持 GUI 程序 (nspawn) 文件同步工具 rsync 的使用 玲珑 (Linyaps) 应用打包 RPM 打包指南 | 精简版 PBR 材质的各种贴图类型入门 APU | Stable-Diffusion 使用记录 如何在 Electron 上启用 WebGPU Grub 主题安装与配置 Fcitx5 主题安装与自定义 不使用 Nginx 的网站开发指南 如何自制一个简易的资源监控程序 SQL 常用 CRUD 语法记录 Debian 打包入门,与需要注意的问题 在 fedora 建立一个 Arch 容器 (bwrap) i3wm | 自制一个极简的屏幕亮度调节器 在 Linux 下启用内存压缩技术 zram 搭建一个本地轻量级聊天 Ai 我又又又重新上线了博客 如何通过命令行管理 wine 容器 (包括 proton) Btrfs 文件系统创建 swap 文件的方法 如何创建适用于 Linux 桌面的程序启动文件 在 Linux 控制 intel CPU 调度的方法 Arch Linux 的基本安装
在 fedora 上建立一个 debian 容器 (bwrap)
GlumiStudio@ · 2024-07-22 · via 陈陈菌博客

2024-07-22 21:12:06

分类: Linux 标签: 容器,Fedora,Debian


有天入了 fedora 的坑,把笔记本电脑安装了它作为主系统。但是有个问题随之而来,恐怕我以后没法用 deb 包还有星火商店了(解deb包吧还怪麻烦,而且不太方便找软件)。想起星火社区搞了一个 ACE(debian 容器),但 rpm 构建脚本已经年久失修,问题挺多的。后面干脆看 ACE 的源码看它怎么实现的了。后面了解到使用了 bwrap ,随后我在一个 debian rootfs 上做了些简易测试,感觉还算成功。

首先通过 debootstrap 可以下载 debian 的 rootfs。

sudo debootstrap --arch amd64 sid /path/to/debian/ https://deb.debian.org/debian

参数:--arch amd64 代表 x86 64 架构,sid 为发行版代号,/path/to/debian/ 为 rootfs 存放的位置,给个路径就好。而最后面是下载源。

通过 dnf 安装 bwrap

sudo dnf install bubblewrap 

编写一个启动脚本

#!/bin/bash
CHROOT_DIR="/path/to/debian"
uid="1000"
gid="1000"
bwrap \
  --dev-bind $CHROOT_DIR / \
  --proc /proc \
  --dev /dev \
  --dev-bind-try /dev/snd/midiC3D0 /dev/snd/midiC3D0 \
  --dev-bind /dev/snd /dev/snd \
  --dev-bind-try /dev/shm /dev/shm \
  --dev-bind-try /etc/resolv.conf /etc/resolv.conf \
  --dev-bind-try /dev/dri /dev/dri \
  --dev-bind /tmp /tmp \
  --dev-bind-try /run/user/$uid/pulse /run/user/$uid/pulse \
  --setenv DISPLAY :0 \
  --dev-bind-try /media /media \
  --dev-bind /run /run \
  --dev-bind /sys /sys \
  --dev-bind /tmp/.X11-unix /tmp/.X11-unix \
  --chdir / \
  --hostname debianBox \
  --cap-add CAP_SYS_ADMIN \
  --unshare-uts \
  -- /bin/bash

其中 CHROOT_DIR 为 rootfs 路径,其中需要挂载宿主比较重要的 /dev /proc /run /tmp /sys/ 目录(按需挂载),其中 /tmp/.X11-unix 为用于 Xorg,支持 GUI 程序。 /dev/dri 为在安装相关驱动情况下用于直通宿主显卡设备。/dev/snd 允许容器访问声卡设备。/run/user/$uid/pulse 为 PulseAudio 音频服务器用户运行会话目录。/dev/snd/midiC3D0 为 midi 接口需要。uid gid 为用户id和用户所在的组id。DISPLAY 通常是以 :0 为默认,指的是显示屏幕。还有很多相关参数不一一介绍了,它本身的自由度比较高,详细可自行了解相关资料。

sudo [shell文件路径] 提权执行后即可进入该容器。就和 chroot 方式差不多。

需要注意问题:

1.虽然说是一个容器,但在此期间挂载的那些设备和文件目录,可能会被容器所影响。需要自行承担其中所带来的风险。(如果你完全知道你在做什么,否则不要乱来,如执行 rm -rf /* 之类的操作)

2.如果 GUI 不起作用,找不到 DISPLAY 之类 ?

可能需要 xhost +local: 授权一下,一般情况下 x 有个机制默认不允许非本机与 x 进行通信(避免导致 X 服务器被未授权访问),而容器其实就相当于另一个主机。为了让它们建立连接,需要使用 xhost 去开放权限。其中 local 为只允许本地访问 + 为添加白名单 - 为移除。但是一般不推荐这么做,也可以这样,首先输入

touch /tmp/container_xauth | xauth nextract - ":0" | xauth -f /tmp/container_xauth nmerge  -

再挂载上 /tmp/container_xauth 即可(以下为 bwrap 参数)

--dev-bind /tmp/container_xauth /tmp/container_xauth \

3.无法在容器使用输入法问题,可以加入以下变量解决:

--setenv XMODIFIERS "@im=fcitx" \
--setenv QT_IM_MODULE "fcitx" \
--setenv GTK_IM_MODULE "fcitx" \

最后,补一张在 fedora 上跑起星火商店的图片。

更多相关推荐阅读:https://wiki.archlinuxcn.org/wiki/Bubblewrap