APP下载

Samba 图形化配置工具的设计与实现

2022-02-27吴军平

电子设计工程 2022年4期
关键词:图形化配置文件字典

胡 浩,吴军平

(1.武汉邮电科学研究院,湖北武汉 430074;2.烽火通信科技股份有限公司,湖北武汉 430074)

Samba 是用来使UNIX 系列的操作系统与微软Windows 操作系统的SMB/CIFS 网络协议作链接的自由软件[1]。如今,SMB/CIFS 协议被广泛地用在各种各样的设备上,Windows 电脑上文件共享、各种系统的NAS 的文件共享功能以及一些嵌入式设备(如网络摄像头)的网络存储功能都使用SMB/CIFS 网络协议。在Linux 系统上使用SMB/CIFS 网络协议进行文件共享要使用Samba 软件,然而Linux 系统上配置Samba 并不像Windows 系统一样有现成的图形界面可以使用,用户只能通过文本编辑器手动编辑配置文件来配置Samba,容易配置出错,使用难度很大[2]。文中研究并实现了Linux 系统上Samba 的图形化配置,降低了Samba 在Linux 系统上的使用难度。

1 Pyside2介绍

Pyside2 是Python 项目的官方Qt Python 模块,可访问完整的Qt5.12框架[3]。Pyside2分为QtGui、QtXml、QtCore、QtSvg、QtNetwork、QtSql 以及QtOpenGL 七大主要模块。其中,QtGui模块主要用作绘图,包含图形的组件如常见的窗体、状态栏、按钮、位图、滚动条等以及相关的类;QtXml模块提供了DOM API和SAX的实现;QtCore 模块用于文件和目录、各种数据类型、流、MIME 类型、网址、线程或进程,包含核心的非GUI 功能;QtSvg 模块提供SVG 文件的类;QtNetwork 使得网络编程更加简单轻便,包含了网络编程相关的类;QtSql模块提供数据库的类;QtOpenGL 模块能够完美集成Qt的GUI和OpenGL库,主要利用OpenGL库对3D和2D 图形进行渲染。

2 Samba配置文件解析

2.1 解析算法设计

以使用Ubuntu for IoT 系统的嵌入式设备为例,使用"apt install Samba"命令从ubuntu 的软件仓库中安装Samba 后,Samba 的默认配置被存储在“/etc/Samba/smb.conf”文件中,smbd 服务启动后从这个文件中读取配置[4]。打开smb.conf 文件可以发现Samba配置文件解析算法的流程如图1 所示。smb.conf 含有多个段,每个段由段名开始,直到下个段名,每个段名放在方括号中间[5]。每段参数的格式是:名称=值。配置文件中每行为一个段名和参数,段名和参数名不分大小写。除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。解析算法需要读取smb.conf 并从中提取有效配置字段,略过注释部分,并将配置字段与段名相对应。

图1 Samba配置解析流程

2.2 算法实现

程序第一步会对当前系统中是否安装了Samba服务进行检查,只有当Samba 服务已经被安装且可以正常使用才会继续进行之后的步骤。方法是通过Python 的OS 库执行“ps-ef | grep smb”命令,通过返回值来判断Samba 服务是否已安装且正常运行[6]。Samba 服务可以正常使用后程序以读写权限读取配置文件smb.conf 并开始解析。

解析算法的第一步是过滤掉配置文件中的注释以及行首位的空格,并检查文件是否已读完,读完则结束解析。这一步去除字符串首尾空格及制表符使用的是Python 自带的lstrip()和rstrip()函数,lstrip()去除左边的空格,rstrip()去除右边的空格。

第二步是过滤配置文件中的注释部分,在smb.conf 文件中,注释由#开头,因此第二步会过滤掉#开头的行。方法是判断字符串的第一个字符,如果为#则跳回第二步,读取下一行。

第三步是对读取到的行进行正则匹配,首先匹配由[]包裹的段名,匹配到段名就会添加一个同名的字典结构,同时将flag 标志赋值为1,并将接下来的参数以键值对的形式存储到字典中。如果flag 值为0 且匹配[]失败,则跳回第二步读取下一行。如果flag 为1 且匹配[]失败,则直接进入下一步。

最后一步是正则匹配smb.conf 文件中的参数,参数是由“=”连接的,等号左边是参数名,右边是参数值,匹配前先调用replace 函数去掉字符串中的空格。解析算法使用了一个名为flag 的变量作为匹配标志,遇到参数名时将flag 反转,通过判断flag 的值(0 或1)即可将接下来解析出的参数存入参数名对应的字典中,只需一次遍历就能解析所有的参数。

3 解析结果存储的数据结构

3.1 数据的存储结构

Python 语言存储键值对数据可以直接使用字典结构,Python 字典可以嵌套使用,意味着Python 字典中key 对应的value 可以是一个字典[7]。解析结果以字典的方式存储在内存中,主程序可以直接读取字典变量来读取到当前系统的Samba 配置,并使用QT的组件将配置信息展现在用户桌面上,用户使用图形界面即可直接修改配置,解析结果存储的数据结构如图2 所示。

图2 解析结果的数据结构

3.2 结构化数据的访问

字典名为conf,conf 的key 值为Samba 配置的对应段名,与key 相对应的value 也是一个字典结构,存储的是段名对应的参数配置,key 为参数名,value为参数对应的配置。这样存储的好处是程序可以直接通过遍历字典的方式来获取当前所有的配置信息,通过这种键值对的形式使得字典中的内容与smb.conf 文件中的有效配置一一对应,降低了程序的开发难度。图形界面上的QListWidgetItem 由3 个QLabel 标签和一个QPushButton 按钮组成,第一个标签显示共享名,直接从conf 字典中获取key 值显示在用户界面上;第二个标签显示共享路径,从conf 字典的key 对应的字典中查找key 值为“path”对应的value 值并显示;第三个标签显示允许访问共享的用户名,从conf 字典的key 对应的字典中查找key 值为“user”对应的value 值并显示,当值为“user”的key 不存在时,显示“all”,即所有用户都可以访问该共享。QPushButton 显示内容为“-”,点击QPush Button 按钮,程序会捕捉到按钮发出的信号并执行对应的槽函数,从conf 字典中删除该分享的配置信息。

4 系统实现与应用

4.1 程序运行环境

程序的运行依赖于Python3 环境及QT 运行环境,在PC 上Windows 系统只需要按照Python 官网的安装介绍一步步安装Python3 后使用“pip3 install Pyside2”即可完成本工具运行环境搭建,这是因为安装Pyside2 时会安装QT 依赖的运行环境[8]。常见的Linux 发行版本如CentOS、Ubuntu、优麒麟等都已自带了Python 环境,因此只需安装Pyside2 即可完成运行环境的搭建[9]。要在嵌入式设备上运行该工具则需要移植QT 环境[10]。移植Python 需要从Python 官网下载源码后,使用交叉编译工具链编译后将生成的文件移动到嵌入式设备相应的目录下;QT 执行环境的移植需要下载QT5 对应的Qtopia 源码文件,配置完成后使用交叉编译工具链编译出QT5 的最小文件系统并烧写到嵌入式设备中,也可以直接使用支持ubuntu for IoT 系统的开发板,使用类似PC 的命令安装Pyside2,即可完成运行环境的搭建。

4.2 图形化界面实现

Samba 图形化配置工具的GUI 使用QT-designer设计,QT-designer 是QT 自带的界面设计工具,QTdesigner 用户界面如图3所示[11]。

图3 QT-designer用户界面

在QT-designer 用户界面中,左侧为QT 的控件列表,直接拖动到中间的预览窗口即可添加到程序界面中,右边为控件的详细配置参数。界面设计完成后点击文件->保存,QT-designer 就会生成一个后缀名为ui 的文件。使用Pyside2-uic.py 工具可以方便地将QT-designer 生成的ui 文件转换成Python 代码,使用时在主程序中直接引用即可[12]。

QT 使用信号与槽将图形界面上的操作和处理方法绑定,当一个信号被发射时,与其相关联的槽将被立刻执行。通过这种机制将处理函数与界面上的控件绑定,程序初始化时通过Python 的OS 模块执行shell 命令创建一个test 用户并添加到Samba 账户中,因此程序启动时会要求输入root 用户的密码,以便OS 模块可以使用root 权限来执行命令以及修改配置文件[13]。Ubuntu 系统默认只能使用sudo 命令来执行需要root 权限的命令,root 用户没有密码,因此需要用户手动为root 用户设置一个固定的密码,否则无法使用该工具,设置Ubuntu 系统root 用户密码的shell 命令为“sudo passwd root ”[14]。该工具在得到root 用户密码后,初始化时会在root 权限下使用“useradd test”和“smbpasswd-a test”命令来新建一个Samba 用户,默认密码为test,用户可以自行修改。点击“添加共享”按钮默认添加在test 用户下,降低使用难度。Samba 图形化配置工具界面如图4所示。

图4 Samba图形化配置工具界面

通过QT的QListWidget来展示已经解析的配置文件,展示的信息为共享名、路径和允许访问的用户[15]。最右侧为删除按钮,点击将会删除字典中对应的配置项,点击取消按钮会放弃修改并直接退出Samba图形化配置工具,点击保存会将字典中的配置按照规范的配置文件格式写入到Samba 配置文件中,并使用”/etc/init.d/smbd restart”命令重启Samba 使配置生效,最后退出程序。

5 结束语

该软件针对Linux 系统上配置Samba 只能通过修改配置文件配置复杂的缺点,设计开发了Samba图形化配置工具。该软件实现了通过图形化界面来配置Samba 的基本功能,一方面设计了解析Samba 配置文件的解析算法;另一方面使用Pyside2基于QT 实现了程序的用户界面。研究结果已投入使用,实现了Linux 系统中通过图形化界面对Samba 进行配置。

猜你喜欢

图形化配置文件字典
基于Docker的实时数据处理系统配置文件管理软件的设计与实现
基于Arduino图形化编程的教学应用研究
从Windows 10中删除所有网络配置文件
基于三维软件的智能变电站SCD图形化研究及应用
用软件处理Windows沙盒配置文件
互不干涉混用Chromium Edge
字典的由来
大头熊的字典
正版字典
Mixly米思齐:优秀的国产创客教育工具