# ukui-index-framework **Repository Path**: larue/ukui-index-framework ## Basic Information - **Project Name**: ukui-index-framework - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-11 - **Last Updated**: 2025-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 索引框架项目 ## 项目概述 本项目是一个基于VFS监控的文件索引框架,通过BPF程序捕获文件系统事件,结合Qt框架实现跨进程通信和事件处理。系统分为Host监控层、Service服务层和Client客户端三层架构。 ### 核心架构 ├── host/ # 内核态监控模块 │ ├── BPF程序 # vfs_monitor.bpf.c 实现VFS操作监控 │ └── 设备管理 # udev设备发现与挂载点管理 ├── service/ # 用户态服务层 │ ├── D-Bus服务 # 提供跨进程通信接口 │ └── 事件处理 # 处理文件事件并序列化(Protobuf) └── client-demo/ # 客户端示例 └── GUI界面 # 演示服务调用和事件展示 ## 核心设计思路 - 事件采集层:通过BPF程序在内核态捕获VFS操作事件 - 设备映射:使用udev维护设备UUID与挂载点的映射关系 - 事件传递:通过环形缓冲区(ringbuf)将事件传递到用户态 - 会话管理:基于UID的会话隔离,每个客户端独立连接 - 权限控制:在SessionFileEventMonitor中进行访问权限校验 ## 核心特性 - VFS操作监控:通过BPF hook vfs_create/vfs_unlink等接口 - 跨进程通信:使用QLocalSocket + D-Bus实现进程间通信 - 事件序列化:采用Protobuf进行高效数据序列化 - 设备管理:实时追踪块设备挂载状态,更新挂载点uuid和根路径信息 - uuid-inode-id映射:基于leveldb和qhash构建高效且持久化的文件uuid-id与路径的映射关系,索引框架通过内核模块和bpf程序实现文件uuid-id-文件路径双向映射,进而实现文件索引的高效管理 ## 编译依赖 ```bash # 基础构建工具 sudo apt install cmake g++ # Qt依赖 (5.x) sudo apt install qtbase5-dev # BPF相关 sudo apt install llvm clang libbpf-dev linux-tools-generic # 其他依赖 sudo apt install libgudev-1.0-dev libprotobuf-dev protobuf-compiler libleveldb-dev ``` ## 编译&测试 ```bash #使用make编译 mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr .. make #使用ninja mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr .. ninja ``` 编译完成后,root执行build/host/ukui-index-framework-host 然后当前用户执行build/client-demo/client-demo,可以观察到服务端输出的日志和客户端的输出 除了client-demo,调试也可以通过d-feet调用org.ukui.IndexFramework系统服务提供的setupService启动用户会话服务,然后通过 ```bash dbus-monitor --session "type='signal',sender='org.ukui.SessionFileMonitor',interface='org.ukui.SessionFileMonitor'" ``` 进行事件调试 ## 安装 推荐使用deb打包安装,如果编译安装需要在安装后手动激活host的systemd服务和dkms模块,以确保索引框架功能正常