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 workspace
mkdir ~/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 OS
fdisk image.img
n
p
1
+128M
t
c
n
p
2
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 debootstrap
mkdir -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 image
sudo 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