我正在阅读有关设置自定义 initramfs的教程,其中指出:
唯一缺少的是 /init,它是 initramfs 根目录中的可执行文件,一旦加载内核就会执行。因为 sys-apps/busybox 包含一个功能齐全的 shell,这意味着您可以将 /init 二进制文件编写为一个简单的 shell 脚本(而不是使它成为一个必须编译的用汇编程序或 C 编写的复杂应用程序)。
并给出了一个以 init 开头的 shell 脚本示例 #!/bin/busybox sh
到目前为止,我的印象是 init 是启动的主进程,所有其他用户空间进程最终都是 init 的子进程。但是,在给定的示例中,第一个进程实际上是bin/busybox/ sh从中产生后来的 init 的。
这是正确的解释吗?例如,如果我当时有一个可用的解释器,我可以将 init 编写为 Python 脚本等吗?
我已经在这个页面下载了 Raspbian 镜像。我正在尝试编译可用于在 qemu 中引导映像的内核。
我从kernel.org下载了 Linux 内核源代码并运行:
make versatile_defconfig
make menuconfig
Run Code Online (Sandbox Code Playgroud)
然后我向内核添加了以下功能:
我还循环安装了磁盘映像,并且:
/etc/ld.so.preload/etc/fstab使用/dev/sda1和/dev/sda2然后我卸载了图像并尝试使用以下命令启动机器:
qemu-system-arm \
-M versatilepb \
-m 256 \
-kernel linux-4.3/arch/arm/boot/zImage \
-hda 2015-09-24-raspbian-jessie.img \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw console=ttyAMA0"
Run Code Online (Sandbox Code Playgroud)
内核能够挂载文件系统,但它立即遇到了一些麻烦:
Kernel panic - not syncing: …Run Code Online (Sandbox Code Playgroud) 在 Ubuntu 18.04 上,我可以通过以下方式启动或停止某些服务
sudo service cron start/stop
Run Code Online (Sandbox Code Playgroud)
我可以列出一些服务
service --status-all
Run Code Online (Sandbox Code Playgroud)
输出与/etc/init.d/.
我听说有几种管理服务的方法:system V init、systemd、upstart,.... 我用的是哪一种?man service显示它是 system V init。但是听说Linux用systemd代替了init。我应该在 Ubuntu 上使用 systemd 而不是 init 吗?
如何使任意可执行文件(ELF 或 shell 脚本)成为服务?
我是否需要setsid像/sf/answers/1346467041/那样显式地守护可执行文件?
下面的任何帖子都适用于我吗?
谢谢。
我想在另一个之前运行一个 sysvinit 脚本并想出如何做到这一点。
为了确保这实际上按照我喜欢的顺序发生,我想查看一个列表,按照发生的顺序。
我sudo insserv --showall已经找到了,但不能确定它的头或尾,因为它多次列出 init 脚本。
如何找出 /etc/init.d 脚本在 Debian 上加载的顺序?
我正在尝试在 Linux 系统上调试 init 脚本;我正在尝试传递init=/bin/sh给内核以使其在sh不启动的情况下启动,init以便我可以手动运行 init 序列。
我发现内核init无论如何都在启动。在启动期间,printk 消息之一是命令行,这表明该行设置正确;此外,我可以使用内核命令行影响其他事情。我已经检查以确保路径存在;确实如此。
这是一个busybox系统,init是busybox的符号链接;所以为了确保busybox在PID为1时不会做奇怪的事情,我还尝试将非busybox程序作为init运行;那也没有用。似乎无论我做什么,init 都会运行。
什么可能导致这种行为?
我设法创建了一个小型且功能齐全的实时 Linux CD,其中仅包含内核(使用默认选项编译)和 BusyBox(使用默认选项 + 静态编译,所有小程序都存在,包括/sbin/init)。我没有问题,建立initrd和填充/dev,/proc并且/sys也是我在所有与我没有任何问题/initshell脚本。
最近我读到 BusyBox 支持/etc/inittab配置(至少在某种程度上),我非常想执行以下任一操作:
/initshell 脚本,完全依赖于/etc/inittab配置。/initshell 脚本和/etc/inittab配置。现在是实际问题 -/etc/inittab当我的发行版启动时,这似乎完全被忽略了。症状是:
/init并离开时,/etc/inittab我最终会遇到内核恐慌。我的假设是内核根本不执行/sbin/init,或者/sbin/init没有 find (or read) /etc/inittab。/etc/inittab. 所以,我删除了/initand/etc/inittab并猜猜是什么 - 内核再次恐慌。/sbin/init从我的外壳经过几次猜测,其中包括exec /sbin/init,setsid /sbin/init和exec setsid /sbin/init我结束了内核崩溃。文件系统上存在和不存在 /etc/inittab 的情况。 …在运行 Ubuntu 14.XX 的多台计算机上,我以用户身份运行命令“killall init”,并立即注销。我可以毫无问题地重新登录。为什么是这样?幕后发生了什么?
Ubuntu 中的哪个文件相当于/etc/inittabRedHat 中的文件?
在 RedHat 中,该/etc/inittab文件包含与要在其中启动 Linux 的运行级别相关的设置。
在我的 Raspberry Pi 上运行 jessie。安装 mosquitto 后,我无法再运行 sudo reboot。出现此错误:“无法与 init 守护程序对话。”。可能是什么问题呢?我已经卸载了 Mosquitto。非常感谢!
pi@fhem:~ $ sudo 重启
无法与 init 守护程序对话。