omv安装插件时weakref.py报错
在 omv 的 web 端安装插件时报错,报错位置是 weakref.py 文件,报错信息如下:
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
openmediavault-lvm2
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 27.7 kB of archives.
After this operation, 244 kB of additional disk space will be used.
Get:1 https://packages.openmediavault.org/public arrakis/main amd64 openmediavault-lvm2 all 4.0.7-1 [27.7 kB]
Fetched 27.7 kB in 5s (4883 B/s)
Selecting previously unselected package openmediavault-lvm2.
(Reading database ... (Reading database ... 5%(Reading database ... 10%(Reading database ... 15%(Reading database ... 20%(Reading database ... 25%(Reading database ... 30%(Reading database ... 35%(Reading database ... 40%(Reading database ... 45%(Reading database ... 50%(Reading database ... 55%(Reading database ... 60%(Reading database ... 65%(Reading database ... 70%(Reading database ... 75%(Reading database ... 80%(Reading database ... 85%(Reading database ... 90%(Reading database ... 95%(Reading database ... 100%(Reading database ... 54624 files and directories currently installed.)
Preparing to unpack .../openmediavault-lvm2_4.0.7-1_all.deb ...
Unpacking openmediavault-lvm2 (4.0.7-1) ...
Setting up openmediavault-lvm2 (4.0.7-1) ...
Processing triggers for openmediavault (4.1.36-1) ...
Updating locale files ...
Updating file permissions ...
Purging internal cache ...
Restarting engine daemon ...
Exception ignored in: <function WeakValueDictionary.__init__.<locals>.remove at 0x7efed0a3e9d8>
Traceback (most recent call last):
File "/usr/lib/python3.5/weakref.py", line 117, in remove
TypeError: 'NoneType' object is not callable
Exception ignored in: <function WeakValueDictionary.__init__.<locals>.remove at 0x7efed0a3e9d8>
Traceback (most recent call last):
File "/usr/lib/python3.5/weakref.py", line 117, in remove
TypeError: 'NoneType' object is not callable
报错提示了位置:/usr/lib/python3.5/weakref.py文件第117行。
服务器使用的是 omv4,第一次装了个 omv5,发现不好用,很多插件都找不到,又重装了一遍系统,美滋滋。
下面开始修复 bug,你不仁我不能不义,改文件前先备份:
cp /usr/lib/python3.5/weakref.py /usr/lib/python3.5/weakref.py.bak
参考 这个回答 修改文件内容。
修改前:
def remove(wr, selfref=ref(self)):
self = selfref()
if self is not None:
if self._iterating:
self._pending_removals.append(wr.key)
else:
_remove_dead_weakref(d, wr.key)
修改后:
def remove(wr, selfref=ref(self), _atomic_removal=_remove_dead_weakref):
self = selfref()
if self is not None:
if self._iterating:
self._pending_removals.append(wr.key)
else:
_atomic_removal(d, wr.key)
OK,可以安装插件了。