使用devmaster替换udev启动¶
使用devmaster
替换sysmaster
虚拟机启动场景的udev
,使得虚拟机启动后可以正常激活逻辑卷、挂载分区、加载网络等等。
在sysmaster
源码根目录下执行如下命令进行安装:
测试环境¶
- 测试的虚拟机环境如下:
# uname -a
Linux localhost.localdomain 5.10.0-60.18.0.50.oe2203.x86_64 #1 SMP Wed Mar 30 03:12:24 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
devmaster
的规则直接取自虚拟机环境中的udev
规则,在此基础上对sysmaster
环境中不支持的规则进行了适配。引用的规则以及适配情况见规则清单
和适配差异
。
安装方法¶
-
参考
sysmaster
虚拟机启动方案搭建启动环境。 -
安装
devmaster
的二进制以及相关配置文件,在sysmaster
源码根目录下执行如下命令:
- 重启系统,选择
sysmaster
启动项。进入主系统后检查devmaster
服务状态和网络连通情况。
规则清单¶
编号 | 规则 | 包 | 是否需要适配 |
---|---|---|---|
1 | 01-md-raid-creating.rules | mdadm-4.1-5.oe2203.x86_64 | |
2 | 10-dm.rules | device-mapper-1.02.181-4.oe2203.x86_64 | |
3 | 11-dm-lvm.rules | lvm2-2.03.14-4.oe2203.x86_64 | |
4 | 11-dm-mpath.rules | multipath-tools-0.8.7-2.oe2203.x86_64 | |
5 | 11-dm-parts.rules | kpartx-0.8.7-2.oe2203.x86_64 | |
6 | 13-dm-disk.rules | device-mapper-1.02.181-4.oe2203.x86_64 | |
7 | 40-elevator.rules | systemd-udev-249-16.oe2203.x86_64 | |
8 | 40-openEuler.rules | systemd-udev-249-16.oe2203.x86_64 | 是 |
9 | 50-udev-default.rules | systemd-udev-249-16.oe2203.x86_64 | |
10 | 60-autosuspend.rules | systemd-udev-249-16.oe2203.x86_64 | |
11 | 60-block.rules | systemd-udev-249-16.oe2203.x86_64 | |
12 | 60-cdrom_id.rules | systemd-udev-249-16.oe2203.x86_64 | |
13 | 60-drm.rules | systemd-udev-249-16.oe2203.x86_64 | |
14 | 60-evdev.rules | systemd-udev-249-16.oe2203.x86_64 | |
15 | 60-fido-id.rules | systemd-udev-249-16.oe2203.x86_64 | |
16 | 60-infiniband.rules | none package | |
17 | 60-input-id.rules | systemd-udev-249-16.oe2203.x86_64 | |
18 | 60-net.rules | initscripts-10.12-1.oe2203.x86_64 | |
19 | 60-persistent-alsa.rules | systemd-udev-249-16.oe2203.x86_64 | |
20 | 60-persistent-input.rules | systemd-udev-249-16.oe2203.x86_64 | |
21 | 60-persistent-storage.rules | systemd-udev-249-16.oe2203.x86_64 | |
22 | 60-persistent-storage-tape.rules | systemd-udev-249-16.oe2203.x86_64 | |
23 | 60-persistent-v4l.rules | systemd-udev-249-16.oe2203.x86_64 | |
24 | 60-raw.rules | util-linux-2.37.2-5.oe2203.x86_64 | |
25 | 60-rdma-ndd.rules | rdma-core-35.1-2.oe2203.x86_64 | |
26 | 60-rdma-persistent-naming.rules | rdma-core-35.1-2.oe2203.x86_64 | |
27 | 60-sensor.rules | systemd-udev-249-16.oe2203.x86_64 | |
28 | 60-serial.rules | systemd-udev-249-16.oe2203.x86_64 | |
29 | 60-srp_daemon.rules | rdma-core-35.1-2.oe2203.x86_64 | 是 |
30 | 62-multipath.rules | multipath-tools-0.8.7-2.oe2203.x86_64 | 是 |
31 | 63-md-raid-arrays.rules | mdadm-4.1-5.oe2203.x86_64 | |
32 | 64-btrfs-dm.rules | btrfs-progs-5.15-1.oe2203.x86_64 | |
33 | 64-btrfs.rules | systemd-udev-249-16.oe2203.x86_64 | |
34 | 64-md-raid-assembly.rules | mdadm-4.1-5.oe2203.x86_64 | |
35 | 66-kpartx.rules | kpartx-0.8.7-2.oe2203.x86_64 | |
36 | 68-del-part-nodes.rules | kpartx-0.8.7-2.oe2203.x86_64 | |
37 | 69-dm-lvm.rules | lvm2-2.03.14-4.oe2203.x86_64 | 是 |
38 | 69-md-clustered-confirm-device.rules | mdadm-4.1-5.oe2203.x86_64 | |
39 | 70-camera.rules | none package | |
40 | 70-joystick.rules | systemd-udev-249-16.oe2203.x86_64 | |
41 | 70-memory.rules | systemd-249-16.oe2203.x86_64 | |
42 | 70-mouse.rules | systemd-udev-249-16.oe2203.x86_64 | |
43 | 70-power-switch.rules | systemd-udev-249-16.oe2203.x86_64 | |
44 | 70-touchpad.rules | systemd-udev-249-16.oe2203.x86_64 | |
45 | 70-uaccess.rules | systemd-udev-249-16.oe2203.x86_64 | |
46 | 71-seat.rules | systemd-udev-249-16.oe2203.x86_64 | |
47 | 73-idrac.rules | systemd-udev-249-16.oe2203.x86_64 | |
48 | 73-seat-late.rules | systemd-udev-249-16.oe2203.x86_64 | |
49 | 75-net-description.rules | systemd-udev-249-16.oe2203.x86_64 | |
50 | 75-probe_mtd.rules | systemd-udev-249-16.oe2203.x86_64 | |
51 | 75-rdma-description.rules | rdma-core-35.1-2.oe2203.x86_64 | |
52 | 78-sound-card.rules | systemd-udev-249-16.oe2203.x86_64 | |
53 | 80-drivers.rules | systemd-udev-249-16.oe2203.x86_64 | |
54 | 80-net-setup-link.rules | systemd-udev-249-16.oe2203.x86_64 | |
55 | 80-tpm-udev.rules | tpm2-tss-3.1.0-1.oe2203.x86_64 | |
56 | 80-udisks2.rules | udisks2-2.9.4-2.oe2203.x86_64 | |
57 | 81-net-dhcp.rules | systemd-249-16.oe2203.x86_64 | |
58 | 84-nm-drivers.rules | NetworkManager-1.32.12-8.oe2203.x86_64 | |
59 | 85-nm-unmanaged.rules | NetworkManager-1.32.12-8.oe2203.x86_64 | |
60 | 90-iprutils.rules | iprutils-2.4.19-1.oe2203.x86_64 | |
61 | 90-iwpmd.rules | rdma-core-35.1-2.oe2203.x86_64 | |
62 | 90-nm-thunderbolt.rules | NetworkManager-1.32.12-8.oe2203.x86_64 | |
63 | 90-rdma-hw-modules.rules | rdma-core-35.1-2.oe2203.x86_64 | |
64 | 90-rdma-ulp-modules.rules | rdma-core-35.1-2.oe2203.x86_64 | |
65 | 90-rdma-umad.rules | rdma-core-35.1-2.oe2203.x86_64 | |
66 | 90-vconsole.rules | systemd-udev-249-16.oe2203.x86_64 | 是 |
67 | 91-drm-modeset.rules | libdrm-2.4.109-2.oe2203.x86_64 | |
68 | 95-dm-notify.rules | device-mapper-1.02.181-4.oe2203.x86_64 | |
69 | 96-e2scrub.rules | e2fsprogs-1.46.4-7.oe2203.x86_64 | |
70 | 98-kexec.rules | kexec-tools-2.0.23-4.oe2203.x86_64 | 是 |
71 | 99-systemd.rules | systemd-udev-249-16.oe2203.x86_64 | 是 |
systemd
相关命令无法在sysmaster
启动环境中使用,使用到这些命令的规则需要进行适配。部分适配动作会对功能造成影响,比如注释某条规则。某些适配动作不影响功能,但会产生行为差异,比如规则中调用systemd-run <cmd>
命令会生成一个systemd
的服务并执行cmd
命令,适配后会去除systemd-run
前缀,直接由devmaster
创建子进程来执行cmd
。另外清理了规则中的一些语法告警,比如IMPORT{}
类规则使用了赋值操作符等,此类修改不影响规则执行结果。
规则适配差异¶
40-openEuler.rules¶
# diff tools/run_with_devmaster/rules.d/40-openEuler.rules /lib/udev/rules.d/40-openEuler.rules
17c17
< # ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
---
> ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
60-srp_daemon.rules¶
# diff 60-srp_daemon.rules /lib/udev/rules.d/60-srp_daemon.rules
1c1
< #SUBSYSTEM=="infiniband_mad", KERNEL=="*umad*", PROGRAM=="/bin/systemctl show srp_daemon -p ActiveState", RESULT=="ActiveState=active", ENV{SYSTEMD_WANTS}+="srp_daemon_port@$attr{ibdev}:$attr{port}.service"
---
> SUBSYSTEM=="infiniband_mad", KERNEL=="*umad*", PROGRAM=="/bin/systemctl show srp_daemon -p ActiveState", RESULT=="ActiveState=active", ENV{SYSTEMD_WANTS}+="srp_daemon_port@$attr{ibdev}:$attr{port}.service"
62-multipath.rules¶
# diff 62-multipath.rules /lib/udev/rules.d/62-multipath.rules
74,75c74
< # RUN+="/usr/bin/systemd-run --unit=cancel-multipath-wait-$kernel --description 'cancel waiting for multipath siblings of $kernel' --no-block --timer-property DefaultDependencies=no --timer-property Conflicts=shutdown.target --timer-property Before=shutdown.target --timer-property AccuracySec=500ms --property DefaultDependencies=no --property Conflicts=shutdown.target --property Before=shutdown.target --property Wants=multipathd.service --property After=multipathd.service --on-active=$env{FIND_MULTIPATHS_WAIT_UNTIL} /usr/bin/udevadm trigger --action=add $sys$devpath"
< RUN+="/usr/bin/devctl trigger --action=add $sys$devpath"
---
> RUN+="/usr/bin/systemd-run --unit=cancel-multipath-wait-$kernel --description 'cancel waiting for multipath siblings of $kernel' --no-block --timer-property DefaultDependencies=no --timer-property Conflicts=shutdown.target --timer-property Before=shutdown.target --timer-property AccuracySec=500ms --property DefaultDependencies=no --property Conflicts=shutdown.target --property Before=shutdown.target --property Wants=multipathd.service --property After=multipathd.service --on-active=$env{FIND_MULTIPATHS_WAIT_UNTIL} /usr/bin/udevadm trigger --action=add $sys$devpath"
85,90c84,89
< IMPORT{db}=="FIND_MULTIPATHS_WAIT_CANCELLED"
< # ENV{FIND_MULTIPATHS_WAIT_CANCELLED}!="?*", \
< # ENV{FIND_MULTIPATHS_WAIT_UNTIL}=="?*", \
< # ENV{FIND_MULTIPATHS_WAIT_UNTIL}!="0", \
< # ENV{FIND_MULTIPATHS_WAIT_CANCELLED}="1", \
< # RUN+="/usr/bin/systemctl stop cancel-multipath-wait-$kernel.timer"
---
> IMPORT{db}="FIND_MULTIPATHS_WAIT_CANCELLED"
> ENV{FIND_MULTIPATHS_WAIT_CANCELLED}!="?*", \
> ENV{FIND_MULTIPATHS_WAIT_UNTIL}=="?*", \
> ENV{FIND_MULTIPATHS_WAIT_UNTIL}!="0", \
> ENV{FIND_MULTIPATHS_WAIT_CANCELLED}="1", \
> RUN+="/usr/bin/systemctl stop cancel-multipath-wait-$kernel.timer"
69-dm-lvm.rules¶
# diff 69-dm-lvm.rules /lib/udev/rules.d/69-dm-lvm.rules
82,84c82,83
< IMPORT{program}=="/usr/sbin/lvm pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output $env{DEVNAME}"
< # ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run -r --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay --nohints $env{LVM_VG_NAME_COMPLETE}"
< ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/sbin/lvm vgchange -aay --nohints $env{LVM_VG_NAME_COMPLETE}"
---
> IMPORT{program}="/usr/sbin/lvm pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output $env{DEVNAME}"
> ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run -r --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay --nohints $env{LVM_VG_NAME_COMPLETE}"
98-kexec.rules¶
# diff 98-kexec.rules /lib/udev/rules.d/98-kexec.rules
14,16c14
< #RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'"
<
< RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/lib/udev/kdump-udev-throttler'"
---
> RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'"
90-vconsole.rules¶
# diff tools/run_with_devmaster/rules.d/90-vconsole.rules /lib/udev/rules.d/90-vconsole.rules
3c12
< # ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon*", RUN+="/usr/lib/systemd/systemd-vconsole-setup"
---
> ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon*", RUN+="/usr/lib/systemd/systemd-vconsole-setup"
99-systemd.rules¶
99-systemd.rules
规则中的所有内容均被注释。
最后更新:
November 6, 2023
创建日期: September 5, 2023
创建日期: September 5, 2023