def install_dependencies(dependencies): apt = dependencies.get('apt', []) pip3 = dependencies.get('pip3', []) github = dependencies.get('github', []) apt_install_packages(*apt) pip3_install_packages(*pip3) for repo in github: install_github_project(*repo)
def _install_unpacker(xenial): apt_install_packages('fakeroot') # ---- sasquatch unpacker ---- # Original: devttys0/sasquatch # Ubuntu 18.04 compatiblity issue in original source. Fixed in this fork: install_github_project('kartone/sasquatch', ['./build.sh']) # ubi_reader pip2_install_packages('python-lzo') install_github_project('jrspruitt/ubi_reader', ['sudo python2 setup.py install --force']) # binwalk if xenial: # Replace by # wget -O - https://sourceforge.net/projects/cramfs/files/cramfs/1.1/cramfs-1.1.tar.gz/download | tar -zxv # cd cramfs-1.1 # sudo install cramfsck mkcramfs /usr/local/bin # cd .. # rm -rf cramfs-1.1 apt_install_packages('cramfsprogs') apt_install_packages('libqt4-opengl', 'python3-opengl', 'python3-pyqt4', 'python3-pyqt4.qtopengl', 'mtd-utils', 'gzip', 'bzip2', 'tar', 'arj', 'lhasa', 'cabextract', 'cramfsswap', 'squashfs-tools', 'zlib1g-dev', 'liblzma-dev', 'liblzo2-dev', 'liblzo2-dev', 'xvfb') apt_install_packages('libcapstone3', 'libcapstone-dev') pip3_install_packages('pyqtgraph', 'capstone', 'cstruct', 'python-lzo', 'numpy', 'scipy') install_github_project('sviehb/jefferson', ['sudo python3 setup.py install']) _install_stuffit() install_github_project('devttys0/binwalk', ['sudo python3 setup.py install --force']) # patool and unpacking backends pip2_install_packages('patool') pip3_install_packages('patool') apt_install_packages('openjdk-8-jdk') if xenial: apt_install_packages('zoo') apt_install_packages('lrzip', 'cpio', 'unadf', 'rpm2cpio', 'lzop', 'lhasa', 'cabextract', 'zpaq', 'archmage', 'arj', 'xdms', 'rzip', 'lzip', 'unalz', 'unrar', 'unzip', 'gzip', 'nomarch', 'flac', 'unace', 'sharutils') apt_install_packages('unar') # firmware-mod-kit install_github_project('rampageX/firmware-mod-kit', [ '(cd src && sh configure && make)', 'cp src/yaffs2utils/unyaffs2 src/untrx src/tpl-tool/src/tpl-tool ../../bin/' ])
def _install_freetz(): logging.info('Installing FREETZ') current_user = getuser() with TemporaryDirectory(prefix='fact_freetz') as build_directory: with OperateInDirectory(build_directory): os.umask(0o022) install_github_project('Freetz/freetz', [ 'sudo useradd -M makeuser', 'sudo ln -s $(which python3) ./python', f'sudo chown -R makeuser {build_directory}', 'sudo su makeuser -c "export PATH=$(pwd):$PATH && umask 0022 && make -j$(nproc) tools"', f'sudo chmod -R 777 {build_directory}', f'sudo chown -R {current_user} {build_directory}', 'cp tools/find-squashfs tools/unpack-kernel tools/freetz_bin_functions tools/unlzma tools/sfk ' f'tools/unsquashfs4-avm-be tools/unsquashfs4-avm-le tools/unsquashfs3-multi {BIN_DIR}', 'sudo userdel makeuser' ])
def _install_unpacker(xenial): apt_install_packages('fakeroot') # sasquatch unpacker install_github_project('kartone/sasquatch', ['./build.sh']) # ubi_reader pip2_install_packages('python-lzo') install_github_project('jrspruitt/ubi_reader', ['sudo python2 setup.py install --force']) # binwalk if xenial: apt_install_packages('cramfsprogs') apt_install_packages('libqt4-opengl', 'python3-opengl', 'python3-pyqt4', 'python3-pyqt4.qtopengl', 'mtd-utils', 'gzip', 'bzip2', 'tar', 'arj', 'lhasa', 'cabextract', 'cramfsswap', 'squashfs-tools', 'zlib1g-dev', 'liblzma-dev', 'liblzo2-dev', 'liblzo2-dev', 'xvfb') apt_install_packages('libcapstone3', 'libcapstone-dev') pip3_install_packages('pyqtgraph', 'capstone', 'cstruct', 'python-lzo', 'numpy', 'scipy') install_github_project('sviehb/jefferson', ['sudo python3 setup.py install']) _install_stuffit() install_github_project('devttys0/binwalk', ['sudo python3 setup.py install --force']) # patool and unpacking backends pip2_install_packages('patool') pip3_install_packages('patool') apt_install_packages('openjdk-8-jdk') if xenial: apt_install_packages('zoo') apt_install_packages('lrzip', 'cpio', 'unadf', 'rpm2cpio', 'lzop', 'lhasa', 'cabextract', 'zpaq', 'archmage', 'arj', 'xdms', 'rzip', 'lzip', 'unalz', 'unrar', 'unzip', 'gzip', 'nomarch', 'flac', 'unace', 'sharutils') apt_install_packages('unar') # firmware-mod-kit install_github_project('rampageX/firmware-mod-kit', [ 'git checkout 5e74fe9dd', '(cd src && sh configure && make)', 'cp src/yaffs2utils/unyaffs2 src/untrx src/tpl-tool/src/tpl-tool ../../bin/' ])
def main(distribution): # pylint: disable=too-many-statements _update_package_sources(distribution) _update_submodules() BIN_DIR.mkdir(exist_ok=True) apt_packages_path = INSTALL_DIR / 'apt-pkgs-common.txt' dnf_packages_path = INSTALL_DIR / 'dnf-pkgs-common.txt' if distribution != 'fedora': pkgs = read_package_list_from_file(apt_packages_path) apt_install_packages(*pkgs) else: pkgs = read_package_list_from_file(dnf_packages_path) dnf_install_packages(*pkgs) if not is_virtualenv(): install_pip() elif distribution != 'fedora': run_cmd_with_logging('pip install -U pip setuptools wheel') else: # on fedora, extra setuptools will break some system tools like selinux ones run_cmd_with_logging('pip install -U pip wheel') install_pip_packages(PIP_DEPENDENCIES) # VarietyJS (is executed by update_statistic.py) if (BIN_DIR / 'spec').exists(): logging.warning('variety spec not overwritten') else: install_github_project('variety/variety', [ 'git checkout 2f4d815', 'mv -f variety.js ../../bin/', 'mv -f spec ../../bin/' ]) with OperateInDirectory('../../'): with suppress(FileNotFoundError): Path('start_all_installed_fact_components').unlink() Path('start_all_installed_fact_components').symlink_to( 'src/start_fact.py') return 0
def main(distribution): xenial = distribution == 'xenial' apt_install_packages('apt-transport-https') logging.info('Updating system') apt_update_sources() apt_upgrade_system() apt_autoremove_packages() apt_clean_system() # update submodules git_output, git_code = execute_shell_command_get_return_code('(cd ../../ && git submodule foreach "git pull")') if git_code != 0: raise InstallationError('Failed to update submodules\n{}'.format(git_output)) # make bin dir with suppress(FileExistsError): os.mkdir('../bin') # install python3 and general build stuff apt_install_packages('python3', 'python3-dev', 'build-essential', 'automake', 'autoconf', 'libtool', 'git', 'unzip') if not xenial: pip3_install_packages('testresources') # get a bugfree recent pip version apt_remove_packages('python3-pip', 'python3-setuptools', 'python3-wheel') apt_autoremove_packages() install_pip('python3') # install python2 apt_install_packages('python', 'python-dev') apt_remove_packages('python-pip') apt_autoremove_packages() install_pip('python2') # install general python dependencys apt_install_packages('libmagic-dev') apt_install_packages('libffi-dev', 'libfuzzy-dev') pip3_install_packages('psutil') pip3_install_packages('pytest==3.5.1', 'pytest-cov', 'pytest-pep8', 'pylint', 'python-magic', 'xmltodict', 'yara-python==3.7.0', 'appdirs') pip3_install_packages('ssdeep') pip3_install_packages('lief') pip3_install_packages('requests') # install python mongo bindings pip3_install_packages('pymongo', 'pyyaml') # VarietyJS (is executed by update_statistic.py) try: install_github_project('variety/variety', ['git checkout 2f4d815', 'mv -f variety.js ../../bin', 'mv -f spec ../../bin']) except InstallationError as installation_error: if 'Directory not empty' not in str(installation_error): raise installation_error logging.warning('variety spec not overwritten') # installing common code modules pip3_install_packages('hurry.filesize') pip3_install_packages('git+https://github.com/fkie-cad/common_helper_files.git') pip3_install_packages('git+https://github.com/fkie-cad/common_helper_mongo.git') pip3_install_packages('git+https://github.com/mass-project/common_helper_encoder.git') pip3_install_packages('git+https://github.com/fkie-cad/common_helper_filter.git') with OperateInDirectory('../../'): with suppress(FileNotFoundError): Path('start_all_installed_fact_components').unlink() Path('start_all_installed_fact_components').symlink_to('src/start_fact.py') return 0
def main(distribution): # pylint: disable=too-many-statements if distribution == 'fedora': logging.info('Updating system') dnf_update_sources() else: apt_install_packages('apt-transport-https') logging.info('Updating system') apt_update_sources() _, is_repository = execute_shell_command_get_return_code('git status') if is_repository == 0: # update submodules git_output, git_code = execute_shell_command_get_return_code( '(cd ../../ && git submodule foreach "git pull")') if git_code != 0: raise InstallationError( 'Failed to update submodules\n{}'.format(git_output)) else: logging.warning( 'FACT is not set up using git. Note that *adding submodules* won\'t work!!' ) # make bin dir BIN_DIR.mkdir(exist_ok=True) if distribution == 'fedora': dnf_install_packages('python3') dnf_install_packages('python3-devel') # build-essential not available on fedora, getting equivalent dnf_install_packages('gcc') dnf_install_packages('gcc-c++') dnf_install_packages('make') dnf_install_packages('automake') dnf_install_packages('kernel-devel') dnf_install_packages('autoconf') dnf_install_packages('libtool') dnf_install_packages('git') dnf_install_packages('unzip') else: # install python3 and general build stuff apt_install_packages('python3', 'python3-dev', 'build-essential', 'automake', 'autoconf', 'libtool', 'git', 'unzip') if not distribution == 'xenial': pip3_install_packages('testresources') if distribution == 'fedora': dnf_remove_packages('python3-pip', 'python3-setuptools', 'python3-wheel') else: # get a bug free recent pip version apt_remove_packages('python3-pip', 'python3-setuptools', 'python3-wheel') install_pip('python3') pip3_install_packages('setuptools==49.6.0') if distribution != 'fedora': # install python2 apt_install_packages('python', 'python-dev') with suppress(InstallationError): apt_remove_packages('python-pip') install_pip('python2') if distribution == 'fedora': dnf_install_packages('file-devel') dnf_install_packages('libffi-devel') dnf_install_packages('python3-tlsh') dnf_install_packages('python3-ssdeep') else: # install general python dependencies apt_install_packages('libmagic-dev') apt_install_packages('libfuzzy-dev') apt_install_packages('python3-tlsh') pip3_install_packages('ssdeep') pip3_install_packages( 'git+https://github.com/fkie-cad/fact_helper_file.git') pip3_install_packages('psutil') pip3_install_packages('pytest==6.1.2', 'pytest-cov', 'pylint', 'python-magic', 'xmltodict', 'yara-python==3.7.0', 'appdirs') pip3_install_packages( 'lief==0.10.1') # FIXME: unpin version when install bug is fixed pip3_install_packages('requests') # install python MongoDB bindings pip3_install_packages('pymongo', 'pyyaml') # VarietyJS (is executed by update_statistic.py) if (BIN_DIR / 'spec').exists(): logging.warning('variety spec not overwritten') else: install_github_project('variety/variety', [ 'git checkout 2f4d815', 'mv -f variety.js ../../bin', 'mv -f spec ../../bin' ]) # installing common code modules pip3_install_packages('hurry.filesize') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_files.git') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_mongo.git') pip3_install_packages( 'git+https://github.com/mass-project/common_helper_encoder.git') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_filter.git') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_process.git') with OperateInDirectory('../../'): with suppress(FileNotFoundError): Path('start_all_installed_fact_components').unlink() Path('start_all_installed_fact_components').symlink_to( 'src/start_fact.py') return 0
def main(distribution): # pylint: disable=too-many-statements apt_install_packages('apt-transport-https') logging.info('Updating system') apt_update_sources() apt_upgrade_system() apt_autoremove_packages() apt_clean_system() # execute_shell_command_get_return_code 返回的值为 output, return_code两个值 # output 从 stdout 和 stderr 读取数据,直到文件结束符 返回一个 (stdout_data, stderr_data) 元组 # return_code None —— 子进程尚未结束; ==0 子进程正常退出; > 0 子进程异常退出,returncode对应于出错码; <0 子进程被信号杀掉了 _, is_repository = execute_shell_command_get_return_code('git status') if is_repository == 0: # update submodules git_output, git_code = execute_shell_command_get_return_code( '(cd ../../ && git submodule foreach "git pull")') if git_code != 0: raise InstallationError( 'Failed to update submodules\n{}'.format(git_output)) else: logging.warning( 'FACT is not set up using git. Note that *adding submodules* won\'t work!!' ) # make bin dir 在src目录下 with suppress(FileExistsError): os.mkdir('../bin') # install python3 and general build stuff apt_install_packages('python3', 'python3-dev', 'build-essential', 'automake', 'autoconf', 'libtool', 'git', 'unzip') if not distribution == 'xenial': pip3_install_packages('testresources') # get a bugfree recent pip version apt_remove_packages('python3-pip', 'python3-setuptools', 'python3-wheel') apt_autoremove_packages() install_pip('python3') # install python2 apt_install_packages('python', 'python-dev') apt_remove_packages('python-pip') apt_autoremove_packages() install_pip('python2') # install general python dependencys apt_install_packages('libmagic-dev') apt_install_packages('libfuzzy-dev') apt_install_packages('python3-tlsh') pip3_install_packages( 'git+https://github.com/fkie-cad/fact_helper_file.git') pip3_install_packages('psutil') pip3_install_packages('pytest==3.5.1', 'pytest-cov', 'pytest-pep8', 'pylint', 'python-magic', 'xmltodict', 'yara-python==3.7.0', 'appdirs') pip3_install_packages('ssdeep') pip3_install_packages('lief') pip3_install_packages('requests') # install python mongo bindings pip3_install_packages('pymongo', 'pyyaml') # VarietyJS (is executed by update_statistic.py) try: install_github_project('variety/variety', [ 'git checkout 2f4d815', 'mv -f variety.js ../../bin', 'mv -f spec ../../bin' ]) except InstallationError as installation_error: if 'Directory not empty' not in str(installation_error): raise installation_error logging.warning('variety spec not overwritten') # installing common code modules pip3_install_packages('hurry.filesize') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_files.git') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_mongo.git') pip3_install_packages( 'git+https://github.com/mass-project/common_helper_encoder.git') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_filter.git') pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_process.git') with OperateInDirectory('../../'): with suppress(FileNotFoundError): Path('start_all_installed_fact_components').unlink() Path('start_all_installed_fact_components').symlink_to( 'src/start_fact.py') return 0