From 217452ab6277deb825756e46ac0fcf3783a7000f Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 10 Nov 2021 22:09:26 +0800 Subject: [PATCH] add rootfs build shell script --- bsp/rootfs/build.sh | 148 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 148 insertions(+), 0 deletions(-) diff --git a/bsp/rootfs/build.sh b/bsp/rootfs/build.sh new file mode 100755 index 0000000..f85a06b --- /dev/null +++ b/bsp/rootfs/build.sh @@ -0,0 +1,148 @@ +#!/bin/bash + +PRJ_PATH=`pwd` + +BOARD=imx6ull + +TAR_PATH=/home/guowenxue/imx6ull/bsp/tarball + +# rootfs should be buildroot or stretch/buster/bullseye for debian system +ROOTFS=buster + +ROOTFS_DIR=rootfs_${ROOTFS} +ARCH=armhf + +# rootfs configuration +DEF_PASSWD=123456 +DEF_HOSTNAME=${BOARD} + +APT_UPDATE=0 + +EXTRA_APPS="vim net-tools network-manager tree file parted locales lsb-release tzdata wireless-tools openssh-server" + +if [ `id -u` != 0 ] ; then + echo "ERRROR: This shell script must excuted as root privilege." + exit 0; +fi + +set -u +set -e + +trap 'ctrlC_handler' INT + +function ctrlC_handler() +{ + echo "Ctrl+C is captured, do some clean work" + rm -f ${ROOTFS_DIR}/usr/bin/qemu-arm-static +} + +STAGE=0 + +function msg_banner() +{ + STAGE=`expr $STAGE + 1` + + echo "" + echo "+---------------------------------------------+" + printf " Stage $STAGE: $1\n" + echo "+---------------------------------------------+" + echo "" +} + +function do_systools() +{ + msg_banner " install system tools" + + debootstrap --version > /dev/null 2>&1 + if [ $? == 0 ] ; then + echo "system tools already installed, skip it" + return ; + fi + + apt install binfmt-support qemu qemu-user-static debootstrap debian-archive-keyring +} + +function do_fetch() +{ + if [ ! -d ${ROOTFS_DIR} ] ; then + if [ -s ${TAR_PATH}/${ROOTFS_DIR}.tar.bz2 ] ; then + msg_banner " decompress ${ROOTFS_DIR}.tar.bz2 " + mkdir -p ${ROOTFS_DIR} + tar -xjf ${TAR_PATH}/${ROOTFS_DIR}.tar.bz2 -C ${ROOTFS_DIR} + APT_UPDATE=1 + else + msg_banner " debootstrap fetch " + debootstrap --arch=${ARCH} --foreign ${ROOTFS} ${ROOTFS_DIR} http://ftp.cn.debian.org/debian/ + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot ${ROOTFS_DIR} debootstrap/debootstrap --second-stage + APT_UPDATE=1 + fi + else + msg_banner "debain rootfs already fetch, skip it" + fi + + if [ $APT_UPDATE == 0 ] ; then + return ; + fi + + msg_banner " debootstrap config " + cp -f /usr/bin/qemu-arm-static ${ROOTFS_DIR}/usr/bin/ + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot ${ROOTFS_DIR} dpkg --configure -a + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot ${ROOTFS_DIR} apt update + + msg_banner " debootstrap apt install " + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot ${ROOTFS_DIR} apt install -y ${EXTRA_APPS} + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot ${ROOTFS_DIR} sh -c "echo root:${DEF_PASSWD} | chpasswd" + + rm -f ${ROOTFS_DIR}/usr/bin/qemu-arm-static +} + +function do_modify() +{ + msg_banner " modify rootfs environment" + + # update hostnmae and issue + echo $DEF_HOSTNAME > ${ROOTFS_DIR}/etc/hostname + echo "Debian GNU/Linux $ROOTFS \n \l, default password '$DEF_PASSWD'." > ${ROOTFS_DIR}/etc/issue + + # update dns server + echo "nameserver 114.114.114.114" > ${ROOTFS_DIR}/etc/resolv.conf + echo "nameserver 223.5.5.5" >> ${ROOTFS_DIR}/etc/resolv.conf + + # add ls alias for display with color + grep "color=auto" ${ROOTFS_DIR}/etc/profile > /dev/null 2>&1 + if [ $? != 0 ] ; then + echo "alias ls='ls --color=auto'" >> ${ROOTFS_DIR}/etc/profile + fi + + # permit root ssh login + grep "^PermitRootLogin" ${ROOTFS_DIR}/etc/ssh/sshd_config > /dev/null 2>&1 + if [ $? != 0 ] ; then + echo "PermitRootLogin yes" >> ${ROOTFS_DIR}/etc/ssh/sshd_config + fi +} + +function do_pack() +{ + msg_banner " generate rootfs packet " + + cd ${ROOTFS_DIR} + + tar -cjf ../${ROOTFS_DIR}.tar.bz2 * + + cd ${PRJ_PATH} +} + +if [ $ROOTFS == buildroot ] ;then + echo "INFO: buildroot no need build." + exit 0; +fi + +do_systools + +do_fetch + +set +e +do_modify + +do_pack + -- Gitblit v1.9.1