[英]Yocto using .bbappend file to override writing of default init scripts for initramfs
[英]Yocto: bbappend file which remove System V init script
我目前正在使用Yocto安装dnsmasq,但我想删除自动启动。
所以我创建了一个.bbappend文件,我尝试了类似的东西:
pkg_postinst_${PN} () {
update-rc.d dnsmasq -f remove
}
但它不起作用,我不知道如何继续使用bbappend文件删除此init脚本。
谢谢,皮埃尔 - 奥利维尔
几件事:
update-rc.d -f dnsmasq remove
(注意-f
应该在名字前面) INITSCRIPT_PARAMS
如INITSCRIPT_PARAMS = "stop 20 0 1 6 ."
? 在SysV下禁用服务的正确方法是使用INITSCRIPT_PARAMS
:
man update-rc.d
A common system administration error is to delete the links with
the thought that this will "disable" the service, i.e., that this
will pre‐ vent the service from being started. However, if all links
have been deleted then the next time the package is upgraded,
the package's postinst script will run update-rc.d again and this
will reinstall links at their factory default locations. The correct
way to disable services is to configure the service as stopped in
all runlevels in which it is started by default. In the System V
init system this means renaming the service's symbolic links from
S to K.
The correct way to disable services is to configure
the service as stopped in all runlevels in which it
is started by default.
但是我们如何知道默认启动服务的所有运行级别? 好吧,如果/etc/init.d/script
不存在“update-rc.d LSB header”(Yocto中的NGINX也是如此 - 我以它为例),那么它很简单:
NGIX由Yocto meta-openembedded
层下的nginx.inc
文件描述:
meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx.inc
NGINX在nginx.inc
文件中定义了如下初始脚本:
INITSCRIPT_NAME = "nginx"
INITSCRIPT_PARAMS = "defaults 92 20"
在Yocto rootfs中生成的服务Start / Kill符号链接是:
rootfs/etc/rc0.d/K20nginx -> ../init.d/nginx # Shutdown runlevel
rootfs/etc/rc1.d/K20nginx -> ../init.d/nginx # Single user mode runlevel
rootfs/etc/rc2.d/S92nginx -> ../init.d/nginx
rootfs/etc/rc3.d/S92nginx -> ../init.d/nginx
rootfs/etc/rc4.d/S92nginx -> ../init.d/nginx
rootfs/etc/rc5.d/S92nginx -> ../init.d/nginx
rootfs/etc/rc6.d/K20nginx -> ../init.d/nginx # Reboot runlevel
此外, update-rc.d.bbclass
在rootfs创建期间执行update-rc.d
确认了这一点。 因此,在meta/classes/update-rc.d.bbclass
文件中调用update-rc.d
的方式是:
update-rc.d $OPT ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
答对了!
要在Yocto下禁用SysV中的服务,我们需要定义:
INITSCRIPT_PARAMS = "stop 20 0 1 6 ."
在重新创建rootfs之前,应验证有效的INITSCRIPT_PARAMS
环境变量。 正确而简单的方法是再次使用伟大的bitbake
命令:
bitbake nginx -e | grep INITSCRIPT_PARAMS
现在,让我们重新创建图像(在我的情况下, core-image-full-cmdline
):
bitbake core-image-full-cmdline
我们现在可以很容易地看到,所有剩余的Start / Kill符号链接都是:
rootfs/etc/rc0.d/K20nginx -> ../init.d/nginx # Shutdown runlevel
rootfs/etc/rc1.d/K20nginx -> ../init.d/nginx # Single user mode runlevel
rootfs/etc/rc6.d/K20nginx -> ../init.d/nginx # Reboot runlevel
宾果再一次!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.