183 lines
6.1 KiB
Bash
183 lines
6.1 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
# Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved.
|
|||
|
|
# kata_integration is licensed under the Mulan PSL v1.
|
|||
|
|
# You can use this software according to the terms and conditions of the Mulan PSL v1.
|
|||
|
|
# You may obtain a copy of Mulan PSL v1 at:
|
|||
|
|
# http://license.coscl.org.cn/MulanPSL
|
|||
|
|
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
|||
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
|||
|
|
# PURPOSE.
|
|||
|
|
# See the Mulan PSL v1 for more details.
|
|||
|
|
# Description: make default config
|
|||
|
|
# Author: caihaomin
|
|||
|
|
# Create: 2019-01-22
|
|||
|
|
|
|||
|
|
script_dir="$(dirname $(readlink -f $0))"
|
|||
|
|
rpmlist=${script_dir}/make-initrd-rpm.list
|
|||
|
|
|
|||
|
|
BUILD_PATH="./build"
|
|||
|
|
IMAGE_NAME=${IMAGE_NAME:-kata-containers-initrd.img}
|
|||
|
|
GPU_IMAGE_NAME=${GPU_IMAGE_NAME:-kata-containers-initrd-gpu.img}
|
|||
|
|
IB_IMAGE_NAME=${IB_IMAGE_NAME:-kata-containers-initrd-ib.img}
|
|||
|
|
AGENT_INIT=${AGENT_INIT:-yes}
|
|||
|
|
ROOTFS_DIR=${ROOTFS_DIR:-/tmp/kataAgent-rootfs}
|
|||
|
|
|
|||
|
|
# build kata-agent
|
|||
|
|
# make agent
|
|||
|
|
|
|||
|
|
# create a temp dir to store rootfs
|
|||
|
|
rm -rf ${ROOTFS_DIR}
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/lib \
|
|||
|
|
${ROOTFS_DIR}/lib64 \
|
|||
|
|
${ROOTFS_DIR}/lib/modules
|
|||
|
|
|
|||
|
|
mkdir -m 0755 -p ${ROOTFS_DIR}/dev \
|
|||
|
|
${ROOTFS_DIR}/sys \
|
|||
|
|
${ROOTFS_DIR}/sbin \
|
|||
|
|
${ROOTFS_DIR}/bin \
|
|||
|
|
${ROOTFS_DIR}/tmp \
|
|||
|
|
${ROOTFS_DIR}/proc
|
|||
|
|
|
|||
|
|
if [ ! -f "${BUILD_PATH}/kata-agent" ];then
|
|||
|
|
echo "kata-agent doesn't exist!"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# busybox
|
|||
|
|
cp /sbin/busybox ${ROOTFS_DIR}/sbin/
|
|||
|
|
cp ${BUILD_PATH}/kata-agent ${ROOTFS_DIR}/init
|
|||
|
|
# ipvs
|
|||
|
|
cp /usr/sbin/ipvsadm ${ROOTFS_DIR}/sbin
|
|||
|
|
# conntrack-tools
|
|||
|
|
cp /usr/sbin/conntrack ${ROOTFS_DIR}/sbin
|
|||
|
|
# quota
|
|||
|
|
cp /usr/bin/quota* ${ROOTFS_DIR}/bin
|
|||
|
|
cp /usr/bin/quotasync ${ROOTFS_DIR}/bin
|
|||
|
|
# glibc-devel glibc
|
|||
|
|
cp /lib64/libnss_dns* ${ROOTFS_DIR}/lib64
|
|||
|
|
cp /lib64/libnss_files* ${ROOTFS_DIR}/lib64
|
|||
|
|
|
|||
|
|
# cp run request files in initrd
|
|||
|
|
cat $rpmlist | while read rpm
|
|||
|
|
do
|
|||
|
|
if [ "${rpm:0:1}" != "#" ]; then
|
|||
|
|
rpm -ql $rpm > /dev/null 2>&1
|
|||
|
|
if [ $? -ne 0 ]; then
|
|||
|
|
continue
|
|||
|
|
fi
|
|||
|
|
array=($(rpm -ql $rpm| grep -v "share" | grep -v ".build-id"))
|
|||
|
|
for file in ${array[@]};
|
|||
|
|
do
|
|||
|
|
source=$file
|
|||
|
|
dts_file=${ROOTFS_DIR}$file
|
|||
|
|
dts_folder=${dts_file%/*}
|
|||
|
|
if [ ! -d "$dts_folder" ];then
|
|||
|
|
mkdir -p $dts_folder
|
|||
|
|
fi
|
|||
|
|
cp -r -f -d $source $dts_folder
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
#create symlinks to busybox
|
|||
|
|
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)
|
|||
|
|
for bin in ${BUSYBOX_BINARIES[@]}
|
|||
|
|
do
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/`dirname ${bin}`
|
|||
|
|
ln -sf /sbin/busybox ${ROOTFS_DIR}/${bin}
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
LDD_BINARIES=(/init /sbin/busybox /sbin/conntrack /sbin/ipvsadm)
|
|||
|
|
for bin in ${LDD_BINARIES[@]}
|
|||
|
|
do
|
|||
|
|
ldd ${ROOTFS_DIR}${bin} | while read line
|
|||
|
|
do
|
|||
|
|
arr=(${line// / })
|
|||
|
|
|
|||
|
|
for lib in ${arr[@]}
|
|||
|
|
do
|
|||
|
|
echo $lib
|
|||
|
|
if [ "${lib:0:1}" = "/" ]; then
|
|||
|
|
dir=${ROOTFS_DIR}`dirname $lib`
|
|||
|
|
mkdir -p "${dir}"
|
|||
|
|
cp -f $lib $dir
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
(cd ${ROOTFS_DIR} && find . | cpio -H newc -o | gzip -9 ) > ${BUILD_PATH}/${IMAGE_NAME}
|
|||
|
|
|
|||
|
|
if [ "${INTEGRATE_DRIVER}"x = ""x ];then
|
|||
|
|
rm -rf ${ROOTFS_DIR}
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
for version in `ls /var/lib/hyper/ |grep NVIDIA-Linux-`
|
|||
|
|
do
|
|||
|
|
#make kata-containers-gpu.img
|
|||
|
|
rm -f ${ROOTFS_DIR}/init
|
|||
|
|
cp ${BUILD_PATH}/kata-agent ${ROOTFS_DIR}/init
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-ko
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-so
|
|||
|
|
|
|||
|
|
cp -d /var/lib/hyper/${version}/nvidia-gpu-ko/* ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-ko/
|
|||
|
|
cp -d /var/lib/hyper/${version}/nvidia-gpu-so/* ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-so/
|
|||
|
|
cp /var/lib/hyper/${version}/nvidia-gpu-so/libnvidia-ml.so* ${ROOTFS_DIR}/lib64
|
|||
|
|
ldconfig -n ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-so
|
|||
|
|
|
|||
|
|
# tensorflow has some wired logic to detect file names like "libcuda.so".
|
|||
|
|
pushd ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-so
|
|||
|
|
|
|||
|
|
for f in `ls *so.0`; do ln -s $f ${f%.0}; done
|
|||
|
|
for f in `ls *so.1`; do ln -s $f ${f%.1}; done
|
|||
|
|
for f in `ls *so.2`; do ln -s $f ${f%.2}; done
|
|||
|
|
popd
|
|||
|
|
( cd ${ROOTFS_DIR} && find . | cpio -H newc -o | gzip -9 ) > ${BUILD_PATH}/kata-containers-initrd-gpu-${version##*-}.img
|
|||
|
|
#make kata-containers-gpu.img end
|
|||
|
|
|
|||
|
|
#make kata-containers-gpu-ib.img
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-ko
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so
|
|||
|
|
cp -d /var/lib/hyper/infiniband-ko/* ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-ko/
|
|||
|
|
cp -d /var/lib/hyper/infiniband-so/* ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so/
|
|||
|
|
ldconfig -n ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so
|
|||
|
|
|
|||
|
|
( cd ${ROOTFS_DIR} && find . | cpio -H newc -o | gzip -9 ) > ${BUILD_PATH}/kata-containers-initrd-gpu-${version##*-}-ib.img
|
|||
|
|
#make kata-containers-gpu-ib.img end
|
|||
|
|
|
|||
|
|
#clear the gpu files
|
|||
|
|
rm -rf ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-ko
|
|||
|
|
rm -rf ${ROOTFS_DIR}/var/lib/kata/drivers/nvidia-gpu-so
|
|||
|
|
rm -rf ${ROOTFS_DIR}/lib64/libnvidia-ml.so*
|
|||
|
|
#end of clear gpu files
|
|||
|
|
|
|||
|
|
#clear the infiniband files
|
|||
|
|
rm -rf ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-ko/
|
|||
|
|
rm -rf ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so/
|
|||
|
|
#end of clear infiniband files
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
#make kata-containers-ib.img
|
|||
|
|
if [ -d /var/lib/hyper/infiniband-ko/ ] && [ -d /var/lib/hyper/infiniband-so ];then
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-ko
|
|||
|
|
mkdir -p ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so
|
|||
|
|
cp -d /var/lib/hyper/infiniband-ko/* ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-ko/
|
|||
|
|
cp -d /var/lib/hyper/infiniband-so/* ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so/
|
|||
|
|
ldconfig -n ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so
|
|||
|
|
|
|||
|
|
rm -f ${ROOTFS_DIR}/init
|
|||
|
|
cp ${BUILD_PATH}/kata-agent ${ROOTFS_DIR}/init
|
|||
|
|
|
|||
|
|
( cd ${ROOTFS_DIR} && find . | cpio -H newc -o | gzip -9 ) > ${BUILD_PATH}/kata-containers-initrd-ib.img
|
|||
|
|
#make kata-containers-ib.img end
|
|||
|
|
|
|||
|
|
#clear the infiniband files
|
|||
|
|
rm -rf ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-ko/
|
|||
|
|
rm -rf ${ROOTFS_DIR}/var/lib/kata/drivers/infiniband-so/
|
|||
|
|
#end of clear infiniband files
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
rm -rf ${ROOTFS_DIR}
|