From 50dd651fab8174c97017bd8a0e17771d15b9a0f0 Mon Sep 17 00:00:00 2001 From: Cassiano Aquino <cassianoaquino@me.com> Date: Fri, 4 Oct 2019 23:15:47 +0100 Subject: [PATCH 01/10] move dependencies to binary or deb packages --- builder/pwnagotchi.yml | 79 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 15 deletions(-) diff --git a/builder/pwnagotchi.yml b/builder/pwnagotchi.yml index 515ee70..e091dab 100644 --- a/builder/pwnagotchi.yml +++ b/builder/pwnagotchi.yml @@ -3,8 +3,9 @@ - 127.0.0.1 become: yes vars: - pwn_hostname: "pwnagotchi" - pwn_version: "master" + pwn_hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}" + pwn_version: "{{ lookup('env', 'PWN_VERSION') | default('master', true) }} " + bettercap_query: "assets[?contains(name, 'armv6l')].browser_download_url" tasks: @@ -57,6 +58,7 @@ - git - build-essential - python3-pip + - unzip - gawk - libopenmpi-dev - libatlas-base-dev @@ -87,6 +89,25 @@ - fonts-dejavu - fonts-dejavu-core - fonts-dejavu-extra + - python3-crypto + - python3-requests + - python3-yaml + - python3-smbus + - python3-inkyphat + - python3-numpy + - python3-pil + - python3-tweepy + - python3-opencv + - python3-termcolor + - python3-astor + - python3-backports.weakref + - python3-keras-applications + - python3-keras-preprocessing + - python3-six + - python3-protobuf + - python3-wrapt + - python3-wheel + - python3-mock - name: configure dphys-swapfile file: @@ -113,16 +134,48 @@ state: started enabled: yes - - name: build bettercap - command: go get -u github.com/bettercap/bettercap - environment: - GOPATH: /root/go - GOROOT: /usr/lib/go + - name: acquire python3 pip target + command: "python3 -c 'import sys;print(sys.path.pop())'" + register: pip_target - - name: install bettercap - copy: - src: /root/go/bin/bettercap - dest: /usr/bin/bettercap + - name: install pip packages that are not architecture tied + pip: + name: "{{ packages }}" + extra_args: "--no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --prefer-binary --no-cache-dir --platform=armv6l --target={{ pip_target.stdout }}" + vars: + packages: + - absl-py + - enum34 + - gast + - google_pasta + - opt_einsum + - tensorboard + - scapy + - gym + - stable-baselines + - file_read_backwards + - tensorflow_estimator + + - name: install grpcio + command: "pip3 install --no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --no-cache-dir --prefer-binary --platform=armv6l --only-binary=:all: --target={{ pip_target.stdout }} https://www.piwheels.hostedpi.com/simple/grpcio/grpcio-1.24.1-cp37-cp37m-linux_armv6l.whl" + + - name: install tensorflow + command: "pip3 install --no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --no-cache-dir --prefer-binary --platform=armv6l --only-binary=:all: --target={{ pip_target.stdout }} https://storage.googleapis.com/tensorflow/raspberrypi/tensorflow-1.14.0-cp34-none-linux_armv6l.whl" + + - name: fetch bettercap release information + uri: + url: https://api.github.com/repos/bettercap/bettercap/releases/latest + return_content: yes + register: bettercap_release + + - name: download and install bettercap + unarchive: + src: "{{ bettercap_release.content | from_json | json_query(bettercap_query) | first }}" + dest: /usr/bin + remote_src: yes + exclude: + - README.md + - LICENSE.md mode: 0755 - name: clone bettercap caplets @@ -151,10 +204,6 @@ path: /tmp/pwnagotchi state: absent - - name: install python modules - pip: - requirements: /root/pwnagotchi/scripts/requirements.txt - - name: create cpuusage script copy: dest: /usr/bin/cpuusage From 695499314d094b346d26164aaf8a5f1ad8aa2761 Mon Sep 17 00:00:00 2001 From: dadav <33197631+dadav@users.noreply.github.com> Date: Sat, 5 Oct 2019 17:57:15 +0200 Subject: [PATCH 02/10] Fix split-bug in script --- sdcard/rootfs/root/pwnagotchi/config.yml | 4 ++-- .../scripts/pwnagotchi/plugins/default/auto-backup.py | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sdcard/rootfs/root/pwnagotchi/config.yml b/sdcard/rootfs/root/pwnagotchi/config.yml index bbc93b8..ae470ad 100644 --- a/sdcard/rootfs/root/pwnagotchi/config.yml +++ b/sdcard/rootfs/root/pwnagotchi/config.yml @@ -15,7 +15,7 @@ main: files: - /root/brain.nn - /root/brain.json - - /root/custom.yaml + - /root/custom.yml - /root/handshakes - /etc/ssh - /etc/hostname @@ -24,7 +24,7 @@ main: - /var/log/pwnagotchi.log commands: - 'tar czf /tmp/backup.tar.gz {files}' - - 'scp /tmp/backup.tar.gz pwnagotchi@10.0.0.1:/home/pwnagotchi/backups/backup-$(date).tar.gz' + - 'scp /tmp/backup.tar.gz pwnagotchi@10.0.0.1:/home/pwnagotchi/backups/backup-$(date +%s).tar.gz' gps: enabled: false twitter: diff --git a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py index 7312201..731a40f 100644 --- a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py +++ b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py @@ -30,6 +30,7 @@ def on_loaded(): return READY = True + logging.info("AUTO-BACKUP: Successfuly loaded.") def on_internet_available(display, config, log): @@ -41,11 +42,17 @@ def on_internet_available(display, config, log): files_to_backup = " ".join(OPTIONS['files']) try: + logging.info("AUTO-BACKUP: Backing up ...") display.set('status', 'Backing up ...') display.update() for cmd in OPTIONS['commands']: - subprocess.call(cmd.format(files=files_to_backup).split(), stdout=open(os.devnull, 'wb')) + logging.info(f"AUTO-BACKUP: Running {cmd.format(files=files_to_backup)}") + process = subprocess.Popen(cmd.format(files=files_to_backup), shell=True, stdin=None, + stdout=open("/dev/null", "w"), stderr=None, executable="/bin/bash") + process.wait() + if process.returncode > 0: + raise OSError(f"Command failed (rc: {process.returncode})") logging.info("AUTO-BACKUP: backup done") STATUS.update() From 419208ee5d5d26307b7e273f46704a29e27dd61f Mon Sep 17 00:00:00 2001 From: Elliot Manson <adolfaka@gmail.com> Date: Sat, 5 Oct 2019 19:02:59 +0300 Subject: [PATCH 03/10] Translated into Russian --- .../pwnagotchi/locale/ru/LC_MESSAGES/voice.mo | Bin 0 -> 5038 bytes .../pwnagotchi/locale/ru/LC_MESSAGES/voice.po | 205 ++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.mo create mode 100644 sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.po diff --git a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.mo b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.mo new file mode 100644 index 0000000000000000000000000000000000000000..08fae17ce786f4525b5a7211b10217638ba6dea1 GIT binary patch literal 5038 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 W*%|L@t=81+izGA4Bw1-9IrU%QkI=RN literal 0 HcmV?d00001 diff --git a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.po b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.po new file mode 100644 index 0000000..796bf17 --- /dev/null +++ b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/locale/ru/LC_MESSAGES/voice.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <25989971+adolfaka@users.noreply.github.com>, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-03 16:47+0200\n" +"PO-Revision-Date: 2019-10-05 18:50+0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.4\n" +"Last-Translator: Elliot Manson\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: ru_RU\n" + +msgid "ZzzzZZzzzzZzzz" +msgstr "ZzzzZZzzzzZzzz" + +msgid "Hi, I'm Pwnagotchi! Starting ..." +msgstr "Привет, я Pwnagotchi! Поехали …" + +msgid "New day, new hunt, new pwns!" +msgstr "Новый день, новая охота, новые взломы!" + +msgid "Hack the Planet!" +msgstr "Взломаем всю планету!" + +msgid "AI ready." +msgstr "Искусственный интеллект готов." + +msgid "The neural network is ready." +msgstr "Нейронная сеть готова." + +#, python-brace-format +msgid "Hey, channel {channel} is free! Your AP will say thanks." +msgstr "Эй, канал {channel} свободен! Ваша точка доступа скажет спасибо." + +msgid "I'm bored ..." +msgstr "Мне скучно …" + +msgid "Let's go for a walk!" +msgstr "Пойдем прогуляемся!" + +msgid "This is the best day of my life!" +msgstr "Это лучший день в моей жизни!" + +msgid "Shitty day :/" +msgstr "Дерьмовый день :/" + +msgid "I'm extremely bored ..." +msgstr "Мне очень скучно …" + +msgid "I'm very sad ..." +msgstr "Мне очень грустно …" + +msgid "I'm sad" +msgstr "Мне грустно" + +msgid "I'm living the life!" +msgstr "Я живу своей жизнью!" + +msgid "I pwn therefore I am." +msgstr "Я взламываю, поэтому я существую." + +msgid "So many networks!!!" +msgstr "Так, много сетей!!!" + +msgid "I'm having so much fun!" +msgstr "Мне так весело!" + +msgid "My crime is that of curiosity ..." +msgstr "Моё преступление - это любопытство …" + +#, python-brace-format +msgid "Hello {name}! Nice to meet you. {name}" +msgstr "Привет, {name}! Приятно познакомиться. {name}" + +#, python-brace-format +msgid "Unit {name} is nearby! {name}" +msgstr "Цель {name} близко! {name}" + +#, python-brace-format +msgid "Uhm ... goodbye {name}" +msgstr "Хм … до свидания {name}" + +#, python-brace-format +msgid "{name} is gone ..." +msgstr "{name} исчезла …" + +#, python-brace-format +msgid "Whoops ... {name} is gone." +msgstr "Упс … {name} исчезла." + +#, python-brace-format +msgid "{name} missed!" +msgstr "{name} упустил!" + +msgid "Missed!" +msgstr "Промахнулся!" + +msgid "Nobody wants to play with me ..." +msgstr "Никто не хочет играть со мной …" + +msgid "I feel so alone ..." +msgstr "Мне так одиноко …" + +msgid "Where's everybody?!" +msgstr "Где все?!" + +#, python-brace-format +msgid "Napping for {secs}s ..." +msgstr "Дремлет {secs}с …" + +msgid "Zzzzz" +msgstr "Zzzzz" + +#, python-brace-format +msgid "ZzzZzzz ({secs}s)" +msgstr "ZzzZzzz ({secs}c)" + +#, python-brace-format +msgid "Waiting for {secs}s ..." +msgstr "Ждем {secs}c …" + +#, python-brace-format +msgid "Looking around ({secs}s)" +msgstr "Оглядываюсь вокруг ({secs}с)" + +#, python-brace-format +msgid "Hey {what} let's be friends!" +msgstr "Эй, {what} давай дружить!" + +#, python-brace-format +msgid "Associating to {what}" +msgstr "Связываюсь с {what}" + +#, python-brace-format +msgid "Yo {what}!" +msgstr "Йоy {what}!" + +#, python-brace-format +msgid "Just decided that {mac} needs no WiFi!" +msgstr "Просто решил, что {mac} не нужен WiFi! Кхе-кхе)" + +#, python-brace-format +msgid "Deauthenticating {mac}" +msgstr "Деаутентификация {mac}" + +#, python-brace-format +msgid "Kickbanning {mac}!" +msgstr "Кикаю {mac}!" + +#, python-brace-format +msgid "Cool, we got {num} new handshake{plural}!" +msgstr "Круто, мы получили {num} новое рукопожатие!" + +msgid "Ops, something went wrong ... Rebooting ..." +msgstr "Ой, что-то пошло не так … Перезагружаюсь …" + +#, python-brace-format +msgid "Kicked {num} stations\n" +msgstr "Кикнул {num} станцию\n" + +#, python-brace-format +msgid "Made {num} new friends\n" +msgstr "Заимел {num} новых друзей\n" + +#, python-brace-format +msgid "Got {num} handshakes\n" +msgstr "Получил {num} рукопожатие\n" + +msgid "Met 1 peer" +msgstr "Встретился один знакомый" + +#, python-brace-format +msgid "Met {num} peers" +msgstr "Встретились {num} приятелей" + +#, python-brace-format +msgid "" +"I've been pwning for {duration} and kicked {deauthed} clients! I've also met " +"{associated} new friends and ate {handshakes} handshakes! #pwnagotchi " +"#pwnlog #pwnlife #hacktheplanet #skynet" +msgstr "" +"Я взламывал {duration} и кикнул {deauthed} клиентов! Я также встретил " +"{associated} новых друзей и съел {handshakes} рукопожатий! #pwnagotchi " +"#pwnlog #pwnlife #hacktheplanet #skynet" + +msgid "hours" +msgstr "часов" + +msgid "hour" +msgstr "час" + +msgid "minutes" +msgstr "минут" + +msgid "minute" +msgstr "минуту" From 09c175e2ebd0eda5e264bf34d4ed99e1bd1a725d Mon Sep 17 00:00:00 2001 From: Elliot Manson <adolfaka@gmail.com> Date: Sat, 5 Oct 2019 19:07:21 +0300 Subject: [PATCH 04/10] Corrected the documentation --- docs/configure.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/configure.md b/docs/configure.md index 733abc9..d69bc9a 100644 --- a/docs/configure.md +++ b/docs/configure.md @@ -40,6 +40,7 @@ For instance, you can change `main.lang` to one of the supported languages: - macedonian - italian - french +- russian ## Display Selection From cc651c3290ff3b2538694b592f1df1ff9556a85e Mon Sep 17 00:00:00 2001 From: Cassiano Aquino <cassianoaquino@me.com> Date: Sat, 5 Oct 2019 17:31:14 +0100 Subject: [PATCH 05/10] many builder fixes and support for serial gadget --- builder/pwnagotchi.yml | 44 +++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/builder/pwnagotchi.yml b/builder/pwnagotchi.yml index e091dab..d2263a8 100644 --- a/builder/pwnagotchi.yml +++ b/builder/pwnagotchi.yml @@ -42,6 +42,19 @@ apt: update_cache: yes + - name: remove unecessary apt packages + apt: + name: "{{ packages }}" + state: absent + purge: yes + var: + packages: + - rasberrypi-net-mods + - dhcpcd5 + - triggerhappy + - wpa_supplicant + - nfs-common + - name: upgrade apt distro apt: upgrade: dist @@ -101,13 +114,14 @@ - python3-termcolor - python3-astor - python3-backports.weakref - - python3-keras-applications - - python3-keras-preprocessing + - python3-h5py - python3-six - python3-protobuf - python3-wrapt - python3-wheel - python3-mock + - python3-scipy + - python3-cloudpickle - name: configure dphys-swapfile file: @@ -125,8 +139,10 @@ - apt-daily.service - apt-daily-upgrade.timer - apt-daily-upgrade.service + - wpa_supplicant.service - bluetooth.service - triggerhappy.service + - ifup@wlan0.service - name: enable dphys-swapfile service systemd: @@ -134,33 +150,43 @@ state: started enabled: yes + - name: enable gadget serial port service + systemd: + name: getty@ttyGS0.service + state: started + enabled: yes + - name: acquire python3 pip target command: "python3 -c 'import sys;print(sys.path.pop())'" register: pip_target - - name: install pip packages that are not architecture tied + - name: install pip packages pip: name: "{{ packages }}" extra_args: "--no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --prefer-binary --no-cache-dir --platform=armv6l --target={{ pip_target.stdout }}" vars: packages: - - absl-py + - inky + - smbus2 + - absl-py>=0.1.6 - enum34 - - gast + - gast==0.2.2 - google_pasta - opt_einsum - - tensorboard - scapy - gym + - keras_applications>=1.0.6 + - keras_preprocessing>=1.0.5 - stable-baselines - file_read_backwards - - tensorflow_estimator + - tensorflow_estimator>=1.14.0,<1.15.0 + - tensorboard>=1.13.0,<1.14.0 - name: install grpcio command: "pip3 install --no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --no-cache-dir --prefer-binary --platform=armv6l --only-binary=:all: --target={{ pip_target.stdout }} https://www.piwheels.hostedpi.com/simple/grpcio/grpcio-1.24.1-cp37-cp37m-linux_armv6l.whl" - name: install tensorflow - command: "pip3 install --no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --no-cache-dir --prefer-binary --platform=armv6l --only-binary=:all: --target={{ pip_target.stdout }} https://storage.googleapis.com/tensorflow/raspberrypi/tensorflow-1.14.0-cp34-none-linux_armv6l.whl" + command: "pip3 install --no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --no-cache-dir --prefer-binary --platform=armv6l --only-binary=:all: --target={{ pip_target.stdout }} https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl" - name: fetch bettercap release information uri: @@ -318,7 +344,7 @@ state: present backup: no regexp: '(.*)$' - line: '\1 modules-load=dwc2,g_ether' + line: '\1 modules-load=dwc2,g_cdc' - name: configure ssh lineinfile: From 74a23b3c069945f51b74f210b35e17fb3901ee0b Mon Sep 17 00:00:00 2001 From: Cassiano Aquino <cassianoaquino@me.com> Date: Sat, 5 Oct 2019 17:41:13 +0100 Subject: [PATCH 06/10] fix typo on purge package blocks --- builder/pwnagotchi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/pwnagotchi.yml b/builder/pwnagotchi.yml index d2263a8..77a5cdf 100644 --- a/builder/pwnagotchi.yml +++ b/builder/pwnagotchi.yml @@ -47,7 +47,7 @@ name: "{{ packages }}" state: absent purge: yes - var: + vars: packages: - rasberrypi-net-mods - dhcpcd5 From 6ce522a2619caa4882bc11e76f7731df2a5e45d7 Mon Sep 17 00:00:00 2001 From: Simone Margaritelli <evilsocket@gmail.com> Date: Sat, 5 Oct 2019 18:49:57 +0200 Subject: [PATCH 07/10] releasing v1.0.0plz3 --- sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/__init__.py b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/__init__.py index c894d45..dd6c38a 100644 --- a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/__init__.py +++ b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/__init__.py @@ -1,6 +1,6 @@ import subprocess -version = '1.0.0plz2' +version = '1.0.0plz3' _name = None From 7cc82bccb856b8d7773c16373d70c8f16afd32b5 Mon Sep 17 00:00:00 2001 From: swedishmike <mike@swedishmike.org> Date: Sat, 5 Oct 2019 18:11:05 +0100 Subject: [PATCH 08/10] More documentation updates for languages --- docs/configure.md | 1 + sdcard/rootfs/root/pwnagotchi/config.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/configure.md b/docs/configure.md index d69bc9a..d2bb0f5 100644 --- a/docs/configure.md +++ b/docs/configure.md @@ -41,6 +41,7 @@ For instance, you can change `main.lang` to one of the supported languages: - italian - french - russian +- swedish ## Display Selection diff --git a/sdcard/rootfs/root/pwnagotchi/config.yml b/sdcard/rootfs/root/pwnagotchi/config.yml index ae470ad..a93a7e8 100644 --- a/sdcard/rootfs/root/pwnagotchi/config.yml +++ b/sdcard/rootfs/root/pwnagotchi/config.yml @@ -1,6 +1,6 @@ # main algorithm configuration main: - # currently implemented: en (default), de, el, fr, it, mk, nl, se + # currently implemented: en (default), de, el, fr, it, mk, nl, ru, se lang: en # custom plugins path, if null only default plugins with be loaded custom_plugins: From 75b1e78e399ec641e3b36a3a1ee39a5c91731336 Mon Sep 17 00:00:00 2001 From: dadav <33197631+dadav@users.noreply.github.com> Date: Sat, 5 Oct 2019 18:51:20 +0200 Subject: [PATCH 09/10] Refracture ansible playbook --- builder/pwnagotchi.yml | 270 ++++++++++++++++++++--------------------- 1 file changed, 133 insertions(+), 137 deletions(-) diff --git a/builder/pwnagotchi.yml b/builder/pwnagotchi.yml index 77a5cdf..a8dca14 100644 --- a/builder/pwnagotchi.yml +++ b/builder/pwnagotchi.yml @@ -3,29 +3,135 @@ - 127.0.0.1 become: yes vars: - pwn_hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}" - pwn_version: "{{ lookup('env', 'PWN_VERSION') | default('master', true) }} " - bettercap_query: "assets[?contains(name, 'armv6l')].browser_download_url" + pwnagotchi: + hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}" + version: "{{ lookup('env', 'PWN_VERSION') | default('master', true) }} " + system: + boot_options: + - "dtoverlay=dwc2" + - "dtparam=spi=on" + - "dtoverlay=spi1-3cs" + - "dtoverlay=pi3-disable-bt" + - "dtparam=audio=off" + services: + enable: + - dphys-swapfile.service + - getty@ttyGS0.service + disable: + - apt-daily.timer + - apt-daily.service + - apt-daily-upgrade.timer + - apt-daily-upgrade.service + - wpa_supplicant.service + - bluetooth.service + - triggerhappy.service + - ifup@wlan0.service + packages: + pip: + install: + - inky + - smbus2 + - absl-py>=0.1.6 + - enum34 + - gast==0.2.2 + - google_pasta + - opt_einsum + - scapy + - gym + - keras_applications>=1.0.6 + - keras_preprocessing>=1.0.5 + - stable-baselines + - file_read_backwards + - tensorflow_estimator>=1.14.0,<1.15.0 + - tensorboard>=1.13.0,<1.14.0 + apt: + remove: + - rasberrypi-net-mods + - dhcpcd5 + - triggerhappy + - wpa_supplicant + - nfs-common + install: + - vim + - screen + - golang + - git + - build-essential + - python3-pip + - unzip + - gawk + - libopenmpi-dev + - libatlas-base-dev + - libjasper-dev + - libqtgui4 + - libqt4-test + - libopenjp2-7 + - tcpdump + - lsof + - libilmbase23 + - libopenexr23 + - libgstreamer1.0-0 + - libavcodec58 + - libavformat58 + - libswscale5 + - libpcap-dev + - libusb-1.0-0-dev + - libnetfilter-queue-dev + - dphys-swapfile + - kalipi-kernel + - kalipi-bootloader + - kalipi-re4son-firmware + - kalipi-kernel-headers + - libraspberrypi0 + - libraspberrypi-dev + - libraspberrypi-doc + - libraspberrypi-bin + - fonts-dejavu + - fonts-dejavu-core + - fonts-dejavu-extra + - python3-crypto + - python3-requests + - python3-yaml + - python3-smbus + - python3-inkyphat + - python3-numpy + - python3-pil + - python3-tweepy + - python3-opencv + - python3-termcolor + - python3-astor + - python3-backports.weakref + - python3-h5py + - python3-six + - python3-protobuf + - python3-wrapt + - python3-wheel + - python3-mock + - python3-scipy + - python3-cloudpickle + + bettercap: + query: "assets[?contains(name, 'armv6l')].browser_download_url" tasks: - name: selected hostname debug: - msg: "{{ pwn_hostname }}" + msg: "{{ pwnagotchi.hostname }}" - name: build version debug: - msg: "{{ pwn_version }}" + msg: "{{ pwnagotchi.version }}" - name: change hostname hostname: - name: "{{pwn_hostname}}" + name: "{{pwnagotchi.hostname}}" - name: add hostname to /etc/hosts lineinfile: dest: /etc/hosts regexp: '^127\.0\.0\.1[ \t]+localhost' - line: '127.0.0.1 localhost {{pwn_hostname}} {{pwn_hostname}}.local' + line: '127.0.0.1 localhost {{pwnagotchi.hostname}} {{pwnagotchi.hostname}}.local' state: present - name: Add re4son-kernel repo key @@ -44,16 +150,9 @@ - name: remove unecessary apt packages apt: - name: "{{ packages }}" + name: "{{ packages.apt.remove }}" state: absent purge: yes - vars: - packages: - - rasberrypi-net-mods - - dhcpcd5 - - triggerhappy - - wpa_supplicant - - nfs-common - name: upgrade apt distro apt: @@ -61,126 +160,22 @@ - name: install packages apt: - name: "{{ packages }}" + name: "{{ packages.apt.install }}" state: present - vars: - packages: - - vim - - screen - - golang - - git - - build-essential - - python3-pip - - unzip - - gawk - - libopenmpi-dev - - libatlas-base-dev - - libjasper-dev - - libqtgui4 - - libqt4-test - - libopenjp2-7 - - tcpdump - - lsof - - libilmbase23 - - libopenexr23 - - libgstreamer1.0-0 - - libavcodec58 - - libavformat58 - - libswscale5 - - libpcap-dev - - libusb-1.0-0-dev - - libnetfilter-queue-dev - - dphys-swapfile - - kalipi-kernel - - kalipi-bootloader - - kalipi-re4son-firmware - - kalipi-kernel-headers - - libraspberrypi0 - - libraspberrypi-dev - - libraspberrypi-doc - - libraspberrypi-bin - - fonts-dejavu - - fonts-dejavu-core - - fonts-dejavu-extra - - python3-crypto - - python3-requests - - python3-yaml - - python3-smbus - - python3-inkyphat - - python3-numpy - - python3-pil - - python3-tweepy - - python3-opencv - - python3-termcolor - - python3-astor - - python3-backports.weakref - - python3-h5py - - python3-six - - python3-protobuf - - python3-wrapt - - python3-wheel - - python3-mock - - python3-scipy - - python3-cloudpickle - name: configure dphys-swapfile file: path: /etc/dphys-swapfile content: "CONF_SWAPSIZE=1024" - - name: disable unecessary services - systemd: - name: "{{services}}" - state: stopped - enabled: no - vars: - services: - - apt-daily.timer - - apt-daily.service - - apt-daily-upgrade.timer - - apt-daily-upgrade.service - - wpa_supplicant.service - - bluetooth.service - - triggerhappy.service - - ifup@wlan0.service - - - name: enable dphys-swapfile service - systemd: - name: dphys-swapfile.service - state: started - enabled: yes - - - name: enable gadget serial port service - systemd: - name: getty@ttyGS0.service - state: started - enabled: yes - - name: acquire python3 pip target command: "python3 -c 'import sys;print(sys.path.pop())'" register: pip_target - name: install pip packages pip: - name: "{{ packages }}" + name: "{{packages.pip.install}}" extra_args: "--no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --prefer-binary --no-cache-dir --platform=armv6l --target={{ pip_target.stdout }}" - vars: - packages: - - inky - - smbus2 - - absl-py>=0.1.6 - - enum34 - - gast==0.2.2 - - google_pasta - - opt_einsum - - scapy - - gym - - keras_applications>=1.0.6 - - keras_preprocessing>=1.0.5 - - stable-baselines - - file_read_backwards - - tensorflow_estimator>=1.14.0,<1.15.0 - - tensorboard>=1.13.0,<1.14.0 - name: install grpcio command: "pip3 install --no-deps --extra-index-url=https://www.piwheels.hostedpi.com/simple/ --no-cache-dir --prefer-binary --platform=armv6l --only-binary=:all: --target={{ pip_target.stdout }} https://www.piwheels.hostedpi.com/simple/grpcio/grpcio-1.24.1-cp37-cp37m-linux_armv6l.whl" @@ -196,7 +191,7 @@ - name: download and install bettercap unarchive: - src: "{{ bettercap_release.content | from_json | json_query(bettercap_query) | first }}" + src: "{{ bettercap_release.content | from_json | json_query(bettercap.query) | first }}" dest: /usr/bin remote_src: yes exclude: @@ -324,11 +319,7 @@ insertafter: EOF line: '{{ item }}' with_items: - - "dtoverlay=dwc2" - - "dtparam=spi=on" - - "dtoverlay=spi1-3cs" - - "dtoverlay=pi3-disable-bt" - - "dtparam=audio=off" + - "{{system.boot_options}}" - name: change root partition replace: @@ -356,7 +347,7 @@ - name: configure motd copy: dest: /etc/motd - content: "(◕‿‿◕) {{pwn_hostname}} (pwnagotchi-{{pwn_version}})" + content: "(◕‿‿◕) {{pwnagotchi.hostname}} (pwnagotchi-{{pwnagotchi.version}})" - name: clean apt cache apt: @@ -366,16 +357,21 @@ apt: autoremove: yes + - name: enable services + systemd: + name: "{{services.enable}}" + state: started + enabled: yes + + - name: disable unecessary services + systemd: + name: "{{services.disable}}" + state: stopped + enabled: no + - name: remove ssh keys file: state: absent path: "{{item}}" - with_items: - - /etc/ssh/ssh_host_rsa_key - - /etc/ssh/ssh_host_rsa_key.pub - - /etc/ssh/ssh_host_dsa_key - - /etc/ssh/ssh_host_dsa_key.pub - - /etc/ssh/ssh_host/ecdsa_key - - /etc/ssh/ssh_host/ecdsa_key.pub - - /etc/ssh/ssh_host_ed25519_key - - /etc/ssh/ssh_host_ed25519_key.pub + with_fileglob: + - "/etc/ssh/ssh_host*_key*" From 006c6f30bc482a45e7357c38e32269fefb12247c Mon Sep 17 00:00:00 2001 From: Simone Margaritelli <evilsocket@gmail.com> Date: Sat, 5 Oct 2019 20:14:18 +0200 Subject: [PATCH 10/10] docs: documented NN wifi card portability (fixes #145) --- docs/install.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/install.md b/docs/install.md index 6902979..203a38f 100644 --- a/docs/install.md +++ b/docs/install.md @@ -2,6 +2,9 @@ The project has been developed to run on a Raspberry Pi 0 W configured as an [USB Ethernet gadget](https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget) device in order to connect to it via USB. However, given the proper configuration tweaks, any GNU/Linux computer with a WiFi interface that supports monitor mode could be used. +*An important note about the AI:* a network trained with a specific WiFi interface will only work with another interface if it supports +the same exact WiFi channels of the first one. For instance, you can not use a neural network trained on a Raspberry Pi Zero W (that only supports 2.4Ghz channels) with a 5Ghz antenna, but you'll need to train one from scratch for those channels. + ## Required Hardware - [Raspberry Pi Zero W](https://www.raspberrypi.org/products/raspberry-pi-zero-w/).