web-dev-qa-db-ja.com

libxml2がpythonにインポートされないという問題のため、Virt-Managerが起動しません

私は約1年前からArchLinuxでKVMとvirt-mangerを使っています。今朝、VMの1つが壊れました(これは私が関係しているとは思わない別の話です) 、そして私はそれを削除して再度virt-installするのが最も簡単であると判断しました。

ただし、virt-managerインターフェイスを介してこのVMを削除した後、virt-managerを起動できなくなりました。

$ virt-install
Traceback (most recent call last):
  File "/usr/share/virt-manager/virt-install", line 15, in <module>
    import virtinst
  File "/usr/share/virt-manager/virtinst/__init__.py", line 49, in <module>
    from virtinst.domain import *  # pylint: disable=wildcard-import
  File "/usr/share/virt-manager/virtinst/domain/__init__.py", line 5, in <module>
    from .blkiotune import DomainBlkiotune
  File "/usr/share/virt-manager/virtinst/domain/blkiotune.py", line 8, in <module>
    from ..xmlbuilder import XMLBuilder, XMLChildProperty, XMLProperty
  File "/usr/share/virt-manager/virtinst/xmlbuilder.py", line 16, in <module>
    from .xmlapi import XMLAPI
  File "/usr/share/virt-manager/virtinst/xmlapi.py", line 7, in <module>
    import libxml2
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 779, in exec_module
  File "<frozen importlib._bootstrap_external>", line 911, in get_code
  File "<frozen importlib._bootstrap_external>", line 580, in _compile_bytecode
EOFError: marshal data too short

Libxml2が何らかの形で壊れているようです:

Python 3.8.3 (default, May 17 2020, 18:15:42) 
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import libxml2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 779, in exec_module
  File "<frozen importlib._bootstrap_external>", line 911, in get_code
  File "<frozen importlib._bootstrap_external>", line 580, in _compile_bytecode
EOFError: marshal data too short

システムを更新し、明らかなパッケージlibvirtvirt-managerlibxml2、およびlibvirt-pythonを削除して再インストールしようとしましたが、それは役に立ちませんでした。やや危険なpacman -Syyu

ここで何が壊れているのかについてのアイデアはありますか?

私はLTSカーネル5.4を使用しています。 Pythonバージョンは3.8です。Virt-managerは2.2.1です。

また、Pythonを起動したばかりの場合は、上記のエラーに記載されているすべてのモジュールを問題なくロードできます。

クリーンな再インストールを行うところですが、それはひどい面倒です。Archでいくつかの依存関係を修正できれば、それを避けたいと思います。

編集:コメントで示唆されているように、私はstraceを実行しようとしました、そしてここに出力があります(おそらくそれを十分長く見れば、どのファイルが破損しているのかについての洞察が得られます)。ルートのディスク容量が不足しているため、ファイルが破損している可能性があります。

~]$ strace python -c 'import libxml2'
#output was too big to paste in here, so I cut out everything but the last part, which is what seemed most likely to be relevant
###..........many lines deleted....####
###..........many lines deleted....####
###..........many lines deleted....####
getcwd("/home/boss", 1024)              = 11
stat("/home/boss", {st_mode=S_IFDIR|0750, st_size=3488, ...}) = 0
stat("/home/boss", {st_mode=S_IFDIR|0750, st_size=3488, ...}) = 0
stat("/home/boss", {st_mode=S_IFDIR|0750, st_size=3488, ...}) = 0
openat(AT_FDCWD, "/home/boss", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0750, st_size=3488, ...}) = 0
getdents64(3, /* 41 entries */, 32768)  = 1416
getdents64(3, /* 0 entries */, 32768)   = 0
close(3)                                = 0
stat("/usr/lib/python3.8", {st_mode=S_IFDIR|0755, st_size=8192, ...}) = 0
stat("/usr/lib/python3.8/lib-dynload", {st_mode=S_IFDIR|0755, st_size=8192, ...}) = 0
stat("/home/boss/.local/lib/python3.8/site-packages", {st_mode=S_IFDIR|0700, st_size=3488, ...}) = 0
stat("/usr/lib/python3.8/site-packages", {st_mode=S_IFDIR|0755, st_size=8192, ...}) = 0
stat("/usr/lib/python3.8/site-packages/libxml2.py", {st_mode=S_IFREG|0644, st_size=345896, ...}) = 0
stat("/usr/lib/python3.8/site-packages/libxml2.py", {st_mode=S_IFREG|0644, st_size=345896, ...}) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/__pycache__/libxml2.cpython-38.pyc", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=139264, ...}) = 0
ioctl(3, TCGETS, 0x7fffbe383200)        = -1 ENOTTY (Inappropriate ioctl for device)
lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_CUR)                   = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=139264, ...}) = 0
mmap(NULL, 143360, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2172e15000
read(3, "U\r\r\n\0\0\0\0\203\224\246^(G\5\0\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 139265) = 139264
read(3, "", 1)                          = 0
close(3)                                = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2172dd5000
write(2, "Traceback (most recent call last"..., 35Traceback (most recent call last):
) = 35
write(2, "  File \"<string>\", line 1, in <m"..., 39  File "<string>", line 1, in <module>
) = 39
openat(AT_FDCWD, "<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<string>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "  File \"<frozen importlib._boots"..., 68  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
) = 68
openat(AT_FDCWD, "<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "  File \"<frozen importlib._boots"..., 77  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
) = 77
openat(AT_FDCWD, "<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "  File \"<frozen importlib._boots"..., 68  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
) = 68
openat(AT_FDCWD, "<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "  File \"<frozen importlib._boots"..., 74  File "<frozen importlib._bootstrap_external>", line 779, in exec_module
) = 74
openat(AT_FDCWD, "<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "  File \"<frozen importlib._boots"..., 71  File "<frozen importlib._bootstrap_external>", line 911, in get_code
) = 71
openat(AT_FDCWD, "<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "  File \"<frozen importlib._boots"..., 80  File "<frozen importlib._bootstrap_external>", line 580, in _compile_bytecode
) = 80
openat(AT_FDCWD, "<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python38.Zip/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/lib-dynload/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/boss/.local/lib/python3.8/site-packages/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/<frozen importlib._bootstrap_external>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "EOFError: marshal data too short"..., 33EOFError: marshal data too short
) = 33
rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f21734763e0}, {sa_handler=0x7f21736ca3a2, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f21734763e0}, 8) = 0
munmap(0x7f2172dd5000, 262144)          = 0
munmap(0x7f2172e15000, 143360)          = 0
sigaltstack(NULL, {ss_sp=0x5610230bc580, ss_flags=0, ss_size=16384}) = 0
sigaltstack({ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=0}, NULL) = 0
exit_group(1)                           = ?
+++ exited with 1 +++

編集: このスレッド 有望なようですが、__init__.pyが欠落しているかどうかを確認する場所がわかりません。

1
Stonecraft

.pycファイルが破損している可能性があります。

pythonプロセスでimport libxml2を実行してstraceを試して、マーシャルエラーの前に開くファイルを確認してください。

次に、そのファイルを削除し(Pythonでは、動作するために.pycファイルが存在する必要はありません)、import libxml2を再度削除します。インポートが成功した場合は、python-libxml2を削除して再インストールします(これにより、障害のある.pycファイルが再生成されます)。

1
D. SM