发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[开源硬件]

【Lemaker Guitar】制作Kali Linux EMMC系统镜像之旅(超详细)

[复制链接]
3661|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 312976625 于 2016-5-30 23:30 编辑



相关帖子:
【Lemaker Guitar】在Kali系统上安装LXDE及用手机远程桌面





使用的PC系统:Ubuntu 14.04




【什么是Kali Linux】

Kali Linux是基于Debian的Linux发行版, 设计用于数字取证和渗透测试。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版 。
Kali Linux预装了许多渗透测试软件,包括nmap (端口扫描器)、Wireshark (数据包分析器)、John the Ripper (密码**器),以及Aircrack-ng (一应用于对无线局域网进行渗透测试的软件).[2] 用户可通过硬盘、live CD或live USB运行Kali Linux。Metasploit的Metasploit Framework支持Kali Linux,Metasploit一套针对远程主机进行开发和执行Exploit代码的工具。Kali Linux既有32位和64位的镜像。可用于x86 指令集。同时还有基于ARM架构的镜像,可用于树莓派和三星的ARM Chromebook.





【安装Kali LInux的目的】
想通过kali系统在wifi上东些手脚(只是技术研究哦~)
官网上没有Lemaker Guitar的系统镜像,买办法只能自己制作了。还好Kali官方提供了armhf版本的系统自定义制作的方法(不过官方提供的教程也是有坑的,下面我会提到)。





【制作方法理论和基本知识】
起初,我也是完全不懂如何制作嵌入式的系统镜像,对rootfs,uboot,bootloader这些概念完全不懂。
看Guitar的wiki上有一篇教程是专门写如何制作系统镜像的,虽然对rootfs,uboot,bootloader这些概念不懂,看完教程后大致得出来两个结论:
1.BSP 里面包含 misc.img(包含内核镜像),bootloader(u-boot-dtb.img bootloader.bin)
2.Guitar系统镜像 = BSP + rootfs,所以这里我只介绍下BSP和rootfs是什么。
具体misc.img,u-boot-dtb.img bootloader.bin 到底是什么东西,我们不在这里讨论了,暂且只需要知道是和启动系统时非常底层的东西。本人也不是很懂就不班门弄斧了。如果你制作的是sd卡的img系统镜像,也是需要这几个文件的。
BSP :Board Support Package,板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。
BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP。BSP并不是完整的linux操作系统,他只包含Linux内核,设备模块驱动和一些基本的配置文件。他的作用是针对具体的硬件主板能够正常的启动linux的内核。
BSP一般都是需要硬件主板厂家提供,Lemaker是做开源硬件的,已经提供Guitar的BSP包了。


rootfs:是一个文件系统,linux内核启动完毕后,需要挂在rootfs。rootfs里面包含了linux操作系统在用户空间下用的程序,静态连接库,动态连接库,各种配置文件等。用白话说,除了和内核启动相关的,凡是用户空间下的程序,比如/bin/xxx /usr/bin/xxx等
都在rootfs里面。
BSP包的大小只有十几兆,而rootfs根据发行版不同,大部分都是几百兆到几个G不等。从这个概念上你应该能体会到,BSP我们一般用厂家提供的最可靠,rootfs是根据你安装的发行版不同,需要不同发行版的rootfs。






【获取Guitar BSP包】
BSP的获取官方提供了两种形式,本人两种都用过,一种是自己编译,另一种是直接用编译好的,时间关系我们用lemaker官方编译好的bsp包。
自己编译的教程看这里 :http ://wiki.lemaker.org/LeMaker_Guitar:How_to_use_LeMaker_Guitar_BSP/zh-hans
git clone https: //github.com/LeMaker/hwpack-actions.git
git克隆下来后,进入文件夹就看到很多包了,lemaker_guitar_bbb_hwpack其中的bbb表示我们的底板板型为Rev.B类型的,后面的6位数字表示发布时间,我们尽量选最新的。
目前我这里lemaker_guitar_bbb_hwpack_160116.tar.xz目前是最新的了。所以bsp包就用他了。





【Kali Linux的rootfs的制作】

步骤一:安装交叉编译工具链

首先打开Kali官网的文档页面 http: //docs.kali.org/,找到下图两篇教程

ARM Cross-Compilation 是安装交叉编译工具链的,因为我们所有的操作都在PC机上,PC机一般x86平台,所以我们得在x86平台编译ARM平台可以运行的可执行程序就需要用到交叉编译工具链。
Preparing a Kali Linux ARM chroot 是真正制作rootfs的教程
在制作教程之前,我们得先安装好相应的交叉编译工具链
安装依赖:
apt-get install git-core gnupg flex bison gperf libesd0-dev build-essential zip curl libncurses5-dev zlib1g-dev gcc-multilib g++-multilib
dpkg --add-architecture i386
apt-get update
apt-get install ia32-libs
安装交叉编译工具链:
cd ~
mkdir -p arm-stuff/kernel/toolchains
cd arm-stuff/kernel/toolchains
git clone git: //github.com/offensive-security/gcc-arm-eabi-linaro-4.6.2.git
设置环境变量:
vim ~/.bashrc
在.bashrc最后面写上如下配置
export ARCH=arm
export CROSS_COMPILE=~/arm-stuff/kernel/toolchains/gcc-arm-eabi-linaro-4.6.2/bin/arm-eabi-
~表示你当前用户的home目录,也可以替换成绝对路径的比如/home/xxx~/.bash文件需要重新启动系统才能生效,想让在当前的shell下生效输入以下命令即可
source ~/.bash
经过以上的三步,交叉编译工具链就安装好了,安装在 ~/arm-stuff/kernel/toolchains目录里。

步骤二:制作rootfs

接下来是Kali 的rootfs的制作,为什么是制作呢,因为官方没有提对应的rootfs的img镜像。如果你想安装的发行版官方已经提供了rootfs的img镜像,下载下来后直接挂载到你pc系统的某个目录下即可(不会的自己百度,这个不会死人~)。打开“Preparing a Kali Linux ARM chroot”这篇教程,上半部分教你用官方的build script构建系统img,但是没有guitar板子的,所以跳过。找到下图指定的地方开始看。

我把这篇教程的要讲的内容划内容分类总结一下,大概是下面这个结构

1.安装依赖和工具(有坑)
2.shell环境下开启交叉编译(前面已经做过了)
3.定义系统体系结构和指定要制作的镜像中自带的软件包
4.开始构建Kali Rootfs

    4.1安装基础的rootfs(有坑,和标号1的坑有关系)
    4.2chroot第二步(2nd Stage chroot)
    4.3chroot第三步(3nd Stage chroot)
    4.4进入chroot小技巧方法(不是必须的,只是告诉你一个基本命令,无关紧要,此步不用操作)
    4.5清理chroot环境


看起来很多,其实都不难,下面我一步一步的解说。

先说一下遇到的坑:
官方教程上说安装"debootstrap"和"qemu-user-static"。这里有个坑,教程上说的是通过apt-get install的方式从软件源里面安装。但是我安装好以后,在"4.1安装基础的rootfs"就进行不下去了。如图

我标记的这个命令无法运行通过的,原因有两个
1:通过apt-get install安装的debootstrap,在/usr/share/debootstrap/script目录中找不到kali这个脚本。
      解决办法:kali官方提供相应的debootstrap.deb包,这个里面有kali这个脚本,一定要安装这个,不能apt-get install安装。切记。
2:有了kali这个脚本后,发现还是无法执行该命令,说是无法获取什么资源
      解决办法:debootstrap --foreign --arch $architecture kali kali-$architecture http: //archive.kali.org/kali 替换成 debootstrap --foreign --arch $architecture kali-rolling kali-$architecture http: //archive.kali.org/kali

正确的debootstrap下载地址: http: //archive.kali.org/kali/pool/main/d/debootstrap/debootstrap_1.0.81%2bkali1_all.deb,下载完后直接安装即可,会安装在/usr/share/debootstrap目录下


1.安装依赖和工具
安装 qemu-user-static
sudo apt-get install qemu-user-static
安装debootstrap请按照上面的下载地址下载deb文件,手动安装。

2.shell环境下开启交叉编译
前面安装交叉编译工具的时候就已经做过了。主要是在~/.bashrc里面加入下面两句
export ARCH=arm
export CROSS_COMPILE=~/arm-stuff/kernel/toolchains/gcc-arm-eabi-linaro-4.6.2/bin/arm-eabi-


3.定义系统体系结构和指定要制作的镜像中自带的软件包
编辑~/.bashrc,再在底部添加下面两行语句
export packages="xfce4 kali-menu wpasupplicant kali-defaults initramfs-tools uboot-mkimage nmap openssh-server"
export architecture="armhf"
2和3操作完后,保存退出后再执行这句生效(当前shell下生效,永久生效需要重启电脑)
source ~/.bashrc


4.1安装基础的rootfs


这一步一定注意有句命令有改动
这里的是我修改过的
cd ~
mkdir -p arm-stuff # should have already been created when setting up x-compilation
cd arm-stuff/
mkdir -p kernel # should have already been created when setting up x-compilation
mkdir -p rootfs
cd rootfs

debootstrap --foreign --arch $architecture kali-rolling kali-$architecture http: //archive.kali.org/kali #这句和官方是不同的,kali改成了kali-rolling
cp /usr/bin/qemu-arm-static kali-$architecture/usr/bin/
和官方的区别是,前面提到过的。
debootstrap --foreign --arch $architecture kali kali-$architecture http: //archive.kali.org/kali
替换成
debootstrap --foreign --arch $architecture kali-rolling kali-$architecture http: //archive.kali.org/kali

往后就没什么坑了,一路顺风 :)

4.2chroot第二步(2nd Stage chroot)

cd切换到我们创建的rootfs目录下,并执行debootstrap的第二步,命令如下:
cd ~/arm-stuff/rootfs
LANG=C chroot kali-$architecture /debootstrap/debootstrap --second-stage
接下来的操作是编辑rootfs中的/etc/apt/sources.list文件:
vim kali-$architecture/etc/apt/sources.list
我们用的是kali-rolling,编辑sources.list写入如下内容
deb http ://http.kali.org/kali kali-rolling main
deb http ://http.kali.org/kali kali-rolling main contrib non-free
保存退出
设置主机名
echo "kali" > kali-$architecture/etc/hostname
编辑rootfs中的/etc/network/interface
vim  kali-$architecture/etc/network/interfaces
写入如下内容
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
编辑rootfs中的/etc/resolv.conf
vim kali-$architecture/etc/resolv.conf
写入如下内容
nameserver 8.8.8.8
到此这一步就完成了 :)



4.3chroot第三步(3nd Stage chroot)
这一步具体是干什么的,没太看明白,照着做吧。
命令如下:
export MALLOC_CHECK_=0 # workaround for LP: #520465
export LC_ALL=C
export DEBIAN_FRONTEND=noninteractive

mount -t proc proc kali-$architecture/proc
mount -o bind /dev/ kali-$architecture/dev/
mount -o bind /dev/pts kali-$architecture/dev/pts
编辑rootfs中的/debconf.set
vim kali-$architecture/debconf.set
写入如下内容
console-common console-data/keymap/policy select Select keymap from full list
console-common console-data/keymap/full select en-latin1-nodeadkeys
再在rootfs中创建一个脚本文件
vim kali-$architecture/third-stage
写入如下内容
#!/bin/bash
dpkg-divert --add --local --divert /usr/sbin/invoke-rc.d.chroot --rename /usr/sbin/invoke-rc.d
cp /bin/true /usr/sbin/invoke-rc.d

apt-get update
apt-get install locales-all
#locale-gen en_US.UTF-8

debconf-set-selections /debconf.set
rm -f /debconf.set
apt-get update
apt-get -y install git-core binutils ca-certificates initramfs-tools uboot-mkimage
apt-get -y install locales console-common less nano git
echo "root:toor" | chpasswd
sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' /lib/udev/rules.d/75-persistent-net-generator.rules
rm -f /etc/udev/rules.d/70-persistent-net.rules
apt-get --yes --force-yes install $packages

rm -f /usr/sbin/invoke-rc.d
dpkg-divert --remove --rename /usr/sbin/invoke-rc.d

rm -f /third-stage
保存退出后设置该脚本的权限
chmod +x kali-$architecture/third-stage
执行third-stage脚本,命令如下
LANG=C chroot kali-$architecture /third-stage


4.5清理chroot环境

在rootfs中创建cleanup脚本
vim kali-$architecture/cleanup
写入如下内容
#!/bin/bash
rm -rf /root/.bash_history
apt-get update
apt-get clean
rm -f cleanup
保存退出后再输入如下命令
chmod +x kali-$architecture/cleanup
LANG=C chroot kali-$architecture /cleanup

umount kali-$architecture/proc
umount kali-$architecture/dev/pts
umount kali-$architecture/dev/

cd ..


到这里制作rootfs的整个过程就结束了,我们制作好的rootfs目录在~/arm-stuff/rootfs/kali-$architecture,接下来就是最后一步了,生成我们的.fw系统镜像了。




【制作fw镜像】


获取lemaker官方提供的 image-create-tools工具
git clone https : //github.com/LeMaker/image-create-tools.git
贴一张工具用法的图片



输入如下命令生成我们最后的系统镜像
./make-linux-emmc-fw -p [hwpack_pathname]/lemaker_guitar_bbb_hwpack_xxxxxx.tar.xz -r [rootfs_pathname]/rootfs -o s500_lemaker_guitar
解释: -p参数指定我们的bsp包路径, -r参数指定我们的rootfs根路径
执行完成后,会在image-create-tools的目录下生成 s500_lemaker_guitar.fw这个文件,这就是我们的最终的系统镜像了。现在就可以把它烧录到我们的Guitar开发板上了。
烧录教程请参考我写的【Lemaker Guitar】开发板开箱评测及烧写系统 一贴,网址 http ://bbs.21ic.com/icview-1507210-1-1.html
开发板烧录完成后,通过USB-TTL转换器连接开发板,putty连接串口



出现登录界面



用户名是root 密码是toor登录进去后查看系统信息



【SSH远程登录】

查看开发板的ip地址,有USB-TTL串口模块的可以直接用串口调试看,命令
ifconfig
没有串口调试的,可以进入路由查看DHCP客户端列表,如图



我的开发板的ip是192.168.0.106。
我发现系统上居然没有安装opensshser-server。自己安装吧。
apt-get update
apt-get install openssh-server
安装完以后,openssh-server默认是不允许root用户登录的,需要修改一下,编辑配置文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
找到 PermitRootLogin prohibit-password这句
改成 PermitRootLogin yes
保存退出,重启ssh服务
service ssh restart
这个时候打开putty,选择ssh,输入ip,端口22,连接


第一次连接会有一个提示,选择 Yes 或 确定 即可。


用户名,密码和刚才一样 root toor。


让ssh服务开机自动启动
update-rc.d ssh enable
到这里我们开发板上电后就可以通过ssh远程连接了。


已知的问题:
open-ssh默认没装,在export packages的时候我们有安装openssh-server,为什么制作好后没有openssh-server服务,不清楚。可以通过自己手动安装解决。
wifi连接未测试,有线网络正常
可能还有其他驱动问题,目前我没有测试,但是系统已经能跑起来,解决这些问题只是时间问题了。


最后说的话:由于整个过程自己也是很艰辛的过程,写的很罗嗦,但我想的是写的尽可能详细点,让更多的人能够体验这个过程,避免栽坑,有不对的地方欢迎指教改正。














打赏榜单

21ic小能手 打赏了 5.00 元 2016-05-23
理由:真的超详细

相关帖子

沙发
sjqlwy| | 2016-5-22 19:28 | 只看该作者
干货,支持,已MARK

使用特权

评论回复
板凳
312976625|  楼主 | 2016-5-22 19:33 | 只看该作者
sjqlwy 发表于 2016-5-22 19:28
干货,支持,已MARK

谢谢支持

使用特权

评论回复
地板
9robot| | 2016-5-22 22:09 | 只看该作者
好厉害!!!

使用特权

评论回复
5
MJM_WSY| | 2016-5-23 22:11 | 只看该作者
好东西。得细细拜读。

使用特权

评论回复
6
312976625|  楼主 | 2016-5-23 22:21 | 只看该作者
MJM_WSY 发表于 2016-5-23 22:11
好东西。得细细拜读。

相互学习。我也刚接触不久呢。

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

49

帖子

2

粉丝