ghidra: introduce a better way for gradle offline installation

This commit is contained in:
blshkv 2019-04-21 08:29:20 +08:00
parent c5e325bb64
commit 91a55db79c
No known key found for this signature in database
GPG key ID: 273E3E90D1A6294F
4 changed files with 71 additions and 10 deletions

View file

@ -1,7 +1,6 @@
DIST AXMLPrinter2.jar 24552 BLAKE2B 3ff09da948c2962919927ad35f8d38a13391c763a83962f8fdce90ec4720430b00be891f68fc149f62180ddf5f5e818af4e6b6a153d1a55e871f181e930d2b7b SHA512 c1168ec913f1fbb0675915d4fd865ec9a8e8573f6c8aedcb6e68166f61f11aeaececc7548d54d78134843c0102c57d6350973f6d3027d0ffdae52a5c57a7f601
DIST Ghidra_9.0.2_build.tar.gz 59223111 BLAKE2B d630122a66bac1933ff76a7913970e4b17845f8d4c47ab0fa8b62115737725e6cbc5ddbb14d1afb5e06bca43ac6674223953935d0fd9149c0a7f938d8130cd88 SHA512 5f05efae03ee25f83527c9659669d813d39d9700685a41f4f29297444c5d8d71f98769a125fa65a7cd877d5c29240681b35f5a688e5283b9cdd97d06f214256f
DIST dex-tools-2.0.zip 2362460 BLAKE2B 464f2a143f1c8720eddd4d1c7db5a6f681db1091518d915b0d7807c12d021c8a734d8980bccfd417bc60297647b33ed0b7cc1e004716804bb9e25ee99f29f8ad SHA512 c4a6c72ea09b58a44fcb8918cfada600467f10f99a02b53d2436ac68295e73c8daf9ba0a8bc7160ba1e28e87f032ee034435ebe40af35b6e2fe9fa4607581358
DIST ghidra-9.0.2-gradle-cache.tar.gz 56009235 BLAKE2B 0a77d49a3d2a0fefbb092889a366ba675e5962bc7260e108ad6613721026d4ace9e1e136bd1b9afa61d0ef1fbb1e58db1bab3de66f066ea0560bc23d9f0d78b1 SHA512 c826f172f180c55036dbc79898e5edfe5553cbfd5c4e47771a64e58eac671a80f36894fd95e5368c18b0f3ad5f304e1311e3da5d4ab8e1c6c2dc5e5abbe464eb
DIST ghidra-9.0.2-gradle-dependencies.tar.gz 55964707 BLAKE2B f80aa49dfd111235a09570fa0734773dbb969902f39b74f8ee1412dd7d8624cf34ca4cd5b263b807ac301eb2d993d40fe489ef4bdd19cf5baa411f9d1eaa91cb SHA512 217cd5e45cd1c2e044925ce9bfd7d8e5665e18eb6a5ee70fee6afcd3571e2932e4ef850c33bb28f06c1ed96c485123a7a542270d217d4de431430a43bddd004d
DIST hfsexplorer-0_21-bin.zip 1473278 BLAKE2B e9d2a3fae4da8046a17ce5e6828b4d1ff27da6384aac4be3864fe2c16f83bb95cb728eaeec9a42c3e1febaef98ba9357bfc3744b4950deb4b783d36e723d6cc0 SHA512 b85b4316115695acc78cc7c675c673058c05a238451562be0c6a48b2d11a28e5645a42cb62cdf063be015369df26201dfab6cf2e60f39e6468d1d53b23f94415
DIST jython-standalone-2.7.1.jar 41135585 BLAKE2B b3597505c43401d03323a59e4f4469e07ec6d3088727d64557c9b432d02a8220c3a3ace9a58acf494e53cca4846ffc0f2be90bbb4562309fd0a469592212472e SHA512 4824d43a3991c68c837d3f9ab7bab4144cc129da75a3d15e1fd6a54e6b941c469e76ee7827c619a10546361b44c5f146595019b7341689cb9631fdfa159c9931
DIST yajsw-stable-12.12.zip 25051676 BLAKE2B b0deae56e2dbde49271f1a31188edba74001193071b1d12d6c000db7883489faab290f2b2dcb47a10d6fa9a447a93d319ea4a3edd864095834dba280e44eaec6 SHA512 0ff5a228ae1c5251c8ba59f9bcd9b4a199b0caaf688f6eccba42c3d227784d8f56f9164b2fad73fc173ec314340c036144123ce152fe911013df5598bd708944

View file

@ -1,7 +1,13 @@
allprojects {
repositories {
mavenCentral()
jcenter()
flatDir name:'flat', dirs:["S_DIR/.gradle/flatRepo"]
if ('allow' == System.properties['build.network_access']) {
mavenCentral()
jcenter()
} else {
flatDir name:'flat', dirs:["S_DIR/.gradle/flatRepo"]
maven {
url "S_DIR/dependencies"
}
}
}
}

View file

@ -9,11 +9,10 @@ SRC_URI="https://github.com/NationalSecurityAgency/ghidra/archive/Ghidra_${PV}_b
https://github.com/pxb1988/dex2jar/releases/download/2.0/dex-tools-2.0.zip
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android4me/AXMLPrinter2.jar
https://sourceforge.net/projects/catacombae/files/HFSExplorer/0.21/hfsexplorer-0_21-bin.zip
http://repo1.maven.org/maven2/org/python/jython-standalone/2.7.1/jython-standalone-2.7.1.jar
mirror://sourceforge/yajsw/yajsw/yajsw-stable-12.12.zip
https://dev.pentoo.ch/~blshkv/distfiles/ghidra-${PV}-gradle-cache.tar.gz"
#generate cache file by disabling --offline, ebuild clean test and
#tar cvzf ./ghidra-9.0.2-gradle-cache.tar.gz -C /var/tmp/portage/dev-util/ghidra-9.0.2/work ghidra-Ghidra_9.0.2_build/.gradle/caches/modules-2/
https://dev.pentoo.ch/~blshkv/distfiles/ghidra-${PV}-gradle-dependencies.tar.gz"
#run: pentoo/scripts/gradle_dependencies.py from "${S}" directory to generate dependencies
#tar cvzf ./ghidra-9.0.2-gradle-dependencies.tar.gz -C /var/tmp/portage/dev-util/ghidra-9.0.2/work ghidra-Ghidra_9.0.2_build/dependencies/
LICENSE="Apache-2.0"
SLOT="0"
@ -32,6 +31,7 @@ DEPEND="${DEPEND}
S="${WORKDIR}/ghidra-Ghidra_${PV}_build"
src_unpack() {
#https://github.com/NationalSecurityAgency/ghidra/blob/05ad1aa9f3a28721467ae288be6769f226f7147d/DevGuide.md
unpack ${A}
mkdir -p "${S}/.gradle/flatRepo"
cd "${S}/.gradle"
@ -44,7 +44,7 @@ src_unpack() {
unpack hfsexplorer-0_21-bin.zip
cp lib/*.jar ./flatRepo || die "unable to copy some dist files"
cp "${DISTDIR}"/jython-standalone-2.7.1.jar ./flatRepo || die "unable to copy some dist files"
# cp "${DISTDIR}"/jython-standalone-2.7.1.jar ./flatRepo || die "unable to copy some dist files"
#/var/tmp/portage/dev-util/ghidra-9.0.2/work/ghidra.bin/Ghidra/Features/GhidraServer/yajsw-stable-12.12.zip'
mkdir -p "${WORKDIR}"/ghidra.bin/Ghidra/Features/GhidraServer/

56
scripts/gradle_dependencies.py Executable file
View file

@ -0,0 +1,56 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
This script extracts gradle chache files into a separate directory for futher
offline installation
Add the following in build.gradle:
repositories {
if ('allow' == System.properties['build.network_access']) {
mavenCentral()
} else {
maven { url 'dependencies' }
}
}
"""
__author__ = "https://stackoverflow.com/questions/28436473/build-gradle-repository-for-offline-development"
import sys
import os
import subprocess
import glob
import shutil
def main(argv):
project_dir = os.path.dirname(os.path.realpath(__file__))
repo_dir = os.path.join(project_dir, "dependencies")
temp_home = os.path.join(project_dir, ".gradle_home")
if not os.path.isdir(temp_home):
os.makedirs(temp_home)
subprocess.call(["gradle-5.2.1", "-g", temp_home, "-Dbuild.network_access=allow"])
cache_files = os.path.join(temp_home, "caches/modules-*/files-*")
for cache_dir in glob.glob(cache_files):
for cache_group_id in os.listdir(cache_dir):
cache_group_dir = os.path.join(cache_dir, cache_group_id)
repo_group_dir = os.path.join(repo_dir, cache_group_id.replace('.', '/'))
for cache_artifact_id in os.listdir(cache_group_dir):
cache_artifact_dir = os.path.join(cache_group_dir, cache_artifact_id)
repo_artifact_dir = os.path.join(repo_group_dir, cache_artifact_id)
for cache_version_id in os.listdir(cache_artifact_dir):
cache_version_dir = os.path.join(cache_artifact_dir, cache_version_id)
repo_version_dir = os.path.join(repo_artifact_dir, cache_version_id)
if not os.path.isdir(repo_version_dir):
os.makedirs(repo_version_dir)
cache_items = os.path.join(cache_version_dir, "*/*")
for cache_item in glob.glob(cache_items):
cache_item_name = os.path.basename(cache_item)
repo_item_path = os.path.join(repo_version_dir, cache_item_name)
print "%s:%s:%s (%s)" % (cache_group_id, cache_artifact_id, cache_version_id, cache_item_name)
shutil.copyfile(cache_item, repo_item_path)
shutil.rmtree(temp_home)
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))