Linux 板


LINE

以下介绍让livecd多些便利性的改进 LiveCD中的grub/custom.cfg 可以利用grub 的search指令 加入类似如下数行 可以找到另一颗hd上的*.cfg 在那里做变化 可以增加未来弹性 如multiboot 或挂载hd上的OverlayFS 做为增修用cd 上的 squash用 可以等到稳定後 再将整个OverlayFS 存成新的squash 做成新的cd ============= # hooks.cfg device_label=overlayfs_rw hook=boot/grub/grub_hook.cfg # 未来可以在这里放multiboot, overlay 等等 search --label --set=HOOK_DEV $device_label if [ -f ($HOOK_DEV)/$hook ]; then source ($HOOK_DEV)/$hook fi ============= 如果有用squashfs, grub也可用loopback这个指令 从里面挖到vmlinuz,initrd 这样就不用copy出来了 (以前不知道浪费好多时间) 配合前小段search的方法 假设找到boot device 为($BOOT_DEV) ============= #inside some boot menu of the grub.cfg insmod squash4 set loop_file=livecd.squashfs # your file name here loopback some_name ($BOOT_DEV)/$loop_file linux (some_name)/boot/vmlinuz-xxx.xxx.xx initrd (some_name)/boot/initrd-xxx.xxx.xx ============= 然後 我想要grub也能从 OverlayFS中 挖到正确的新的vmlinuz与initrd 用来boot 因为之前要挂载overlayfs时 已经都参数化 由grub传给initrd/linuxrc了 所以grub也能由这些参数挖到vmlinuz与initrd来boot 方法就是前两小段的search+loopback指令 就是做些苦工把可能的地方 依照优先顺序去找 找到後 存在$VMLINUX, $INITRD 这两个变数中 先举例用法, grub scripts 後列 set vmlinuz=vmlinuz-x.x.xx # 要用的版本 set initrd=initrd-x.x.xx export vmlinuz export initrd set ovl_dev0=LIVECD # 假设grub能看得到device 只是要告诉它label name set ovl_mnt0=/loops # 挂载点 set ovl_loopfile0=livecd.squashfs #cd 里面的loopfile set ovl_mnt0_sub=/lower # squash 挂载点 set ovl_dev1=overlay_rw # hd partition label set ovl_mnt1=/rw # hd 挂载点 set ovl_loopfile1= # rw 也可以是hd 上的 loopfile set ovl_mnt1_sub= # rw loopfile 挂载点 #参数设好後 用下面的function找 get_vmlinux_initrd "$ovl_dev0" "$ovl_mnt0" \ "$ovl_loopfile0" "$ovl_mnt0_sub" \ "$ovl_dev1" "$ovl_mnt1" \ "$ovl_loopfile1" "$ovl_mnt1_sub" echo "vmlinux: $VMLINUX" # 找到後存在这 echo "initrd : $INITRD" sleep 2 echo 'Loading vmLinux...' linux $VMLINUX rootfstype=overlay \ ovl_dev0=LABEL=$ovl_dev0 ovl_mnt0=$ovl_mnt0 \ ovl_loopfile0=$ovl_mnt0/$ovl_loopfile0 \ ovl_mnt0_sub=/$ovl_mnt0_sub \ ovl_dev1=LABEL=$ovl_dev1 ovl_mnt1=$ovl_mnt1 \ root=overlay ro # mount_move init_opts=1 echo 'Loading initrd...' initrd $INITRD # 用找到的地方boot, 其他一长串参数 请参看之前 # boot loop device 的po 文 以下是 get_vmlinux_initrd 函式列表 =========================== ### BEGIN functions ### set VMLINUX='' set INITRD='' function is_there { echo is_there "${1}" if [ -d "${1}" ]; then if [ -z "$VMLINUX" -a -e "${1}/$vmlinuz" ]; then set VMLINUX="${1}/$vmlinuz" echo VMLINUX "${VMLINUX}" export VMLINUX fi if [ -z "$INITRD" -a -e "${1}/$initrd" ]; then set INITRD="${1}/$initrd" echo INITRD "${INITRD}" export INITRD fi echo fi sleep 1 } #${1} #ovl_dev0 #ovl_mnt0=/loops #ovl_loopfile0=g-squash_mini/g-squash_mini.xz.squashfs #ovl_mnt0_sub=/loops/g-squash_mini/lower #ovl_dev1 #ovl_mnt1=/loops #ovl_loopfile1=g-squash_mini/g-squash_mini.rw.ext2 #ovl_mnt1_sub=/loops/g-squash_mini/rw function get_vmlinux_initrd_ovl { echo echo 'get_vmlinux_initrd_ovl' echo "${1}, ${2}, ${3}, ${4}, ${5}, ${6}, ${7}, ${8}." while [ -z "$VMLINUX" -o -z "$INITRD" ]; do if [ -n "${5}" ]; then search --no-floppy --label --set=OVL_DEV1 "${5}" echo ovl_dev1 "$OVL_DEV1" fi if [ -n "$OVL_DEV1" ]; then if [ -f "($OVL_DEV1)/${7}" ]; then echo loopback loop1 "($OVL_DEV1)/${7}" loopback loop1 "($OVL_DEV1)/${7}" is_there "(loop1)/upper/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; else if [ -z "$VMLINUX" -a -z "$INITRD" ]; then loopback -d loop1 fi fi fi if [ -n "${8}" ]; then is_there '("$OVL_DEV1")/"${8}"/upper/boot' fi if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi is_there "($OVL_DEV1)/upper/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi fi if [ -n "${1}" -a "${1}" != '(LOOP_ENTRY)' ]; then search --no-floppy --label --set=OVL_DEV0 "${1}" echo ovl_dev0 "$OVL_DEV0" fi if [ -n "$OVL_DEV0" ]; then if [ -f "($OVL_DEV0)/${7}" ]; then echo loopback loop1 "($OVL_DEV0)/${7}" loopback loop1 "($OVL_DEV0)/${7}" is_there "(loop1)/upper/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; else if [ -z "$VMLINUX" -a -z "$INITRD" ]; then loopback -d loop1 fi fi fi if [ -n "${8}" ]; then is_there "($OVL_DEV0)/${8}/upper/boot" fi if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi is_there "($OVL_DEV0)/upper/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi if [ -f "($OVL_DEV0)/${3}" ]; then echo loopback loop0 "($OVL_DEV0)/${3}" loopback loop0 "($OVL_DEV0)/${3}" is_there "(loop0)/boot" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; elif [ -n "${4}" -a -d "(loop0)/boot/${4}" ]; then is_there "(loop0)/boot/${4}" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi else is_there "(loop0)" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi if [ -z "$VMLINUX" -a -z "$INITRD" ]; then loopback -d loop0 fi fi elif [ -n "${4}" ]; then is_there "($OVL_DEV0)/${4}/lower/boot" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi is_there "($OVL_DEV0)/${4}/boot" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi is_there "($OVL_DEV0)/${4}" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi else is_there "($OVL_DEV0)/lower/boot" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi is_there "($OVL_DEV0)/boot" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi is_there "($OVL_DEV0)" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi fi #[ -f "($OVL_DEV0)/${3}" ] fi # [ -n "$OVL_DEV0" ] if [ -f "${1}/${3}" ]; then echo loopback loop_lower "${1}/${3}" loopback loop_lower "${1}/${3}" is_there "(loop_lower)/boot" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; elif [ -n "${4}" -a -d "(loop_lower)/boot/${4}" ]; then is_there "(loop_lower)/boot/${4}" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi elif [ -z "$VMLINUX" -o -z "$INIDRD" ]; then is_there "(loop_lower)" if [ -n "$VMLINUX" -a -n "$INIDRD" ]; then break; fi if [ -z "$VMLINUX" -a -z "$INITRD" ]; then loopback -d loop_lower fi fi fi break done sleep 1 # play 240 440 1 524 1 } #${1} #loop_dev #loop_dev_mnt #loop_file #loop_file_mnt #ovl_dev0 #ovl_mnt0=/loops #ovl_loopfile0=g-squash_mini/g-squash_mini.xz.squashfs #ovl_mnt0_sub=/loops/g-squash_mini/lower #ovl_dev1 #ovl_mnt1=/loops #ovl_loopfile1=g-squash_mini/g-squash_mini.rw.ext2 #ovl_mnt1_sub=/loops/g-squash_mini/rw function get_vmlinux_initrd { echo echo 'get_vmlinux_initrd' echo "${1},${2},${3},${4}, ${5},${6},${7},${8}, ${9},${10},${11},${12}." while [ -z "$VMLINUX" -o -z "$INITRD" ]; do if [ -n "${1}" ]; then search --no-floppy --label --set=LOOP_DEV "${1}" echo loop_dev "$LOOP_DEV" fi if [ -n "$LOOP_DEV" ]; then if [ -f "($LOOP_DEV)/${3}" ]; then echo loopback LOOP_ENTRY "($LOOP_DEV)/${3}" loopback LOOP_ENTRY "($LOOP_DEV)/${3}" set _ovl_dev1="${9}" if [ "$_ovl_dev1" = 'tmpfs' ]; then _ovl_dev1='' fi get_vmlinux_initrd_ovl \ (LOOP_ENTRY) "${6}" "${7}" "${8}" \ "$_ovl_dev1" "${10}" "${11}" "${12}" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; elif [ -n "${4}" ]; then is_there "(LOOP_ENTRY)/boot/${4}" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi is_there "(LOOP_ENTRY)/${4}/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi is_there "(LOOP_ENTRY)/${4}" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi fi is_there "(LOOP_ENTRY)/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; else if [ -z "$VMLINUX" -a -z "$INITRD" ]; then loopback -d LOOP_ENTRY fi fi elif [ -n "${4}" ]; then is_there "(LOOP_DEV)/${4}/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi is_there "(LOOP_DEV)/${4}" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi is_there "(LOOP_DEV)/boot/${4}" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi elif [ -z "$VMLINUX" -o -z "$INITRD" ]; then is_there "(LOOP_DEV)/boot" if [ -n "$VMLINUX" -a -n "$INITRD" ]; then break; fi fi fi break done sleep 1 } ### END functions ### --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.161.49.93
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1501300365.A.8B9.html
1F:推 ddtsatan: 推 07/29 20:03
2F:推 Debian: 推荐文章。 07/30 03:03
3F:推 mgdesigner: 这要给赞 07/30 03:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP