1. 创建rootfs相关目录
    2. 将kata-agent重命名为init并放在rootfs根目录下
    3. 从编译环境中拷贝kata-agent所需二进制(如mount、umount)到rootfs usr/bin目录下
    4. 从编译环境中拷贝以上二进制(包含kata-agent)所需动态链接库到rootfs lib目录下
    5. 从编译环境中拷贝内核驱动模块ko文件到rootfs中内核驱动模块目录下
    6. 进入rootfs并执行以下命令生成initrd.img

    initrd定制参考脚本

    1. rpmlist=${script_dir}/make-initrd-rpm.list
    2. BUILD_PATH="./build"
    3. IMAGE_NAME=${IMAGE_NAME:-kata-containers-initrd.img}
    4. AGENT_INIT=${AGENT_INIT:-yes}
    5. ROOTFS_DIR=${ROOTFS_DIR:-/tmp/kataAgent-rootfs}
    6. # create a temp dir to store rootfs
    7. rm -rf ${ROOTFS_DIR}
    8. mkdir -p ${ROOTFS_DIR}/lib \
    9. ${ROOTFS_DIR}/lib64 \
    10. ${ROOTFS_DIR}/lib/modules
    11. mkdir -m 0755 -p ${ROOTFS_DIR}/dev \
    12. ${ROOTFS_DIR}/sys \
    13. ${ROOTFS_DIR}/sbin \
    14. ${ROOTFS_DIR}/bin \
    15. ${ROOTFS_DIR}/tmp \
    16. ${ROOTFS_DIR}/proc
    17. if [ ! -f "${BUILD_PATH}/kata-agent" ];then
    18. exit 1
    19. fi
    20. # kata-agent
    21. # busybox
    22. cp /sbin/busybox ${ROOTFS_DIR}/sbin/
    23. # cp run request files in initrd
    24. cat $rpmlist | while read rpm
    25. do
    26. if [ "${rpm:0:1}" != "#" ]; then
    27. rpm -ql $rpm > /dev/null 2>&1
    28. if [ $? -ne 0 ]; then
    29. continue
    30. fi
    31. array=($(rpm -ql $rpm| grep -v "share" | grep -v ".build-id"))
    32. for file in ${array[@]};
    33. do
    34. source=$file
    35. dts_file=${ROOTFS_DIR}$file
    36. dts_folder=${dts_file%/*}
    37. if [ ! -d "$dts_folder" ];then
    38. mkdir -p $dts_folder
    39. fi
    40. cp -r -f -d $source $dts_folder
    41. done
    42. fi
    43. BUSYBOX_BINARIES=(/bin/sh /bin/mount /bin/umount /bin/ls /bin/ps /bin/file /bin/ldd /bin/tar /bin/hwclock /sbin/modprobe /sbin/depmod /bin/ip /bin/modinfo /bin/insmod /bin/rmmod)
    44. for bin in ${BUSYBOX_BINARIES[@]}
    45. do
    46. mkdir -p ${ROOTFS_DIR}/`dirname ${bin}`
    47. ln -sf /sbin/busybox ${ROOTFS_DIR}/${bin}
    48. done
    49. LDD_BINARIES=(/init /sbin/busybox)
    50. for bin in ${LDD_BINARIES[@]}
    51. do
    52. ldd ${ROOTFS_DIR}${bin} | while read line
    53. do
    54. arr=(${line// / })
    55. for lib in ${arr[@]}
    56. do
    57. echo $lib
    58. if [ "${lib:0:1}" = "/" ]; then
    59. dir=${ROOTFS_DIR}`dirname $lib`
    60. mkdir -p "${dir}"
    61. cp -f $lib $dir
    62. fi
    63. done
    64. done
    65. done