我的问题很简单,但我在网上找不到任何解决方案:我有一个包含init.d脚本的文件系统。我希望这个脚本在系统的第一次启动时运行。我该怎么做?如果可能,我希望避免手动创建init.d符号链接。
编辑:我正在使用Debian 4.19。包含init.d脚本的文件系统是最终系统的rootfs。第一次引导时,我希望脚本在第一次使用文件系统启动机器时运行(我使用的内核也将是第一次启动,但我认为这并不重要)。我想维护这个init.d脚本,如果可能的话,不要转移到任何其他服务管理。基本上,问题很简单:我可以访问我想要引导的linux文件系统,并且我希望在不启动整个系统的情况下启用init.d脚本。
发布于 2021-09-02 13:16:31
首先,“Debian4.19”是不存在的:您可能看到的是一个带有LinuxVersion4.19内核的Debian系统,这意味着它是一个Debian 10 ("buster",也就是Debian 11在大约两周前发布时就变得“过时”的版本)。
Debian从Debian 8开始就一直使用systemd,但是它们仍然保持了一些SysVinit兼容性,并且可以选择用其他init系统替换systemd .虽然我不知道在Debian 10中使用SysVinit会有多实际,但现在相当多的系统集成都得益于或依赖于systemd。但是Debian 10 (和11)上的systemd仍然具有完全兼容init.d脚本的机制,因此无论使用哪种init系统,这个答案都应该是适用的。
因此,您有一个包含Debian 10安装根分区的磁盘,例如/dev/sdXN,您希望在系统实际启动之前修改它以添加和init.d脚本。
您可以在另一个系统中挂载磁盘:
mount /dev/sdXN /mnt然后将脚本复制到新安装的/etc/init.d/目录中:
cp /some/where/myscript /mnt/etc/init.d/
chmod a+rx /mnt/etc/init.d/myscript注意:为了systemd兼容性,您的脚本需要在开始时包含LSB样式的注释块,以记录它的依赖项并防止systemd在启动过程中过早地运行它。参见这篇Debian文章或insserv(8)手册页获取更多详细信息。
基本上,在脚本开头的任何其他非注释行之前,您的脚本必须有这样的注释块:
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: $local_fs $syslog $network
# Required-Stop: $local_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start myscript at boot time
# Description: Enable service provided by myscript.
### END INIT INFO您应该根据脚本的要求调整Required-Start和Required-Stop行。
一旦脚本到位,就可以将chroot放入新的安装中,以便运行update-rc.d工具为您创建init.d符号链接。但是,在实际的chroot命令之前,您应该挂载/proc、/sys和/dev文件系统,否则就不能做太多事情了:
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o rbind /dev /mnt/dev
chroot /mnt /bin/bash # From this point on, /mnt will be this session's root directory现在,您的会话将“在”新安装的环境中运行,您可以使用该安装的大多数工具,就像系统已经在运行新安装一样。因此,您可以使用update-rc.d命令:
/usr/sbin/update-rc.d myscript defaults在此之后,您可以撤消chroot并卸载新安装的根文件系统以干净地结束该过程:
exit # back to having the real root directory
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt(安装非活动安装的根文件系统的过程适用于许多维护和故障排除情况,例如修复损坏的引导加载程序或更改丢失的根密码。在这种特殊情况下,可能没有必要在非活动安装中挂载/proc和/sys .但我选择以“通用”的形式展示chroot过程,因此它也更容易适用于其他情况。)
https://unix.stackexchange.com/questions/667203
复制相似问题