在工程项目中,可能遇到一些模块,他们运行在ubuntu的系统下(主要是依赖的库),而手上的板子安装ubuntu系统有问题(官方的安装包,对于你的板子可能存在分区和grub引导的问题,导致安装后无法启动,又无法手动修改安装包,导致无法安装ubuntu,我这里遇到这样的情况),这时候可能就需要绕道archlinux,然后在archlinux上安装ubuntu的根文件系统,chroot切换到ubuntu的环境中,进行开发.
安装archlinux环境
如何安装archlinux,可以参考下面的archlinux安装.
在archlinux基础上安装ubuntu
首先需要安装debootstrap工具,debootstrap是一个用
来在已经安装好的系统上,安装一个ubuntu系统到你指定的文件夹中的工具.详细介绍见debian的wiki之Debootstrap(https://wiki.debian.org/Debootstrap/)
archlinux下安装debootstrap,非常容易:
pacman -S debootstrap
安装过程中可能出现签名问题,错误信息如下:
error:wget: signature from "Levente Polyak (anthraxx) <levente@leventepolyak.net> is unknown trust...."
密钥导入失败的原因可能有以下几种:
过期的archlinux-keyring包
系统时间不正确
ISP屏蔽了PGP keys的端口
pacman缓存中包含之前的未签名的软件包
//设置时间
date -s 01/15/2017
date -s 11:05:00
//我这里更新了ttf-dejavu和keyring就可以了,如果还是不行,你可能需要按上面逐点排查一下.
pacman -S --force ttf-dejavu
pacman -Sy archlinux-keyring && pacman -Syyu
接着利用debootstrap来安装ubuntu系统到指定的目录.
debootstrap --arch amd64 trusty ~/ubuntu http://mirrors.163.com/ubuntu/
//amd64 64位平台
//trusty 版本代号
//~/ubuntu ubuntu的根文件系统安装路径
//http://mirrors.163.com/ubuntu/ ubuntu源地址
源地址可以在ubuntu源列表(http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8)中寻找适合自己的ubuntu源,国内的使用163的挺快的.
修改源信息:
vim /etc/apt/sources.list
//修改后的sources.list文件内容如下
deb http://mirrors.163.com/ubuntu trusty main restricted universe multiverse
//然后开始下载/安装ubuntu的根文件系统到你指定的目录
debootstrap --arch amd64 trusty ~/ubuntu http://mirrors.163.com/ubuntu/
安装完成后,chroot之前,挂载proc、sys、dev到ubuntu文件系统中:
cd ~/ubuntu
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
chroot ~/ubuntu
切换到ubuntu根目录,此时可能连ls命令都无法执行,琢磨了一会,后来发现原因是ubuntu的文件系统在archlinux的PATH路径下找不到这些命令(听起来有点绕,执行下面命令就好了),需要添加ubuntu下的这些命令的路径.
export PATH="$PATH:/usr/sbin:/sbin:/bin"
到这里在archlinux下安装ubuntu完毕.