Skip to content

Instantly share code, notes, and snippets.

@vsefer
Last active April 4, 2022 15:42
Show Gist options
  • Save vsefer/81b1d4376dcea8e2fa2a to your computer and use it in GitHub Desktop.
Save vsefer/81b1d4376dcea8e2fa2a to your computer and use it in GitHub Desktop.
PXEboot with OpenWRT and TP-Link WDR-4300

Local setup:

Create working directory:

mkdir ~/pxeboot
cd ~/pxeboot

Download grml netboot version:

wget http://download.grml.org/grml_netboot_package_grml64-full_2014.11.tar.bz2

Extract image:

tar -xvf grml_netboot_package_grml64-full_2014.11.tar.bz2
mv grml_netboot_package_grml64-full_2014.11/* ~/pxeboot
rm -fr grml_netboot_package_grml64-full_2014.11
rm grml_netboot_package_grml64-full_2014.11.tar.bz2

Download and mount grml liveCD image:

wget http://download.grml.org/grml64-full_2014.11.iso
mkdir /tmp/grml
sudo mount -o loop grml64-full_2014.11.iso /tmp/grml

Sync with working directory:

rsync -avP /tmp/grml/ ~/pxeboot/tftpboot

Edit pxelinux.cfg:

vim tftpboot/pxelinux.cfg/default

It should look like this:

default grml
label grml
  menu DEFAULT
  menu label grml64-full ^Standard (2014.11, amd64)
  kernel vmlinuz
  append initrd=initrd.img root=/dev/nfs rw nfsroot=192.168.1.1:/mnt/tftpboot/ boot=live live-media-path=/live/grml64-full/ bootid=grml64full201411 apm=power-off nomce noprompt noeject vga=791 

  text help
                                        Grml is a Debian based Linux live
                                        system for system administrators
                                        and users of text tools.

                                                         http://grml.org/
  endtext

Prepare USB keychain and sync files:

mkfs.ext4 -L pxeboot /dev/sdn1 # replace sdn1 with your partition
mkdir /tmp/pxebootusb
mount /dev/sdn1 /tmp/pxebootusb
rsync -avP ~/pxeboot/ /tmp/pxebootusb

Prepare OpenWRT router:

Install necessary packages:

opkg update
opkg install nfs-kernel-server kmod-fs-ext4 kmod-usb-storage block-mount

Insert and mount USB keychain :

mount /dev/sda1 /mnt

Make permanent/automount:

vim /etc/config/fstab
config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '0'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'

config 'mount'
        option 'target'   '/mnt'
        option 'label'    'pxeboot'
        option 'fstype'   'ext4'
        option 'options'  'rw,sync'
        option 'enabled'  '1'
        option 'enabled_fsck' '0'
/etc/init.d/fstab enable

Create NFS export

vim /etc/exports 
/mnt/tftpboot   *(rw,sync,no_subtree_check)

Restart nfs service:

/etc/init.d/rpcd restart
/etc/init.d/nfsd restart

Modify network configuration:

vim /etc/config/network 
config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0.1'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'wlan1'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 0t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '5 0t'

Restart network service:

/etc/init.d/network restart

Modify dnsmasq configuration:

vim /etc/config/dhcp 
config dnsmasq
        option domainneeded '1'
        option boguspriv '1'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.auto'
        option localservice '1'
        option enable_tftp '1'
        option tftp_root '/mnt/tftpboot'
        option dhcp_boot 'pxelinux.0'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv6 'server'
        option ra 'server'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'

config odhcpd 'odhcpd'
        option maindhcp '0'
        option leasefile '/tmp/hosts/odhcpd'
        option leasetrigger '/usr/sbin/odhcpd-update'

Restart dnsmasq service:

/etc/init.d/dnsmasq restart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment