From 8e99ae419dacf3850d706129d112fb533408c4dd Mon Sep 17 00:00:00 2001 From: jayofelony Date: Sun, 2 Jun 2024 12:47:51 +0200 Subject: [PATCH] Version 2.9.2 Signed-off-by: jayofelony --- .idea/deployment.xml | 19 +- Makefile | 17 +- builder/combined.json.pkr.hcl | 26 +- .../etc/NetworkManager/NetworkManager.conf | 5 + builder/data/32bit/etc/dhcpcd.conf | 62 --- .../32bit/etc/network/interfaces.d/eth0-cfg | 2 + .../32bit/etc/network/interfaces.d/lo-cfg | 2 + .../32bit/etc/network/interfaces.d/usb0-cfg | 8 + .../32bit/etc/network/interfaces.d/wlan0-cfg | 2 + builder/extras/nexmon.yml | 40 -- builder/raspberrypi32.json.pkr.hcl | 24 +- builder/raspberrypi32.yml | 478 ++++++++---------- builder/raspberrypi64.json.pkr.hcl | 8 +- builder/raspberrypi64.yml | 126 ++--- pwnagotchi/_version.py | 2 +- pyproject.toml | 6 +- requirements.txt | 4 +- 17 files changed, 324 insertions(+), 507 deletions(-) create mode 100644 builder/data/32bit/etc/NetworkManager/NetworkManager.conf delete mode 100644 builder/data/32bit/etc/dhcpcd.conf create mode 100644 builder/data/32bit/etc/network/interfaces.d/eth0-cfg create mode 100644 builder/data/32bit/etc/network/interfaces.d/lo-cfg create mode 100644 builder/data/32bit/etc/network/interfaces.d/usb0-cfg create mode 100644 builder/data/32bit/etc/network/interfaces.d/wlan0-cfg delete mode 100644 builder/extras/nexmon.yml diff --git a/.idea/deployment.xml b/.idea/deployment.xml index 7d23be04..3a8e62ab 100644 --- a/.idea/deployment.xml +++ b/.idea/deployment.xml @@ -1,23 +1,6 @@ - + \ No newline at end of file diff --git a/Makefile b/Makefile index e2786abf..14a71834 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PACKER_VERSION := 1.10.1 +PACKER_VERSION := 1.11.0 PWN_HOSTNAME := pwnagotchi PWN_VERSION := $(shell cut -d"'" -f2 < pwnagotchi/_version.py) @@ -26,7 +26,7 @@ UNSHARE := $(UNSHARE) --uts endif # sudo apt-get install qemu-user-static qemu-utils -all: clean packer image +all: packer image update_langs: @for lang in pwnagotchi/locale/*/; do\ @@ -40,22 +40,23 @@ compile_langs: ./scripts/language.sh compile $$(basename $$lang); \ done -packer: clean +packer: curl https://releases.hashicorp.com/packer/$(PACKER_VERSION)/packer_$(PACKER_VERSION)_linux_amd64.zip -o /tmp/packer.zip - unzip /tmp/packer.zip -d /tmp + unzip -o /tmp/packer.zip -d /tmp sudo mv /tmp/packer /usr/bin/packer -image: clean packer +image: packer export LC_ALL=en_GB.UTF-8 cd builder && sudo /usr/bin/packer init combined.json.pkr.hcl && sudo $(UNSHARE) /usr/bin/packer build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" combined.json.pkr.hcl -bullseye: clean packer +32bit: packer export LC_ALL=en_GB.UTF-8 - cd builder && sudo /usr/bin/packer init raspberrypi32.json.pkr.hcl && sudo $(UNSHARE) /usr/bin/packer build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" raspberrypi32.json.pkr.hcl + cd builder && sudo /usr/bin/packer init raspberrypi32.json.pkr.hcl && QEMU_CPU=arm1176 sudo -E $(UNSHARE) /usr/bin/packer build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" raspberrypi32.json.pkr.hcl -bookworm: clean packer +64bit: packer export LC_ALL=en_GB.UTF-8 cd builder && sudo /usr/bin/packer init raspberrypi64.json.pkr.hcl && sudo $(UNSHARE) /usr/bin/packer build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" raspberrypi64.json.pkr.hcl clean: - rm -rf /tmp/packer* + - rm -rf /tmp/LICENSE.txt diff --git a/builder/combined.json.pkr.hcl b/builder/combined.json.pkr.hcl index 4186deeb..e4f0877f 100644 --- a/builder/combined.json.pkr.hcl +++ b/builder/combined.json.pkr.hcl @@ -25,7 +25,7 @@ source "arm" "rpi64-pwnagotchi" { file_checksum_type = "sha256" file_target_extension = "xz" file_unarchive_cmd = ["unxz", "$ARCHIVE_PATH"] - image_path = "../pwnagotchi-64bit.img" + image_path = "../../../pwnagotchi-64bit.img" qemu_binary_source_path = "/usr/libexec/qemu-binfmt/aarch64-binfmt-P" qemu_binary_destination_path = "/usr/libexec/qemu-binfmt/aarch64-binfmt-P" image_build_method = "resize" @@ -50,12 +50,12 @@ source "arm" "rpi64-pwnagotchi" { } source "arm" "rpi32-pwnagotchi" { - file_checksum_url = "https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2024-03-12/2024-03-12-raspios-bullseye-armhf-lite.img.xz.sha256" - file_urls = ["https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2024-03-12/2024-03-12-raspios-bullseye-armhf-lite.img.xz"] + file_checksum_url = "https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz.sha256" + file_urls = ["https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz"] file_checksum_type = "sha256" file_target_extension = "xz" file_unarchive_cmd = ["unxz", "$ARCHIVE_PATH"] - image_path = "../pwnagotchi-32bit.img" + image_path = "../../../pwnagotchi-32bit.img" qemu_binary_source_path = "/usr/libexec/qemu-binfmt/arm-binfmt-P" qemu_binary_destination_path = "/usr/libexec/qemu-binfmt/arm-binfmt-P" image_build_method = "resize" @@ -67,7 +67,7 @@ source "arm" "rpi32-pwnagotchi" { start_sector = "8192" filesystem = "fat" size = "256M" - mountpoint = "/boot" + mountpoint = "/boot/firmware" } image_partitions { name = "root" @@ -101,6 +101,13 @@ build { provisioner "shell" { inline = ["chmod +x /usr/bin/*"] } + provisioner "shell" { + inline = ["mkdir -p /usr/local/src/pwnagotchi"] + } + provisioner "file" { + destination = "/usr/local/src/pwnagotchi/" + source = "../" + } provisioner "file" { destination = "/etc/systemd/system/" @@ -142,10 +149,16 @@ build { "data/32bit/usr/bin/pwnlib", ] } + provisioner "shell" { + inline = ["mkdir -p /usr/local/src/pwnagotchi"] + } + provisioner "file" { + destination = "/usr/local/src/pwnagotchi/" + source = "../" + } provisioner "shell" { inline = ["chmod +x /usr/bin/*"] } - provisioner "file" { destination = "/etc/systemd/system/" sources = [ @@ -167,7 +180,6 @@ build { provisioner "ansible-local" { command = "ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 PWN_VERSION=${var.pwn_version} PWN_HOSTNAME=${var.pwn_hostname} ansible-playbook" extra_arguments = ["--extra-vars \"ansible_python_interpreter=/usr/bin/python3\""] - playbook_dir = "extras/" playbook_file = "raspberrypi32.yml" } } \ No newline at end of file diff --git a/builder/data/32bit/etc/NetworkManager/NetworkManager.conf b/builder/data/32bit/etc/NetworkManager/NetworkManager.conf new file mode 100644 index 00000000..3d2022a5 --- /dev/null +++ b/builder/data/32bit/etc/NetworkManager/NetworkManager.conf @@ -0,0 +1,5 @@ +[main] +plugins=keyfile,ifupdown + +[ifupdown] +managed=true diff --git a/builder/data/32bit/etc/dhcpcd.conf b/builder/data/32bit/etc/dhcpcd.conf deleted file mode 100644 index 90444ad0..00000000 --- a/builder/data/32bit/etc/dhcpcd.conf +++ /dev/null @@ -1,62 +0,0 @@ -# A sample configuration for dhcpcd. -# See dhcpcd.conf(5) for details. - -# Allow users of this group to interact with dhcpcd via the control socket. -#controlgroup wheel - -# Inform the DHCP server of our hostname for DDNS. -hostname - -# Use the hardware address of the interface for the Client ID. -clientid -# or -# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361. -# Some non-RFC compliant DHCP servers do not reply with this set. -# In this case, comment out duid and enable clientid above. -#duid - -# Persist interface configuration when dhcpcd exits. -persistent - -# Rapid commit support. -# Safe to enable by default because it requires the equivalent option set -# on the server to actually work. -option rapid_commit - -# A list of options to request from the DHCP server. -option domain_name_servers, domain_name, domain_search, host_name -option classless_static_routes -# Respect the network MTU. This is applied to DHCP routes. -option interface_mtu - -# Most distributions have NTP support. -#option ntp_servers - -# A ServerID is required by RFC2131. -require dhcp_server_identifier - -# Generate SLAAC address using the Hardware Address of the interface -#slaac hwaddr -# OR generate Stable Private IPv6 Addresses based from the DUID -slaac private - -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -# !! DO NOT EDIT THESE LINES BELOW PLEASE !! -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -# static IP configuration: -denyinterfaces wlan0 - -interface eth0 -static domain_name_servers=8.8.8.8 1.1.1.1 -metric 201 - -interface usb0 -static ip_address=10.0.0.2/24 -static routers=10.0.0.1 -static domain_name_servers=10.0.0.1 8.8.8.8 1.1.1.1 -metric 202 - -interface bnep0 -static domain_name_servers=8.8.8.8 1.1.1.1 -metric 203 \ No newline at end of file diff --git a/builder/data/32bit/etc/network/interfaces.d/eth0-cfg b/builder/data/32bit/etc/network/interfaces.d/eth0-cfg new file mode 100644 index 00000000..2166051a --- /dev/null +++ b/builder/data/32bit/etc/network/interfaces.d/eth0-cfg @@ -0,0 +1,2 @@ +allow-hotplug eth0 +iface eth0 inet dhcp \ No newline at end of file diff --git a/builder/data/32bit/etc/network/interfaces.d/lo-cfg b/builder/data/32bit/etc/network/interfaces.d/lo-cfg new file mode 100644 index 00000000..18ff4764 --- /dev/null +++ b/builder/data/32bit/etc/network/interfaces.d/lo-cfg @@ -0,0 +1,2 @@ +auto lo +iface lo inet loopback \ No newline at end of file diff --git a/builder/data/32bit/etc/network/interfaces.d/usb0-cfg b/builder/data/32bit/etc/network/interfaces.d/usb0-cfg new file mode 100644 index 00000000..3521780a --- /dev/null +++ b/builder/data/32bit/etc/network/interfaces.d/usb0-cfg @@ -0,0 +1,8 @@ +allow-hotplug usb0 +iface usb0 inet static + address 10.0.0.2 + netmask 255.255.255.0 + network 10.0.0.0 + broadcast 10.0.0.255 + gateway 10.0.0.1 + metric 101 diff --git a/builder/data/32bit/etc/network/interfaces.d/wlan0-cfg b/builder/data/32bit/etc/network/interfaces.d/wlan0-cfg new file mode 100644 index 00000000..f5425694 --- /dev/null +++ b/builder/data/32bit/etc/network/interfaces.d/wlan0-cfg @@ -0,0 +1,2 @@ +allow-hotplug wlan0 +iface wlan0 inet static \ No newline at end of file diff --git a/builder/extras/nexmon.yml b/builder/extras/nexmon.yml deleted file mode 100644 index 6cdaafac..00000000 --- a/builder/extras/nexmon.yml +++ /dev/null @@ -1,40 +0,0 @@ -# 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: make firmware - shell: "source ./setup_env.sh && make" - args: - executable: /bin/bash - chdir: /usr/local/src/nexmon/ - -- name: "make firmware patch ({{ item.name }})" - 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: "install new firmware ({{ item.name }})" - 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: 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: 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 : load brcmfmac drivers - command: "/sbin/depmod -a {{ item.kernel }}" diff --git a/builder/raspberrypi32.json.pkr.hcl b/builder/raspberrypi32.json.pkr.hcl index 0b7398bd..4880d521 100644 --- a/builder/raspberrypi32.json.pkr.hcl +++ b/builder/raspberrypi32.json.pkr.hcl @@ -1,8 +1,8 @@ packer { required_plugins { arm = { - version = "1.0.0" - source = "github.com/cdecoux/builder-arm" + version = ">=1.0.0" + source = "github.com/michalfita/cross" } ansible = { source = "github.com/hashicorp/ansible" @@ -20,12 +20,12 @@ variable "pwn_version" { } source "arm" "rpi32-pwnagotchi" { - file_checksum_url = "https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2024-03-12/2024-03-12-raspios-bullseye-armhf-lite.img.xz.sha256" - file_urls = ["https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2024-03-12/2024-03-12-raspios-bullseye-armhf-lite.img.xz"] + file_checksum_url = "https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz.sha256" + file_urls = ["https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz"] file_checksum_type = "sha256" file_target_extension = "xz" file_unarchive_cmd = ["unxz", "$ARCHIVE_PATH"] - image_path = "../../pwnagotchi-32bit.img" + image_path = "../../../pwnagotchi-32bit.img" qemu_binary_source_path = "/usr/libexec/qemu-binfmt/arm-binfmt-P" qemu_binary_destination_path = "/usr/libexec/qemu-binfmt/arm-binfmt-P" image_build_method = "resize" @@ -37,7 +37,7 @@ source "arm" "rpi32-pwnagotchi" { start_sector = "8192" filesystem = "fat" size = "256M" - mountpoint = "/boot" + mountpoint = "/boot/firmware" } image_partitions { name = "root" @@ -51,6 +51,9 @@ source "arm" "rpi32-pwnagotchi" { build { name = "Raspberry Pi 32 Pwnagotchi" sources = ["source.arm.rpi32-pwnagotchi"] + provisioner "shell" { + inline = ["uname -m"] + } provisioner "file" { destination = "/usr/bin/" sources = [ @@ -66,7 +69,13 @@ build { provisioner "shell" { inline = ["chmod +x /usr/bin/*"] } - + provisioner "shell" { + inline = ["mkdir -p /usr/local/src/pwnagotchi"] + } + provisioner "file" { + destination = "/usr/local/src/pwnagotchi/" + source = "../" + } provisioner "file" { destination = "/etc/systemd/system/" sources = [ @@ -88,7 +97,6 @@ build { provisioner "ansible-local" { command = "ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 PWN_VERSION=${var.pwn_version} PWN_HOSTNAME=${var.pwn_hostname} ansible-playbook" extra_arguments = ["--extra-vars \"ansible_python_interpreter=/usr/bin/python3\""] - playbook_dir = "extras/" playbook_file = "raspberrypi32.yml" } } \ No newline at end of file diff --git a/builder/raspberrypi32.yml b/builder/raspberrypi32.yml index cfdc1a3a..d4b1aaac 100644 --- a/builder/raspberrypi32.yml +++ b/builder/raspberrypi32.yml @@ -4,46 +4,15 @@ gather_facts: true become: true vars: - boards: - - { - kernel: "6.1.21+", - name: "PiZeroW", - firmware: "brcmfmac43430-sdio.bin", - patch: "bcm43430a1/7_45_41_46", - cpu: arm1176, - arch_flags: "-arch armv6l" - } - - { - kernel: "6.1.21-v7+", - name: "PiZero2W", - firmware: "brcmfmac43436-sdio.bin", - patch: "bcm43436b0/9_88_4_65", - cpu: any, #cortex-a53 - arch_flags: "-arch armv7l" - } - - { - kernel: "6.1.21-v7l+", - name: "Pi4b_32", - firmware: "brcmfmac43455-sdio.bin", - patch: "bcm43455c0/7_45_206", - cpu: any, #cortex-a72 - arch_flags: "-arch armv7l" - } kernel: - min: "6.1" - full: "6.1.21+" - full_2w: "6.1.21-v7+" - full_4b: "6.1.21-v7l+" - arch: "v6l" + min: "6.6" + full: "6.6.31+rpt-rpi-v6" pwnagotchi: hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}" - version: "{{ lookup('env', 'PWN_VERSION') | default('pwnagotchi-torch', true) }}" - custom_plugin_dir: "/usr/local/share/pwnagotchi/custom-plugins" + version: "{{ lookup('env', 'PWN_VERSION') | default('pwnagotchi', true) }}" services: enable: - bettercap.service - - bluetooth.service - - dphys-swapfile.service - fstrim.timer - pwnagotchi.service - pwngrid-peer.service @@ -52,25 +21,23 @@ - apt-daily-upgrade.timer - apt-daily.service - apt-daily.timer + - bluetooth.service - ifup@wlan0.service - - triggerhappy.service - - wpa_supplicant.service packages: caplets: source: "https://github.com/jayofelony/caplets.git" bettercap: source: "https://github.com/jayofelony/bettercap.git" - url: "https://github.com/jayofelony/bettercap/releases/download/2.32.2/bettercap-2.32.2-armhf.zip" ui: "https://github.com/bettercap/ui/releases/download/v1.3.0/ui.zip" pwngrid: source: "https://github.com/jayofelony/pwngrid.git" url: "https://github.com/jayofelony/pwngrid/releases/download/v1.10.7/pwngrid-1.10.7-armhf.zip" torch: - wheel: "torch-2.1.0a0+gitunknown-cp39-cp39-linux_armv6l.whl" - url: "https://github.com/Sniffleupagus/Torch4Pizero/releases/download/v1.0.0/torch-2.1.0a0+gitunknown-cp39-cp39-linux_armv6l.whl" + wheel: "torch-2.1.0a0+gita8e7c98-cp311-cp311-linux_armv6ll.whl" + url: "https://github.com/Sniffleupagus/Torch4Pizero/releases/download/py0torch-bookworm-2024-05/torch-2.1.0a0+gita8e7c98-cp311-cp311-linux_armv6l.whl" torchvision: - wheel: "torchvision-0.16.0a0-cp39-cp39-linux_armv6l.whl" - url: "https://github.com/Sniffleupagus/Torch4Pizero/releases/download/v1.0.0/torchvision-0.16.0a0-cp39-cp39-linux_armv6l.whl" + wheel: "torchvision-0.16.0+fbb4cc5-cp311-cp311-linux_armv6ll.whl" + url: "https://github.com/Sniffleupagus/Torch4Pizero/releases/download/py0torch-bookworm-2024-05/torchvision-0.16.0+fbb4cc5-cp311-cp311-linux_armv6l.whl" apt: downgrade: - libpcap-dev_1.9.1-4_armhf.deb @@ -85,111 +52,142 @@ - firmware-realtek - libpcap-dev - libpcap0.8 - - libpcap0.8-dev - libpcap0.8-dbg + - libpcap0.8-dev remove: - avahi-daemon - nfs-common - triggerhappy - wpasupplicant install: + - aircrack-ng - autoconf - - bc - bison - bluez - bluez-tools - build-essential - curl - - dkms - dphys-swapfile - - espeak-ng - - evtest - fbi + - firmware-atheros + - firmware-brcm80211 + - firmware-libertas + - firmware-misc-nonfree + - firmware-realtek - flex - - fonts-dejavu - - fonts-dejavu-core - - fonts-dejavu-extra - - fonts-freefont-ttf - g++ - gawk - gcc-arm-none-eabi - git - libatlas-base-dev - - libavcodec58 - - libavformat58 - - libblas-dev - - libbluetooth-dev - - libbz2-dev - - libc-ares-dev - libc6-dev - - libcpuinfo-dev - - libcurl4-openssl-dev + - libcurl-ocaml-dev - libdbus-1-dev - libdbus-glib-1-dev - - libeigen3-dev - - libelf-dev - - libffi-dev - libfl-dev - - libfuse-dev - - libgdbm-dev - - libgl1-mesa-glx - libgmp3-dev - - libgstreamer1.0-0 - - libhdf5-dev - - liblapack-dev - - libncursesw5-dev - libnetfilter-queue-dev - - libopenblas-dev - libopenjp2-7 - - libopenmpi-dev - - libopenmpi3 - libpcap-dev - - libprotobuf-dev - libraspberrypi-bin - libraspberrypi-dev - libraspberrypi-doc - libraspberrypi0 - - libsleef-dev - - libsqlite3-dev - libssl-dev - libssl-ocaml-dev - - libswscale5 - - libtiff5 - libtool - - libts-bin - libusb-1.0-0-dev - - lsof - make - ntp - - python3-dbus - - python3-flask - - python3-flask-cors - - python3-flaskext.wtf - - python3-pil + - pkg-config + - python3-dev - python3-pip - - python3-protobuf - - python3-smbus + - python3-setuptools - qpdf - raspberrypi-kernel-headers - rsync - - screen - tcpdump - texinfo - - time - - tk-dev - unzip - - vim - wget - wl - xxd - zlib1g-dev - + environment: + ARCHFLAGS: "-arch armv6l" + tasks: + # First we install packages + - name: install packages + apt: + name: "{{ packages.apt.install }}" + state: latest + update_cache: yes + install_recommends: no + + - name: update pip3, setuptools, wheel + shell: "python3 -m pip install --upgrade pip setuptools wheel --break-system-packages" + args: + executable: /bin/bash + chdir: /usr/local/src + + - name: install 32bit torch + shell: "python3 -m pip install {{ packages.torch.url }} {{ packages.torchvision.url }} --break-system-packages" + args: + executable: /bin/bash + environment: + QEMU_UNAME: "{{ kernel.full }}" + ARCHFLAGS: "-arch armv6l" + + # Now we set up /boot/firmware - name: Create pi user copy: - dest: /boot/userconf + dest: /boot/firmware/userconf content: | - pi:$6$3jNr0GA9KIyt4hmM$efeVIopdMQ8DGgEPCWWlbx3mJJNAYci1lEXGdlky0xPyjqwKNbwTL5SrCcpb4144C4IvzWjn7Iv.QjqmU7iyT/ + pi:$5$733Efsksay$SEFUKemv8FaNAu6X4GUfxdSzSDh6PbpOcdtNe5b7Nt0 + + - name: enable ssh on boot + file: + path: /boot/firmware/ssh + state: touch + + - name: remove current rc.local + file: + path: /etc/rc.local + state: absent + + - name: change root partition + replace: + dest: /boot/firmware/cmdline.txt + backup: no + regexp: "root=PARTUUID=[a-zA-Z0-9\\-]+" + replace: "root=/dev/mmcblk0p2" + + - name: configure /boot/firmware/cmdline.txt + lineinfile: + path: /boot/firmware/cmdline.txt + backrefs: True + state: present + backup: no + regexp: '(.*)$' + line: '\1 modules-load=dwc2,g_ether' + + - name: setup /boot/firmware/config.txt + blockinfile: + path: /boot/firmware/config.txt + insertafter: EOF + block: | + dtparam=i2c1=on + dtparam=i2c_arm=on + dtparam=spi=on + gpu_mem=1 + dtoverlay=dwc2 + #dtoverlay=disable-wifi + enable_uart=1 + + [pi0] + dtoverlay=spi0-0cs + #dtoverlay=disable-wifi - name: change hostname lineinfile: @@ -208,55 +206,14 @@ state: present when: hostname.changed - - name: setup /boot/config.txt - blockinfile: - path: /boot/config.txt - insertafter: EOF - block: | - dtparam=i2c1=on - dtparam=i2c_arm=on - dtparam=spi=on - gpu_mem=1 - dtoverlay=dwc2 - #dtoverlay=disable-wifi - - [pi0] - dtoverlay=spi0-0cs - #dtoverlay=disable-wifi - - [pi3] - dtoverlay=spi0-0cs - #dtoverlay=disable-wifi - - [pi4] - dtoverlay=spi0-0cs - #dtoverlay=disable-wifi - - - name: Create custom plugin directory - file: - path: '{{ pwnagotchi.custom_plugin_dir }}' - state: directory - - - name: remove current rc.local - file: - path: /etc/rc.local - state: absent - - - name: update apt package cache - apt: - update_cache: yes - - - name: install packages - apt: - name: "{{ packages.apt.install }}" + # Now we disable sap and a2dp, we don't use them on rpi + - name: disable sap plugin for bluetooth.service + lineinfile: + dest: /lib/systemd/system/bluetooth.service + regexp: '^ExecStart=/usr/libexec/bluetooth/bluetoothd$' + line: 'ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=sap,a2dp' state: present - - name: update pip3, setuptools, wheel - shell: "python3 -m pip install --upgrade pip setuptools wheel" - args: - executable: /bin/bash - chdir: /usr/local/src - ########################################### # # libpcap v1.9 - build from source @@ -291,34 +248,60 @@ state: link # install latest hcxtools + - name: clone hcxtools + git: + repo: https://github.com/ZerBea/hcxtools.git + dest: /usr/local/src/hcxtools - #- name: clone hcxtools - # git: - # repo: https://github.com/ZerBea/hcxtools.git - # dest: /usr/local/src/hcxtools + - name: install hcxtools + shell: "make && make install" + args: + executable: /bin/bash + chdir: /usr/local/src/hcxtools - #- name: install hcxtools - # shell: "make && make install" - # args: - # executable: /bin/bash - # chdir: /usr/local/src/hcxtools + - name: remove hcxtools directory + file: + state: absent + path: /usr/local/src/hcxtools - #- name: remove hcxtools directory - # file: - # state: absent - # path: /usr/local/src/hcxtools + # Installing nexmon + - name: clone nexmon repository + git: + repo: https://github.com/DrSchottky/nexmon.git + dest: /usr/local/src/nexmon - ############################################################### - # Install nexmon to fix wireless scanning (takes 2.5G of space) - ############################################################### + - name: make firmware + shell: "source ./setup_env.sh && make" + args: + executable: /bin/bash + chdir: /usr/local/src/nexmon/ + environment: + QEMU_UNAME: "{{ kernel.full }}" + ARCHFLAGS: "-arch armv6l" - # Install nexmon for all boards - - name: build and install nexmon as needed - include_tasks: nexmon.yml - loop: "{{ boards }}" + - name: make firmware patch (bcm43430a1) + shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/bcm43430a1/7_45_41_46/nexmon/ && make" + args: + executable: /bin/bash + chdir: /usr/local/src/nexmon/ + environment: + QEMU_UNAME: "{{ kernel.full }}" + ARCHFLAGS: "-arch armv6l" + + - name: install new firmware (bcm43430a1) + copy: + src: /usr/local/src/nexmon/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin + dest: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin + follow: true + + - name: copy modified driver + copy: + src: "/usr/local/src/nexmon/patches/driver/brcmfmac_{{ kernel.min }}.y-nexmon/brcmfmac.ko" + dest: "/usr/lib/modules/{{ kernel.full }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko" + environment: + QEMU_UNAME: "{{ kernel.full }}" + ARCHFLAGS: "-arch armv6l" - # some pizero2w have the pizeroW wifi chip - # could this be a link instead of a copy? and force, only if not a link? - name: copy 43430-sdio as 43436s-sdio for the special 43430/1 /2 copy: src: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin @@ -333,9 +316,19 @@ loop: - /usr/lib/firmware/brcm/brcmfmac43430-sdio.clm_blob - /usr/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.clm_blob - - /usr/lib/firmware/brcm/brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.clm_blob - - /usr/lib/firmware/brcm/brcmfmac43436-sdio.raspberrypi,model-zero-2-w.clm_blob - /usr/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.clm_blob + - /usr/lib/firmware/brcm/brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.clm_blob + - /usr/lib/firmware/brcm/brcmfmac43436-sdio.clm_blob + - /usr/lib/firmware/brcm/brcmfmac43436-sdio.raspberrypi,model-zero-2-w.clm_blob + - /usr/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob + + - name: backup original driver + command: "mv /usr/lib/modules/{{ kernel.full }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz /usr/lib/modules/{{ kernel.full }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz.orig" + + - name: load brcmfmac drivers + command: "/sbin/depmod {{ kernel.full }}" + environment: + QEMU_UNAME: "{{ kernel.full }}" # To shrink the final image, remove the nexmon directory (takes 2.5G of space) post build and installation - name: Delete nexmon content & directory @@ -343,58 +336,36 @@ state: absent path: /usr/local/src/nexmon/ - - name: clone pwnagotchi repository - git: - repo: https://github.com/jayofelony/pwnagotchi.git - dest: /usr/local/src/pwnagotchi - register: pwnagotchigit + - name: Create custom config directory + file: + path: /etc/pwnagotchi/conf.d/ + state: directory + + #- name: clone pwnagotchi repository + # git: + # repo: https://github.com/jayofelony/pwnagotchi.git + # dest: /usr/local/src/pwnagotchi - # is this even necessary? Can't we just link from /home/pi/pwnagotchi to /usr/local/{bin,lib,etc} - # then just git update in the home dir and encourage hacking? - # make owned by pi.pi, and custom plugins. - name: build pwnagotchi wheel - command: "python3 setup.py sdist bdist_wheel" + command: "pip3 install . --no-cache-dir --break-system-packages" args: chdir: /usr/local/src/pwnagotchi - when: (pwnagotchigit.changed) or (pip_packages['pwnagotchi'] is undefined) or (pip_packages['pwnagotchi'] != pwnagotchi_version) - - - name: download torch whl - get_url: - url: "{{ packages.torch.url }}" - dest: /usr/local/src/ - - - name: download torchvision whl - get_url: - url: "{{ packages.torchvision.url }}" - dest: /usr/local/src/ - - - name: install 32-bit pwnagotchi wheel and dependencies with 32-bit torch wheels - pip: - name: - - "{{ lookup('fileglob', '/usr/local/src/pwnagotchi/dist/pwnagotchi*.whl') }}" - - "{{ packages.torch.url }}" - - "{{ packages.torchvision.url }}" - extra_args: "--no-cache-dir" - environment: - QEMU_CPU: arm1176 - QEMU_UNAME: "{{ kernel.full }}" - when: (pwnagotchigit.changed) or (pip_packages['pwnagotchi'] is undefined) or (pip_packages['pwnagotchi'] != pwnagotchi_version) - name: create /usr/local/share/pwnagotchi/ folder file: path: /usr/local/share/pwnagotchi/ state: directory + - name: Create custom plugin directory + file: + path: /usr/local/share/pwnagotchi/custom-plugins/ + state: directory + - name: remove pwnagotchi folder file: state: absent path: /usr/local/src/pwnagotchi - - name: remove torch whl - file: - state: absent - path: "{{ lookup('fileglob', '/usr/local/src/torch*.whl') }}" - ########################################## # # pwngrid, bettercap @@ -403,14 +374,14 @@ - name: Install go-1.21 unarchive: - src: https://go.dev/dl/go1.21.6.linux-armv6l.tar.gz + src: https://go.dev/dl/go1.22.3.linux-armv6l.tar.gz dest: /usr/local remote_src: yes register: golang - name: Update .bashrc for go-1.21 blockinfile: - dest: /home/pi/.bashrc + dest: /etc/profile state: present block: | export GOPATH=$HOME/go @@ -449,6 +420,16 @@ state: absent path: /usr/local/src/bettercap + #- name: download and install bettercap + # unarchive: + # src: "{{ packages.bettercap.url }}" + # dest: /usr/local/bin + # remote_src: yes + # exclude: + # - README.md + # - LICENSE.md + # mode: 0755 + - name: clone bettercap caplets git: repo: "{{ packages.caplets.source }}" @@ -481,11 +462,6 @@ path: /etc/pwnagotchi state: directory - - name: create log folder - file: - path: /home/pi/logs - state: directory - - name: check if user configuration exists stat: path: /etc/pwnagotchi/config.toml @@ -501,32 +477,16 @@ # ui.display.type = "waveshare_4" when: not user_config.stat.exists + - name: Delete motd + file: + state: absent + path: /etc/motd + - name: Delete motd 10-uname file: state: absent path: /etc/update-motd.d/10-uname - - name: enable ssh on boot - file: - path: /boot/ssh - state: touch - - - name: change root partition - replace: - dest: /boot/cmdline.txt - backup: no - regexp: "root=PARTUUID=[a-zA-Z0-9\\-]+" - replace: "root=/dev/mmcblk0p2" - - - name: configure /boot/cmdline.txt - lineinfile: - path: /boot/cmdline.txt - backrefs: True - state: present - backup: no - regexp: '(.*)$' - line: '\1 modules-load=dwc2,g_ether' - - name: add firmware packages to hold dpkg_selections: name: "{{ item }}" @@ -546,16 +506,7 @@ enabled: true state: stopped with_items: "{{ services.enable }}" - - #- name: remove golang build libraries - # file: - # state: absent - # path: /root/go - - #- name: remove golang - # file: - # state: absent - # path: /usr/local/go + register: enabled - name: make /root readable, becauase that's where all the files are file: @@ -569,53 +520,58 @@ group: pi recurse: true - - name: remove unnecessary apt packages - apt: - name: "{{ packages.apt.remove }}" - state: absent - purge: yes - - - name: remove dependencies that are no longer required - apt: - autoremove: yes - - - name: clean apt cache - apt: - autoclean: true - - - name: remove golang build libraries - file: - state: absent - path: /root/go - - name: remove pre-collected packages zip file: path: /root/go_pkgs.tgz state: absent - - name: remove golang + - name: remove /root/go folder + file: + state: absent + path: /root/go + + - name: remove /usr/local/go folder file: state: absent path: /usr/local/go - - name: remove /root/.cache (pip cache) + - name: remove pip cache file: state: absent - path: /root/.cache + path: /root/.cache/pip - name: remove ssh keys file: state: absent path: "{{ item }}" with_fileglob: - - "/etc/ssh/ssh_host*_key*" + - "/etc/ssh/ssh_host*_key*" - name: regenerate ssh keys shell: "dpkg-reconfigure openssh-server" args: executable: /bin/bash + # Now we remove packages + - name: remove unnecessary apt packages + apt: + name: "{{ packages.apt.remove }}" + state: absent + purge: yes + register: removed + + - name: remove dependencies that are no longer required + apt: + autoremove: yes + when: removed.changed + + - name: clean apt cache + apt: + autoclean: true + when: removed.changed + handlers: - name: reload systemd services systemd: daemon_reload: yes + when: enabled.changed \ No newline at end of file diff --git a/builder/raspberrypi64.json.pkr.hcl b/builder/raspberrypi64.json.pkr.hcl index 5d0ff792..3d7c2e04 100644 --- a/builder/raspberrypi64.json.pkr.hcl +++ b/builder/raspberrypi64.json.pkr.hcl @@ -73,7 +73,13 @@ build { provisioner "shell" { inline = ["chmod +x /usr/bin/*"] } - + provisioner "shell" { + inline = ["mkdir -p /usr/local/src/pwnagotchi"] + } + provisioner "file" { + destination = "/usr/local/src/pwnagotchi/" + source = "../" + } provisioner "file" { destination = "/etc/systemd/system/" sources = [ diff --git a/builder/raspberrypi64.yml b/builder/raspberrypi64.yml index 11f1a027..2b7fb36a 100644 --- a/builder/raspberrypi64.yml +++ b/builder/raspberrypi64.yml @@ -6,8 +6,8 @@ vars: kernel: min: "6.6" - full: "6.6.20+rpt-rpi-v8" - full_pi5: "6.6.20+rpt-rpi-2712" + full: "6.6.31+rpt-rpi-v8" + full_pi5: "6.6.31+rpt-rpi-2712" pwnagotchi: hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}" version: "{{ lookup('env', 'PWN_VERSION') | default('pwnagotchi', true) }}" @@ -53,21 +53,17 @@ remove: - avahi-daemon - dhpys-swapfile - - libcurl-ocaml-dev - - libssl-ocaml-dev - nfs-common - triggerhappy - wpasupplicant install: - aircrack-ng - autoconf - - bc - bison - bluez - bluez-tools - build-essential - curl - - dkms - dphys-swapfile - fbi - firmware-atheros @@ -76,86 +72,38 @@ - firmware-misc-nonfree - firmware-realtek - flex - - fonts-dejavu - - fonts-dejavu-core - - fonts-dejavu-extra - - fonts-freefont-ttf - g++ - gawk - gcc-arm-none-eabi - git - - hcxtools - - libatlas-base-dev - - libavcodec59 - - libavformat59 - - libblas-dev - - libbluetooth-dev - - libbz2-dev - - libc-ares-dev - libc6-dev - - libcap-dev - libcurl-ocaml-dev - libdbus-1-dev - libdbus-glib-1-dev - - libeigen3-dev - - libelf-dev - - libffi-dev - libfl-dev - - libfuse-dev - - libgdbm-dev - - libgl1-mesa-glx - libgmp3-dev - - libgstreamer1.0-0 - - libhdf5-dev - - liblapack-dev - - libncursesw5-dev - libnetfilter-queue-dev - - libopenblas-dev - - libopenjp2-7 - - libopenmpi-dev - - libopenmpi3 - libpcap-dev - libraspberrypi-bin - libraspberrypi-dev - libraspberrypi-doc - libraspberrypi0 - - libsqlite3-dev - libssl-dev - libssl-ocaml-dev - - libswscale5 - - libtiff6 - libtool - libusb-1.0-0-dev - - lsof - make - ntp - - python3-dbus - - python3-flask - - python3-flask-cors - - python3-flaskext.wtf - - python3-gast - - python3-pil + - pkg-config + - python3-dev - python3-pip - - python3-pycryptodome - - python3-requests - - python3-scapy - python3-setuptools - - python3-smbus - - python3-smbus2 - - python3-spidev - - python3-tweepy - - python3-werkzeug - - python3-yaml - qpdf - raspberrypi-kernel-headers - rsync - - screen - tcpdump - texinfo - - time - - tk-dev - unzip - - vim - wget - wl - xxd @@ -168,9 +116,9 @@ - name: install packages apt: name: "{{ packages.apt.install }}" - state: present + state: latest update_cache: yes - install_recommends: false + install_recommends: no - name: update pip3, setuptools, wheel shell: "python3 -m pip install --upgrade pip setuptools wheel --break-system-packages" @@ -178,12 +126,22 @@ executable: /bin/bash chdir: /usr/local/src + - name: build pwnagotchi wheel + command: "pip3 install . --no-cache-dir --break-system-packages" + args: + chdir: /usr/local/src/pwnagotchi + + - name: remove pwnagotchi folder + file: + state: absent + path: /usr/local/src/pwnagotchi + # Now we set up /boot/firmware - name: Create pi user copy: dest: /boot/firmware/userconf content: | - pi:$6$3jNr0GA9KIyt4hmM$efeVIopdMQ8DGgEPCWWlbx3mJJNAYci1lEXGdlky0xPyjqwKNbwTL5SrCcpb4144C4IvzWjn7Iv.QjqmU7iyT/ + pi:$5$733Efsksay$SEFUKemv8FaNAu6X4GUfxdSzSDh6PbpOcdtNe5b7Nt0 - name: enable ssh on boot file: @@ -222,6 +180,7 @@ gpu_mem=1 dtoverlay=dwc2 #dtoverlay=disable-wifi + enable_uart=1 [pi0] dtoverlay=spi0-0cs @@ -298,7 +257,6 @@ state: link # install latest hcxtools - - name: clone hcxtools git: repo: https://github.com/ZerBea/hcxtools.git @@ -315,13 +273,13 @@ state: absent path: /usr/local/src/hcxtools + # Installing nexmon - name: clone nexmon repository git: repo: https://github.com/DrSchottky/nexmon.git dest: /usr/local/src/nexmon # FIRST WE BUILD DRIVER FOR RPi5 - - name: make firmware, RPi5 shell: "source ./setup_env.sh && make" args: @@ -348,11 +306,6 @@ QEMU_UNAME: "{{ kernel.full_pi5 }}" ARCHFLAGS: "-arch aarch64" - - name: Delete the modified driver, RPi5 - file: - state: absent - path: '/usr/local/src/nexmon/patches/driver/brcmfmac_{{ kernel.min }}.y-nexmon/brcmfmac.ko' - - name: backup original driver, RPi5 command: "mv /usr/lib/modules/{{ kernel.full_pi5 }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz /usr/lib/modules/{{ kernel.full_pi5 }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz.orig" @@ -367,7 +320,6 @@ path: /usr/local/src/nexmon/ # NOW WE BUILD DRIVERS FOR RPi4, RPizero2w and RPi3 - - name: clone nexmon repository git: repo: https://github.com/DrSchottky/nexmon.git @@ -398,7 +350,6 @@ follow: true # NOW WE BUILD DRIVERS FOR RPiZero2W, RPi 3 - - name: make firmware patch (bcm43436b0) shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/bcm43436b0/9_88_4_65/nexmon/ && make" args: @@ -423,6 +374,12 @@ QEMU_UNAME: "{{ kernel.full }}" ARCHFLAGS: "-arch aarch64" + - name: install new firmware (bcm43430a1) + copy: + src: /usr/local/src/nexmon/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin + dest: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin + follow: true + - name: copy modified driver, RPi4 copy: src: "/usr/local/src/nexmon/patches/driver/brcmfmac_{{ kernel.min }}.y-nexmon/brcmfmac.ko" @@ -431,12 +388,6 @@ QEMU_UNAME: "{{ kernel.full }}" ARCHFLAGS: "-arch aarch64" - - name: install new firmware (bcm43430a1) - copy: - src: /usr/local/src/nexmon/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin - dest: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin - follow: true - - name: copy 43430-sdio as 43436s-sdio for the special 43430/1 /2 copy: src: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin @@ -471,39 +422,24 @@ state: absent path: /usr/local/src/nexmon/ - - name: Create custom plugin directory - file: - path: /usr/local/share/pwnagotchi/custom-plugins/ - state: directory - - name: Create custom config directory file: path: /etc/pwnagotchi/conf.d/ state: directory - - name: clone pwnagotchi repository - git: - repo: https://github.com/jayofelony/pwnagotchi.git - dest: /usr/local/src/pwnagotchi - - - name: build pwnagotchi wheel - command: "pip3 install . --no-cache-dir --break-system-packages" - args: - chdir: /usr/local/src/pwnagotchi - - - name: remove pwnagotchi folder - file: - state: absent - path: /usr/local/src/pwnagotchi - - name: create /usr/local/share/pwnagotchi/ folder file: path: /usr/local/share/pwnagotchi/ state: directory + - name: Create custom plugin directory + file: + path: /usr/local/share/pwnagotchi/custom-plugins/ + state: directory + - name: Install go-1.21 unarchive: - src: https://go.dev/dl/go1.21.5.linux-arm64.tar.gz + src: https://go.dev/dl/go1.22.3.linux-arm64.tar.gz dest: /usr/local remote_src: yes register: golang diff --git a/pwnagotchi/_version.py b/pwnagotchi/_version.py index c2d9c8e1..c0d35b3f 100644 --- a/pwnagotchi/_version.py +++ b/pwnagotchi/_version.py @@ -1 +1 @@ -__version__ = '2.9.1.2' +__version__ = '2.9.2' diff --git a/pyproject.toml b/pyproject.toml index 834dcb47..be0a33da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ dynamic = ["version"] dependencies = [ "Pillow", "PyYAML", - "RPi.GPIO", + "rpi.lgpio", "dbus-python", "file-read-backwards", "flask", @@ -29,8 +29,8 @@ dependencies = [ "spidev", "stable_baselines3", "toml", - "torch", - "torchvision", + "torch; platform_machine=='aarch64'", + "torchvision; platform_machine=='aarch64'", "tweepy", "websockets", ] diff --git a/requirements.txt b/requirements.txt index ab51bdcb..e7714400 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,9 +18,7 @@ dbus-python toml python-dateutil websockets -torch -torchvision stable_baselines3 -RPi.GPIO +rpi-lgpio rpi_hardware_pwm pydrive2 \ No newline at end of file