Changelog:
20150121:
- Initial version
20150131:
- Added the missing automount of /media/boot
- Fixed the date (image was 20140121)
- Added optional step to allow root login via ssh (included on the image)
20161102:
- Updated to Ubuntu 16.04
—-
To this you'll need:
- PC running Linux Ubuntu 16.04 64 Bits
- MicroSD or eMMC to write the new image
This guide will cover the process to recreate the official Ubuntu Minimal image. Tested and written on a Ubuntu 16.04 64Bits x86 Machine.
- Tools:
Basic set of tools that we will need to create our image.sudo apt-get install debootstrap qemu-user-static
- Work folder
Create a workspacemkdir ~/ubuntu cd ubuntu export ubuntu=`pwd`
- Empty image (4GB)
Create a image with 4096 1Mbyte blocks (4Gbyte image)dd if=/dev/zero of=./image.img bs=1M count=4096
- Image partitioning
Create the two needed partitions, one fat32 for kernel+initramfs+boot script and another ext4 for the OSfdisk image.img n p 1 <return> +128M t c n p 2 <return> <return> w
- Formatting and setting up partitions
Setup loopback and format the partitions.
Also change the UUID and disable journaling.sudo losetup /dev/loop0 ./image.img sudo partprobe /dev/loop0 sudo mkfs.vfat -n boot /dev/loop0p1 sudo mkfs.ext4 -L rootfs /dev/loop0p2 sudo tune2fs /dev/loop0p2 -U e139ce78-9841-40fe-8823-96a304a09859 sudo tune2fs -O ^has_journal /dev/loop0p2
- Bootloaders
Download a pre-built version of U-Boot for C1 and fuse to our image.wget https://raw.githubusercontent.com/mdrjr/c1_uboot_binaries/master/bl1.bin.hardkernel wget https://raw.githubusercontent.com/mdrjr/c1_uboot_binaries/master/u-boot.bin wget https://raw.githubusercontent.com/mdrjr/c1_uboot_binaries/master/sd_fusing.sh chmod +x sd_fusing.sh sudo ./sd_fusing.sh /dev/loop0
- Deboostrap
Mount the partitions, copy qemu to enable chroot to arm and start debootstrapmkdir -p target sudo mount /dev/loop0p2 target sudo mkdir -p target/media/boot sudo mount /dev/loop0p1 target/media/boot sudo mkdir -p target/usr/bin sudo cp /usr/bin/qemu-arm-static target/usr/bin sudo debootstrap --variant=buildd --arch armhf xenial target http://ports.ubuntu.com
- Preparations via chroot
Will add hardkernel keys and repositories, fix ubuntu respository list and install the basic set of tools for a minimal imagesudo chroot target cat << EOF > /etc/apt/sources.list deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe restricted deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe restricted deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main universe restricted deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main universe restricted deb http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security universe deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security multiverse deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security multiverse EOF apt-get update apt-get install software-properties-common u-boot-tools isc-dhcp-client ubuntu-minimal ssh apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D986B59D echo "deb http://deb.odroid.in/c1/ xenial main" > /etc/apt/sources.list.d/odroid.list apt-get update apt-get install linux-image-c1 bootini
At this point.. You'll have several errors, That's fine.
You can ignore it right now.cp /boot/uImage* /media/boot/uImage
- Setup ethernet as DHCP and create the loopback interface
cat << EOF > /etc/network/interfaces.d/lo auto lo iface lo inet loopback EOF cat << EOF > /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet dhcp EOF
- Setup fstab
echo "LABEL=boot /media/boot vfat defaults 0 0" >> /etc/fstab echo "UUID=e139ce78-9841-40fe-8823-96a304a09859 / ext4 errors=remount-ro,noatime 0 1" >> /etc/fstab
- Setting a root password
passwd root
- (Optional) Allow root login via ssh
sed -i s/"PermitRootLogin without-password"/"PermitRootLogin yes"/g /etc/ssh/sshd_config
- Clean ups and preparation to test the image.
exit sudo umount target/media/boot sudo umount target sudo sync sudo losetup -d /dev/loop0
- Flashing your image
dd if=image.img of=/dev/sdX bs=1M
- After your first boot, install the u-boot package to get updates.
sudo apt-get install u-boot