mkinitramfs在定制initramfs档时如何靠谱的定制/init文件?
虽说有"/usr/share/initramfs-tools/init"
但是这个是"包"的文件,而非用户的配置文件
如果mkinitramfs这个包哪天不知情时更新了,又更新了内核,那我特殊定制的initramfs就失效,然后系统就挂了(无法挂载特殊的root文件系统)...
"特殊的root文件系统"指的就是loop设备或者分区里的特定目录之类
而且不一定是真正的更新,有些时候升级系统,这些包会重装吗?重装了也有可能会覆盖我的init文件导致initramfs失效
debian这种还好说,可以单独弄个内核,一旦挂了就换老内核进去
要是Arch这种疯狂更新,内核太老了恐怕也就进不去系统了吧?
[已解决]mkinitramfs在定制initramfs档时如何靠谱的定制/init文件?
-
- 帖子: 2284
- 注册时间: 2013-05-26 6:58
- 系统: Debian 9
- astolia
- 论坛版主
- 帖子: 6396
- 注册时间: 2008-09-18 13:11
Re: mkinitramfs在定制initramfs档时如何靠谱的定制/init文件?
/usr/share/initramfs-tools/init的代码里写的很清楚,它提供了几处给你放代码的地方,你是没看到还是你改的代码在那几个地方没法放?
-
- 帖子: 2284
- 注册时间: 2013-05-26 6:58
- 系统: Debian 9
Re: mkinitramfs在定制initramfs档时如何靠谱的定制/init文件?
希望增加参数来进行特殊的挂载astolia 写了:/usr/share/initramfs-tools/init的代码里写的很清楚,它提供了几处给你放代码的地方,你是没看到还是你改的代码在那几个地方没法放?
例如将特定目录或镜像文件挂载为root文件系统
想改的是"# Parse command line options"这段
尝试了:
代码: 全选
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
copy_exec /etc/initramfs-tools/init /init
copy_exec /etc/initramfs-tools/init /init2
exit 0
要是直接在后面提供的脚本里重新解析参数,感觉效率太低.
Sat Jan 14 14:52:46 CST 2017补充:
您说的那些"放自己代码的地方"指的是?
我这里只看到:
代码: 全选
. /scripts/local
. /scripts/nfs
. /scripts/${BOOT}
但还是希望找到必要时能够完全定制/init脚本的靠谱方法
- astolia
- 论坛版主
- 帖子: 6396
- 注册时间: 2008-09-18 13:11
Re: mkinitramfs在定制initramfs档时如何靠谱的定制/init文件?
所以说英文真的很重要。
你看到 /usr/share/initramfs-tools/scripts/ 下面那些目录的名字,就没点想法?
你看到 /usr/share/initramfs-tools/init 中的run_scripts,就没啥感觉?
你看到 /usr/share/initramfs-tools/scripts/ 下面那些目录的名字,就没点想法?
你看到 /usr/share/initramfs-tools/init 中的run_scripts,就没啥感觉?
-
- 帖子: 2284
- 注册时间: 2013-05-26 6:58
- 系统: Debian 9
Re: mkinitramfs在定制initramfs档时如何靠谱的定制/init文件?
找到原因了:
/usr/share/initramfs-tools/hook-functions:
man initramfs-tools:
/usr/share/initramfs-tools/hook-functions:
结合mkinitramfs的代码,应该直接用类似cp ./init ${DESTDIR}/init这样的命令# $1 = file to copy to ramdisk
# $2 (optional) Name for the file on the ramdisk
# Location of the image dir is assumed to be $DESTDIR
# We never overwrite the target if it exists.
copy_exec() {
man initramfs-tools:
Exported variables
mkinitramfs sets several variables for the hook scripts environment.
MODULESDIR
corresponds to the linux modules dir.
version
is the $(uname -r) linux version against mkinitramfs is run.
CONFDIR
is the path of the used initramfs-tools configurations.
DESTDIR
is the root path of the newly build initramfs.
DPKG_ARCH
allows arch specific hook additions.
verbose
corresponds to the verbosity of the update-initramfs run.
KEYMAP
sets if a keymap needs to be added to initramfs.
MODULES
specifies which kind of modules should land on initramfs. This setting shouldn't be overridden by hook script, but can guide them on how much they need to
include on initramfs.