凌云实验室推出的ARM Linux物联网网关开发板IGKBoard(IoT Gateway Kit Board)项目源码
guowenxue
2021-11-10 217452ab6277deb825756e46ac0fcf3783a7000f
add rootfs build shell script
1 files added
148 ■■■■■ changed files
bsp/rootfs/build.sh 148 ●●●●● patch | view | raw | blame | history
bsp/rootfs/build.sh
New file
@@ -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