Building LEDE / Openwrt for x86
EDIT: 2018-03-12, LEDE and Openwrt have merged. References to LEDE here can be substituted for Openwrt.
I had a need to run LEDE on x86 hardware. Building a custom LEDE seemed a bit daunting at first, but turned out to be quite straight forward. The build described here is tailored for Qotom J1900 mini PC.
Building the custom image
I chose to build the LEDE x86_64 image within a Docker container like so:
$ docker pull centos
$ docker run -it centos /bin/bash
<container>$ cd root/
<container>$ yum install wget make gcc openssl which xz perl zlib-static ncurses-devel perl-Thread-Queue.noarch gcc-c++ git file unzip bzip2
<container>$ wget https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-imagebuilder-17.01.1-x86-64.Linux-x86_64.tar.xz
<container>$ tar -xvJf lede-imagebuilder-17.01.1-x86-64.Linux-x86_64.tar.xz
<container>$ cd lede-imagebuilder-17.01.1-x86-64.Linux-x86_64
Build the image. I want USB keyboard support, and don’t need e1000 or realtek drivers
make image packages="-kmod-e1000e -kmod-e1000 -kmod-r8169 kmod-usb-hid kmod-usb3 kmod-usb2"
The new images are located under ./bin/targets/x86/64
inside the build environment
# ls -l bin/x86/64
total 35852
-rw-r--r--. 1 root root 5587318 May 9 20:36 lede-17.01.1-x86-64-combined-ext4.img.gz
-rw-r--r--. 1 root root 19466174 May 9 20:36 lede-17.01.1-x86-64-combined-squashfs.img
-rw-r--r--. 1 root root 2439806 May 9 20:36 lede-17.01.1-x86-64-generic-rootfs.tar.gz
-rw-r--r--. 1 root root 1968 May 9 20:36 lede-17.01.1-x86-64-generic.manifest
-rw-r--r--. 1 root root 2711691 May 9 20:36 lede-17.01.1-x86-64-rootfs-ext4.img.gz
-rw-r--r--. 1 root root 2164670 May 9 20:36 lede-17.01.1-x86-64-rootfs-squashfs.img
-rw-r--r--. 1 106 111 2620880 Apr 17 17:53 lede-17.01.1-x86-64-vmlinuz
-rw-r--r--. 1 root root 731 May 9 20:36 sha256sums
Just need the combined-ext4
image. Copy that out from the docker container to USB flash drive:
$ docker cp <container id>:/root/lede-imagebuilder-17.01.1-x86-64.Linux-x86_64/bin/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz /mnt
Installing the custom image
- boot the mini PC using any Linux rescue disk. (I used SystemRescueCD)
- insert a second USB flash disk containing the image created above
- write the image to the mini PC internal drive:
$ mount /dev/sdc1 /mnt; cd /mnt
$ gunzip lede-17.01.1-x86-64-combined-ext4.img.gz
$ dd if=lede-17.01.1-x86-64-combined-ext4.img.gz of=/dev/sda
- (optionally) resize the LEDE data partition to fill the entire size of the internal storage
- use fdisk/parted to remove second partition (
/dev/sda2
) - re-add second partition with the same starting block as before, but make the end block the last block on the disk
- save the new partition table
- run
e2fsck -f /dev/sda2
followed byresize2fs /dev/sda2
- reboot the device
- access the console via VGA console, or telnet to IP
192.168.1.1
(no root password!)