使用说明
本章介绍 devmaster
的使用方法,包括常驻进程配置、客户端工具、规则使用说明和网卡配置。
常驻进程配置
常驻进程 devmaster
启动后会读取配置文件,并根据配置文件内容,调整日志级别、设置规则加载路径等等。devmaster
拥有唯一的配置文件,路径为 /etc/devmaster/config.toml
,文件内容采用 toml
格式。
配置选项
目前 devmaster
配置文件中支持的配置选项如下:
rules_d
: 指定规则加载路径,默认配置中设置为["/etc/devmaster/rules.d", "/lib/devmaster/rules.d", "/etc/udev/rules.d", "/run/udev/rules.d", "/lib/udev/rules.d"]
,该配置项未显式指定时,默认值为["/etc/devmaster/rules.d", "/run/devmaster/rules.d", "/usr/local/lib/devmaster/rules.d", "/usr/lib/devmaster/rules.d"]
。devmaster
当前不支持规则加载优先级,不同规则路径下的同名规则文件不会发生覆盖。规则文件的加载顺序按照rules_d
配置项中指定的目录顺序,相同目录下按照规则文件的字典序进行加载。max_workers
: 指定最大worker
线程并发数,默认配置文件中设置为3,该配置项未设置时默认为3。手动设置该配置项时,不能超过cpu
核数。log_level
: 指定日志级别,支持error
、debug
和info
级别,默认配置中设置为error
级别,未设置时默认为info
级别。network_d
: 指定网卡配置加载路径,默认配置中设置为["/etc/devmaster/network.d"]
,未指定时无默认加载路径。网卡配置用于控制devmaster
的内置命令net_setup_link
的行为,具体可参考网卡配置说明。log_targets
: 指定日志输出对象,支持file
、console
和syslog
,默认值为["syslog"]
。设置file
时,日志会保存在/var/log/devmaster/devmaster.log
文件中。设置console
时,日志直接在控制台显示。设置syslog
时,日志输出到/dev/log
套接字并由相关日志服务,比如rsyslog
间接管理,如果未配置日志服务,则日志直接在控制台显示。可以指定多个日志输出对象。
客户端工具
devctl
是常驻进程 devmaster
的客户端工具,用来控制 devmaster
的行为、模拟设备事件、调试规则等等。以下介绍一些常用的 devctl
使用命令:
查看设备数据库信息
查看设备的 sysfs
属性和数据库信息,或清理数据库:
# devctl info [OPTIONS] [DEVICES]...
监听设备事件
监听内核上报的 uevent
事件和 devmaster
处理完设备后发出的事件,分别以 KERNEL
和 USERSPACE
作为前缀进行区分:
# devctl monitor [OPTIONS]
触发设备事件
模拟一个设备动作,使内核上报对应的uevent事件,用于重放内核初始化过程中的冷插(coldplug)设备事件:
# devctl trigger [OPTIONS] [DEVICES]...
测试内置命令
测试内置命令在某个设备上的执行效果,目前支持的内置命令包括 blkid
、 input_id
、 kmod
、 net_id
、 net_setup_link
、 path_id
、 usb_id
,可以触发的事件类型包括 add
、 change
、 remove
、 move
、 online
、 offline
、 bind
和 unbind
:
# devctl test-builtin [OPTIONS] <BUILTIN> <SYSPATH>
规则使用说明
devmaster
的规则由一组规则文件组成, devmaster
常驻进程启动后会根据配置文件中指定的规则加载目录,按字典序依次加载各个规则文件。
说明:
增加、删除、修改规则或配置文件后,均需要重启
devmaster
使之生效。重启
devmaster
需要执行sctl stop devmaster
和sctl start devmaster
,不能使用sctl restart devmaster
。
常用规则案例
以下介绍几种常见的规则应用案例,规则语法详见官方文档中的devmaster手册。
示例1: 创建块设备软链接
通过 blkid
内置命令,读取块设备的 uuid
,并基于 uuid
创建块设备的软链接。
触发拥有文件系统的某块设备的事件后,在 /dev/test
目录下生成该设备对应的软链接。
以 sda1
分区块设备为例,测试规则效果:
创建规则文件
/etc/devmaster/rules.d/00-persist-storage.rules
,内容如下:SUBSYSTEM!="block", GOTO="end" IMPORT{builtin}=="blkid" ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="test/$env{ID_FS_UUID_ENC}" LABEL="end"
重启
devmaster
:# sctl stop devmaster # sctl start devmaster
触发
sda1
设备的事件:# devctl trigger /dev/sda1
查看
/dev/test/
目录下存在指向sda1
的软链接,表示规则生效:# ll /dev/test/ total 0 lrwxrwxrwx 1 root root 7 Sep 6 15:35 06771fe1-39da-42d7-ad3c-236a10d08a7d -> ../sda1
示例2: 网卡重命名
使用 net_id
内置命令,获取网卡设备的硬件属性,再使用 net_setup_link
内置命令,基于网卡配置选择某个硬件属性作为网卡名,最后通过 NAME
规则重命名网卡。
以 ens33
网卡为例,测试网卡重命名规则的效果:
创建规则文件
/etc/devmaster/rules.d/01-netif-rename.rules
,内容如下:SUBSYSTEM!="net", GOTO="end" IMPORT{builtin}=="net_id" IMPORT{builtin}=="net_setup_link" ENV{ID_NET_NAME}=="?*", NAME="$env{ID_NET_NAME}" LABEL="end"
重启
devmaster
:# sctl stop devmaster # sctl start devmaster
创建网卡配置
/etc/devmaster/network.d/99-default.link
,内容如下:[Match] OriginalName = "*" [Link] NamePolicy = ["database", "onboard", "slot", "path"]
先将网卡设备下线:
# ip link set ens33 down
将网卡名临时命名为
tmp
:# ip link set ens33 name tmp
触发网卡设备的
add
事件:# devctl trigger /sys/class/net/tmp --action add
查看网卡名称,发现重新命名为
ens33
,表示规则生效:# ll /sys/class/net/| grep ens33 lrwxrwxrwx 1 root root 0 Sep 6 11:57 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
激活网卡后恢复网络连接:
# ip link set ens33 up
说明:
网卡设备处于激活状态下无法重命名,需要先将其下线。另外
devmaster
仅在网卡设备的add
事件下对网卡重命名才会生效。在内核参数中添加
net.ifnames=0
或net.ifnames=false
参数会关闭网卡重命名功能。
示例3: 修改设备节点的用户权限
OPTIONS+="static_node=<devnode>
规则会使 devmaster
启动后,立即将本规则行中的用户权限应用在 /dev/<devnode>
设备节点上。重启 devmaster
后立即生效,无需设备事件触发。
创建规则文件
/etc/devmaster/rules.d/02-devnode-privilege.rules
,内容如下:OWNER="root", GROUP="root", MODE="777", OPTIONS+="static_node=tty5"
重启
devmaster
:# sctl stop devmaster # sctl start devmaster
观察
/dev/tty5
的用户、用户组和权限,变更为root
、root
和rwxrwxrwx
,表示规则生效:# ll /dev/tty5 crwxrwxrwx 1 root root 4, 5 Feb 3 2978748 /dev/tty5
网卡配置
devmaster
的网卡重命名功能由内置命令 net_id
、net_setup_link
和网卡配置文件配合完成。在规则文件中,通过 net_id
获取网卡的硬件属性,再使用 net_setup_link
选择某个网卡属性作为新的网卡名。net_setup_link
命令基于网卡配置,针对特定网卡设备,控制网卡命名的风格。本章主要介绍网卡配置文件的使用方法,网卡重命名的实施方法可参考网卡重命名规则案例。
默认网卡配置
devmaster
提供了如下默认网卡配置:
[Match]
OriginalName = "*"
[Link]
NamePolicy = ["onboard", "slot", "path"]
网卡配置文件中包含 [Match]
匹配节和 [Link]
控制节,每节中包含若干配置项。匹配节的配置项用于匹配网卡设备,当网卡满足所有匹配条件时,将控制节中的所有配置项作用在网卡上,比如设置网卡名选取策略、调整网卡参数等等。
以上列举的默认网卡配置表示将该配置作用在所有网卡设备上,并依次检查 onboard
、slot
和 path
风格的网卡命名风格,如果找到一个可用的风格,就以该风格对网卡进行命名。
网卡配置的详细说明可以参考 sysMaster
官方手册中的devmaster手册。
说明:
在内核参数中添加
net.ifnames=0
或net.ifnames=false
参数会关闭网卡重命名功能。如果发现网卡重命名未生效,可以检查内核参数中是否配置了这两项。