构建最小文件系统

在之前那篇BananaPro镜像生成脚本的文章中,忽略掉了root-fs的步骤。我们都知道,Linux是将内核和root-fs分离的,我们可以使用同一个Linux的内核来使用各种文件系统,包括各种linux的发行版。这篇文章就是用来讲解怎么构建一个最小的root-fs文件系统,这样的文件系统一般只包含很少的软件包,需要有一定的Linux基础才能够把持的住。在这里我们主要是使用ubuntu为例来讲解一个最小的文件系统是怎么构建的。

使用现有的root-fs包。

很多发行版都会为ARM架构(一般是armv7,现在都开始armv8了)编译出一套root-fs,比如Archlinux、kali等,后续如果有时间的话会继续移植这些发行版。这里使用官网提供的发行包ubuntu-core来构建最小文件系统。我们首先需要获得ubuntu-core的二进制包,在此之前我们需要区分以下三个站点:

清楚这个后我们就知道可以在http://cdimage.ubuntu.com/ubuntu-core/releases/选择下载我们的root-fs包,这里要注意的是貌似14.04版本有点问题,我使用了几次好像有成功启动的,但大都卡死在<4>init: plymouth-upstart-bridge main process ended, respawning串口卡死不能登陆,在显示屏倒是正常,怀疑是ubuntu的版本的问题,改用高版本的ubuntu解决问题,例如使用15.04一切正常。先切换到root-fs目录cd xxx/root-fs,然后解压sudo tar -xvf ../package/ubuntu-core-15.04-core-armhf.tar.gz这里记得要用sudo不然有些特殊的设备文件无法创建,这样系统就跑不起来了。然后接下来要对系统进行初始化,由于主机是x86架构因为在宿主是 x86 架构,不能运行 arm 架构的软件。一种笨方法是将文件系统生成镜像然后挂载到arm架构的机器上chroot,另一种简便方法是需要依靠 qemu-arm-static 来模拟成 arm 环境进行系统初始化。复制qemu-arm-static到刚构建的基本系统中sudo cp /usr/bin/qemu-arm-static bananaPro/root-fs/usr/bin从而可以用qemu-arm-static来模拟arm环境。然后chroot到目标文件系统sudo chroot root-fs /bin/bash然后设置密码以及安装一些常用的软件,使用一键编译脚本(前面提到)生成镜像。将镜像dd到tf卡然后跑起系统。但是由于ubuntu_core 实在是太精简了,太多的软件都没有(连 man都没得),安装软件很麻烦所以我们试试另一个方案。

使用debootstrap来构造最小文件系统

debootstrap是debian/ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多,当然功能也没那么强大,因此,只能说是“基本的系统”(参考这里)。

  1. sudo qemu-debootstrap --arch armhf xenial xenial_arm http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ 分别是指定架构和版本以及目标目录,最后是使用清华大学的镜像,不然的话会很慢。
  2. 稍等片刻看到I: Base system installed successfully.表示安装完成。
  3. sudo chroot ./xenial_arm /bin/bashchroot到目标目录。
  4. passwd root 设置root密码,否则等下开机你不知道输啥密码。
  5. 设置镜像源
    1
    2
    3
    4
    5
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main restricted universe
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe
  6. 如果出现下面所示错误

    E: The method driver /usr/lib/apt/methods/https could not be found.
    N: Is the package apt-transport-https installed?

表示那个软件没有装好不支持https协议,可以把https换成http,然后apt-get update更新源,apt-get install apt-transport-https让apt支持https,谁让清华的源这么高的逼格呢:(
7. 然后安装软件 apt-get install curl git vim net-tools zsh openssh-server
8. 为了后面安装openkeeper可以先把python3 build-essential ntp pppd patch顺便安装了,如果需要也可以吧openssh-server mysql-server vnstat nmap顺便装了
9. exit退出chroot,然后用sudo cp ./xenial_arm/* ./root-fs/ -r拷贝我们刚刚生成的最小文件系统到我们的root-fs,然后sudo sh build.sh运行我们的一键生成镜像脚本生成镜像,烧录到tf卡后启动。
10. 如果使用低版本可能会出现<4>init: plymouth-upstart-bridge main process ended, respawning的错误,在串口中卡死在显示屏正常,请改用高版本的ubuntu,换用16.04/xenial解决问题。这里初步怀疑是systemd的问题,没有去深究。
11. 接着就是扩展tf卡的分区大小,为了能上网需要安装openkeeper,方法也很简单直接sudo sh install.sh就ok。
12. 在hosts中添加一条127.0.0.1与主机名的映射127.0.0.1 BananaPro以避免出现类似sudo: unable to resolve host ThinkPad-E430的错误。
13. chsh -s /usr/bin/zsh 修改默认shell,sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 使用oh-my-zsh
14. 设置时区sudo tzselect,然后sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,然后ntptime校正时间以便我们能够利用openkeeper拨号上网。
15. 添加用户,安装配置i3-wm xinit conky lightdm lxappearance,可以参照之前archlinux的文章。
16. 出现sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set的报错可以这样解决

1
2
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
  1. 无法登陆(输入密码后回到登陆界面)的问题可以chmod 777 .Xauthority 来解决。
  2. ifconfig -a找不到wlan0的问题可以在/etc/modules里面添加ap6210来解决。
  3. 更新系统后发现不能够串口登录的问题。经查是systemd的问题,在启动的输出中会出现
    1
    2
    [ TIME ] Timed out waiting for device dev-ttyS0.device.
    [DEPEND] Dependency failed for Serial Getty on ttyS0.
    可以尝试下面这样看能不能解决
    1
    2
    3
    systemctl daemon-reload
    systemctl stop serial-getty at ttyS0.service
    systemctl start serial-getty at ttyS0.service
    如果这样可以解决的话,确定就是这个问题,可以切换到root然后systemctl enable [email protected]彻底解决。
  4. xterm 无法修改配置以及无法自动登录可以考录.Xresource.Xauthority 的权限问题。
T B
站点访问量: / , 本页阅读量:
T B