凌云实验室推出的ARM Linux物联网网关开发板IGKBoard(IoT Gateway Kit Board)项目源码
guowenxue
2021-11-13 93446ef93d1e42ab87b3bd4c7f3161a3ba9b62c9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/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=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"
 
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()
{
 
    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 ]  ;then
    echo "INFO: buildroot no need build."
    exit 0;
fi
 
do_systools
 
do_fetch
 
set +e
do_modify
 
do_pack