Skip to content

Instantly share code, notes, and snippets.

@jkullick
Last active March 24, 2024 14:36
Show Gist options
  • Save jkullick/9b02c2061fbdf4a6c4e8a78f1312a689 to your computer and use it in GitHub Desktop.
Save jkullick/9b02c2061fbdf4a6c4e8a78f1312a689 to your computer and use it in GitHub Desktop.
Chroot into Raspberry Pi ARMv7 Image with Qemu
# install dependecies
apt-get install qemu qemu-user-static binfmt-support

# download raspbian image
wget https://downloads.raspberrypi.org/raspbian_latest

# extract raspbian image
unzip raspbian_latest

# extend raspbian image by 1gb
dd if=/dev/zero bs=1M count=1024 >> 2016-05-27-raspbian-jessie.img

# set up image as loop device
losetup /dev/loop0 2016-05-27-raspbian-jessie.img

# check file system
e2fsck -f /dev/loop0p2

#expand partition
resize2fs /dev/loop0p2

# mount partition
mount -o rw /dev/loop0p2  /mnt
mount -o rw /dev/loop0p1 /mnt/boot

# mount binds
mount --bind /dev /mnt/dev/
mount --bind /sys /mnt/sys/
mount --bind /proc /mnt/proc/
mount --bind /dev/pts /mnt/dev/pts

# ld.so.preload fix
sed -i 's/^/#/g' /mnt/etc/ld.so.preload

# copy qemu binary
cp /usr/bin/qemu-arm-static /mnt/usr/bin/

# chroot to raspbian
chroot /mnt /bin/bash
	# do stuff...
	exit

# revert ld.so.preload fix
sed -i 's/^#//g' /mnt/etc/ld.so.preload

# unmount everything
umount /mnt/{dev/pts,dev,sys,proc,boot,}

# unmount loop device
losetup -d /dev/loop0

Source

@m00ninite
Copy link

parted was just the hint I needed. For anyone that wants to resize their image properly, this is how I did it:

First, list the partitions:

$ sudo parted 2016-05-27-raspbian-jessie.img print

Model:  (file)
Disk /home/pop_desktop/workspace/raspiblitz_ci/2021-03-04-raspios-buster-arm64.img: 3729MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   3729MB  3456MB  primary  ext4

Use this to determine the partition number you want, and the "end" of the partition. I wanted partition 2, as that's the home partition that needs to grow.

Then grow the partition like so:

loop=$(losetup -f)  # Find the first available loop device

# extend raspbian image by 1gb
dd if=/dev/zero bs=1M count=1024 >> raspios.img
sudo parted raspios.img resizepart 2 4700MB

# set up image as loop device
losetup -P $loop raspios.img

# check file system
e2fsck -y -f ${loop}p2

#expand partition
resize2fs ${loop}p2

In the above example, I changed the "end" of the ext4 partition to 4700MB, roughly increasing it by 1GB.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment