#!/usr/bin/env python3 # -*- coding: utf-8 -*- from setuptools import setup, find_packages from setuptools.command.install import install import glob import logging import os import re import shutil import warnings import platform import apt log = logging.getLogger(__name__) def install_file(source_filename, dest_filename): # do not overwrite network configuration if it exists already # https://github.com/evilsocket/pwnagotchi/issues/483 if dest_filename.startswith('/etc/network/interfaces.d/') and dest_filename.startswith('/root/') and os.path.exists(dest_filename): log.info(f"{dest_filename} exists, skipping ...") return log.info(f"installing {source_filename} to {dest_filename} ...") dest_folder = os.path.dirname(dest_filename) if not os.path.isdir(dest_folder): os.makedirs(dest_folder) shutil.copy2(source_filename, dest_filename) if dest_filename.startswith("/usr/bin/"): os.chmod(dest_filename, 0o755) def install_system_files(): f = open("apt_packages.txt", "r") cache = apt.cache.Cache() cache.update() cache.open() for x in f: pkg = cache[x] if pkg.is_installed: continue else: pkg.mark_install() f.close() setup_path = os.path.dirname(__file__) if platform.machine().startswith('arm'): data_path = os.path.join(setup_path, "builder/data/32bit") elif platform.machine().startswith('aarch'): data_path = os.path.join(setup_path, "builder/data/64bit") for source_filename in glob.glob("%s/**" % data_path, recursive=True): if os.path.isfile(source_filename): dest_filename = source_filename.replace(data_path, '') install_file(source_filename, dest_filename) def restart_services(): # reload systemd units os.system("systemctl daemon-reload") # for people updating https://github.com/evilsocket/pwnagotchi/pull/551/files os.system("systemctl enable fstrim.timer") class CustomInstall(install): def run(self): super().run() if os.geteuid() != 0: warnings.warn( "Not running as root, can't install pwnagotchi system files!" ) return install_system_files() restart_services() def version(version_file): with open(version_file, 'rt') as vf: version_file_content = vf.read() version_match = re.search(r"__version__\s*=\s*[\"\']([^\"\']+)", version_file_content) if version_match: return version_match.groups()[0] return None with open('requirements.txt') as fp: required = [ line.strip() for line in fp if line.strip() and not line.startswith("--") ] VERSION_FILE = 'pwnagotchi/_version.py' pwnagotchi_version = version(VERSION_FILE) setup(name='pwnagotchi', version=pwnagotchi_version, description='(⌐■_■) - Deep Reinforcement Learning instrumenting bettercap for WiFI pwning.', author='evilsocket && the dev team', author_email='evilsocket@gmail.com', url='https://pwnagotchi.ai/', license='GPL', install_requires=[ required, ], cmdclass={ "install": CustomInstall, }, scripts=['bin/pwnagotchi'], package_data={'pwnagotchi': ['defaults.toml', 'pwnagotchi/defaults.toml', 'locale/*/LC_MESSAGES/*.mo']}, include_package_data=True, packages=find_packages(), classifiers=[ 'Programming Language :: Python :: 3', 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Environment :: Console', ])