Anaconda 学习手册记录
首先是安装anaconda,在正常的系统中,安装程序已经结束,anaconda已经被删除。
sudo dnf install anaconda
安装完成后执行:
sudo anaconda --graphical --debug
可启动安装界面。
下载代码:
https://gitee.com/mirrors_rhinstaller/anaconda.git
📁 Anaconda 代码整体结构
核心模块架构
pyanaconda/
├── core/ # 核心框架
│ ├── glib.py # GLib 集成
│ └── thread.py # 线程管理
├── ui/ # 用户界面
│ ├── gui/ # 图形界面 (GTK)
│ │ ├── spokes/ # 安装界面各个"辐条"(配置模块)
│ │ ├── widgets/ # 自定义 UI 组件
│ │ └── hubs/ # 主界面中心
│ └── tui/ # 文本界面
├── modules/ # 模块化系统 (DBus 服务)
│ ├── payloads/ # 软件包管理
│ ├── storage/ # 存储配置
│ ├── network/ # 网络配置
│ └── users/ # 用户配置
├── payload/ # 软件包处理
│ ├── dnf/ # DNF 包管理器后端
│ └── source/ # 其他源类型
└── localization/ # 本地化支持
🎨 修改 Anaconda UI 的方法
1. 图形界面 (GUI) 修改
修改现有的安装步骤
GUI 界面主要在 pyanaconda/ui/gui/spokes/
目录下:
# 例如修改存储配置界面
/usr/lib64/python3.11/site-packages/pyanaconda/ui/gui/spokes/storage.py# 修改网络配置界面
/usr/lib64/python3.11/site-packages/pyanaconda/ui/gui/spokes/network.py
自定义 UI 组件
# 在 pyanaconda/ui/gui/widgets/ 中添加自定义组件
class CustomWidget(Gtk.Box):def __init__(self):super().__init__()self._setup_ui()def _setup_ui(self):label = Gtk.Label(label="自定义组件")self.pack_start(label, True, True, 0)
2. 创建新的安装步骤
步骤1:创建新的 Spoke
# 在 pyanaconda/ui/gui/spokes/ 下创建 custom_spoke.py
from pyanaconda.ui.gui.spokes import NormalSpoke
from pyanaconda.ui.common import FirstbootSpokeMixerclass CustomSpoke(FirstbootSpokeMixer, NormalSpoke):builderObjects = ["customWindow"]mainWidgetName = "customWindow"uiFile = "custom_spoke.glade"def __init__(self, *args, **kwargs):NormalSpoke.__init__(self, *args, **kwargs)def initialize(self):NormalSpoke.initialize(self)# 初始化代码def refresh(self):# 刷新界面数据passdef apply(self):# 应用用户配置pass@propertydef ready(self):return True@propertydef status(self):return "就绪"@propertydef mandatory(self):return False
步骤2:创建 Glade UI 文件
<?xml version="1.0" encoding="UTF-8"?>
<interface><requires lib="gtk+" version="3.0"/><object class="GtkBox" id="customWindow"><property name="orientation">vertical</property><child><object class="GtkLabel" id="label1"><property name="label">自定义配置步骤</property></object></child></object>
</interface>
步骤3:注册新的 Spoke
# 在模块初始化文件中注册
from pyanaconda.ui.gui.spokes.custom_spoke import CustomSpokedef collect_spokes():return [CustomSpoke]
3. 修改文本界面 (TUI)
文本界面在 pyanaconda/ui/tui/
目录:
# 修改文本界面屏幕
/usr/lib64/python3.11/site-packages/pyanaconda/ui/tui/screens/# 创建新的 TUI 屏幕
class CustomTUIScreen(TUIScreen):title = "自定义配置"def __init__(self, app, data):super().__init__(app, data)self._entries = []def refresh(self, args=None):super().refresh(args)# 刷新界面逻辑def prompt(self, args=None):return "请输入选择: "
4. 主题和样式修改
修改 CSS 样式
/* 在 anaconda 样式文件中添加 */
.anaconda-widget {background-color: #f0f0f0;
}.custom-button {background: linear-gradient(to bottom, #4a90d9, #357abd);border-radius: 5px;
}
替换图标和资源
/usr/share/anaconda/pixmaps/ # 图标文件
/usr/share/anaconda/styles/ # CSS 样式文件
🔧 开发工作流程
1. 设置开发环境
# 克隆源码
git clone https://github.com/rhinstaller/anaconda.git
cd anaconda# 安装依赖
sudo dnf builddep anaconda# 开发模式安装
python setup.py develop
2. 测试修改
# 使用测试模式启动
sudo anaconda --test --graphical# 或使用开发分支
sudo ./scripts/startAnaconda.py --graphical
3. 调试技巧
# 在代码中添加调试输出
import logging
log = logging.getLogger("anaconda")
log.debug("调试信息: %s", variable)# 使用 Anaconda 的调试功能
sudo anaconda --graphical --debug --logfile=/tmp/anaconda-debug.log
⚠️ 注意事项
- 兼容性:确保修改与当前 Anaconda 版本兼容
- DBus 接口:新的 UI 可能需要相应的 DBus 模块支持
- 国际化:所有用户可见文本需要支持多语言
- 错误处理:妥善处理各种边界情况和错误
这样的结构让你可以灵活地定制安装界面,从简单的样式修改到完全自定义的安装步骤。