Skip to content

Instantly share code, notes, and snippets.

@AndreaGhizzoni
Last active September 14, 2022 20:43
Show Gist options
  • Save AndreaGhizzoni/ad3cbe5e54ba826184e6a13dd9bc1f5e to your computer and use it in GitHub Desktop.
Save AndreaGhizzoni/ad3cbe5e54ba826184e6a13dd9bc1f5e to your computer and use it in GitHub Desktop.

How to mount local image [src]

The problem is that the .img files are not images of a partition, but of a whole disk. That means they start with a boot loader and a partition table. You have to find out the offset of the partition and mount it with the offset option of mount. If you do a

fdisk -l /path/to/image

it will show you the block-size and the start-block of the partition. You can use that to calculate the offset. For example, I have an image of a bootable stick with a 4GB FAT32 partition. The output of the fdisk command is

Disk Stick.img: 3984 MB, 3984588800 bytes
249 heads, 6 sectors/track, 5209 cylinders, total 7782400 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: 0x0004bfaa

    Device Boot      Start         End      Blocks   Id  System
Stick.img1   *         128     8015999     4007936    b  W95 FAT32

So I have a block-size of 512 bytes and the start-block is 128. The offset is 512 * 128 = 65536. So the mount command would be

mount -o loop,offset=65536 Stick.img /mnt/tmp

Modify the image to allow boot from usb [src]

Then enable USB boot mode with this code:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

This adds program_usb_boot_mode=1 to the end of /boot/config.txt. Reboot the Raspberry Pi with sudo reboot, then check that the OTP has been programmed with:

$ vcgencmd otp_dump | grep 17:
17:3020000a

Check that the output 0x3020000a is shown. If it is not, then the OTP bit has not been successfully programmed. In this case, go through the programming procedure again. If the bit is still not set, this may indicate a fault in the Pi hardware itself.

If you wish, you can remove the program_usb_boot_mode line from config.txt, so that if you put the SD card in another Raspberry Pi, it won't program USB boot mode. Make sure there is no blank line at the end of config.txt. You can edit config.txt using the nano editor using the command sudo nano /boot/config.txt, for example.

Enable ssh to raspbian image [src]

Then

# place file on boot partition
touch /mnt/boot/ssh

Finally umount the image

umount /mnt/boot

default user: pi default pass: raspberry

Modify hostname to raspbian image [src]

Modify /mnt/fs/etc/hostname, /mnt/fs/etc/host by replacing raspberrypi with the desired hostname. Finally umount the image

umount /mnt/fs

Enable network to raspbian image [src]

Modify /mnt/fs/etc/network/interfaces as follows

source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Then create a /mnt/fs/etc/wpa_supplicant/wpa_supplicant.conf with the following content to connect to a common WPA2 wifi network:

country=IT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
ap_scan=1

network={
    ssid="myssid"
    psk="mypasskey"
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    auth_alg=OPEN
}

Installing docker [src]

Requirements:

sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Add the repository by adding the following line to /etc/apt/source.list

deb [arch=armhf] https://download.docker.com/linux/debian stretch stable

Update the repos:

sudo apt-get update

Then install docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io

Run docker as non root

sudo usermod -aG docker $USER

Configure docker to start on boot

sudo systemctl enable docker

Configuring remote access with systemd unit file

Run the following command:

sudo systemctl edit docker.service

The add those lines:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

Then restart the daemon:

sudo systemctl daemon-reload
sudo systemctl restart docker.service

Check:

sudo netstat -lntp | grep dockerd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment