#!/bin/bash PRJ_PATH=`pwd` BOARD=imx6ull TAR_PATH=${PRJ_PATH}/../tarball # rootfs should be buildroot or stretch/buster/bullseye for debian system ROOTFS=buildroot 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" 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() { if [ -f ${ROOTFS_DIR}.tar.bz2 ] ; then msg_banner " rootfs already generate, skip it" return ; else msg_banner " generate rootfs packet " fi cd ${ROOTFS_DIR} tar -cjf ../${ROOTFS_DIR}.tar.bz2 * cd ${PRJ_PATH} } if [ $ROOTFS == buildroot -o $ROOTFS == yocto ] ;then echo "INFO: $ROOTFS no need build." exit 0; fi if [ `id -u` != 0 ] ; then echo "ERRROR: This shell script must excuted as root privilege." exit 0; fi do_systools do_fetch set +e do_modify do_pack