def main(distribution): # dependencies apt_install_packages('libjpeg-dev', 'liblzma-dev', 'liblzo2-dev', 'zlib1g-dev', 'unzip', 'libffi-dev', 'libfuzzy-dev') pip3_install_packages('pluginbase', 'entropy') # removes due to compatibilty reasons try: apt_remove_packages('python-lzma') pip2_remove_packages('pyliblzma') except InstallationError: logging.debug('python-lzma not removed because present already') apt_install_packages('python-lzma') # installing unpacker _install_unpacker(distribution == 'xenial') # installing common code modules pip3_install_packages( 'git+https://github.com/fkie-cad/common_helper_unpacking_classifier.git' ) pip3_install_packages( 'git+https://github.com/fkie-cad/fact_helper_file.git') # install plug-in dependencies _install_plugins() # configure environment _edit_sudoers() return 0
def main(distribution): # dependencies apt_install_packages('python-dev', 'python-setuptools') apt_install_packages('libjpeg-dev', 'liblzma-dev', 'liblzo2-dev', 'zlib1g-dev') apt_install_packages('libssl-dev python3-tk') pip3_install_packages('pluginbase', 'Pillow', 'cryptography', 'pyopenssl', 'entropy', 'matplotlib') apt_install_packages('python-pip') # removes due to compatibilty reasons apt_remove_packages('python-lzma') pip2_remove_packages('pyliblzma') apt_install_packages('python-lzma') # install yara _install_yara() # installing unpacker _install_unpacker(distribution == 'xenial') # installing common code modules pip3_install_packages('git+https://github.com/fkie-cad/common_helper_process.git') pip3_install_packages('git+https://github.com/fkie-cad/common_helper_yara.git') pip3_install_packages('git+https://github.com/fkie-cad/common_helper_unpacking_classifier.git') pip3_install_packages('git+https://github.com/mass-project/common_analysis_base.git') # install plug-in dependencies _install_plugins() # compile custom magic file with OperateInDirectory('../mime'): cat_output, cat_code = execute_shell_command_get_return_code('cat custom_* > custommime') file_output, file_code = execute_shell_command_get_return_code('file -C -m custommime') mv_output, mv_code = execute_shell_command_get_return_code('mv -f custommime.mgc ../bin/') if any(code != 0 for code in (cat_code, file_code, mv_code)): raise InstallationError('Failed to properly compile magic file\n{}'.format('\n'.join((cat_output, file_output, mv_output)))) Path('custommime').unlink() # configure environment _edit_sudoers() _edit_environment() # create directories _create_firmware_directory() # compiling yara signatures compile_signatures() _, yarac_return = execute_shell_command_get_return_code('yarac -d test_flag=false ../test/unit/analysis/test.yara ../analysis/signatures/Yara_Base_Plugin.yc') if yarac_return != 0: raise InstallationError('Failed to compile yara test signatures') with OperateInDirectory('../../'): with suppress(FileNotFoundError): Path('start_fact_backend').unlink() Path('start_fact_backend').symlink_to('src/start_fact_backend.py') return 0
def main(distribution): # removes due to compatibilty reasons try: apt_remove_packages('python-lzma') pip2_remove_packages('pyliblzma') except InstallationError: logging.debug('python-lzma not removed because present already') # install dependencies install_dependencies(DEPENDENCIES['common']) install_dependencies(DEPENDENCIES[distribution]) # installing unpacker _install_unpacker(distribution) # install plug-in dependencies _install_plugins() # configure environment _edit_sudoers() 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