View previous topic :: View next topic |
Author |
Message |
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1240
|
Posted: Sun Jan 12, 2025 6:51 pm Post subject: Question about init conception |
|
|
Hi guys, I am actually doing test under virtualbox with an init system I am coding.
I just have one question.
Is it possible to compile an init system dynamically or not ?
Because if I compile my init dynamically, bascially it can't find the libraries. I have to compile it statically. Are there anyway to do ? _________________ My actual project: https://github.com/Fulgurance/ISM
Ingenius Software Manager is a tool to build and manage a Linux system from scratch.
It will able to manage a linux installation just with a given path to the futur root path |
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1384 Location: Richmond Hill, Canada
|
Posted: Sun Jan 12, 2025 6:59 pm Post subject: |
|
|
How you start your init?
Usually init start after rootfs already mounted so runtime libraries usually available.
But as you already experienced, init is better statically linked to support all kinds of condition. |
|
Back to top |
|
|
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1240
|
Posted: Sun Jan 12, 2025 7:28 pm Post subject: |
|
|
So by your explanation, I guess my init should first mount the root filesystem ? I thought will be already mounted. _________________ My actual project: https://github.com/Fulgurance/ISM
Ingenius Software Manager is a tool to build and manage a Linux system from scratch.
It will able to manage a linux installation just with a given path to the futur root path |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22986
|
Posted: Sun Jan 12, 2025 7:29 pm Post subject: |
|
|
/sbin/init from sysvinit is dynamically linked, so yes, it is possible, and on a stock Gentoo system, it seems to work without user intervention. |
|
Back to top |
|
|
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1240
|
Posted: Sun Jan 12, 2025 7:34 pm Post subject: |
|
|
So how should I proceed ? Because there is not really documentation or anything about this.
So I just would like to make the rootfs available for my init system. How should I proceed exactly ? _________________ My actual project: https://github.com/Fulgurance/ISM
Ingenius Software Manager is a tool to build and manage a Linux system from scratch.
It will able to manage a linux installation just with a given path to the futur root path |
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1384 Location: Richmond Hill, Canada
|
Posted: Sun Jan 12, 2025 7:40 pm Post subject: |
|
|
Fulgurance wrote: | So how should I proceed ? Because there is not really documentation or anything about this.
So I just would like to make the rootfs available for my init system. How should I proceed exactly ? |
This is why I ask you how you start init.
Normally init (the program) reside on rootfs, kernel usually got rootfs mounted then call /sbin/init by default. |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1785 Location: South America
|
Posted: Sun Jan 12, 2025 7:41 pm Post subject: Re: Question about init conception |
|
|
Fulgurance wrote: | Is it possible to compile an init system dynamically or not |
"Init system" means several components these days. In particular, yes, the PID 1 program can be (and, as Hu said, on Gentoo is) dynamically linked if:
- The filesystem that contains the expected location of the dynamic linker (/lib64/ld-linux-x86-64.so.2 for amd64 systems with GNU libc) is mounted by the time the kernel or initramfs' init file invokes the PID 1 program.
- The filesystem(s) that contain the locations where the dynamic linker searches for the PID 1 program's shared libraries are mounted by the time the kernel or initramfs' init file invokes the PID 1 program.
For the rest of the init system's components it depends. _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
Last edited by GDH-gentoo on Sun Jan 12, 2025 8:20 pm; edited 1 time in total |
|
Back to top |
|
|
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1240
|
Posted: Sun Jan 12, 2025 7:54 pm Post subject: |
|
|
So to make sure it's clear.
When the kernel finish to initialize all it need, it give the hand to the program located (by default) at /sbin/init, with the PID 1 right ?
So normally at this stage, rootfs should be mounted yet isn't it ? ( and I think it make sens because to call /sbin/init, root should be mounted)
So my question now is, why I get this error (screenshot):
https://global.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/6/67f17012d1d552d6614cd31ee22798ccad4aedf2.png
Because the rootfs is mounted, and this file exist: /lib64/ld-linux-x86-64.so.2 (I checked by booting bash as init process)
And why /proc/stat isn't mounted ? _________________ My actual project: https://github.com/Fulgurance/ISM
Ingenius Software Manager is a tool to build and manage a Linux system from scratch.
It will able to manage a linux installation just with a given path to the futur root path |
|
Back to top |
|
|
zen_desu Tux's lil' helper
Joined: 25 Oct 2024 Posts: 101
|
Posted: Sun Jan 12, 2025 8:08 pm Post subject: |
|
|
If an initramfs is not being used, and the kernel is able to mount the root and run the init, you must be sure your init is doing things such as mounting a devtmpfs on /dev/, procfs on /proc, sysfs on /sys, etc. The devtmpfs can be avoided if you add static nodes for devices. _________________ µgRD dev
Wiki writer |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1785 Location: South America
|
Posted: Sun Jan 12, 2025 8:20 pm Post subject: |
|
|
In other words, if no initramfs is used, the only things that the PID 1 program can assume are:
- That the rootfs, and only the rootfs, is mounted. Nothing else, not even the proc or devtmpfs filesystems.
- That standard input, output and error are already open and redirected to the console.
_________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
Last edited by GDH-gentoo on Sun Jan 12, 2025 8:39 pm; edited 1 time in total |
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1384 Location: Richmond Hill, Canada
|
Posted: Sun Jan 12, 2025 8:26 pm Post subject: |
|
|
Fulgurance wrote: | So to make sure it's clear.
When the kernel finish to initialize all it need, it give the hand to the program located (by default) at /sbin/init, with the PID 1 right ?
So normally at this stage, rootfs should be mounted yet isn't it ? ( and I think it make sens because to call /sbin/init, root should be mounted)
So my question now is, why I get this error (screenshot):
https://global.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/6/67f17012d1d552d6614cd31ee22798ccad4aedf2.png
Because the rootfs is mounted, and this file exist: /lib64/ld-linux-x86-64.so.2 (I checked by booting bash as init process)
And why /proc/stat isn't mounted ? |
How did you determine /lib64/ld-linux-x86-64.so.2 was missed in init start up? you screen shut does not show that.
rootfs (/) does not include /proc. /proc is just a mount point for pseudo file system proc. usually it is init job to invoke other program(s) to perform mounting of supporting pseudo file systems (for example sys, proc, devtmpfs, etc...
Not sure which "init" system you are using, but for example openrc on gentoo you can read /lib/rc/sh/init.sh for some idea. |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1785 Location: South America
|
Posted: Sun Jan 12, 2025 8:41 pm Post subject: |
|
|
pingtoo wrote: | Not sure which "init" system you are using, [...] |
The OP says Fulgurance is making one. _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1384 Location: Richmond Hill, Canada
|
Posted: Sun Jan 12, 2025 9:32 pm Post subject: |
|
|
GDH-gentoo wrote: | pingtoo wrote: | Not sure which "init" system you are using, [...] |
The OP says Fulgurance is making one. |
Yes, I understand. however I believe he is refer to the binary program because OP is specific about run time linked library.
I think at this OP is yet to understand the "init" as whole is not just about binary program. It is entire system that describe a life cycle of OSE (Operating System Environment)
I am not saying init system cannot a single binary program, it just that if you programmed entire life cycle of OSE in single binary you lost many opportunity for later enhancement to OSE. because otherwise the init binary need to reprogrammed for new changes. it is just not very well engineering design. |
|
Back to top |
|
|
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1240
|
Posted: Mon Jan 13, 2025 12:54 pm Post subject: |
|
|
pingtoo wrote: |
How did you determine /lib64/ld-linux-x86-64.so.2 was missed in init start up? you screen shut does not show that. |
I never said it was missing, in my previous post I said:
Fulgurance wrote: | Because the rootfs is mounted, and this file exist: /lib64/ld-linux-x86-64.so.2 (I checked by booting bash as init process) |
That is my point, why my program get this error?
EDIT: So I think I understood the problem. Basically, the root filesystems when the kernel give the hand to the program PID 1 is in read only, so first it need to be remounted.
So basically I guess before I start any service, I need to make a small program that mount the necessary minimal things right ?
I know how to mount proc, but how do you mount /proc/stat ? _________________ My actual project: https://github.com/Fulgurance/ISM
Ingenius Software Manager is a tool to build and manage a Linux system from scratch.
It will able to manage a linux installation just with a given path to the futur root path |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1785 Location: South America
|
Posted: Mon Jan 13, 2025 1:58 pm Post subject: |
|
|
Fulgurance wrote: | EDIT: So I think I understood the problem. Basically, the root filesystems when the kernel give the hand to the program PID 1 is in read only, so first it need to be remounted.
So basically I guess before I start any service, I need to make a small program that mount the necessary minimal things right ? |
The PID 1 program receiving a rootfs mounted read-only, and the init system remounting it read-write at some point during the boot sequence is a common setup, yes, but has nothing to do with the /proc/stat thing if you are asking because you think that it is connected.
Fulgurance wrote: | I know how to mount proc, but how do you mount /proc/stat ? |
/proc/stat is a file, it will magically appear once the proc filesystem is mounted at /proc. _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1384 Location: Richmond Hill, Canada
|
Posted: Mon Jan 13, 2025 2:18 pm Post subject: Re: Question about init conception |
|
|
Quote: | but how do you mount /proc/stat ? | Do you have running example of what is actually mounted on /proc/stat?
I am not aware /proc/stat is a mount point for anything.
Assume /proc/stat is NOT a mount point then when you successfully mount /proc than you should automatically got /proc/stat. |
|
Back to top |
|
|
|