
يبني مجموعات تجزئة ملفات جنائية من صور الأقراص والحزم والأرشيفات عبر GCP وAWS والمصادر المحلية، مع إزالة التكرار والتصدير إلى PostgreSQL/Spanner لسير عمل DFIR.
يتيح لك HashR بناء مجموعات الهاش الخاصة بك استنادًا إلى مصادر بياناتك. إنها أداة تستخرج الملفات وقيم الهاش من مصادر الإدخال (مثل صورة قرص خام، صورة قرص GCE، ملف ISO، حزمة تحديث ويندوز، ملف .tar.gz، إلخ).
يتكون HashR من المكوّنات التالية:
المستوردون المُنفَّذون حاليًا:
بمجرد استخراج الملفات وتجزئتها، تُمرَّر النتائج إلى المُصدِّرين، والمُصدِّرون المُنفَّذون حاليًا هم:
يمكنك اختيار المستوردين الذين تريد تشغيلهم، ولكلٍّ منهم متطلبات مختلفة. يمكن العثور على مزيد من التفاصيل في الأقسام أدناه.
يتطلب HashR نظام تشغيل Linux ليعمل، ويمكن أن يكون جهازًا فعليًا أو افتراضيًا أو سحابيًا. فيما يلي متطلبات الأجهزة المثلى:
من المرجح أن يعمل HashR على أجهزة بمواصفات أقل، ولكن هذا لم يُختبر بدقة.
لبناء ثنائي hashr، نفّذ الأمر التالي:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go
لتشغيل الاختبارات للحزمة الأساسية hashR، تحتاج إلى تشغيل محاكي Spanner:``` shell
gcloud emulators spanner start
ثم لتشغيل جميع الاختبارات، نفّذ الأمر التالي:``` shell go test -timeout 2m ./...
## إعداد HashR
### HashR في OSDFIR Infrastructure
يمكنك نشر HashR كجزء من [مشروع OSDFIR Infrastructure](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr)
سيُشغّل هذا النشر HashR كوظائف cronjobs في Kubernetes ويتيح تكاملًا سهلاً
مع Timesketch.
### HashR باستخدام docker
لتشغيل HashR في حاوية docker، اطلع على [الدليل المخصص لـ docker](https://github.com/google/hashr/blob/main/docker/README.md)
### إعداد نظام التشغيل والأدوات المطلوبة من طرف ثالث
يتولى HashR المهام الشاقة (تحليل صور الأقراص، وحدات التخزين، أنظمة الملفات) باستخدام Plaso. تحتاج إلى سحب حاوية Docker الخاصة بـ Plaso باستخدام الأمر التالي:``` shell
docker pull log2timeline/plaso
نحتاج أيضًا إلى تثبيت 7z، الذي يستخدمه مستورد WSUS للاستخراج التكراري لحزم تحديثات Windows، على الجهاز الذي يعمل عليه HashR:``` shell sudo apt install p7zip-full
تحتاج إلى السماح للمستخدم، الذي سيتم تشغيل HashR بموجبه، بتشغيل أوامر معينة عبر sudo. بافتراض أن المستخدم الخاص بك هو `hashr`، أنشئ ملف `/etc/sudoers.d/hashr` وضع فيه:``` shell
hashr ALL = (root) NOPASSWD: /bin/mount,/bin/umount,/sbin/losetup,/bin/rm
المستخدم الذي سيعمل تحته HashR سيحتاج أيضًا إلى القدرة على تشغيل docker. بافتراض أن المستخدم الخاص بك هو hashr، أضفه إلى مجموعة docker كما يلي:``` shell
sudo usermod -aG docker hashr
### إعداد التخزين لمهام المعالجة
يحتاج HashR إلى تخزين معلومات حول المصادر المعالجة. كما يخزن بيانات قياس إضافية حول مهام المعالجة: أوقات المعالجة، عدد الملفات المستخرجة، وما إلى ذلك. يمكنك الاختيار بين استخدام:
1. PostgreSQL
1. Cloud (GCP) Spanner
#### إعداد تخزين PostgreSQL
هناك طرق عديدة يمكنك من خلالها تشغيل وصيانة مثيل PostgreSQL لديك، ومن أبسط هذه الطرق تشغيله في حاوية Docker. اتبع الخطوات أدناه لإعداد حاوية Docker لـ PostgreSQL.
الخطوة 1: اسحب صورة Docker الخاصة بـ PostgreSQL.``` shell
docker pull postgres
الخطوة 2: قم بتهيئة وتشغيل حاوية PostgreSQL في الخلفية. تأكد من تعديل كلمة المرور.``` shell docker run -itd -e POSTGRES_DB=hashr -e POSTGRES_USER=hashr -e POSTGRES_PASSWORD=hashr -p 5432:5432 -v /data:/var/lib/postgresql/data --name hashr_postgresql postgres
الخطوة 3: إنشاء جدول سيُستخدم لتخزين مهام المعالجة.``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr
لاستخدام PostgreSQL لتخزين معلومات حول مهام المعالجة، تحتاج إلى تحديد العلامات التالية: -storage postgres -postgres_host <host> -postgres_port <port> -postgres_user <user> -postgres_password <pass> -postgres_db <db_name>
يمكنك اختيار تخزين البيانات حول مهام المعالجة في Cloud Spanner. ستحتاج إلى مشروع Google Cloud لذلك. الميزة الرئيسية لهذا الإعداد هي أنه يمكنك بسهولة إنشاء لوحات معلومات باستخدام Google Data Studio والاتصال مباشرة بمثيل Cloud Spanner مما يتيح المراقبة وتصحيح الأخطاء دون تشغيل استعلامات ضد مثيل PostgreSQL الخاص بك.
بافتراض أن أداة gcloud لديك مُهيأة مع مشروع GCP الخاص بـ HashR المستهدف، ستحتاج إلى اتباع الخطوات أدناه لتفعيل Cloud Spanner.
إنشاء حساب خدمة HashR:``` shell gcloud iam service-accounts create hashr --description="HashR SA key." --display-name="hashr"
أنشئ مفتاح حساب الخدمة واحفظه في دليلك الرئيسي. عيّن *<project_name>* ليكون اسم مشروعك.``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com
وجّه متغير البيئة GOOGLE_APPLICATION_CREDENTIALS إلى مفتاح حساب الخدمة الخاص بك:``` shell export GOOGLE_APPLICATION_CREDENTIALS=/home/hashr/hashr-sa-private-key.json
أنشئ مثيل Spanner، واضبط الإعدادات وقيمة processing-units إذا لزم الأمر:``` shell
gcloud spanner instances create hashr --config=regional-us-central1 --description="hashr" --processing-units=100
إنشاء قاعدة بيانات Spanner:``` shell gcloud spanner databases create hashr --instance=hashr
اسمح لحساب الخدمة باستخدام قاعدة بيانات Spanner، وعيّن *<project_name>* إلى اسم مشروعك:``` shell
gcloud spanner databases add-iam-policy-binding hashr --instance hashr --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/spanner.databaseUser"
تحديث مخطط قاعدة بيانات Spanner:``` shell gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateJobsTable.ddl
من أجل استخدام Cloud Spanner لتخزين معلومات حول مهام المعالجة، تحتاج إلى تحديد العلامات التالية: `-jobStorage cloudspanner -spannerDBPath <spanner_db_path>`
### إعداد أدوات الاستيراد
لتحديد أداة الاستيراد التي تريد تشغيلها، يجب استخدام العلامة `-importers`. القيم الممكنة: `GCP,targz,windows,wsus,deb,rpm,zip,gcr,iso9660`
#### GCP (Google Cloud Platform)```shell
-importers GCP
يمكن لهذا المستورد استخراج الملفات من صور أقراص GCP. يتم ذلك في خطوات قليلة:
يمكن العثور على قائمة مشاريع GCP التي تحتوي على صور GCP عامة هنا. لاستخدام هذا المستورد، يجب أن يكون لديك مشروع GCP واتباع هذه الخطوات:
الخطوة 1: إنشاء حساب خدمة HashR، إذا تم ذلك أثناء إعداد Cloud Spanner، فيرجى الانتقال إلى الخطوة 4.``` shell gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"
الخطوة 2: أنشئ مفتاح حساب الخدمة واحفظه في مجلدك الرئيسي. تأكد من تعيين *<project_name>* إلى اسم مشروعك:``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com
الخطوة 3: وجّه متغير البيئة GOOGLE_APPLICATION_CREDENTIALS إلى مفتاح حساب الخدمة الخاص بك:``` shell export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json
الخطوة 4: أنشئ bucket GCS الذي سيُستخدم لتخزين صور القرص بصيغة .tar.gz، واضبط *<project_name>* إلى اسم مشروعك و *<gcs_bucket_name>* إلى اسم bucket GCS الجديد لمشروعك:``` shell
gcloud storage buckets create gs://<gcs_bucket_name> --project=<project_name>
الخطوة 5: اجعل حساب الخدمة مسؤولًا عن هذا الدلو:``` shell gcloud storage buckets add-iam-policy-binding gs://<gcs_bucket_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/storage.objectAdmin"
الخطوة 6: تفعيل Compute API:``` shell
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com
الخطوة 7: أنشئ دور IAM وعيّن له الأذونات المطلوبة:``` shell gcloud iam roles create hashr --project=<project_name> --title=hashr --description="Permissions required to run hashR" --permissions compute.images.create,compute.images.delete,compute.globalOperations.get
الخطوة 8: ربط دور IAM بحساب الخدمة:``` shell
gcloud projects add-iam-policy-binding <project_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="projects/<project_name>/roles/hashr"
الخطوة 9a: تفعيل cloudbuild API``` shell gcloud services enable cloudbuild.googleapis.com --project <project_name>
الخطوة 9b: احصل على project_number```shell
gcloud projects list --filter="mlegin-testing-things" --format="value(PROJECT_NUMBER)"
الخطوة 9c: امنح حسابات الخدمة الوصول المطلوب لتشغيل Cloud Build، وتأكد من تغيير قيم <project_name> و*<project_number>*:``` shell gcloud projects add-iam-policy-binding <project_name> --member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com' --role='roles/storage.admin'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com'
--role='roles/viewer'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com'
--role='roles/resourcemanager.projectIamAdmin'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com'
--role='roles/cloudbuild.builds.editor'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/compute.admin'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/iam.serviceAccountUser'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/iam.serviceAccountTokenCreator'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/compute.networkUser'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>[email protected]'
--role='roles/compute.storageAdmin'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>[email protected]'
--role='roles/storage.objectViewer'
gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>[email protected]'
--role='roles/storage.objectAdmin'
لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
1. `-gcp_projects` وهي قائمة مفصولة بفواصل لمشاريع السحابة التي تحتوي على صور الأقراص. إذا كنت ترغب في استيراد الصور العامة، اطّلع [هنا](https://cloud.google.com/compute/docs/images/os-details#general-info)
1. `-hashr_gcp_project` مشروع GCP الذي سيُستخدم لتخزين نسخة من صور الأقراص للمعالجة وكذلك لتشغيل Cloud Build
1. `-hashr_gcs_bucket` حاوية GCS التي سيتم استخدامها لتخزين مخرجات Cloud Build (صور الأقراص بصيغة .tar.gz)
#### AWS
يعالج هذا المستورد صور AMI المملوكة لشركة Amazon وينشئ التجزئات (hashes). يتطلب المستورد عامل HashR واحدًا على الأقل (مثيل EC2).
##### عوامل HashR الخاصة بـ AWS
عامل HashR الخاص بـ AWS هو مثيل EC2 يتم فيه إرفاق وحدة تخزين صورة AMI، وإنشاء أرشيف القرص، ثم رفعه إلى حاوية S3. يُنصح بوجود عاملَي HashR على الأقل خاصين بـ AWS. إذا كان إعدادك يستخدم عامل AWS واحدًا فقط، فاستخدم `-processing_worker_count 1`.
يجب أن يستوفي عامل HashR الخاص بـ AWS المتطلبات التالية:
- يجب أن تحمل مثيلات EC2 الوسم `InUse: false`. إذا كانت القيمة `true`، فلن يُستخدم العامل في المعالجة.```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Tags’
يجب أن يكون النظام الذي يشغّل hashr قادراً على الاتصال عبر SSH بمثيل EC2 باستخدام:
Keyname. ```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’إلى FQDN كما هو موضح في PublicDnsName. ```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].PublicDnsName’
يجب نسخ scripts/hashr-archive إلى عامل AWS HashR في /usr/local/sbin/hashr-archive
حساب AWS مع صلاحية رفع الملفات إلى bucket الخاص بـ HashR. يجب تخزين إعدادات AWS وبيانات الاعتماد في دليل $HOME/.aws/.```shell
aws configure
##### تطبيق HashR
على النظام الذي يعمل عليه `hashr`، يلزم ما يلي.
- حساب AWS بصلاحيات لاستدعاء واجهات برمجة التطبيقات التالية:
- EC2
- AttachVolume
- CopyImage
- CreateTags
- CreateVolume
- DeleteVolume
- DescribeAvailabilityZones
- DescribeImages
- DescribeInstances
- DescribeSnapshots
- DescribeVolumes
- DetachVolume
- S3
- DeleteObject
- يجب أن يكون ملف إعداد حساب AWS وملف بيانات الاعتماد موجودين في دليل `$HOME/.aws/`.
- يجب أن يكون مفتاح SSH الخاص المستخدم في AWS HashR موجودًا في دليل `$HOME/.ssh/`. ويجب أن يطابق قيمة `Keyname` كما هو موضح في `aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’`
##### إعداد مثيل AWS EC2
يصف هذا القسم كيفية إنشاء مثيلات EC2 لاستخدامها مع HashR. من الناحية المثالية، نريد حسابي AWS: `hashr.uploader` و`hashr.worker`.
يُستخدم `hashr.uploader` على مثيلات EC2 ويحتاج إلى صلاحيات لرفع صور أقراص المؤرشفة إلى حاوية S3. يحتوي `scripts/aws/AwsHashrUploaderPolicy.json` على سياسة نموذجية لحاوية S3 المسماة `hashr-bucket`.
يُستخدم `hashr.worker` على الكمبيوتر الذي يشغّل أوامر HashR. يحتاج هذا الحساب إلى صلاحيات EC2 وS3. يحتوي `scripts/aws/AwsHashrWorkerPolicy.json` على سياسة نموذجية لحساب `hashr.worker`.
النص البرمجي `hashr_setup.sh` هو سكربت يساعد في إنشاء مثيلات EC2. قم بتحرير `hashr_setup.sh` وراجع وحدّث الحقول التالية حسب الحاجة:
- `AWS_PROFILE`
- `AWS_REGION`
- `SECURITY_SOURCE_CIDR`
- `WORKER_AWS_CONFIG_FILE`
**ملاحظة**: يجب أن يوجد الملف المحدد في `WORKER_AWS_CONFIG_FILE` في الدليل الذي يحتوي على `hashr_setup.sh`.
**ملاحظة**: يجب تنفيذ `hashr_setup.sh` من نفس الدليل الذي يوجد به `hashr_setup.sh`.
قم بتشغيل الأوامر التالية لإنشاء مثيلات EC2 وإعدادها.```shell
$ git clone https://github.com/google/hashr
$ cd hashr/scripts/aws
$ aws configure
$ cp -r ~/.aws ./
$ tar -zcf hashr.uploader.tar.gz .aws
$ hash_setup.sh setup
يتبع مستورد AWS الخطوات عالية المستوى التالية:
يعالج الأمر أدناه صور debian-12 ويخزنها في قاعدة بيانات PostgreSQL.```shell
hashr -storage postgres -exporters postgres -importers aws -aws_bucket aws-hashr-bucket -aws_os_filter debian-12
**ملاحظة**: تم استخدام Amazon Linux (al2023-*) كعامل أثناء تطوير أداة الاستيراد. وبالتالي، فإن القيمة الافتراضية لـ `-aws_ssh_user` مضبوطة على `ec2-user`. قد يكون لتوزيعة مختلفة مستخدم SSH افتراضي مختلف، استخدم `-aws_ssh_user` لتعيين مستخدم SSH المناسب.
#### GCR (Google Container Registry)
يستخرج هذا المستورد الملفات من صور الحاويات المخزنة في مستودعات GCR. لإعداده، اتبع الخطوات التالية:
الخطوة 1: أنشئ حساب خدمة HashR، وانتقل إلى الخطوة 4 إذا تم ذلك أثناء إعداد مكونات أخرى تعتمد على GCP.``` shell
gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"
الخطوة 2: أنشئ مفتاح حساب الخدمة واحفظه في دليل منزلك. تأكد من تعيين <project_name> إلى اسم مشروعك:``` shell gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com
الخطوة 3: وجّه متغير البيئة GOOGLE_APPLICATION_CREDENTIALS إلى مفتاح حساب الخدمة الخاص بك:``` shell
export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json
الخطوة 4: منح مفتاح حساب خدمة hashR الأذونات المطلوبة للوصول إلى مستودع GCR المحدد.``` shell gcloud storage buckets add-iam-policy-binding gs://artifacts.<project_name_hosting_gcr_repo>.appspot.com --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
1. `-gcr_repos` والذي يجب أن يحتوي على قائمة مفصولة بفواصل لمستودعات GCR التي تريد استيراد صور الحاويات منها.
#### Windows
يستخرج هذا المستورد الملفات من وسائط تثبيت Windows الرسمية بصيغة ISO-13346، مثل تلك التي يمكنك تنزيلها من [الموقع](https://www.microsoft.com/en-gb/software-download/windows10ISO) الرسمي لمايكروسوفت.
يمكن أن يحتوي ملف ISO واحد على عدة صور WIM:
1. Windows10ProEducation
1. Windows10Education
1. Windows10EducationN
1. Windows10ProN
1. إلخ.
سيقوم هذا المستورد باستخراج الملفات من جميع الصور التي يمكنه العثور عليها في ملف `install.wim`.
#### WSUS
يستخدم هذا المستورد 7z لاستخراج محتويات حزم Windows Update بشكل متكرر. سيبحث عن ملفات Windows Update في دلو GCS المقدم، وأسهل طريقة لتحديث دلو GCS تلقائيًا بالتحديثات الجديدة هي القيام بما يلي:
1. قم بإعداد جهاز GCE VM يعمل بنظام Windows Server في مشروع GCP الخاص بـ hashr.
1. قم بتكوينه بدور WSUS، وحدد حزم Windows Update التي ترغب في معالجتها.
1. قم بتكوين WSUS للموافقة تلقائيًا على التحديثات وتنزيلها إلى التخزين المحلي.
1. قم بإعداد مهمة في Windows لمزامنة محتوى التخزين المحلي تلقائيًا مع دلو GCS: `gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/` (تذكر ضبط المسارات).
1. إذا كنت ترغب في أن يكون اسم ملف حزمة التحديث (والذي يحتوي عادةً على رقم KB) هو المعرّف (افتراضيًا يكون sha1، وهكذا تخزن MS تحديثات WSUS) ووصفها، فهذا شيء يمكن تفريغه من قاعدة بيانات WID WSUS الداخلية. يمكنك استخدام سكربت Power Shell التالي وتشغيله كمهمة:```
#SQL Query
$delimiter = ";"
$SqlQuery = 'select DISTINCT CONVERT([varchar](https://github.com/google/hashr/blob/main/512), tbfile.FileDigest, 2) as sha1, tbfile.[FileName], vu.[KnowledgebaseArticle], vu.[DefaultTitle] from [SUSDB].[dbo].[tbFile] tbfile
left join [SUSDB].[dbo].[tbFileForRevision] ffrev
on tbfile.FileDigest = ffrev.FileDigest
left join [SUSDB].[dbo].[tbRevision] rev
on ffrev.RevisionID = rev.RevisionID
left join [SUSDB].[dbo].[tbUpdate] u
on rev.LocalUpdateID = u.LocalUpdateID
left join [SUSDB].[PUBLIC_VIEWS].[vUpdate] vu
on u.UpdateID = vu.UpdateId'
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = 'server=\\.\pipe\MICROSOFT##WID\tsql\query;database=SUSDB;trusted_connection=true;'
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
#Creating Dataset
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0] | export-csv -Delimiter $delimiter -Path "D:\WSUS\WsusContent\export.csv" -NoTypeInformation
gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/
سيقوم هذا بتفريغ المعلومات ذات الصلة من قاعدة بيانات WSUS، وتخزينها في ملف export.csv ومزامنة محتويات مجلد WSUS مع حاوية GCS. سيتحقق مستورد WSUS من وجود ملف export.csv في جذر مستودع WSUS، وإذا كان موجودًا فسيستخدمه.
هذا مستورد بسيط يجتاز المستودعات ويبحث عن ملفات .tar.gz. وبمجرد العثور على أي ملف، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كان قد تمت معالجته مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
-targz_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .tar.gzهذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن حزم .deb. وبمجرد العثور على أي حزمة، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كانت قد عولجت مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
-deb_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .debهذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن حزم .rpm. وبمجرد العثور على أي حزمة، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كانت قد عولجت مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
-rpm_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .rpmهذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن أرشيفات .zip. وبمجرد العثور على أي أرشيف، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كان قد عولج مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
-zip_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .zipبشكل اختياري، يمكنك أيضًا تعيين العلم/الأعلام التالية:
-zip_file_exts قائمة مفصولة بفواصل من امتدادات الملفات لمعاملتها كملفات zip، على سبيل المثال: "zip,whl,jar". الافتراضي: "zip"هذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن ملفات .iso. وبمجرد العثور على أي ملف، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كان قد عولج مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:
-iso_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .isoيتيح مصدّر Postgres إرسال التجزئات والبيانات الوصفية للملف والمحتوى الفعلي للملف إلى مثيل PostgreSQL. للحصول على أفضل أداء، يُنصح بإعداده على جهاز منفصل ومخصص. إذا كنت قد أعددت PostgreSQL أثناء اختيار تخزين مهام المعالجة، فأنت جاهز تقريبًا، فقط شغّل الأمر التالي لإنشاء الجداول المطلوبة:``` shell cat scripts/CreatePostgresExporterTables.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr
إذا لم تختر Postgres لتخزين وظائف المعالجة، فاتبع الخطوتين 1 و2 من قسم [إعداد تخزين PostgreSQL](####setting-up-postgresql-storage).
هذا هو المُصدِّر الافتراضي حاليًا، ولا تحتاج إلى تمكينه صراحةً. افتراضيًا، لن يتم رفع محتوى الملفات الفعلية إلى قاعدة بيانات PostgreSQL، وإذا أردت تغيير ذلك فاستخدم الخيار `-upload_payloads true`.
لكي يعمل مُصدِّر Postgres، تحتاج إلى ضبط الخيارات التالية: `-exporters postgres -postgresHost <host> -postgresPort <port> -postgresUser <user> -postgresPassword <pass> -postgresDBName <db_name>`
#### إعداد مُصدِّر GCP
يتيح مُصدِّر GCP إرسال التجزئات والبيانات الوصفية للملفات إلى مثيل GCP Spanner. يمكنك اختياريًا رفع الملفات المستخرجة إلى دلو GCS. إذا لم تكن قد أعددت Cloud Spanner لتخزين وظائف المعالجة، فاتبع الخطوات في [إعداد Cloud Spanner](####setting-up-cloud-spanner) وبدلًا من الخطوة الأخيرة نفّذ الأمر التالي لإنشاء الجداول اللازمة:``` shell
gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateCloudSpannerExporterTables.ddl
إذا كنت قد أعددت بالفعل Cloud Spanner لتخزين بيانات الوظائف، فكل ما عليك فعله هو تشغيل الأمر أعلاه وستكون جاهزًا للانطلاق.
إذا كنت ترغب في رفع الملفات المستخرجة إلى GCS، فأنت بحاجة إلى إنشاء bucket خاص بـ GCS:
الخطوة 1: اجعل حساب الخدمة مسؤولًا (admin) عن هذا bucket:``` shell gcloud storage buckets create gs://<gcs_bucket_name> --project=project_name>
الخطوة 2: اجعل حساب الخدمة مسؤولًا إداريًا عن هذه السلة:``` shell
gcloud storage buckets add-iam-policy-binding gs://<gcs_bucket_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/storage.objectAdmin"
لاستخدام هذا المُصدِّر، تحتاج إلى توفير الخيارات التالية: -exporters GCP -gcp_exporter_gcs_bucket <gcs_bucket_name>
-processing_worker_count: يتحكم هذا الخيار في عدد عمال المعالجة المتوازية. المعالجة مكلفة لوحدة المعالجة المركزية والإدخال/الإخراج، وخلال اختباراتي وجدت أن وجود عاملَين هو الحل الأمثل.-cache_dir: موقع ذاكرة التخزين المؤقت المحلية المستخدمة لإزالة التكرار (deduplication)، ويُنصح بتغييره من /tmp إلى، على سبيل المثال، الدليل الرئيسي للمستخدم الذي سيشغّل hashr.-export: عند ضبطه على false، سيقوم hashr بحفظ النتائج على القرص متجاوزًا المُصدِّر.-export_path: إذا تم ضبط export على false، فهذا هو المجلد الذي ستُحفظ فيه العينات.-reprocess: يسمح بإعادة معالجة مصدر معيّن (في حال حدوث خطأ مثلًا) بناءً على قيمة sha256 المخزنة في جدول المهام.-upload_payloads: يتحكم فيما إذا كان المحتوى الفعلي للملف سيتم رفعه بواسطة المُصدِّرين المعرّفين.-gcp_exporter_worker_count: عدد العمال/الغوروتينات التي سيستخدمها مُصدِّر GCP لرفع البيانات.هذا ليس منتجًا مدعومًا رسميًا من Google.