ubuntu根文件系统制作

1.准备工作

    1.1下载最小文件系统

        到ubuntu网址 下载相应的最小系统(本文以 ubuntu-base-16.04.5-base-arm64.tar.gz 为例)

    1.2安装模拟器工具

        $sudo apt-get install qemu-user-static

 2.解压最小系统

     $mkdir ubuntu-rootfs

    $sudo tar -xvpf ubuntu-base-16.04.5-base-armhf.tar.gz -C ubuntu-rootfs

3.复制模拟器工具到根文件系统

    (1) arm

    $sudo cp /usr/bin/qemu-arm-static ubuntu-rootfs/usr/bin/

    (2)arm64

    $sudo cp /usr/bin/qemu-aarch64-static ubuntu-rootfs/usr/bin/

4.复制本地DNS配置到根文件系统

    $sudo cp /etc/resolv.conf ubuntu-rootfs/etc/resolv.conf

5.添加开机启动脚本

    $sudo vim ubuntu-rootfs/etc/init.d/firstboot.sh

    #!/bin/bash -e

    # first boot configure

    #根据实际分区情况修改mmcblk2p3

    if [ ! -e "/usr/local/first_boot_flag" ] ;

    then

    echo "Resizing /dev/mmcblk2p3..."

    resize2fs /dev/mmcblk2p3

    touch /usr/local/first_boot_flag

    fi

    $sudo vim ubuntu-rootfs/lib/systemd/system/firstboot.service

    #start

    [Unit]

    Description=Setup rockchip platform environment

    Before=lightdm.service

     After=resize-helper.service

    [Service]

    Type=simple

    ExecStart=/etc/init.d/firstboot.sh

    [Install]

    WantedBy=multi-user.target

    #end

6.挂载根文件系统,进入根文件系统

    $./mount.sh -m linux-rootfs

    mount.sh的内容

    #!/bin/bash

    function mnt() {

    echo "MOUNTING"

    sudo mount -t proc /proc ${2}/proc

    sudo mount -t sysfs /sys ${2}/sys

    sudo mount -o bind /dev ${2}/dev

    sudo chroot ${2}

    }

    function umnt() {

    echo "UNMOUNTING"

    sudo umount ${2}/proc

    sudo umount ${2}/sys

    sudo umount ${2}/dev

    }

    if [ "$1" == "-m" ] && [ -n "$2" ] ;

    then

    mnt $1 $2

    elif [ "$1" == "-u" ] && [ -n "$2" ];

    then

    umnt $1 $2

    else

    echo ""

    echo "Either 1'st, 2'nd or both parameters were missing"

    echo ""

    echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"

    echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"

    echo ""

    echo "For example: ch-mount -m /media/sdcard/"

    echo ""

    echo 1st parameter : ${1}

    echo 2nd parameter : ${2}

    fi

7.对根文件系统进行配置

   (1) 更新源

        $apt update

        ps:如果更新速度慢,可以修改/etc/apt/source.list文件的内容,修改成国内的更新源

    (2) 更新系统

        $apt upgrade

    (3)安装常用的工具

        $apt install bash-completion // shell自动补全

        $apt install net-tools       //没有这个,ifconfig命令没有

        $apt install inetutils-ping  //没有这个,ping命令没有

        $apt install vim //vim编辑器

    (其它工具及软件,请自行安装)

    (4)安装xubuntu桌面环境(耗时较长,耐心等待)

        $apt install ubuntu-session xubuntu-desktop

    (5)设置桌面环境启动选项

        $update-alternatives --config x-session-manager  // xubuntu选择startxfce4

    (6)设置默认登录方式

        $dpkg-reconfigure lightdm

    (7)设置系统默认语言及编码方式

        $apt install locales //系统语言及编码格式

        $dpkg-reconfigure locales  //根据提示,空格键选择"en_US.UTF-8 UTF-8" "zh_CN GB2312" "zh_CN.GB18030 GB18030" "zh_CN.GBK GBK" "zh_CN.UTF-8 UTF-8";

    (8)设置主机名

        $echo "localhost" > /etc/hostname

        $echo "127.0.0.1 localhost" > /etc/hosts

    (9)添加用户并设置密码

        $useradd -s '/bin/bash' -m -G adm,sudo admin

        $passwd admin

        $passwd root

    (10)卸载一些没用的软件

        $apt remove thunderbird       //邮箱客户端

        $apt remove gnome-mines      //游戏

        $apt remove gnome-sudoku     //游戏

        $apt remove pidgin           //聊天客户端

        $apt remove transmission-*    //下载工具

        $apt remove gnome-software   //软件中心

        $apt autoremove

    (11)安装qt5支持

        $apt install qt5-default

    (12) [endif]重新配置时区

        $dpkg-reconfigure tzdata  //选择亚洲、上海

    (13)禁止apport报错

        $vim etc/default/apport

        设置enabled=0

    (14) 设置开机启动脚本

       $systemctl enable firstboot.service

    (15)设置蓝牙

        $apt remove bluetooth* bluez* blueman*

        $apt autoremove

        $apt install bluetooth* bluez* blueman*

        $vim /usr/bin/bt-attach

        #!/usr/bin/env bash

        start-stop-daemon --start --oknodo --pidfile /var/run/hciattach.pid --background --startas /usr/bin/hciattach -- -s 115200 -n /dev/ttyS0         bcm43xx 1500000 -t 200

        exit 0

        $vim /etc/systemd/system/bt-attach.service

        [Unit]

        Description=bluetooth-toggle

        [Service]

        Type=forking

        ExecStart=/usr/bin/bt-attach

        $vim /lib/udev/rules.d/50-bluetooth.rules

        SUBSYSTEM=="rfkill", ACTION=="change", ATTR{name}=="bt_default", ATTR{type}=="bluetooth", ATTRS{state}=="1",         RUN+="/bin/systemctl start bt-attach.service"

        SUBSYSTEM=="rfkill", ACTION=="change", ATTR{name}=="bt_default", ATTR{type}=="bluetooth", ATTRS{state}=="0",         RUN+="/bin/systemctl stop bt-attach.service"

    (16)   清理工作

        $apt clean

        $rm -rf /var/lib/apt/lists/*    //这里是更新源保存的临时文件,可删除

    (17)退出根文件系统

        $exit

8.卸载根文件系统

    $./mount.sh -u ubuntu-rootfs

    (如果无法正常退出,请重启电脑。)

9.打包镜像

    $./mkimage.sh ubuntu-rootfs system.img

    mkimage.sh的内容:

    #!/bin/bash

    rootfs_dir=$1

    rootfs_file=$2

    rootfs_mnt="mnt"

    if [ ! $rootfs_dir ] || [ ! $rootfs_file ];

    then

        echo "Folder or target is empty."

        exit 0

    fi

    if [ -f "$rootfs_file" ]; then

        echo "-- Delete exist $rootfs_file ..."

        rm -f "$rootfs_file"

    fi

    echo "-- Create $rootfs_file ..."

    dd if=/dev/zero of="$rootfs_file" bs=1M count=4096

    sudo mkfs.ext4 -F -L linuxroot "$rootfs_file"

    if [ ! -d "$rootfs_mnt" ]; then

        mkdir $rootfs_mnt

    fi

    echo "-- Copy data to $rootfs_file ..."

    sudo mount $rootfs_file $rootfs_mnt

    sudo cp -rfp $rootfs_dir/* $rootfs_mnt

    sudo sync

    sudo umount $rootfs_mnt

    rm -r $rootfs_mnt

    echo "-- Resize $rootfs_file ..."

    /sbin/e2fsck -p -f "$rootfs_file"

    /sbin/resize2fs -M "$rootfs_file"

    echo "-- Done."

        

        


    

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 一、文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls...
    小杰的简书阅读 2,485评论 0 45
  • 第一章 1.Linux是一套免费使用和自由传播的类UNIX操作系统,它可以基于Intel x86系列处理器以及Cy...
    yansicing阅读 5,318评论 0 9
  • 一、文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件)ls -a 列出当前目录文件(包括隐含文件)l...
    路痴千行阅读 2,379评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,718评论 0 10
  • Ubuntu 常用命令大全 查看软件 xxx 安装内容 #dpkg -L xxx 查找软件 #apt-cache ...
    guiwuzhe阅读 2,516评论 0 14