diff --git a/builder/nexmon.yml b/builder/nexmon.yml index 6b50c129..879b5418 100644 --- a/builder/nexmon.yml +++ b/builder/nexmon.yml @@ -1,164 +1,40 @@ -# -# Install nexmon brcmfmac firmware and drivers from source as needed -# +# Install nexmon to fix wireless scanning (takes 2.5G of space) +- name: clone nexmon repository + git: + repo: https://github.com/DrSchottky/nexmon.git + dest: /usr/local/src/nexmon -- name: "Check for /lib/modules/{{ item.kernel }}/build to see if we can" - stat: path="/lib/modules/{{item.kernel}}/build" - register: kernel_headers +- name: make firmware + shell: "source ./setup_env.sh && make" + args: + executable: /bin/bash + chdir: /usr/local/src/nexmon/ -- name: "Kernel {{item.kernel}} exists; installing nexmon" - when: - - kernel_headers.stat.exists - block: - - name: "Check for staged firmware {{ item.firmware }}" - stat: path="{{ staging }}/firmware/{{ item.firmware }}" - register: firmware +- name: make firmware patch + shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/{{ item.patch }}/nexmon/ && make" + args: + executable: /bin/bash + chdir: /usr/local/src/nexmon/ + environment: + QEMU_UNAME: "{{ item.kernel }}" + ARCHFLAGS: "{{ item.arch_flags }}" - - name: "Check for staged kernel module {{ item.kernel }}/brcmfmac.ko" - stat: path="{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko" - register: kmodule +- name: install new firmware (bcm43455c0) + copy: + src: "/usr/local/src/nexmon/patches/{{ item.patch }}/nexmon/{{ item.firmware }}" + dest: "/usr/lib/firmware/brcm/{{ item.firmware }}" + follow: true + environment: + QEMU_UNAME: "{{ item.kernel }}" + ARCHFLAGS: "{{ item.arch_flags }}" - - name: Build nexmon as needed - when: - - not firmware.stat.exists or not kmodule.stat.exists - block: +- name: backup original driver + command: "mv /usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz /usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz.orig" - - name: Check for existence of nexmon repo - stat: path="/usr/local/src/nexmon" - register: nexmongit +- name: copy modified driver + copy: + src: "/usr/local/src/nexmon/patches/driver/brcmfmac_6.1.y-nexmon/brcmfmac.ko" + dest: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko" - - name: clone nexmon repository - when: not nexmongit.stat.exists - git: - repo: "https://github.com/DrSchottky/nexmon.git" - dest: /usr/local/src/nexmon - register: nexmongit - - - name: prepare nexmon build tree - when: nexmongit.changed - shell: "source ./setup_env.sh && make" - args: - executable: /bin/bash - chdir: /usr/local/src/nexmon/ - - - name: Build firmware if needed - when: not firmware.stat.exists - environment: - QEMU_UNAME: "{{ item.kernel }}" - ARCHFLAGS: "{{ item.arch_flags }}" - block: - - name: "make firmware patch {{ item.patch }}" - shell: | - source ./setup_env.sh - cd patches/{{ item.patch }}/nexmon/ - make clean - make - args: - executable: /bin/bash - chdir: /usr/local/src/nexmon/ - - - name: make firmware staging dir - file: - state: directory - path: "{{ staging }}/firmware" - - - name: 'copy firmware {{ item.firmware }} to staging directory' - copy: - src: '/usr/local/src/nexmon/patches/{{ item.patch }}/nexmon/{{ item.firmware }}' - dest: '{{ staging }}/firmware/' - follow: true - - - name: Build module as needed - when: not kmodule.stat.exists - environment: - QEMU_UNAME: "{{ item.kernel }}" - ARCHFLAGS: "{{ item.arch_flags }}" - block: - - name: "make brcmfmac.ko module {{ item.kernel }}" - when: firmware.stat.exists - # if not firmware.stat.exists, then module would have been installed above - shell: | - export QEMU_UNAME={{ item.kernel }} - uname -a - source ./setup_env.sh - cd patches/{{ item.patch }}/nexmon/ - make clean - make brcmfmac.ko - args: - executable: /bin/bash - chdir: /usr/local/src/nexmon/ - environment: - QEMU_UNAME: "{{ item.kernel }}" - ARCHFLAGS: "{{ item.arch_flags }}" - - - name: make modules staging dir - file: - state: directory - path: "{{ staging }}/modules/{{ item.kernel }}" - - - name: copy modified driver to staging - copy: - src: "/usr/local/src/nexmon/patches/driver/brcmfmac_{{ kernel.min }}.y-nexmon/brcmfmac.ko" - dest: "{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko" - follow: true - register: brcmfmac_installed - # end of nexmon build block. products should now be in staging if they were not already - - # check again, just to be sure - - name: "Check for staged firmware {{ item.firmware }}" - stat: path="{{ staging }}/firmware/{{ item.firmware }}" - register: firmware - - # install nexmon firmware from staging directory - - name: 'install nexmon firmware {{ item.firmware }}' - when: firmware.stat.exists - block: - - name: "Install nexmon firware in /usr/lib/firmware/brcm" - copy: - src: '{{ staging }}/firmware/{{ item.firmware }}' - dest: '/usr/lib/firmware/brcm/{{ item.firmware }}' - follow: true - - - name: "Check for staged kernel module {{ item.kernel }}/brcmfmac.ko" - stat: path="{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko" - register: kmodule - - - name: "Install kernel module {{ item.kernel }}/brcmfmac.ko from staging" - when: kmodule.stat.exists - block: - # remove originals, and keep track - - name: "Remove old compressed kernel module (if there)" - file: - state: absent - path: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz" - register: brcmfmac_ko_xz - ignore_errors: true - - - name: "Remove old uncompressed kernel module (if there)" - file: - state: absent - path: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko" - register: brcmfmac_ko - ignore_errors: true - - - name: "install nexmon kernel driver {{item.kernel}}" - copy: - src: "{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko" - dest: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko" - follow: true - register: brcmfmac_installed - - - name: "xz compress driver: {{brcmfmac_ko_xz.changed}}" - when: brcmfmac_ko_xz.changed - command: xz -k brcmfmac.ko - args: - chdir: '/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac' - - - name: "remove uncompressed driver: {{brcmfmac_ko.changed}}" - when: not brcmfmac_ko.changed - file: - state: absent - path: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko" - - - name: update module dependencies - command: "/sbin/depmod -a {{ item.kernel }}" +- name : load brcmfmac drivers + command: "/sbin/depmod -a {{ item.kernel}}"