বিবেচনামূলক অ্যাক্সেস কন্ট্রোল (DAC)

বিল্ডে যোগ করা ফাইল সিস্টেম অবজেক্ট এবং সার্ভিসগুলোর প্রায়শই আলাদা, অনন্য আইডির প্রয়োজন হয়, যা অ্যান্ড্রয়েড আইডি (AID) নামে পরিচিত। বর্তমানে, ফাইল এবং সার্ভিসের মতো অনেক রিসোর্স অপ্রয়োজনে কোর (অ্যান্ড্রয়েড-সংজ্ঞায়িত) AID ব্যবহার করে; অনেক ক্ষেত্রে এর পরিবর্তে আপনি OEM (ওইএম-সংজ্ঞায়িত) AID ব্যবহার করতে পারেন।

অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলো (অ্যান্ড্রয়েড ৭.x এবং তার নিচের সংস্করণ) ফাইল সিস্টেমের সক্ষমতা এবং/অথবা কাস্টম OEM AID নির্দিষ্ট করার জন্য একটি ডিভাইস-নির্দিষ্ট android_filesystem_config.h ফাইল ব্যবহার করে AID ব্যবস্থাটিকে প্রসারিত করেছিল। তবে, এই সিস্টেমটি স্বজ্ঞাত ছিল না, কারণ এটি OEM AID-এর জন্য সুন্দর নাম ব্যবহারের সুবিধা দিত না। এর ফলে ইউজার এবং গ্রুপ ফিল্ডের জন্য সরাসরি সংখ্যাসূচক মান উল্লেখ করতে হতো এবং সেই সংখ্যাসূচক AID-এর সাথে একটি সহজবোধ্য নাম যুক্ত করার কোনো উপায় ছিল না।

অ্যান্ড্রয়েডের নতুন সংস্করণগুলো (অ্যান্ড্রয়েড ৮.০ এবং তার পরবর্তী সংস্করণ) ফাইল সিস্টেমের সক্ষমতা বাড়ানোর একটি নতুন পদ্ধতি সমর্থন করে। এই নতুন পদ্ধতিটি নিম্নলিখিত বিষয়গুলো সমর্থন করে:

  • কনফিগারেশন ফাইলের জন্য একাধিক উৎস অবস্থান (যা সম্প্রসারণযোগ্য বিল্ড কনফিগারেশন সক্ষম করে)।
  • OEM AID মানগুলির বিল্ড-টাইম যৌক্তিকতা যাচাই।
  • একটি কাস্টম OEM AID হেডার তৈরি করা, যা প্রয়োজন অনুযায়ী সোর্স ফাইলে ব্যবহার করা যাবে।
  • প্রকৃত OEM AID মানের সাথে একটি সহজবোধ্য নামের সংযোগ। ব্যবহারকারী এবং গ্রুপের জন্য অ-সংখ্যাসূচক স্ট্রিং আর্গুমেন্ট সমর্থন করে, যেমন "2901"-এর পরিবর্তে "foo"।

অতিরিক্ত উন্নতিগুলোর মধ্যে system/core/libcutils/include/private/android_filesystem_config.h থেকে android_ids[] অ্যারেটি অপসারণ করা হয়েছে। এই অ্যারেটি এখন Bionic-এ একটি সম্পূর্ণ প্রাইভেট জেনারেটেড অ্যারে হিসেবে বিদ্যমান, যার অ্যাক্সেসর হিসেবে getpwnam() এবং getgrnam() ব্যবহৃত হয়। (এর একটি পার্শ্বপ্রতিক্রিয়া হলো, কোর AID-গুলো পরিবর্তিত হওয়ার সাথে সাথে স্টেবল বাইনারি তৈরি হয়।) টুলিং এবং আরও বিস্তারিত তথ্যের জন্য একটি README ফাইলের জন্য build/make/tools/fs_config দেখুন।

অ্যান্ড্রয়েড আইডি (AID) যোগ করুন

অ্যান্ড্রয়েড ৮.০ অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) থেকে android_ids[] অ্যারেটি সরিয়ে দিয়েছে। এর পরিবর্তে, Bionic android_ids[] অ্যারে তৈরি করার সময় system/core/libcutils/include/private/android_filesystem_config.h হেডার ফাইল থেকে সমস্ত AID-বান্ধব নাম তৈরি করা হয়। AID_* এর সাথে মিলে যাওয়া যেকোনো define টুলিং দ্বারা শনাক্ত করা হয় এবং * চিহ্নটি ছোট হাতের অক্ষরে নাম হয়ে যায়।

উদাহরণস্বরূপ, private/android_filesystem_config.h এ:

#define AID_SYSTEM 1000

হয়ে যায়:

  • বন্ধুত্বপূর্ণ নাম: সিস্টেম
  • ইউআইডি: ১০০০
  • জিআইডি: ১০০০

একটি নতুন AOSP কোর AID যোগ করতে, android_filesystem_config.h হেডার ফাইলে কেবল #define যুক্ত করুন। বিল্ড করার সময় AID-টি তৈরি হয় এবং ইউজার ও গ্রুপ আর্গুমেন্ট ব্যবহারকারী ইন্টারফেসগুলোর জন্য এটি উপলব্ধ করা হয়। টুলিং যাচাই করে দেখে যে নতুন AID-টি APP বা OEM রেঞ্জের মধ্যে নেই; এটি ঐ রেঞ্জগুলোর পরিবর্তনকেও সম্মান করে এবং কোনো পরিবর্তন বা নতুন OEM-সংরক্ষিত রেঞ্জ যুক্ত হলে স্বয়ংক্রিয়ভাবে পুনরায় কনফিগার হয়ে যায়।

AID কনফিগার করুন

নতুন AIDs মেকানিজমটি সক্রিয় করতে, BoardConfig.mk ফাইলে TARGET_FS_CONFIG_GEN সেট করুন। এই ভেরিয়েবলটি কনফিগারেশন ফাইলগুলির একটি তালিকা ধারণ করে, যা আপনাকে প্রয়োজন অনুযায়ী ফাইল যুক্ত করার সুযোগ দেয়।

প্রচলিত রীতি অনুযায়ী, কনফিগারেশন ফাইলের নাম config.fs ব্যবহার করা হয়, কিন্তু বাস্তবে আপনি যেকোনো নাম ব্যবহার করতে পারেন। config.fs ফাইলগুলো পাইথনের ConfigParser ini ফরম্যাটে থাকে এবং এতে একটি caps সেকশন (ফাইল সিস্টেমের সক্ষমতা কনফিগার করার জন্য) ও একটি AIDs সেকশন (OEM AIDs কনফিগার করার জন্য) অন্তর্ভুক্ত থাকে।

ক্যাপস বিভাগটি কনফিগার করুন

ক্যাপস সেকশনটি বিল্ডের মধ্যে ফাইল সিস্টেম অবজেক্টগুলিতে ফাইল সিস্টেম ক্যাপাবিলিটি সেট করা সমর্থন করে (ফাইল সিস্টেমটিকেও অবশ্যই এই কার্যকারিতা সমর্থন করতে হবে)।

যেহেতু অ্যান্ড্রয়েডে রুট হিসেবে একটি স্থিতিশীল পরিষেবা চালালে কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) ব্যর্থ হয়, তাই কোনো প্রসেস বা পরিষেবা চালানোর সময় তার ক্যাপাবিলিটি বজায় রাখার জন্য আগে ক্যাপাবিলিটি সেট আপ করতে হতো এবং তারপর চালানোর জন্য একটি উপযুক্ত AID-তে setuid / setgid ব্যবহার করতে হতো। caps ব্যবহার করে, আপনি এই প্রয়োজনীয়তাগুলো এড়িয়ে যেতে পারেন এবং কার্নেলকে আপনার জন্য এটি করতে দিতে পারেন। যখন main() ফাংশনে নিয়ন্ত্রণ হস্তান্তর করা হয়, তখন আপনার প্রসেসের প্রয়োজনীয় ক্যাপাবিলিটিগুলো আগে থেকেই থাকে, ফলে আপনার পরিষেবা একজন নন-রুট ব্যবহারকারী এবং গ্রুপ ব্যবহার করতে পারে (বিশেষ সুবিধাপ্রাপ্ত পরিষেবা শুরু করার জন্য এটিই সবচেয়ে পছন্দের উপায়)।

ক্যাপস সেকশনে নিম্নলিখিত সিনট্যাক্স ব্যবহার করা হয়:

বিভাগ মূল্য সংজ্ঞা
[path] কনফিগার করার জন্য ফাইল সিস্টেম পাথ। যে পাথের শেষে / থাকে, সেটিকে ডিরেক্টরি হিসেবে গণ্য করা হয়, অন্যথায় এটি একটি ফাইল।

বিভিন্ন ফাইলে একই [path] ব্যবহার করে একাধিক সেকশন নির্দিষ্ট করা একটি ত্রুটি। পাইথন ৩.২ বা তার কম সংস্করণে, একই ফাইলে এমন সেকশন থাকতে পারে যা পূর্ববর্তী সেকশনকে ওভাররাইড করে; পাইথন ৩.২-এ এটি স্ট্রিক্ট মোডে সেট করা আছে।
mode অক্টাল ফাইল মোড কমপক্ষে ৩ অঙ্কের একটি বৈধ অক্টাল ফাইল মোড। যদি ৩ নির্দিষ্ট করা হয়, তবে এর আগে একটি ০ যোগ করা হয়, অন্যথায় মোডটি অপরিবর্তিত থাকে।
user AID_<user> একটি বৈধ AID-এর জন্য হয় C define অথবা ফ্রেন্ডলি নেম ব্যবহার করুন (যেমন AID_RADIO এবং radio উভয়ই গ্রহণযোগ্য)। একটি কাস্টম AID ডিফাইন করতে, AID কনফিগার করা বিভাগটি দেখুন।
group AID_<group> ব্যবহারকারীর মতোই।
caps ক্যাপ* bionic/libc/kernel/uapi/linux/capability.h এ ঘোষিত নামটি, যার শুরুতে CAP_ থাকবে না। মিশ্র কেস অনুমোদিত। বড় হাতের অক্ষরও অবিকৃত থাকতে পারে:
  • বাইনারি (0b0101)
  • অক্টাল (০৪৫৫)
  • int (42)
  • হেক্স (0xFF)
একাধিক বড় হাতের অক্ষরের মধ্যে স্পেস ব্যবহার করুন।

ব্যবহারের উদাহরণের জন্য, ফাইল সিস্টেম ক্যাপাবিলিটি ব্যবহার দেখুন।

AID বিভাগটি কনফিগার করুন

AID সেকশনটিতে OEM AID-গুলো থাকে এবং এটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

বিভাগ মূল্য সংজ্ঞা
[AID_<name>] <name> এ বড় হাতের অক্ষর, সংখ্যা এবং আন্ডারস্কোর থাকতে পারে। ছোট হাতের অক্ষরটি ফ্রেন্ডলি নেম হিসেবে ব্যবহৃত হয়। কোডে অন্তর্ভুক্তির জন্য তৈরি হেডার ফাইলটি হুবহু AID_<name> ব্যবহার করে।

একই AID_<name> দিয়ে একাধিক সেকশন উল্লেখ করা একটি ত্রুটি (কেস-ইনসেনসিটিভ এবং [path] এর মতো একই সীমাবদ্ধতা প্রযোজ্য)।

<name> অবশ্যই একটি পার্টিশনের নাম দিয়ে শুরু করতে হবে, যাতে এটি বিভিন্ন সোর্সের সাথে সাংঘর্ষিক না হয়।
value <সংখ্যা> একটি বৈধ C স্টাইলের সংখ্যা স্ট্রিং (হেক্স, অক্টাল, বাইনারি এবং দশমিক)।

একই ভ্যালু অপশন দিয়ে একাধিক সেকশন নির্দিষ্ট করা একটি ত্রুটি।

<name> এ ব্যবহৃত পার্টিশনের সাথে সঙ্গতিপূর্ণ পরিসরে ভ্যালু অপশনগুলো অবশ্যই নির্দিষ্ট করতে হবে। বৈধ পার্টিশন এবং তাদের সংশ্লিষ্ট পরিসরের তালিকা system/core/libcutils/include/private/android_filesystem_config.h এ সংজ্ঞায়িত করা আছে। অপশনগুলো হলো:
  • বিক্রেতা পার্টিশন
    • AID_OEM_RESERVED_START(2900) - AID_OEM_RESERVED_END(2999)
    • AID_OEM_RESERVED_2_START(5000) - AID_OEM_RESERVED_2_END(5999)
  • সিস্টেম পার্টিশন
    • AID_SYSTEM_RESERVED_START(6000) - AID_SYSTEM_RESERVED_END(6499)
  • ওডিএম বিভাজন
    • AID_ODM_RESERVED_START(6500) - AID_ODM_RESERVED_END(6999)
  • পণ্য বিভাজন
    • AID_PRODUCT_RESERVED_START(7000) - AID_PRODUCT_RESERVED_END(7499)
  • সিস্টেম_এক্সট পার্টিশন
    • AID_SYSTEM_EXT_RESERVED_START(7500) - AID_SYSTEM_EXT_RESERVED_END(7999)

ব্যবহারের উদাহরণের জন্য, OEM AID নাম নির্ধারণ এবং OEM AID ব্যবহার দেখুন।

ব্যবহারের উদাহরণ

নিম্নলিখিত উদাহরণগুলিতে একটি OEM AID কীভাবে সংজ্ঞায়িত এবং ব্যবহার করতে হয় এবং ফাইল সিস্টেমের সক্ষমতাগুলি কীভাবে সক্রিয় করতে হয় তা বিস্তারিতভাবে বর্ণনা করা হয়েছে। OEM AID নামগুলি ( [AID_ নাম ] ) অবশ্যই " vendor_ " এর মতো একটি পার্টিশন নাম দিয়ে শুরু করতে হবে, যাতে সেগুলি ভবিষ্যতের AOSP নাম বা অন্যান্য পার্টিশনের সাথে সাংঘর্ষিক না হয়।

OEM AID নামগুলি সংজ্ঞায়িত করুন

OEM AID নির্ধারণ করতে, একটি config.fs ফাইল তৈরি করুন এবং AID মানটি সেট করুন। উদাহরণস্বরূপ, device/x/y/config.fs এ নিম্নলিখিতগুলি সেট করুন:

[AID_VENDOR_FOO]
value: 2900

ফাইলটি তৈরি করার পর, TARGET_FS_CONFIG_GEN ভেরিয়েবলটি সেট করুন এবং BoardConfig.mk ফাইলে সেটিকে নির্দেশ করুন। উদাহরণস্বরূপ, device/x/y/BoardConfig.mk ফাইলে নিম্নলিখিত বিষয়গুলো সেট করুন:

TARGET_FS_CONFIG_GEN += device/x/y/config.fs

আপনার কাস্টম AID এখন একটি নতুন বিল্ডে বৃহত্তর সিস্টেম দ্বারা ব্যবহৃত হতে পারে।

OEM AID ব্যবহার করুন

একটি OEM AID ব্যবহার করতে, আপনার C কোডে, সংশ্লিষ্ট Makefile-এ oemaids_headers অন্তর্ভুক্ত করুন এবং #include "generated_oem_aid.h" যোগ করুন, তারপর ঘোষিত আইডেন্টিফায়ারগুলি ব্যবহার করা শুরু করুন। উদাহরণস্বরূপ, my_file.c তে, নিম্নলিখিতটি যোগ করুন:

#include "generated_oem_aid.h"


If (ipc->uid == AID_VENDOR_FOO) {
  // Do something
...

আপনার সংশ্লিষ্ট Android.bp ফাইলে নিম্নলিখিতগুলি যোগ করুন:

header_libs: ["oemaids_headers"],

আপনি যদি একটি Android.mk ফাইল ব্যবহার করেন, তাহলে নিম্নলিখিতটি যোগ করুন:

LOCAL_HEADER_LIBRARIES := oemaids_headers

বন্ধুত্বপূর্ণ নাম ব্যবহার করুন

অ্যান্ড্রয়েড ৯-এ, আপনি AID নেম সমর্থন করে এমন যেকোনো ইন্টারফেসের জন্য ফ্রেন্ডলি নেম ব্যবহার করতে পারেন। উদাহরণস্বরূপ:

  • some/init.rc এর chown কমান্ডে:
    chown vendor_foo /vendor/some/vendor_foo/file
    
  • some/init.rc এর একটি service :
    service vendor_foo /vendor/bin/foo_service
        user vendor_foo
        group vendor_foo
    

যেহেতু ফ্রেন্ডলি নেম থেকে ইউআইডি-তে অভ্যন্তরীণ ম্যাপিং /vendor/etc/passwd এবং /vendor/etc/group দ্বারা সম্পাদিত হয়, তাই ভেন্ডর পার্টিশনটি অবশ্যই মাউন্ট করা থাকতে হবে।

সহযোগী বন্ধুত্বপূর্ণ নাম

অ্যান্ড্রয়েড ৯-এ প্রকৃত OEM AID মানের সাথে একটি সহজবোধ্য নাম যুক্ত করার সুবিধা রয়েছে। আপনি ব্যবহারকারী এবং গ্রুপের জন্য সংখ্যাবিহীন স্ট্রিং আর্গুমেন্ট ব্যবহার করতে পারেন, অর্থাৎ "2901"-এর পরিবর্তে " vendor_foo "।

AID থেকে সহজবোধ্য নামে রূপান্তর করুন

OEM AID-এর জন্য, Android 8.x-এ getpwnam এবং অনুরূপ ফাংশনগুলির সাথে oem_#### ব্যবহার করা আবশ্যক ছিল, সেইসাথে এমন জায়গাগুলিতেও যেখানে getpwnam দিয়ে লুকআপ করা হয় (যেমন init স্ক্রিপ্ট)। Android 9-এ, আপনি Android ID (AID) থেকে ফ্রেন্ডলি নামে এবং এর বিপরীতে রূপান্তরের জন্য Bionic-এ getpwnam এবং getgrnam মতো ফাংশনগুলি ব্যবহার করতে পারেন।

ফাইল সিস্টেমের ক্ষমতা ব্যবহার করুন

ফাইল সিস্টেম ক্যাপাবিলিটি চালু করতে, config.fs ফাইলে একটি caps সেকশন তৈরি করুন। উদাহরণস্বরূপ, device/x/y/config.fs ফাইলে নিম্নলিখিত সেকশনটি যোগ করুন:

[system/bin/foo_service]
mode: 0555
user: AID_VENDOR_FOO
group: AID_SYSTEM
caps: SYS_ADMIN | SYS_NICE

ফাইলটি তৈরি করার পর, BoardConfig.mk ফাইলে TARGET_FS_CONFIG_GEN কে সেই ফাইলটির দিকে নির্দেশ করতে সেট করুন। উদাহরণস্বরূপ, device/x/y/BoardConfig.mk ফাইলে নিম্নলিখিত বিষয়গুলো সেট করুন:

TARGET_FS_CONFIG_GEN += device/x/y/config.fs

যখন vendor_ foo সার্ভিসটি চালানো হয়, তখন এটি setuid এবং setgid কল ছাড়াই CAP_SYS_ADMIN এবং CAP_SYS_NICE ক্যাপাবিলিটি সহ চালু হয়। এছাড়াও, vendor_ foo সার্ভিসের SELinux পলিসির আর setuid এবং setgid ক্যাপাবিলিটির প্রয়োজন হয় না এবং এটি মুছে ফেলা যেতে পারে।

ওভাররাইড কনফিগার করুন (অ্যান্ড্রয়েড 6.x-7.x)

অ্যান্ড্রয়েড ৬.০ fs_config এবং এর সাথে সম্পর্কিত স্ট্রাকচার ডেফিনিশনগুলোকে ( system/core/include/private/android_filesystem_config.h ) system/core/libcutils/fs_config.c তে স্থানান্তরিত করে, যেখানে /system/etc/fs_config_dirs এবং /system/etc/fs_config_files এ ইনস্টল করা বাইনারি ফাইলগুলোর মাধ্যমে এগুলোকে আপডেট বা ওভাররাইড করা যেত। ডিরেক্টরি এবং ফাইলের জন্য আলাদা ম্যাচিং ও পার্সিং নিয়ম (যেখানে অতিরিক্ত গ্লোব এক্সপ্রেশন ব্যবহার করা যেত) ব্যবহারের ফলে অ্যান্ড্রয়েড দুটি ভিন্ন টেবিলে ডিরেক্টরি এবং ফাইল পরিচালনা করতে সক্ষম হয়। system/core/libcutils/fs_config.c তে থাকা স্ট্রাকচার ডেফিনিশনগুলো শুধু রানটাইমে ডিরেক্টরি এবং ফাইল পড়ার সুযোগই দিত না, বরং হোস্ট বিল্ড টাইমে ${OUT}/system/etc/fs_config_dirs এবং ${OUT}/system/etc/fs_config_files হিসেবে ফাইল সিস্টেম ইমেজ তৈরি করার জন্য একই ফাইলগুলো ব্যবহার করতে পারত।

যদিও ফাইল সিস্টেম সম্প্রসারণের ওভাররাইড পদ্ধতিটি অ্যান্ড্রয়েড ৮.০-তে প্রবর্তিত মডিউলার কনফিগারেশন সিস্টেম দ্বারা প্রতিস্থাপিত হয়েছে, তবুও আপনি চাইলে পুরোনো পদ্ধতিটি ব্যবহার করতে পারেন। নিম্নলিখিত বিভাগগুলিতে ওভাররাইড ফাইল তৈরি ও অন্তর্ভুক্ত করা এবং ফাইল সিস্টেম কনফিগার করার পদ্ধতি বিস্তারিতভাবে বর্ণনা করা হয়েছে।

ওভাররাইড ফাইল তৈরি করুন

আপনি build/tools/fs_config এ থাকা fs_config_generate টুলটি ব্যবহার করে /system/etc/fs_config_dirs এবং /system/etc/fs_config_files অ্যালাইনড বাইনারি ফাইলগুলো তৈরি করতে পারেন। এই টুলটি একটি libcutils লাইব্রেরি ফাংশন ( fs_config_generate() ) ব্যবহার করে DAC-এর প্রয়োজনীয়তাগুলোকে একটি বাফারে পরিচালনা করে এবং DAC নিয়মগুলোকে প্রাতিষ্ঠানিক রূপ দেওয়ার জন্য একটি include ফাইলের নিয়মাবলী সংজ্ঞায়িত করে।

এটি ব্যবহার করতে, device/ vendor / device /android_filesystem_config.h এ একটি include ফাইল তৈরি করুন যা ওভাররাইড হিসেবে কাজ করবে। ফাইলটিতে অবশ্যই system/core/include/private/android_filesystem_config.h এ সংজ্ঞায়িত structure fs_path_config ফরম্যাট ব্যবহার করতে হবে এবং ডিরেক্টরি ও ফাইল সিম্বলের জন্য নিম্নলিখিত স্ট্রাকচার ইনিশিয়ালাইজেশন থাকতে হবে:

  • ডিরেক্টরিগুলির জন্য android _device _dirs[] ব্যবহার করুন।
  • ফাইলের জন্য android _device _files[] ব্যবহার করুন।

যখন android_device_dirs[] এবং android_device_files[] ব্যবহার করা হয় না, তখন আপনি NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS এবং NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_FILES সংজ্ঞায়িত করতে পারেন (নীচের উদাহরণটি দেখুন)। এছাড়াও আপনি বোর্ড কনফিগারেশনে TARGET_ANDROID_FILESYSTEM_CONFIG_H ব্যবহার করে ওভাররাইড ফাইলটি নির্দিষ্ট করতে পারেন, যেখানে android_filesystem_config.h একটি বাধ্যতামূলক বেসনেম হিসেবে থাকবে।

ওভাররাইড ফাইল অন্তর্ভুক্ত করুন

ফাইল অন্তর্ভুক্ত করতে, নিশ্চিত করুন যে PRODUCT_PACKAGES fs_config_dirs এবং/অথবা fs_config_files অন্তর্ভুক্ত আছে, যাতে এটি সেগুলোকে যথাক্রমে /system/etc/fs_config_dirs এবং /system/etc/fs_config_files এ ইনস্টল করতে পারে। বিল্ড সিস্টেম $(TARGET_DEVICE_DIR) -এ কাস্টম android_filesystem_config.h খোঁজে, যেখানে BoardConfig.mk বিদ্যমান থাকে। যদি এই ফাইলটি অন্য কোথাও থাকে, তবে বোর্ড কনফিগারেশন ভেরিয়েবল TARGET_ANDROID_FILESYSTEM_CONFIG_H সেই অবস্থান নির্দেশ করার জন্য সেট করুন।

ফাইল সিস্টেম কনফিগার করুন

অ্যান্ড্রয়েড ৬.০ এবং তার পরবর্তী সংস্করণগুলিতে ফাইল সিস্টেম কনফিগার করতে:

  1. $(TARGET_DEVICE_DIR)/android_filesystem_config.h ফাইলটি তৈরি করুন।
  2. বোর্ড কনফিগারেশন ফাইলে (যেমন, $(TARGET_DEVICE_DIR)/device.mk ) PRODUCT_PACKAGESfs_config_dirs এবং/অথবা fs_config_files যোগ করুন।

ওভাররাইড উদাহরণ

এই উদাহরণটি system/bin/glgps ডেমনকে ওভাররাইড করে device/ vendor / device ডিরেক্টরিতে ওয়েক লক সাপোর্ট যোগ করার জন্য একটি প্যাচ দেখায়। নিম্নলিখিত বিষয়গুলো মনে রাখবেন:

  • প্রতিটি স্ট্রাকচার এন্ট্রিতে থাকে মোড, ইউআইডি, জিআইডি, ক্যাপাবিলিটিজ এবং নাম। ম্যানিফেস্টের #ডিফাইনগুলো ( AID_ROOT , AID_SHELL , CAP_BLOCK_SUSPEND ) সরবরাহ করার জন্য system/core/include/private/android_filesystem_config.h স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়।
  • android_device_files[] সেকশনটিতে একটি অ্যাকশন অন্তর্ভুক্ত রয়েছে যা অনির্দিষ্ট থাকলে system/etc/fs_config_dirs এ অ্যাক্সেস দমন করে, যা ডিরেক্টরি ওভাররাইডের জন্য কন্টেন্টের অভাবের ক্ষেত্রে একটি অতিরিক্ত DAC সুরক্ষা হিসেবে কাজ করে। তবে, এটি একটি দুর্বল সুরক্ষা; যদি কারো /system উপর নিয়ন্ত্রণ থাকে, তবে তারা সাধারণত যা খুশি তাই করতে পারে।
diff --git a/android_filesystem_config.h b/android_filesystem_config.h
new file mode 100644
index 0000000..874195f
--- /dev/null
+++ b/android_filesystem_config.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+/* This file is used to define the properties of the file system
+** images generated by build tools (eg: mkbootfs) and
+** by the device side of adb.
+*/
+
+#define NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+/* static const struct fs_path_config android_device_dirs[] = { }; */
+
+/* Rules for files.
+** These rules are applied based on "first match", so they
+** should start with the most specific path and work their
+** way up to the root. Prefixes ending in * denotes wildcard
+** and will allow partial matches.
+*/
+static const struct fs_path_config android_device_files[] = {
+  { 00755, AID_ROOT, AID_SHELL, (1ULL << CAP_BLOCK_SUSPEND),
"system/bin/glgps" },
+#ifdef NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+  { 00000, AID_ROOT, AID_ROOT, 0, "system/etc/fs_config_dirs" },
+#endif
+};


diff --git a/device.mk b/device.mk
index 0c71d21..235c1a7 100644
--- a/device.mk
+++ b/device.mk
@@ -18,7 +18,8 @@ PRODUCT_PACKAGES := \
     libwpa_client \
     hostapd \
     wpa_supplicant \
-    wpa_supplicant.conf
+    wpa_supplicant.conf \
+    fs_config_files

 ifeq ($(TARGET_PREBUILT_KERNEL),)
 ifeq ($(USE_SVELTE_KERNEL), true)

পূর্ববর্তী রিলিজ থেকে ফাইল সিস্টেম স্থানান্তর করুন

Android 5.x এবং তার পূর্ববর্তী সংস্করণ থেকে ফাইল সিস্টেম মাইগ্রেট করার সময় মনে রাখবেন যে Android 6.x

  • কিছু ইনক্লুড, স্ট্রাকচার এবং ইনলাইন ডেফিনিশন মুছে ফেলে।
  • system/core/include/private/android_filesystem_config.h থেকে সরাসরি চালানোর পরিবর্তে libcutils এর একটি রেফারেন্স প্রয়োজন। ডিভাইস প্রস্তুতকারকের প্রাইভেট এক্সিকিউটেবল, যেগুলো ফাইল বা ডিরেক্টরি কাঠামো অথবা fs_config জন্য system/code/include/private_filesystem_config.h উপর নির্ভর করে, সেগুলোকে অবশ্যই libcutils লাইব্রেরি ডিপেন্ডেন্সি যোগ করতে হবে।
  • বিদ্যমান টার্গেটগুলিতে থাকা system/core/include/private/android_filesystem_config.h অতিরিক্ত কন্টেন্টসহ ডিভাইস প্রস্তুতকারকের প্রাইভেট ব্রাঞ্চের কপিগুলিকে device/ vendor / device /android_filesystem_config.h এ স্থানান্তর করা প্রয়োজন।
  • টার্গেট সিস্টেমের কনফিগারেশন ফাইলগুলিতে SELinux বাধ্যতামূলক অ্যাক্সেস নিয়ন্ত্রণ (MAC) প্রয়োগ করার অধিকার সংরক্ষিত, যেসব ইমপ্লিমেন্টেশনে fs_config() ব্যবহার করে কাস্টম টার্গেট এক্সিকিউটেবল অন্তর্ভুক্ত থাকে, তাদের অবশ্যই অ্যাক্সেস নিশ্চিত করতে হবে।