目录

🍅点击这里查看所有博文

  随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。

  想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。

  很多时候我们遇到了问题,一般情况下都是选择在搜索引擎检索相关内容,这样来的也更快一点,除非真的找不到才会去选择翻书。后来就想到了写博客,博客作为自己的一个笔记平台倒是挺合适的。随时可以查阅,不用随身携带。

  同时由于写博客是对外的,既然是对外的就不能随便写,任何人都可以看到。经验对于我来说那就只是经验而已,公布出来说不一定我的一些经验可以帮助到其他的人。遇到和我相同问题时可以少走一些弯路。

  既然决定了要写博客,那就只能认真去写。不管写的好不好,尽力就行。千里之行始于足下,一步一个脚印,慢慢来 ,写的多了慢慢也会变好的。权当是记录自己的成长的一个过程,等到以后再往回看时,就会发现自己以前原来这么菜😂。

  本系列博客所述资料均来自互联网,并不是本人原创(只有博客是自己写的)。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。

libvirtd 无法启动

查看服务状态

  libvirt 守护进程不会自动启动。手动启动 libvirt 守护进程也失败。查看日志也没有更多的信息。

cx@legionren7000p-26amr:~$ sudo service libvirtd restart
Job for libvirtd.service failed because the control process exited with error code.
See "systemctl status libvirtd.service" and "journalctl -xeu libvirtd.service" for details.

cx@legionren7000p-26amr:~$ systemctl status libvirtd.service
× libvirtd.service - Virtualization daemon
     Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2024-01-13 23:32:33 CST; 3s ago
TriggeredBy: × libvirtd-ro.socket
             × libvirtd-admin.socket
             × libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
    Process: 3440330 ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS (code=exited, status=6)
   Main PID: 3440330 (code=exited, status=6)
      Tasks: 2 (limit: 32768)
     Memory: 48.5M
        CPU: 16ms
     CGroup: /system.slice/libvirtd.service
             ├─1555 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper
             └─1557 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper

113 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Scheduled restart job, restart counter is at 5.
113 23:32:33 legionren7000p-26amr systemd[1]: Stopped Virtualization daemon.
113 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Start request repeated too quickly.
113 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Failed with result 'exit-code'.
113 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1555 (dnsmasq) remains running after unit stopped.
113 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1557 (dnsmasq) remains running after unit stopped.
113 23:32:33 legionren7000p-26amr systemd[1]: Failed to start Virtualization daemon.

cx@legionren7000p-26amr:~$ journalctl -xeu libvirtd.service
Support: http://www.ubuntu.com/support
	libvirtd.service 单元已失败。
	 结果为“failed”。
113 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Scheduled restart job, restart counter is at 5.
	Subject: Automatic restarting of a unit has been scheduled
	Defined-By: systemd
	Support: http://www.ubuntu.com/support
	Automatic restarting of the unit libvirtd.service has been scheduled, as the result for the configured Restart= setting for the unit.
113 23:22:19 legionren7000p-26amr systemd[1]: Stopped Virtualization daemon.
	Subject: libvirtd.service 单元已结束停止操作
	Defined-By: systemd
	Support: http://www.ubuntu.com/support
	libvirtd.service 单元已结束停止操作。
113 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Start request repeated too quickly.
113 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Failed with result 'exit-code'.
	Subject: Unit failed
	Defined-By: systemd
	Support: http://www.ubuntu.com/support
	
The unit libvirtd.service has entered the 'failed' state with result 'exit-code'.
113 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1555 (dnsmasq) remains running after unit stopped.
113 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1557 (dnsmasq) remains running after unit stopped.
113 23:22:19 legionren7000p-26amr systemd[1]: Failed to start Virtualization daemon.
	 Subject: libvirtd.service 单元已失败
	 Defined-By: systemd
	 Support: http://www.ubuntu.com/support
	
 libvirtd.service 单元已失败。
	
 结果为“failed”。

打开日志

  更改 libvirt 的配置文件/etc/libvirt/libvirtd.conf ,将下面这一行的开头 #删除,启用日志输出。

#log_outputs="3:syslog:libvirtd"

  再次执行服务启动的动作,并查看日志。可以看到日志中已经打印出了具体的错误信息。

错误1

  提示找不到/etc/pki/CA/cacert.pem证书。

2024-01-13 18:25:13.604+0000: 807133: info : libvirt version: 8.0.0, package: 1ubuntu7.8 (Lena Voytek <lena.voytek@canonical.com> Wed, 29 Nov 2023 14:52:52 -0700)
2024-01-13 18:25:13.604+0000: 807133: info : hostname: legionren7000p-26amr
2024-01-13 18:25:13.604+0000: 807133: error : virNetTLSContextCheckCertFile:106 : Cannot read CA certificate '/etc/pki/CA/cacert.pem': 没有那个文件或目录

  当 libvirt 在 TCP/IP(TLS) 模式下运行时,缺少 cacert.pem 文件就会出现此错误。使用以下方法之一配置 libvirt 守护进程的设置。

1、不要传递--listen参数(不使用TCP/IP)

  修改/etc/default/libvirtd文件,将LIBVIRTD_ARGS参数中的-l或者--listen去除。

root@legionren7000p-26amr:~# cat /etc/default/libvirtd
# Customizations for the libvirtd.service systemd unit

LIBVIRTD_ARGS=""
# LIBVIRTD_ARGS="--listen"

2、不使用 TLS

  若非必须,或者自己都不明白TLS的作用,又或者只是本地使用对数据安全不明感。强烈建议去除TLS验证。

  修改 /etc/libvirt/libvirtd.conf文件。将下面这一行的开头 #删除。

#listen_tls = 0

3、安装 CA 证书。

  配置较为繁琐,这里不做解释,可自行寻找配置方法。或查看本专栏的中的libvirt启用tls连接章节。

错误2

  错误信息中指出systemd激活套接字时不允许使用参数–listen。

114 01:36:03 legionren7000p-26amr libvirtd[514519]: 514519: info : libvirt version: 8.0.0, package: 1ubuntu7.8 (Lena Voytek <lena.voytek@canonical.com> Wed, 29 Nov 2023 14:52:52 -0700)
114 01:36:03 legionren7000p-26amr libvirtd[514519]: 514519: info : hostname: legionren7000p-26amr
114 01:36:03 legionren7000p-26amr libvirtd[514519]: 514519: error : daemonSetupNetworking:241 : --listen parameter not permitted with systemd activation sockets, see 'man libvirtd' for further gu>
114 01:36:03 legionren7000p-26amr systemd[1]: libvirtd.service: Main process exited, code=exited, status=6/NOTCONFIGURED

  原因在于libvirtd,默认使用了systemd模式,要恢复到传统模式,所有和libvirtd相关的systemd必须被屏蔽。

  执行下面的命令,恢复到传统的模式。并重启libvirtd服务。此时问题得到完美解决,tcp可正常连接到守护进程。

cx@legionren7000p-26amr:~$ systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket

cx@legionren7000p-26amr:~$ service libvirtd restart

cx@legionren7000p-26amr:~$ virsh -c qemu+tcp://localhost/system list
 Id   Name   State
--------------------

  那么本篇博客就到此结束了,这里只是记录了一些我个人的学习笔记,其中存在大量我自己的理解。文中所述不一定是完全正确的,可能有的地方我自己也理解错了。如果有些错的地方,欢迎大家批评指正。如有问题直接在对应的博客评论区指出即可,不需要私聊我。我们交流的内容留下来也有助于其他人查看,说不一定也有其他人遇到了同样的问题呢😂。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐