zoukankan      html  css  js  c++  java
  • Buildroot 打包文件系统流程跟踪

    /*********************************************************************************
     *                  Buildroot 打包文件系统流程跟踪
     * 说明:
     *     之前在使用Buildroot过程中,发现其自身生成的rootfs.tar.bz2文件系统可以正常运行
     * 但自己使用命令打包的文件系统就有问题,于是跟一下其脚本运行的输出信息,原来使用到
     * 了fakeroot来模拟root权限。
     *
     *                                              2017-10-11 深圳 南山平山村 曾剑锋
     ********************************************************************************/
    
    一、输出信息分析:
        >>>   Finalizing target directory
        rm -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/glib-2.0/schemas/*.xml /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/glib-2.0/schemas/*.dtd
        /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/glib-compile-schemas /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/share/glib-2.0/schemas --targetdir=/home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/glib-2.0/schemas
        No schema files found: doing nothing.
        PYTHONPATH="/home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/python3.5/sysconfigdata/:/home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/python3.5/site-packages/" /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/python3.5 support/scripts/pycompile.py /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/python3.5
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/python3.5 -name '*.py' -print0 | xargs -0 --no-run-if-empty rm -f
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/python3.5 -name '*.opt-1.pyc' -print0 -o -name '*.opt-2.pyc' -print0 | xargs -0 --no-run-if-empty rm -f
        # 创建etc目录
        mkdir -p /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc
        # 创建hostname目录
        echo "AplexOS" > /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/hostname
        # 使用sed对文件进行操作
        /bin/sed -i -e '$a 127.0.1.1	AplexOS' -e '/^127.0.1.1/d' /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/hosts
        mkdir -p /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc
        # 登录前欢迎语句
        echo "Welcome to AplexOS" > /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/issue
        # 创建network目录
        mkdir -p /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/network/
        # 设置loopback设备,这也就是为什么interfaces如果这里不进行修改,每次都会被修改的原因
        ( echo "# interface file auto-generated by buildroot"; echo ; echo "auto lo"; echo "iface lo inet loopback"; ) > /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/network/interfaces
        # 设置eth0设备
        ( echo ; echo "auto eth0"; echo "iface eth0 inet static"; echo "     address 192.168.1.202"; echo "     netmask 255.255.255.0"; echo "     broadcast 0.0.0.0"; echo "     gateway 192.168.1.1"; ) >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/network/interfaces
        /usr/bin/install -m 0755 -D package/skeleton//nfs_check /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/network/nfs_check
        # 生成root账户及密码
        /bin/sed -i -e s,^root:[^:]*:,root:"`/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/mkpasswd -m "md5" "aplex"`":, /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/shadow
        # debug port
        /bin/sed -i -e '/# GENERIC_SERIAL$/s~^.*#~console::respawn:/sbin/getty -L  console 0 vt100 #~' /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/inittab
        # 修改inittab文件
        /bin/sed -i -e '/^#.*-o remount,rw /$/s~^#+~~' /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/inittab
        rm -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/locales.nopurge
        for i in C en_US locale-archive; do echo $i >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/locales.nopurge; done
        for dir in /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/locale; do for langdir in $dir/*; do if [ -e "${langdir}" ]; then grep -qx "${langdir##*/}" /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/locales.nopurge || rm -rf $langdir; fi done; done
        if [ -d /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/X11/locale ]; then for lang in C en_US; do if [ -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/X11/locale/$lang/XLC_LOCALE ]; then echo "$lang/XLC_LOCALE: $lang"; fi done > /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/X11/locale/locale.dir; fi
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/include /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/aclocal 
            /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/pkgconfig /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/pkgconfig 
            /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/cmake /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/cmake
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/{lib,share}/ -name '*.cmake' -print0 | xargs -0 rm -f
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/lib/ /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/lib/ /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/libexec/ 
            ( -name '*.a' -o -name '*.la' ) -print0 | xargs -0 rm -f
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/gdb
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/bash-completion
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/zsh
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/man /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/man
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/info /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/info
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/doc /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/doc
        rm -rf /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share/gtk-doc
        rmdir /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/usr/share 2>/dev/null || true
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target -type f ( -perm /111 -o -name '*.so*' ) -not ( -name 'libpthread*.so*' -o -name 'ld-*.so*' -o -name '*.ko' ) -print0 | xargs -0 /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabi-strip --remove-section=.comment --remove-section=.note 2>/dev/null || true
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/lib/ -type f -name 'libpthread*.so*' | 
            xargs -r /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabi-strip --remove-section=.comment --remove-section=.note --strip-debug
        find /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/lib/ -type f -name 'ld-*.so*' | 
            xargs -r /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabi-strip --remove-section=.comment --remove-section=.note --strip-debug
        # 检查一些库的存在
        test -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/ld.so.conf && 
            { echo "ERROR: we shouldn't have a /etc/ld.so.conf file"; exit 1; } || true
        test -d /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/ld.so.conf.d && 
            { echo "ERROR: we shouldn't have a /etc/ld.so.conf.d directory"; exit 1; } || true
        mkdir -p /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc
        ( 
            echo "NAME=Buildroot"; 
            echo "VERSION=2017.02.3"; 
            echo "ID=buildroot"; 
            echo "VERSION_ID=2017.02.3"; 
            echo "PRETTY_NAME="Buildroot 2017.02.3"" 
        ) >  /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/etc/os-release
        >>>   Generating root filesystem image rootfs.tar
        rm -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        rm -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
        rm -f /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_users_table.txt
        echo '#!/bin/sh' > /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        echo "set -e" >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        echo "chown -h -R 0:0 /home/zengjf/zengjfos/buildroot-2017.02.3/output/target" >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        printf '       sshd -1 sshd -1 * - - - SSH drop priv user
         ftp -1 ftp -1 * /home/ftp - - Anonymous FTP User
    
    ' >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_users_table.txt
        PATH="/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/bin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/sbin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/sbin:/home/bin:/home/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/zengjf/zengjfos/buildroot-2016.08/output/host/opt/ext-toolchain/bin::/home/zengjf/zengjfos/AplexOS/git-repo:/home/linux/pycharm-community-2017.1.3/bin" /home/zengjf/zengjfos/buildroot-2017.02.3/support/scripts/mkusers /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_users_table.txt /home/zengjf/zengjfos/buildroot-2017.02.3/output/target >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        cat system/device_table.txt > /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_device_table.txt
        printf '       /bin/busybox                     f 4755 0  0 - - - - -
     /dev/console c 622 0 0 5 1 - - -
    
    ' >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_device_table.txt
        echo "/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/makedevs -d /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_device_table.txt /home/zengjf/zengjfos/buildroot-2017.02.3/output/target" >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        # 这里很重要,因为这里可以将target中的内容打包进入rootfs.tar中去
        printf '       (cd /home/zengjf/zengjfos/buildroot-2017.02.3/output/target; find -print0 | LC_ALL=C sort -z | tar  -cf /home/zengjf/zengjfos/buildroot-2017.02.3/output/images/rootfs.tar --null --no-recursion -T - --numeric-owner)
    ' >> /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        # 给_fakeroot.fs加执行权限
        chmod a+x /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        # 用fakeroot执行_fakeroot.fs
        PATH="/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/bin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/sbin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/sbin:/home/bin:/home/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/zengjf/zengjfos/buildroot-2016.08/output/host/opt/ext-toolchain/bin::/home/zengjf/zengjfos/AplexOS/git-repo:/home/linux/pycharm-community-2017.1.3/bin" /home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin/fakeroot -- /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        rootdir=/home/zengjf/zengjfos/buildroot-2017.02.3/output/target
        table='/home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_device_table.txt'
        # 相当于拷贝,同时可以设定权限
        /usr/bin/install -m 0644 support/misc/target-dir-warning.txt /home/zengjf/zengjfos/buildroot-2017.02.3/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
        # 使用bzip2进行压缩
        PATH="/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/bin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/sbin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/bin:/home/zengjf/zengjfos/buildroot-2017.02.3/output/host/usr/sbin:/home/bin:/home/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/zengjf/zengjfos/buildroot-2016.08/output/host/opt/ext-toolchain/bin::/home/zengjf/zengjfos/AplexOS/git-repo:/home/linux/pycharm-community-2017.1.3/bin" bzip2 -9 -c /home/zengjf/zengjfos/buildroot-2017.02.3/output/images/rootfs.tar > /home/zengjf/zengjfos/buildroot-2017.02.3/output/images/rootfs.tar.bz2
    
    二、fakeroot使用:
        1. 参考命令:fakeroot -- /home/zengjf/zengjfos/buildroot-2017.02.3/output/build/_fakeroot.fs
        2. cd <your path> && fakeroot -- tar jcvf rootfs.tar.bz2 *
  • 相关阅读:
    Windows Phone7 开发工具简介
    peration not supported. Unknown error: 0x8973190e
    C/C++学习建议(摘抄自:程序员2010年8月P61页)
    OpenOffice/LibreOffice的行距问题
    Finder打开剪切功能
    设备资源管理系统-用户管理
    设备资源管理系统-数据字典
    设备资源管理系统-代办事宜
    设备资源管理系统-首页显示
    设备资源管理系统-DAO底层方法-查询
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/7651302.html
Copyright © 2011-2022 走看看