#1 楼
是答案永远是正确的,对,只是花点时间来弄清楚怎么做!
艰难的路
我将继续由Brightbox.com提供的VPS。我使用了Nano服务器(2个CPU,512MB RAM,20GB磁盘空间)和Ubuntu Precise 12.04 LTS服务器映像。它应该可以在EC2或Linode的同等产品上运行,当然也可以在家用Linux机器上运行。我现在已经在(x86)Arch安装上对其进行了测试,但是知道它在Ubuntu 10.04 LTS上不起作用,因为某些软件包太旧了。
准备系统-Debian / Ubuntu
确保您自己的系统是最新的。
$ sudo apt-get update
$ sudo apt-get upgrade
安装一些新软件
$ sudo apt-get install binfmt-support qemu qemu-user-static unzip
qemu
是ARM仿真器,而qemu-user-static
和binfmt-support
允许我们在不仿真ARM内核的情况下运行ARM可执行文件。 (太酷了!?!)准备系统-Arch
我在Arch存储库中找不到静态链接的
qemu
,因此我们必须进行编译从源头下载。从http://git.savannah.gnu.org/cgit/qemu.git
下载最新版本
解压缩并运行
./configure --disable-kvm --target-list=arm-linux-user --static
使用
make
进行构建,并使用sudo make install
进行安装。警告您不应运行在线找到的任意命令root
-这些命令取自echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register
,属于ARM cpu类型。请从该文件中提取命令并运行它们。下载并解压缩图像
转到raspberrypi.org并下载所需的图像。将其解压缩并将
echo ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-armeb:' > /proc/sys/fs/binfmt_misc/register
文件保存在有用的地方。 。$ sudo mkdir -p /images/debian-squeeze
$ sudo wget "http://files.velocix.com/c1410/images/debian/6/debian6-19-04-2012/debian6-19-04-2012.zip" -O "/images/debian-squeeze.zip"
$ sudo unzip "/images/debian-squeeze.zip" -d /images/debian-squeeze
$ sudo rm /images/debian-squeeze.zip
我们需要知道Linux分区的偏移量(在本例中为
root
扇区)和引导分区(在qemu-binfmt-conf.sh
扇区中)。每个扇区为512字节,因此根偏移为.img
字节,引导偏移为.img
。映像作为文件系统。这可以使用回送设备来完成。我们使用上一部分的偏移量来告诉157696
要挂载的分区以及挂载的位置。这些命令的顺序很重要。$ cd /images/debian-squeeze/debian6-19-04-2012/
$ fdisk -lu debian6-19-04-2012.img
Disk debian6-19-04-2012.img: 1949 MB, 1949999616 bytes
4 heads, 32 sectors/track, 29754 cylinders, total 3808593 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ee283
Device Boot Start End Blocks Id System
debian6-19-04-2012.img1 2048 155647 76800 c W95 FAT32 (LBA)
debian6-19-04-2012.img2 157696 3414015 1628160 83 Linux
debian6-19-04-2012.img3 3416064 3807231 195584 82 Linux swap / Solaris
准备文件系统。
我们已经准备好将
2048
插入文件系统并开始安装新软件。首先,我们必须将仿真器安装到我们的映像中,因为一旦使用157696*512=80740352
,该仿真器将不可用。 > Arch Linux $ sudo mount -o loop,offset=80740352 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt
$ sudo mount -o loop,offset=1048576 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt/boot
所有主机系统
我们还需要提供对系统某些其他部分的访问。
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
我们完成了!
2048*512=1048576
离开... $ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/
您现在在Raspberry Pi中,但服务未运行等。请注意,您是root用户!
更新/安装软件-Debian Image
要更新软件,我们使用
mount
。照常使用chroot
。更新/安装软件-Arch Image
要更新软件,请使用
chroot
。$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
您也可以照常使用
chroot
安装软件。 ?。退出
您可以使用Ctrl + D退出
apt-get
并通过运行apt-get install
卸载系统-您将不得不分别卸载每个安装点.. 您应该从RPi上的
pacman
上删除pacman -S
或从pacman
上删除pacman
,然后就可以刷新图像了。最后的话
这有点长且乏味,但是只需执行一次,您就会学到有关如何全部工作的负载!
有关最新图像的说明
当尝试对最新图像执行此操作时,您将获得一个错误
$ sudo chroot /mnt
要解决此错误,只需注释掉
chroot
文件的内容简易方法-
sudo umount /mnt
我已经开始致力于为您做很多事情的实用程序。它称为piimg,可以在github.com/alexchamberlain/piimg上找到。
到目前为止,它可以通过运行
# apt-get update
# apt-get upgrade
,然后通过运行
# pacman -Syu
再次卸下它们。只需安装
qemu-user-static
和/usr/bin
即可。免责声明I,Alex Chamberlain是
qemu-arm
的首席开发人员。因此,与其他方法相比,我可能会偏爱使用/usr/local/bin
。参考文献
运行ARM Linux在台式机上:国外chroot方式
尝试chroot时获取“非法指令”
#2 楼
在滚动时,我整理了一个快速脚本,该脚本安装了映像文件的第一个Linux分区
,后果自负。它没有错误处理/输入验证
#!/bin/bash
# This script is designed to mount
# the first Linux filesystem
# in the partition table of the
# image handed to it
USAGE="q4312078q <image name> <mount point>"
IMAGE=
MOUNTPT=
OFFSET=`fdisk -lu $IMAGE | grep -m 1 Linux$ | awk '{ print *512 }'`
echo "Executing as $USER: mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT"
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT
评论
不幸的是,由于图像都是基于ARM的,因此您实际上无法直接对它们执行任何操作。更新它们有点棘手...如果您的主机系统是基于apt的,则可能有可能。
–弗雷德
14年4月14日在17:23
#3 楼
我写了一组脚本来帮助解决这个问题。希望有人能发现这些有用的东西:必需)。增长:增长图像文件(以便您可以预安装更多东西)
Chroot:获取img中的root shell(玩得开心!)
准备:在图像上的
chroot
中运行安装脚本(提供示例)#4 楼
我按照说明寻找一种方法,可以通过我的主PC为PI构建东西,事实证明这非常容易,只要您更改了根目录,就可以将映像视为实时系统,并使用所有本机应用程序。在pi上,因此不需要安装交叉编译器:)我确实有一个问题,在chroot设置期间,我们必须安装一些分区以使chroot正常运行:
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
我们如何正确卸下它们?让它们挂载,使您无法卸载.img文件,这里的任何帮助将不胜感激。我尝试了-f选项,不确定是否安装了其他基础。
回答我自己的问题,https://bugzilla.redhat.com/show_bug.cgi?id = 194342
帖子末尾的第二种方法通过sudo修改对我起作用。第二个分区包含映像文件上的rootfs,在上面的教程中为/ mnt。使用此方法,您可以从环回设备和通过chroot挂接的任何其他设备上完全卸载img文件。
cat /proc/mounts | awk '{print }' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
评论
我不确定这是否能真正回答问题。您没有描述如何在映像中生成根目录或如何在映像中安装软件。同样,这里也不是提出新问题的地方。
–活动
2012年7月27日上午10:27
我使用的方法与OP对他的问题的原始回答相同。由于我在卸载图像时遇到问题,因此,这实际上是该问题和我自己的最终答案的最佳选择。
–雷吉
2012年7月30日在16:09
评论
那么有人真的测试过吗?
– Finnw
2012年7月3日在7:25
@finnw我认为Jivings现在已经对此进行了测试。
–亚历山大·张伯伦
2012年7月9日在20:20
您也可以使用sudo kpartx -av rpi_pisces_mate_r1.img,它将显示分区。使用最大的一个并安装它,例如须藤安装/ dev / mapper / loop0p3 / mnt / tmp。
– elmicha
2012年7月14日在22:28
@AlexChamberlain:您实际上在Brightbox服务器上工作了吗?我已经在家用PC上成功地进行了测试,但是当我在Brightbox上尝试时,我无法进行chroot,我想知道是否是因为尝试有效地使虚拟化超越了虚拟化。当然,我也可能做错了一些,但是我认为在完全放弃之前值得查询!感谢您的优秀教程。
– DrAl
13年2月13日在10:11
是否有可能对此进行更新以包括如何chroot Noobs Distro?只是为了学习如何扎根到这样的发行版
– Suhaib
2014年3月3日在22:45