যাচাই পদ্ধতি

আপনি আপনার Pixel ডিভাইসে Pixel ছবির একটি বৈধ সংস্করণ চালাতে পারেন তা নিশ্চিত করতে এই পৃষ্ঠাটি একটি পদ্ধতির রূপরেখা (সর্বোচ্চ আত্মবিশ্বাসের সাথে)। এতে আপনার কম্পিউটারে একটি ফ্যাক্টরি ইমেজ ডাউনলোড করা এবং ডাউনলোড করা আর্টিফ্যাক্টটিকে আপনার ডিভাইসে ফ্ল্যাশ করার আগে লগ ইনক্লুশন প্রুফ সম্পাদন করা জড়িত।

আপনার পিক্সেল ফ্যাক্টরি ইমেজ কিভাবে যাচাই করবেন

যাচাই করার পূর্বশর্ত

আপনি যে ফ্যাক্টরি ইমেজটি এইমাত্র ডাউনলোড করেছেন তা আমাদের দাবি অনুসারে যাচাই করার আগে, আপনাকে একটি নেটওয়ার্ক-সংযুক্ত কম্পিউটার থেকে নিম্নলিখিতগুলি করতে হবে৷

গোলং

যাচাইকরণ টুলটি Go-তে লেখা আছে। এটি তৈরি করতে, Go সাইট থেকে Go 1.17 বা তার পরে ইনস্টল করুন।

wget বা কার্ল

wget এবং curl হল এমন টুল যা ইন্টারনেট থেকে ফাইল পুনরুদ্ধার বা ডাউনলোড করতে ব্যবহার করা যেতে পারে। আপনার সিস্টেমে এই সরঞ্জামগুলির যে কোনও একটি ইনস্টল করা আছে তা নিশ্চিত করুন, কারণ এই গাইডের বাকি অংশ এবং আমরা যে স্ক্রিপ্ট সরবরাহ করি তা তাদের মধ্যে একটি উপস্থিত থাকা নির্ভর করে।

Avbtool

avbtool ফ্যাক্টরি ইমেজ এবং বাইনারি যাচাইকরণের VBMeta ডাইজেস্ট গণনা করতে ব্যবহৃত হয়।

আপনি নীচের কমান্ডটি ব্যবহার করে AOSP সংগ্রহস্থল থেকে এটি ডাউনলোড করতে পারেন এবং লিঙ্কড ডকুমেন্টেশনে আরও বিশদ জানতে পারেন।

computer:~$ git clone https://android.googlesource.com/platform/external/avb

সেই সংগ্রহস্থল ক্লোন করার পরে, avbtool.py ক্লোন করা avb সংগ্রহস্থল ডিরেক্টরির মধ্যে পাওয়া যাবে। অতিরিক্তভাবে, আপনার $PATH এনভায়রনমেন্ট ভেরিয়েবলে এই ডিরেক্টরিটি যোগ করা উচিত।

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

অন্তর্ভুক্তি প্রমাণ যাচাইকারী

অন্তর্ভুক্তি প্রমাণ যাচাইকারী হল একটি Go মডিউল যা Pixel Factory ছবিগুলির স্বচ্ছতা লগকে জিজ্ঞাসা করে এবং লগে একটি ছবি অন্তর্ভুক্ত করা হয়েছে কিনা তা আউটপুট করে৷

উপরে AVB সংগ্রহস্থল ক্লোন করার পরে, যাচাইকারীর উত্স কোডটি tools/transparency/verify/ -এ পাওয়া যায়

Fbpacktool

fbpacktool হল একটি পাইথন স্ক্রিপ্ট যা Pixel এর bootloader.img এ পৃথক উপাদান আনপ্যাক করতে ব্যবহৃত হয়। avbtool.py যাচাইয়ের জন্য প্রয়োজনীয় ছবিগুলি আবিষ্কার করার অনুমতি দেওয়ার জন্য এই টুলটি গুরুত্বপূর্ণ।

এই টুলটি ব্যবহার করার জন্য, আপনার avbtool.py যে ডিরেক্টরিতে বাস করে সেই ডিরেক্টরিতে আপনাকে নিম্নলিখিত তিনটি পাইথন স্ক্রিপ্ট ডাউনলোড করতে হবে, fbpacktool.py এক্সিকিউটেবল করতে হবে এবং সুবিধার জন্য fbpacktool.pyfbpacktool নামে একটি সিমলিঙ্ক তৈরি করতে হবে।

আপনার যদি wget থাকে, আপনি তিনটি স্ক্রিপ্ট ডাউনলোড করতে নিম্নলিখিত কমান্ডটি ইস্যু করতে পারেন:

computer:dir_to_avbtool$ wget https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

আপনার যদি curl থাকে, আপনি তিনটি স্ক্রিপ্ট ডাউনলোড করতে নিম্নলিখিত কমান্ডগুলি ইস্যু করতে পারেন:

computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

OpenSSL

যাচাইকরণ ওয়ার্কফ্লোতে টার্মিনাল ব্যবহার করে বিভিন্ন ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপ সম্পাদন করতে সাহায্য করার জন্য আপনার openssl নামে একটি টুলেরও প্রয়োজন। এটি আপনার সিস্টেমে ইনস্টল করা আছে তা নিশ্চিত করুন। আপনি নিম্নলিখিত কমান্ড জারি করে আপনার টার্মিনালে একটি চেক করতে পারেন এবং নিশ্চিত করুন যে প্রত্যাবর্তিত ফলাফলটি খালি নয়। যেমন:

computer:~$ which openssl
/usr/bin/openssl

যাচাইকরণের জন্য পেলোড তৈরি করুন

আপনার ডিভাইসে থাকা ছবি বা পিক্সেল ফ্যাক্টরি ইমেজ ওয়েবসাইট থেকে ডাউনলোড করা যাচাই করতে, আপনাকে প্রথমে বিল্ড ফিঙ্গারপ্রিন্ট এবং VBMeta ডাইজেস্ট থেকে সেই ছবির সাথে সংশ্লিষ্ট পেলোড তৈরি করতে হবে। নীচে বর্ণিত হিসাবে দুটি বিকল্প আছে, ম্যানুয়াল বা স্বয়ংক্রিয়।

  • আঙুলের ছাপ তৈরি করুন: কারখানার চিত্রের একটি স্ট্রিং সনাক্তকারী
    • উদাহরণ: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
  • VBMeta ডাইজেস্ট: একটি SHA-256 ক্রিপ্টোগ্রাফিক ডাইজেস্ট যা কারখানার ছবিগুলির বিভিন্ন অংশকে একত্রে বেঁধে রাখে
    • উদাহরণ: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

ম্যানুয়াল পেলোড নির্মাণ

যাচাইকরণের জন্য ম্যানুয়ালি পেলোড তৈরি করতে আপনাকে একটি টেক্সট ফাইল তৈরি করতে হবে, payload.txt যাতে একটি লাইনে বিল্ড ফিঙ্গারপ্রিন্ট থাকে এবং তারপরে VBMeta ডাইজেস্ট পরবর্তী লাইনে, একটি খালি নতুন লাইন সহ (দয়া করে লগ কনটেন্ট বিভাগটি দেখুন সঠিক বিন্যাস)।

ফ্যাক্টরি ইমেজ ওয়েবসাইট থেকে ধাপগুলি অনুসরণ করার পরে, payload.txt ফাইলের বিষয়বস্তু এইরকম হওয়া উচিত:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
পিক্সেল ফ্যাক্টরি ইমেজ ওয়েবসাইট থেকে VBMeta ডাইজেস্ট বের করা এবং ফিঙ্গারপ্রিন্ট তৈরি করা

আপনি যখন Pixel Factory Image ওয়েবসাইট থেকে একটি ফ্যাক্টরি ইমেজ ডাউনলোড করেন, তখন আপনাকে ডাউনলোড করা ফাইলটি আনজিপ করতে হবে, যা সেই জায়গায় অন্য ফোল্ডার তৈরি করবে। নতুন তৈরি ফোল্ডারে নেভিগেট করুন, এবং পৃথক *.img ফাইলগুলি পেতে সংশ্লিষ্ট image-*.zip ফাইলটি আনজিপ করুন। এই বাইনারি পার্টিশন ইমেজ হয়. নিশ্চিত করুন যে img ফাইলগুলির মধ্যে একটি vbmeta.img ফাইল বিদ্যমান রয়েছে। আপনি এই মত কিছু দেখতে হবে:

computer:oriole-sd1a.210817.015.a4$ unzip image-oriole-sd1a.210817.015.a4.zip
Archive:  image-oriole-sd1a.210817.015.a4.zip
  inflating: android-info.txt
  inflating: boot.img
  inflating: vendor_boot.img
  inflating: system.img
  inflating: vendor.img
  inflating: product.img
  inflating: system_ext.img
  inflating: system_other.img
  inflating: dtbo.img
  inflating: vbmeta_system.img
  inflating: vbmeta.img
  inflating: super_empty.img

আপনি বিল্ড ফিঙ্গারপ্রিন্ট বের করতে পারেন এবং সমস্ত ডাউনলোড করা ফাইল থেকে VBMeta ডাইজেস্ট গণনা করতে পারেন।

avbtool.py আপনার $PATH এ উপলব্ধ হওয়ার পরে, আপনি বিল্ড ফিঙ্গারপ্রিন্ট বের করতে এবং আপনি যে ফ্যাক্টরি ইমেজটি সবেমাত্র ডাউনলোড করেছেন তার VBMeta ডাইজেস্ট গণনা করতে আপনার টার্মিনাল থেকে নিম্নলিখিত কমান্ডগুলি জারি করতে পারেন:

computer:dir_containing_unzipped_factory_image~$ grep -a 'ro\..*build\.fingerprint=google/.*/release-keys' system.img | cut -f2 -d'='
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
computer:dir_containing_unzipped_factory_image$ avbtool.py calculate_vbmeta_digest --image vbmeta.img
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
ডাউনলোড করা ফ্যাক্টরি ইমেজের ম্যানুয়াল ভেরিফিকেশন

ডাউনলোড করা ফ্যাক্টরি ইমেজ সঠিকভাবে যাচাই করার জন্য, আপনাকে fbpacktool.py এবং অন্যান্য দুটি পাইথন ফাইল ডাউনলোড করতে হবে যা এটির উপর নির্ভর করে ( fbpack.py এবং packedstruct.py ) bootloader.img এ উপাদানগুলি আনপ্যাক করতে, যেমন সেগুলি পৃথকভাবে বর্ণনা করা হয়েছে VBMeta গঠন। আপনার একবার আনপ্যাকার হয়ে গেলে, আপনি বুটলোডার ইমেজটি আনপ্যাক করতে fbpacktool.py ব্যবহার করতে পারেন। যেমন:

computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img

আপনি সেই ডিরেক্টরিতে উপস্থিত অতিরিক্ত .img ফাইলগুলি দেখতে সক্ষম হবেন। এখন, আপনি বিভিন্ন পার্টিশনের স্বাক্ষর মেলে কিনা তা ম্যানুয়ালি যাচাই করতে avbtool.py ব্যবহার করতে পারেন।

computer:dir_containing_unzipped_images$ avbtool.py verify_image --image vbmeta.img --follow_chain_partitions
Verifying image vbmeta.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta.img
vbmeta_system: Chained but ROLLBACK_SLOT (which is 1) and KEY (which has sha1 df529646b7225015196a714006346f0768b87fcf) not specified
--
Verifying image vbmeta_system.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_system.img
product: Successfully verified sha256 hashtree of product.img for image of 2700468224 bytes
system: Successfully verified sha256 hashtree of system.img for image of 878493696 bytes
system_ext: Successfully verified sha256 hashtree of system_ext.img for image of 251334656 bytes
vbmeta_vendor: Chained but ROLLBACK_SLOT (which is 3) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image vbmeta_vendor.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_vendor.img
vendor: Successfully verified sha256 hashtree of vendor.img for image of 472940544 bytes
boot: Chained but ROLLBACK_SLOT (which is 2) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image boot.img using embedded public key
vbmeta: Successfully verified footer and SHA256_RSA4096 vbmeta struct in boot.img
boot: Successfully verified sha256 hash of boot.img for image of 24481792 bytes
abl: Successfully verified sha256 hash of abl.img for image of 1744896 bytes
bl1: Successfully verified sha256 hash of bl1.img for image of 12288 bytes
bl2: Successfully verified sha256 hash of bl2.img for image of 544768 bytes
bl31: Successfully verified sha256 hash of bl31.img for image of 86016 bytes
dtbo: Successfully verified sha256 hash of dtbo.img for image of 2152234 bytes
gsa: Successfully verified sha256 hash of gsa.img for image of 262144 bytes
ldfw: Successfully verified sha256 hash of ldfw.img for image of 4096000 bytes
pbl: Successfully verified sha256 hash of pbl.img for image of 49152 bytes
tzsw: Successfully verified sha256 hash of tzsw.img for image of 4304896 bytes
vendor_boot: Successfully verified sha256 hash of vendor_boot.img for image of 25718784 bytes
vendor_dlkm: Successfully verified sha256 hashtree of vendor_dlkm.img for image of 54505472 bytes

আপনি যদি কোনো ত্রুটি বা ব্যর্থতার বার্তা দেখতে না পান, তাহলে এর মানে হল ডাউনলোড করা ছবির VBMeta এখন সফলভাবে যাচাই করা হয়েছে।

স্বয়ংক্রিয় পেলোড নির্মাণ

আপনার সুবিধার জন্য, আমরা একটি পাইথন স্ক্রিপ্টও প্রদান করেছি যা আপনি ব্যবহার করতে পারেন। এই টুলের সাহায্যে, ম্যানুয়ালি ফাইল আনা এবং আনজিপ করার পরিবর্তে, আপনাকে শুধুমাত্র ফ্যাক্টরি ইমেজের URL উল্লেখ করতে হবে।

computer:dir_to_avb_repo/tools/transparency$ python3 ./pixel_factory_image_verify.py https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Fetching file from: https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Successfully downloaded file.
Successfully unpacked factory image.
Successfully unpacked factory image partitions.
Successfully unpacked bootloader image.
Successfully verified VBmeta.
Successfully extracted build fingerprint.
Successfully calculated VBMeta Digest.
The build fingerprint for factory image is: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
The VBMeta Digest for factory image is: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

A corresponding "payload.txt" file has been created.

উপরের কমান্ডটি কার্যকর করা ফ্যাক্টরি ইমেজ বান্ডেল ডাউনলোড করবে, বান্ডেলটি আনজিপ করবে এবং স্বাক্ষরিত পার্টিশনের স্বাক্ষর যাচাই করবে। সফল যাচাইয়ের পরে, এটি payload.txt নামে একটি নতুন ফাইল তৈরি করবে এবং এর বিষয়বস্তু নীচের মত দেখতে হবে:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

আপনার payload.txt সফলভাবে তৈরি হওয়ার পরে আপনি ছবি অন্তর্ভুক্তি ধাপগুলির যাচাইকরণ শুরু করতে পারেন৷

ছবি অন্তর্ভুক্তি যাচাই করা হচ্ছে (অন্তর্ভুক্তি প্রমাণ)

একবার আপনি আপনার পেলোড তৈরি করলে, পেলোডের পথ নির্দেশ করতে একটি শেল ভেরিয়েবল (যেমন $PAYLOAD_PATH ) সেট করুন।

অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্টের মধ্যে avb রিপোজিটরিতে একটি অন্তর্ভুক্তি প্রমাণ টুল প্রকাশিত হয়েছে। এটি চালানোর জন্য:

computer:external/avb/tools/transparency/verify$ PAYLOAD_PATH=../payload.txt
computer:external/avb/tools/transparency/verify$ go build cmd/verifier/verifier.go
computer:external/avb/tools/transparency/verify$ ./verifier --payload_path=${PAYLOAD_PATH}

যাচাইকারী চেকপয়েন্ট এবং লগ বিষয়বস্তু ব্যবহার করে ( টাইল ডিরেক্টরিতে পাওয়া যায়) আপনার ইমেজ পেলোডটি স্বচ্ছতা লগে আছে কিনা তা পরীক্ষা করতে, অর্থাৎ এটি Google দ্বারা প্রকাশিত।

কমান্ডের আউটপুট stdout এ লেখা হয়:

  • OK যদি ছবিটি লগে অন্তর্ভুক্ত করা হয়,
  • FAILURE যদি তা না হয়।