fenix脚本研究

1、默认用户名密码、默认DNS服务器

生成用户脚本位于 scripts/chroot-scripts/RUNME.sh,设置了khadas为默认root密码,并且添加khadas为默认用户
是 config/functions/build-rootfs 中的 build_rootfs() 调用了RUNME.sh

    ## script executing on chroot

    [ "$POST_SCRIPT" ] || \
        POST_SCRIPT=scripts/chroot-scripts/RUNME.sh

    cp $POST_SCRIPT $ROOTFS_TEMP/tmp

    echo
    echo "NOTE: ENTER CHROOT AND EXECUTE SCRIPT: $POST_SCRIPT"
    echo
    mount_chroot "$ROOTFS_TEMP"

    if [ -L "$ROOTFS_TEMP"/etc/resolv.conf ] && [ ! -e "$ROOTFS_TEMP"/etc/resolv.conf ]; then
        resolvconf_file=$(readlink -m $ROOTFS_TEMP/etc/resolv.conf)
        mkdir -p $(dirname $resolvconf_file)
        echo "nameserver $NAMESERVER" >> $resolvconf_file
    fi

    chroot $ROOTFS_TEMP/ bash "/tmp/${POST_SCRIPT##*/}"

可以看到,默认的nameserver也是在 build_rootfs 中生成的。而 $NAMESERVER 变量的设置是在 config/config 文件中

2、默认网卡配置

只看到 config/functions/build-rootfs 中的install_common() 中把 /etc/network/interfaces 文件删除了。新安装镜像后,/etc/network/interfaces确实是没有的

3、默认时区

生成位于 config/functions/build-rootfs 中的 install_common()

    # change time zone data
    info_msg "Setup timezone to '$TZDATA'"
    echo $TZDATA > $ROOTFS_TEMP/etc/timezone
    ln -sf ../usr/share/zoneinfo/$TZDATA  "$ROOTFS_TEMP"/etc/localtime
    execute_in_chroot "dpkg-reconfigure -f noninteractive tzdata"

而 $TZDATA 的设置也是在 config/config,直接使用了编译主机的时区

# Timezone for target is taken from host, but not for release images.
if [ "$BUILD_TYPE" != release ]; then
    if [ -f /etc/timezone ]; then
        TZDATA=`cat /etc/timezone`
    elif [ -L /etc/localtime ]; then
        TZDATA=$(readlink /etc/localtime | sed -ne 's|^.*/zoneinfo/||p')
    fi
fi

4、登录后的默认欢迎语

通过搜索板子的 /etc 目录,发现欢迎语是在 /etc/update-motd.d 设置的。而fenix生成 /etc/update-motd.d 配置的脚本中位于 config/functions/build-board-deb

    # Copy premade common rootfs files
    rsync -aI $ROOT/archives/filesystem/common/* $pkgdir/

把预设的 etc、systemd等配置拷贝了过去,然后打包进了board_deb包中,最后装到镜像中

5、默认安装软件包

配置位于 config/config 文件,PACKAGE_LIST 和 PACKAGE_LIST_ADDITIONAL 变量。PACKAGE_LIST_ADDITIONAL 最终还是会被加入到 PACKAGE_LIST 的。使用 $PACKAGE_LIST 位于 config/functions/build-rootfs 的 create_rootfs_cache()

    # stage: install additional packages
    info_msg "Installing packages"
    eval 'LC_ALL=C LANG=C chroot $ROOTFS_TEMP /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y \
        $apt_extra $apt_extra_progress --no-install-recommends install $PACKAGE_LIST"' \
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容