这是什么
有时候,需要在一个linux里运行另外一个linux。
- 比如可以在android里运行linux,以此运行linux的原生程序,以及爽快的用apt-get安装程序
- 比如vps商只支持debian5,而军哥的lnmp需要debian6
- 比如openwrt路由里想挂载一个debian来做一些正常linux做的事
OK,以上都可以满足,而且我都干过。方法都类似。
整个过程可以在linux下,或者用android手机搞定。
准备文件系统
准备镜像文件
镜像文件也就是xxx.img。话说,openvz的vps,以及部分android手机是没有loop的,也就是不能挂载img文件,那么我只能说,呵呵。把东西放到img里当然可以使文件变得整齐点,也更灵活,当然这也并不是必须做的。如果不想做img,那也可以直接在linux分区里运行,但肯定不能是fat32什么的……
创建镜像
dd if=/dev/zero of=floppy.img bs=1024 count=2048100
这里我建了一个大概2G的文件,不要在意细节~想更多自己弄。
格式化ext2
mkfs.ext2 floppy.img
想要别的格式自己弄。
由于android手机新建镜像困难,这里给出建好的img,自行解压
挂载镜像 mkdir debian mount -o loop floppy.img debian/ 卸载镜像 umount debian
android手机可以把img放卡里,但是挂载的目标文件夹最好是放在data下,如 cd /data mkdir debian mount -o loop /sdcard/floppy.img /data/debian/ 并且,android手机可能需要安装busybox,并以busybox mount等形式执行
系统文件,方法一 debian
假设你手上有一台ubuntu//debian,那么可以用这个方式自己准备基础文件 mkdir debian 当然,如果上面挂载了镜像,就cd到镜像挂载的上一级目录,因为待会儿会把文件释放到当前目录的debian目录下。 sudo -s apt-get install debootstrap
下载基础文件 debootstrap –verbose –arch=armel –foreign squeeze debian http://ftp.us.debian.org/debian 这里我以arm架构为例。可自行更改,如i386,mips。 如此,基础文件已经准备就绪。
这里我提供很早以前准备的几个架构的基础文件,可以直接下下来解压到linux分区中。
i386
mips
arm
然后需要将文件转移到目标文件系统中,如转移到android下并挂载,或转移到android的data目录下,或转移到openwrt的u盘中并且挂载。
进行第二阶段展开 chroot debian /bin/bash /debootstrap/debootstrap –second-stage 添加源 echo ‘deb http://ftp.us.debian.org/debian squeeze main contrib non-free’ > /etc/apt/sources.list 更新源 export HOME=/root export LC_ALL=C apt-get update;apt-get upgrade 至此,文件系统搞定。
系统文件,方法二 ubuntu
ubuntu可以直接下到基础文件,并且解压到镜像或者目录中 如arm架构的地址。好简短的样子-。-
系统文件,方法三 Backtrack
Backtrack从5开始就有arm架构的版本,当然x86架构肯定有的。下载下来就可以用,是个img文件。第6代名字更新为kali-linux
安装一些必要的东西
bt系统里东西够多了,alip版ubuntu里也不少,nano的和方法一里debian的就需要自己安装一些。
进入系统的脚本
如果中间没断开的话,那么现在是chroot到新linux里在运行。exit可以回到本机的shell。
那么如何从本机的shell里进去呢?参考脚本如下
挂载部分 startbt.sh:
export kit=/sdcard/
export mnt=/data/debian
export PATH=$bin:/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
# Mounting Image to the farthest loop point
# FIXME : check if mount sucessfull otherwise abort whole process.
mknod /dev/block/loop254 b 7 254
losetup /dev/block/loop254 $kit/floopy.img
mount -t ext2 /dev/block/loop254 $mnt
mount -t devpts devpts $mnt/dev/pts
mount -t proc proc $mnt/proc
mount -t sysfs sysfs $mnt/sys
#seting environment
sysctl -w net.ipv4.ip_forward=1
echo "Setting /etc/resolv.conf to Google Open DNS 8.8.8.8 and 8.8.4.4"
echo "nameserver 8.8.8.8" > $mnt/etc/resolv.conf
echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf
echo "127.0.0.1 localhost" > $mnt/etc/hosts
同样,android上最好是mount等命令前加busybox。
进入shell bt.sh:
export kit=/sdcard/
export mnt=/data/debian
export PATH=$bin:/usr/bin:/usr/sbin:/usr/local/bin/:/usr/local/sbin/:/bin:$PATH
export TERM=linux
export HOME=/root
export SHELL=/bin/bash
chroot $mnt /bin/bash
export LANG=“C.UTF-8”
export LC_ALL=“C.UTF-8”
那么开机以后,先要执行startbt.sh以挂载文件。一次即可。之后想要进入新linux的shell,只需在本机shell执行bt.sh。
如果不使用镜像,可酌情删去部分挂载镜像的语句。当然,也得修改镜像位置神马的。。
安装一些可能有用的东西
先来安装一堆节操 apt-get install vim busybox wget screen apt-get install gcc g++ make apt-get install git
桌面和vncserver apt-get install tightvncserver lxde xterm vi /root/.vnc/xstartup vncserver 默认端口5901
opera cat >>/etc/apt/sources.list<<END deb http://deb.opera.com/opera/ stable non-free #Opera Browser (final releases) END wget -O - http://deb.opera.com/archive.key | apt-key add - apt-get update apt-get -y –force-yes install opera