There are three ways you can change the behaviour of the init system. Those are:
On GRUB, you can edit the kernel command line parameters, which will be parsed as variables on the init system. Not all of the parameters will be acted upon, but all of them will be set as variables on the init script. For example an example command line, and how it is interpreted.
BOOT_IMAGE=/boot/vmlinuz root=/dev/sda2 rw loglevel=3 quiet
This command line will be parsed to set the following variables:
BOOT_IMAGE=/boot/vmlinuz root=/dev/sda2 rw=1 loglevel=3 quiet=1
Some of these variables, such as ‘rw=/=ro’, ‘loglevel’, and ‘quiet’, will be used by the init system to change the behaviour of the startup.
However, the kernel command line isn’t the only place to set your boot parameters. You can specify variables here as well, although note that the kernel command line always gets the priority for these variables since they can be set just before boot.
Init hooks are for custom personal commands that the user may want to add to alter their boot. These can be used to load kernel modules, modify interfaces, and lot more. Those hooks are added to the ‘/etc/init’ directory with the hook name as the suffix. For example, a boot script will be placed as ‘/etc/init/my-hook.boot’. Currently, there are 4 hooks that the user can use.
Run after pseudo-filesystems are mounted.
Run before the boot stage is completed.
Run first when shutting down.
Run just before filesystems are unmounted.
Run just before the system is halted.