187 lines
6.4 KiB
Bash
187 lines
6.4 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
__usage="
|
|
Usage: build-image-docker [OPTIONS]
|
|
Build raspberrypi image.
|
|
|
|
Options:
|
|
-d, --docker DOCKER_FILE The URL/path of the Docker image, which defaults to https://repo.openeuler.org/openEuler-20.03-LTS-SP1/docker_img/aarch64/openEuler-docker.aarch64.tar.xz
|
|
-n, --name IMAGE_NAME The raspberrypi image name to be built.
|
|
-k, --kernel KERNEL_URL The URL of kernel source's repository, which defaults to https://gitee.com/openeuler/raspberrypi-kernel.git.
|
|
-b, --branch KERNEL_BRANCH The branch name of kernel source's repository, which defaults to openEuler-20.03-LTS.
|
|
-c, --config KERNEL_DEFCONFIG The name/path of defconfig file when compiling kernel, which defaults to openeuler-raspi_defconfig.
|
|
-r, --repo REPO_INFO Required! The URL/path of target repo file or list of repo's baseurls which should be a space separated list.
|
|
-s, --spec SPEC The image's specification: headless, xfce, ukui, dde or the file path of rpmlist. The default is headless.
|
|
--cores N The number of cpu cores to be used during making.
|
|
-h, --help Show command help.
|
|
"
|
|
|
|
help()
|
|
{
|
|
echo "$__usage"
|
|
exit $1
|
|
}
|
|
|
|
parseargs()
|
|
{
|
|
if [ "x$#" == "x0" ]; then
|
|
return 1
|
|
fi
|
|
|
|
while [ "x$#" != "x0" ];
|
|
do
|
|
if [ "x$1" == "x-h" -o "x$1" == "x--help" ]; then
|
|
return 1
|
|
elif [ "x$1" == "x" ]; then
|
|
shift
|
|
elif [ "x$1" == "x-d" -o "x$1" == "x--docker" ]; then
|
|
docker_file=`echo $2`
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x-n" -o "x$1" == "x--name" ]; then
|
|
img_name=`echo $2`
|
|
params="${params} -n ${img_name}"
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x-k" -o "x$1" == "x--kernel" ]; then
|
|
kernel_url=`echo $2`
|
|
params="${params} -k ${kernel_url}"
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x-b" -o "x$1" == "x--branch" ]; then
|
|
kernel_branch=`echo $2`
|
|
params="${params} -b ${kernel_branch}"
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x-c" -o "x$1" == "x--config" ]; then
|
|
default_defconfig=`echo $2`
|
|
if [ "x$default_defconfig" != "x" ]; then
|
|
if [ ! -f $default_defconfig ]; then
|
|
echo `date` - ERROR, config file $default_defconfig can not be found.
|
|
exit 2
|
|
else
|
|
cp $default_defconfig ${params_dir}/
|
|
defconfig_name=${default_defconfig##*/}
|
|
default_defconfig=${params_dir_indocker}/${defconfig_name}
|
|
fi
|
|
fi
|
|
params="${params} -c ${default_defconfig}"
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x-r" -o "x$1" == "x--repo" ]; then
|
|
repo_file=`echo $2`
|
|
if [ "x$repo_file" != "x" -a "x${repo_file:0:4}" != "xhttp" ]; then
|
|
if [ ! -f $repo_file ]; then
|
|
echo `date` - ERROR, repo file $repo_file can not be found.
|
|
exit 2
|
|
else
|
|
cp $repo_file ${params_dir}/
|
|
repo_file_name=${repo_file##*/}
|
|
repo_file=${params_dir_indocker}/${repo_file_name}
|
|
fi
|
|
fi
|
|
params="${params} -r ${repo_file}"
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x-s" -o "x$1" == "x--spec" ]; then
|
|
spec_param=`echo $2`
|
|
if [ "x$spec_param" == "xheadless" ] || [ "x$spec_param" == "x" ] \
|
|
|| [ "x$spec_param" == "xxfce" ] || [ "x$spec_param" == "xukui" ] \
|
|
|| [ "x$spec_param" == "xdde" ]; then
|
|
:
|
|
elif [ -f $spec_param ]; then
|
|
cp $spec_param ${params_dir}/
|
|
spec_file_name=${spec_param##*/}
|
|
$spec_param=${params_dir_indocker}/${spec_file_name}
|
|
else
|
|
echo `date` - ERROR, please check your params in option -s or --spec.
|
|
exit 2
|
|
fi
|
|
params="${params} -s ${spec_param}"
|
|
shift
|
|
shift
|
|
elif [ "x$1" == "x--cores" ]; then
|
|
make_cores=`echo $2`
|
|
params="${params} --cores ${make_cores}"
|
|
shift
|
|
shift
|
|
else
|
|
echo `date` - ERROR, UNKNOWN params "$@"
|
|
return 2
|
|
fi
|
|
done
|
|
}
|
|
|
|
ERROR(){
|
|
echo `date` - ERROR, $* | tee -a ${log_dir}/${builddate}.log
|
|
}
|
|
|
|
LOG(){
|
|
echo `date` - INFO, $* | tee -a ${log_dir}/${builddate}.log
|
|
}
|
|
|
|
cur_dir=$(cd $(dirname $0);pwd)
|
|
|
|
docker_file="https://repo.openeuler.org/openEuler-20.03-LTS-SP1/docker_img/aarch64/openEuler-docker.aarch64.tar.xz"
|
|
|
|
workdir=${cur_dir}/raspi_output_common
|
|
|
|
buildid=$(date +%Y%m%d%H%M%S)
|
|
builddate=${buildid:0:8}
|
|
|
|
log_dir=${workdir}/log
|
|
params_dir=${workdir}/params
|
|
euler_dir=${cur_dir}/config-common
|
|
params_dir_indocker=/work/raspi_output_common/params
|
|
|
|
if [ -d ${params_dir} ]; then
|
|
rm -rf ${params_dir}
|
|
fi
|
|
mkdir -p ${params_dir}
|
|
|
|
parseargs "$@" || help $?
|
|
|
|
if [ "x${docker_file:0:4}" == "xhttp" ]; then
|
|
wget ${docker_file} -P ${params_dir}/
|
|
elif [ -f $docker_file ]; then
|
|
cp ${docker_file} ${params_dir}/
|
|
else
|
|
echo `date` - ERROR, docker file $docker_file can not be found.
|
|
exit 2
|
|
fi
|
|
|
|
if [ "x$repo_file" == "x" ] ; then
|
|
echo `date` - ERROR, \"-r REPO_INFO or --repo REPO_INFO\" missing.
|
|
help 2
|
|
fi
|
|
|
|
if [ ! -d ${log_dir} ]; then
|
|
mkdir ${log_dir}
|
|
fi
|
|
docker_file_name=${docker_file##*/}
|
|
docker_img_name=`docker load --input ${params_dir}/${docker_file_name}`
|
|
docker_img_name=${docker_img_name##*: }
|
|
|
|
LOG build raspi image with docker: ${docker_file}.
|
|
|
|
(echo "FROM $docker_img_name" && grep -v FROM ${euler_dir}/Dockerfile_makeraspi) | docker build -t ${docker_img_name}-${buildid} --no-cache -f- ${euler_dir}
|
|
echo docker run --rm --privileged=true \
|
|
-v ${cur_dir}/build-image-common.sh:/work/build-image-common.sh \
|
|
-v ${euler_dir}:/work/config-common \
|
|
-v ${cur_dir}/config:/work/config \
|
|
-v ${workdir}:/work/raspi_output_common \
|
|
${docker_img_name}-${buildid} ${params}
|
|
docker run --rm --privileged=true \
|
|
-v ${cur_dir}/build-image-common.sh:/work/build-image-common.sh \
|
|
-v ${euler_dir}:/work/config-common \
|
|
-v ${cur_dir}/config:/work/config \
|
|
-v ${workdir}:/work/raspi_output_common \
|
|
${docker_img_name}-${buildid} ${params}
|
|
chmod -R a+r ${workdir}/img
|
|
docker image rm ${docker_img_name}-${buildid}
|
|
LOG
|
|
LOG Done.
|
|
|