প্রথমত, আমাকে অবশ্যই স্বীকার করতে হবে যে আমি আপনার "আমার এই কাজটি করণিকভাবে কঠিন হয়ে গেছে" বিবৃতিতে সম্পূর্ণ সম্মত agree গুগল মূলত গ্রাহক দৃষ্টিকোণ থেকে অ্যান্ড্রয়েড ডিজাইন করেছে, শক্তি ব্যবহারকারীদের জন্য নয়। ফলাফলটি হ'ল, আপনি সাম্প্রতিকতম ফেসবুক অ্যাপ্লিকেশন ব্যবহার করে বা ক্যান্ডি ক্রাশের সাথে খেলার বাইরে যেমন কিছু করতে চান, আপনি 2000-এর প্রথম দিকে লিনাক্সের রাজ্যে ফিরে এসেছিলেন, যখন বিকাশকারীর মতো জ্ঞানের পরিবর্তন প্রয়োজন ছিল কি সহজ সেটিংস হওয়া উচিত। আমি বিশ্বাস করি যে অ্যান্ড্রয়েড সিস্টেম আরও পরিপক্ক হওয়ার সাথে সাথে পরিস্থিতি দ্রুত বিকশিত হবে, তবে আপাতত আমাদের যা পেয়েছে তা করা আমাদের ...
যেমনটি আপনি বলেছেন, দুটি নিজস্ব কারণ আপনার নিজের সেলইনক্স টুলসেটটি সংকলন করা দরকার:
- সিস্টেম সরবরাহিত সরঞ্জামসেটটি সাধারণত একটি পিছনে সংস্করণ থাকে। অ্যান্ড্রয়েডের সেলইনাক্স নীতি ডিবি সংস্করণ 30 এর উপর নির্ভর করে, বর্তমান লিনাক্স বাক্সগুলি সাধারণত 29 সংস্করণ পর্যন্ত পরিচালনা করে।
- এমনকি এটি সাম্প্রতিক হলেও এটি সাহায্য করবে না, বাস্তবে আপস্ট্র্যাম কোড থেকে সেলইনাক্স তৈরি করা (যা সহজলভ্য, কমপক্ষে ফেডোরা মেশিনে প্রবাহের সুপারিশ অনুসরণ করে) কার্যকরভাবে সিস্টেমকে নীতি ডিবি সংস্করণ 30 পরিচালনা করতে সক্ষম করে, তবে অ্যান্ড্রয়েডের সেলিনাক্স হয়েছে হেভিলি সংশোধিত ( গুগল ডকুমেন্টেশন কয়েকটি পরিবর্তন হাইলাইট করে) তাই সিনট্যাক্স এবং পার্সিং ত্রুটির কারণে অ্যান্ড্রয়েডের সেলইনাক্স হ্যান্ডেল করার চেষ্টা ব্যর্থ হয়।
সুতরাং, অ্যান্ড্রয়েডের সেলিনাক্স বিশ্লেষণ অনুসন্ধান চালিয়ে যেতে, আমাদের হাতকে ময়লাতে হবে ... সবচেয়ে পরিষ্কার পদ্ধতিতে:
- প্রথমে আমরা একটি বুদ্ধিমান পরিবেশ স্থাপন করব,
- এটি শেষ হয়ে গেলে আমরা অ্যান্ড্রয়েডের সেলইনাক্স লাইব্রেরি এবং প্রথম সরঞ্জামগুলি সংকলন করব,
- তার উপরে আমরা সেলইনক্স সরঞ্জামগুলি তৈরি করব,
- আমরা কয়েকটি পরিপূরক ইউটিলিটি যুক্ত করে শেষ করব।
একটি উপযুক্ত পরিবেশ সেটআপ করুন
পরিবেশগত বৈশিষ্ট্য
সবচেয়ে পরিষ্কার প্রস্তাবিত, সম্ভবত সম্ভবত নির্ভরযোগ্যভাবে কাজ করার উপায়টি হল আপনার অ্যান্ড্রয়েড কাজের জন্য একটি পরিবেশ উত্সর্গ করা:
ভার্চুয়াল মেশিন পুরোপুরি ভাল (যদি সেরা বিকল্প না হয়)। কোনও ভিএমওয়্যার ব্যবহার করতে পছন্দ করুন যেহেতু আপনাকে আপনার ফোনটি অতিথি সিস্টেমে ইউএসবির মাধ্যমে সংযুক্ত করতে হবে। বিনামূল্যে বিকল্প কিমু এ জাতীয় কাজটি খুব ভালভাবে পরিচালনা করবে বলে মনে হয় না। আমি অন্যান্য ভার্চুয়ালাইজেশন সফ্টওয়্যার দিয়ে চেষ্টা করি নি।
এটি একটি 64 বিট সিস্টেমের প্রয়োজন হবে, অন্যথায় কোডটি সঠিকভাবে পূর্ণ আকারের কারণে সংকলন করবে না।
এটা তোলে হয় জোরালোভাবে সুপারিশ করা, সম্ভবত বাধ্যতামূলক, একটি উবুন্টু সিস্টেম ব্যবহার করতে। আপনি যদি XFCE এর হালকা ডেস্কটপ পরিবেশ পছন্দ করেন তবে পরিবর্তে Xubuntu ব্যবহার করতে দ্বিধা বোধ করুন, এটি সিস্টেমের মূল এবং উপলভ্য প্যাকেজটির কোনও পরিবর্তন করে না এবং আপনার অ্যান্ড্রয়েড সম্পর্কিত কাজগুলিতে কোনও প্রভাব ফেলবে না (এই পদ্ধতিতে উবুন্টু সম্পর্কে আমি যা কিছু বলি তাও জুবুন্টুর ক্ষেত্রে প্রযোজ্য)। অ্যান্ড্রয়েডের সেলইনাক্স উত্স ট্রিতে আপনি ফেডোরার পরিবর্তে প্রস্তাবিত কিছু রিডএম ফাইলগুলি খুঁজে পেতে পারেন, এই ফাইলগুলি উজানের এনএসএ'র সেলইনাক্স প্রকল্প থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং তাদের সামগ্রীগুলি গুগলের অ্যান্ড্রয়েডের সাথে মেলে না।
আনবুন্টু ব্যবহারের সঠিক সংস্করণটি আপনি যে Android তৈরি করতে চান তার উপর নির্ভর করে। অ্যান্ড্রয়েড 6.0 এর জন্য উবুন্টু 14.04 (বিশ্বাসযোগ্য) বাঞ্ছনীয়। আরও তথ্যের জন্য গুগল প্রয়োজনীয়তা পৃষ্ঠা পরীক্ষা করুন।
আপনার প্রচুর ডিস্ক স্পেসের প্রয়োজন হবে (আপনি যদি কেবল সেলইনাক্স সম্পর্কিত তদন্তের পরিকল্পনা করেন তবে কমপক্ষে 50 গিগাবাইট, অ্যান্ড্রয়েডের সম্পূর্ণ বিল্ডিংয়ের পরিকল্পনা করলে কমপক্ষে 100 গিগাবাইট)। সিপিইউ এবং মেমরিটি কম প্রাসঙ্গিক, তারা কেবলমাত্র একটি সম্পূর্ণ বিল্ডিংয়ের জন্য সময়কে প্রভাবিত করে এবং সেলইনাক্স সম্পর্কিত কাজের জন্য কোনও সত্যিকারের প্রভাব ফেলবে না।
উবুন্টু ব্যবহারের দুটি প্রধান সুবিধা রয়েছে:
প্রস্তাবিত সিস্টেমটি ব্যবহার করে, আপনি একটি সুপরিচিত এবং পরীক্ষিত পরিবেশে কাজ করছেন: সিস্টেম লাইব্রেরি, সরঞ্জাম এবং প্যাকেজগুলি প্রকল্পের দ্বারা প্রত্যাশিত সংস্করণ এবং অবস্থান রয়েছে।
এবং আরও সুনির্দিষ্টভাবে আমাদের বর্তমান ক্ষেত্রে: উবুন্টু নিজেই অ্যাপআর্মার উপর নির্ভর করে যা একটি সেলিনাক্স বিকল্প, এটি সেলইনাক্স ব্যবহার করে না। সুসংবাদটি হ'ল আপনি সিস্টেমের নির্ভরযোগ্যতা পরিবর্তনের ঝুঁকি না নিয়েই Android এর সেলিনাক্স সরঞ্জাম এবং বাইনারি সিস্টেম-ওয়াইড ইনস্টল করতে সক্ষম হবেন।
পরিবেশ ইনস্টলেশন পদ্ধতি
আপনি একটি পূর্ণাঙ্গ লাইভ-ডিভিডি থেকে শুরু করে উবুন্টু theতিহ্যগত উপায়ে ইনস্টল করতে পারেন তবে দ্রুত বিকল্প হ'ল নেটবूट ইনস্টল (টেক্সটমোড ইনস্টল) ব্যবহার করা এবং শেষে আপনি যে ডেস্কটপ পরিবেশটি পছন্দ করেন তা নির্বাচন করুন। এটি করার ফলে প্রথমে অপ্রচলিত ইনস্টল না করে সরাসরি আপ-টু-ডেট প্যাকেজ সংস্করণ ইনস্টল করার পরে প্রথম বুটটিতে 389 টি মুলতুবি থাকা আপডেটগুলি প্রয়োগ করতে বলার মাধ্যমে প্রাথমিক আপডেটের সময় সাশ্রয় হবে।
উবুন্টু / জুবুন্টু 14.04 (একই আইএসও) নেটবুট ইনস্টলারটির জন্য আইএসও এখানে উপলব্ধ ।
ভিএমওয়্যারের সমস্যাজনক "সহজ ইনস্টল" বৈশিষ্ট্যটি এড়ানোর জন্য, "আমি পরে অপারেটিং সিস্টেমটি ইনস্টল করব" বিকল্পটি নির্বাচন করে শুরু করা ভাল অভ্যাস ।
লিনাক্স নির্বাচন করতে ভুলবেন না , তবে উবুন্টু 64 বিট গেস্ট ওএস হিসাবে বেছে নিন ।
ভিএম এর নিম্নলিখিত রিসোর্সগুলির প্রয়োজন হবে:
- বাধ্যতামূলক: ডিস্কের স্থানটি অবশ্যই খুব কমপক্ষে 40 গিগাবাইটে থাকতে হবে (ডিফল্ট 20 গিগাবাইট যথেষ্ট হবে না , উত্স কোডটি এককভাবে তার চেয়ে বেশি স্থান নেয়), উচ্চতর প্রস্তাবিত recommended একটি পূর্ণ বিল্ডের জন্য 100 গিগাবাইট ডিস্কের ন্যূনতম প্রয়োজন, এটি হ'ল আমি সাধারণত গ্রহণ করি। ভুলে যাবেন না যে এই সেটিংটি কেবলমাত্র সর্বাধিক সীমা: ভিএম দ্বারা নেওয়া প্রকৃত আকার অতিথির অনুরোধের সাথে গতিশীলভাবে বৃদ্ধি পায়।
- সুসংগঠিত: 1024 থেকে কমপক্ষে 2048 বা উচ্চতর র্যাম বাড়ান (আপনার হোস্টের ক্ষমতার উপর নির্ভর করে আমি 4096 ব্যবহার করি),
- সুন্দরী: প্রসেসরের কোরগুলির সংখ্যা 1 থেকে 2 বা তার বেশি (আপনার হোস্টের ক্ষমতার উপর নির্ভর করে, আমি 3 ব্যবহার করি)।
- সিডি-রম অবশ্যই ইনস্টলেশন আইএসও ফাইলের দিকে নির্দেশ করবে।
- আপনি ডিভাইসটি সংযোগ করার সময় পূর্বের সতর্কতা দিতে পারে কারণ আপনি ডিফল্ট 1.1 থেকে 2.0 তে ইউএসবি স্যুইচ করতে চাইতে পারেন। আপনার ব্যবহারের উপর নির্ভর করে আপনি নিরাপদে "নতুন ইউএসবি ডিভাইসগুলি স্বয়ংক্রিয়ভাবে সংযুক্ত করুন " এবং "ভার্চুয়াল মেশিনের সাথে ব্লুটুথ ডিভাইসগুলি ভাগ করে নিতে" অন্বেষণ করতে পারেন ।
- আপনার পরিবেশের উপর নির্ভর করে, আপনাকে ডিসপ্লে সেটিংস (ত্রিমাত্রিক অক্ষম করুন, একটি পর্দার আকার প্রয়োগ করুন) টুইঙ্ক করতেও পারে।
মনোযোগ:
- আপনি যদি নেটবूट ইনস্টলটি বেছে নিয়ে থাকেন তবে সফ্টওয়্যার নির্বাচন স্ক্রিনে পৌঁছানোর সময় আপনার ডেস্কটপ পরিবেশ ( উবুন্টু ডেস্কটপ বা জুবুন্টু ডেস্কটপ ) নির্বাচন করতে ভুলবেন না বা আপনি কেবলমাত্র একটি ন্যূনতম পাঠ্য পরিবেশের সাথে শেষ করবেন!
- প্রথম বুট করার পরে, সর্বশেষ প্রকাশে আপগ্রেড করতে অস্বীকার করুন : পুরো পয়েন্টটি এখানে 14.04 এ থাকবে!
প্রথম বুট করার পরে, আপনি প্রথমে যেটি করতে চান তা হ'ল লিনাক্স অতিথি সরঞ্জাম ইনস্টল করুন:
sudo apt-get install open-vm-tools
এই প্যাকেটটি বুট-টাইম ট্রিগারগুলি রাখে, অতএব কোনও অতিথি পুনরায় চালু হওয়ার পরে এর ইনস্টলেশনটি সম্পূর্ণ হবে।
অ্যান্ড্রয়েড উত্স কোড আনুন
অনুরূপ হিসাবে, পদ্ধতির বিশদটি নির্বাচিত রমের উপর নির্ভর করে:
এটি লক্ষণীয় যে সায়ানোজমড এর উত্স ট্রিতে একটি সরঞ্জাম আপনাকে boot.img
ফাইলগুলি আনপ্যাক করার অনুমতি দেয় bu এটি অন্যভাবে বলতে, সায়ানোজেনমড আপনাকে একটি সরঞ্জাম সরবরাহ করে যা আপনাকে sepolicy
ডিভাইস এবং রম সংরক্ষণাগারগুলিতে সঞ্চিত ফাইল অ্যাক্সেস করার অনুমতি দেবে । গুগলের এওএসপি এ জাতীয় সরঞ্জাম সরবরাহ করে না, সুতরাং সায়ানোজেনমডের উত্স গাছ ব্যবহার করা আপনার যদি অন্য কোনও আবশ্যক নাও হতে পারে তবে অন্যথায় আপনাকে এটি অ্যাপার্ট ইনস্টল করতে হবে (যা দ্রুত এবং সহজ কাজ, সুতরাং এখানে কোনও উদ্বেগ নয়)।
এখানে আমি সায়ানোজেনমড ১৩.০ (অ্যান্ড্রয়েড .0.০) পদ্ধতি অনুসরণ করছি। ব্যবহৃত আদেশগুলি সম্পর্কে ব্যাখ্যা উপরের লিঙ্ক করা পৃষ্ঠাগুলিতে উপলভ্য। দয়া করে সেগুলি পড়ুন, নীচের টাইপস্ক্রিপ্টটি কেবলমাত্র রেফারেন্সের উদ্দেশ্যে দেওয়া হয়েছে।
টিপ: আমিapt-get
সর্বনিম্ন সাধারণ ডিনোমিনেটরটির সাথেaptitude
লেগেথাকতে এবং সবাইকে সুখী রাখতে এই পোস্টে ব্যবহারকরার সময়আপনি তারপরিবর্তেব্যবহার করতে পছন্দ করতে পারেনকারণ এটি নির্ভরতার আরও ভালভাবে যত্ন নেবে (কোনও প্যাকেজ অপসারণ করার সময় যা কিছু নির্ভরশীলতার ইনস্টলেশন প্রয়োজন required , আপনার সিস্টেম পরিষ্কার রেখে এই নির্ভরতাগুলিও মুছে ফেলা হবে)। আমি যতদূর জানিaptitude
কমান্ড উবুন্টু ইনস্টল করতে হবে কিন্তু Xubuntu ডিফল্টরূপে পাওয়া যায়।
sudo apt-get install bison build-essential curl flex git gnupg gperf \
libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 \
libxml2-utils lzop maven openjdk-7-jdk pngcrush schedtool squashfs-tools \
xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev \
lib32readline-gplv2-dev lib32z1-dev
mkdir -p ~/bin
mkdir -p ~/android/system
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod u+x ~/bin/repo
cd ~/android/system/
git config --global user.name "Your Name"
git config --global user.email "you@example.com
repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0
repo sync
# Coffee time: around 20GB are being downloaded, this may take several hours.
source ./build/envsetup.sh
breakfast
এখন আপনার কাছে একটি পরিষ্কার এবং প্রায় সম্পূর্ণ উত্স গাছ রয়েছে। মালিকানা ব্লবগুলি অনুপস্থিত, তবে সেলইনাক্স সম্পর্কিত কাজের জন্য আপনার সেগুলির দরকার নেই।
টিপ: উত্সগুলি আনা একটি ক্লান্তিকর প্রক্রিয়া, এখন আপনার ভিএম এর স্ন্যাপশট বা ব্যাকআপ করা ভাল।
Android এর SELinux সরঞ্জামসেট এবং লাইব্রেরিগুলি সংকলন এবং ইনস্টল করুন
এখন ভ্রমণের মজার অংশ শুরু;)!
এখন অবধি পদ্ধতিটি খুব সোজা হওয়া উচিত ছিল। লক্ষ্যটি ছিল আমার কাছে আপনার মতো পরিবেশটি একই রকম হয় তা নিশ্চিত করা। আপনি যদি করেন তবে সিক্যুয়ালটিও খুব সোজা হওয়া উচিত।
গুগলের সংস্করণগুলির মধ্যে গুগল অ্যান্ড্রয়েডের উত্স কোডে গভীর পরিবর্তনগুলি প্রয়োগ করতে দ্বিধা করবেন না, অতএব সঠিক সংকলন পদক্ষেপগুলি অবশ্যই সংস্করণ নির্ভর করবে (উদাহরণস্বরূপ এওএসপি মাস্টার দেখায় যে sepolicy/
ডিরেক্টরিটি সরানো হবে ))
আমি প্রথমে অ্যান্ড্রয়েডের এসলিনাক্স লাইব্রেরি এবং টুলসেটটি সংকলন এবং ইনস্টল করার জন্য আমার সঠিক পদ্ধতিটি ভাগ করব, তবে সময়ের সাথে সাথে এই পোস্টটির প্রাসঙ্গিকতা বজায় রাখতে আমি বেশিরভাগ সংকলনের সমস্যাগুলি সমাধান করার জন্য অনুসরণ করার জেনেরিক পদ্ধতির বিষয়ে কিছু নোট যুক্ত করব।
ধাপে ধাপে পদ্ধতি
অ্যান্ড্রয়েডের সেলইনাক্স গ্রন্থাগারগুলি বিমূর্ত স্তর সরবরাহ করে যা উপরের স্তর সফ্টওয়্যারকে অ্যান্ড্রয়েড-নির্দিষ্ট এসইএলিনাক্স নীতি ফাইলগুলির সাথে ডিল করার অনুমতি দেয়। অতএব আমাদের প্রথমে তাদের সংকলন এবং ইনস্টল করতে হবে (যা নিজেই এখানে সমস্যাগুলি যদি মূলত উপস্থাপন করে তবে আপনি নিজের পথ খুঁজে না পাওয়া পর্যন্ত)।
এরপরে আমরা সেলইনাক্স সরঞ্জামগুলি তৈরি এবং ইনস্টল করতে সক্ষম হব। আমরা দেখতে পাব, ভাগ্যক্রমে এগুলি অ্যান্ড্রয়েড নির্দিষ্ট হওয়ার দরকার নেই, তাদের কেবল এসইএলিনাক্স লাইব্রেরি সংস্করণটি মেলাতে হবে।
এই পদ্ধতিটি সায়ানোজেনমড এবং এওএসপি উত্স কোড ট্রি ব্যবহার করে উভয়ই পরীক্ষা করা হয়েছে।
Android SELinux গ্রন্থাগার এবং প্রথম সরঞ্জামগুলি সংকলন এবং ইনস্টল করুন
প্রথমে নির্ভরতা ইনস্টল করুন:
sudo apt-get install libapol-dev libaudit-dev libdbus-glib-1-dev libgtk2.0-dev \
libustr-dev python-dev python-networkx swig xmlto
এই পোস্টে ভেরিয়েবল $ANDROID_BUILD_TOP
আপনার উত্সের অবস্থান (ডিরেক্টরিটি যেখানে আপনি repo sync
আদেশটি দিয়েছেন) সংরক্ষণ করে। আপনার পছন্দ মত নাম পরিবর্তন করতে নির্দ্বিধায়।
ANDROID_BUILD_TOP=~/android/system
cd $ANDROID_BUILD_TOP
source ./build/envsetup.sh
restorecond
মেকফিল কিছু লাইব্রেরি সনাক্ত করতে অক্ষম হওয়ার কারণে ডিফল্টরূপে নীতি কোর ব্যবহারের সংকলন ব্যর্থ হয় unable pkg-config
হার্ডকোডযুক্ত পরিবর্তে গতিশীলভাবে উত্পন্ন পাথগুলি ব্যবহার করার জন্য আপনাকে এই মেকফিলটি সম্পাদনা করতে হবে (একক উদ্ধৃতি দিয়ে ব্যাকটিক্স গুলিয়ে ফেলবেন না!):
sed -i 's/^CFLAGS ?= -g -Werror -Wall -W$/& `pkg-config --cflags --libs dbus-1 gtk+-2.0`/' \
$ANDROID_BUILD_TOP/external/selinux/policycoreutils/restorecond/Makefile
পরিবর্তনটি সঠিকভাবে বিবেচনায় নেওয়া হয়েছে তা নিশ্চিত করার জন্য কিছু পাঠ্য সম্পাদক দিয়ে মেকফিলটি নির্দ্বিধায় খুলুন।
এবং এখন সংকলন এবং ইনস্টল করুন:
cd $ANDROID_BUILD_TOP/external/bzip2/
make -f Makefile-libbz2_so
sudo make install
cd $ANDROID_BUILD_TOP/external/libcap-ng/libcap-ng-0.7/
./configure
make
sudo make install
cd $ANDROID_BUILD_TOP/external/selinux/
make -C ./libsepol/
sudo make -C /libsepol/ install
EMFLAGS=-fPIC make -C ./libselinux/
sudo make -C ./libselinux/ install
make -C ./libsemanage/
sudo make -C ./libsemanage/ install
make
sudo make install
make swigify
sudo make install-pywrap
sudo cp ./checkpolicy/test/{dispol,dismod} /usr/bin/
মনোযোগ:EMFLAGS=-fPIC
নির্মাণের সময় পরিবেশের পরিবর্তনশীল সেটিংটিমিস করবেন নাlibselinux
। এটি এখনও কোনও ত্রুটি উত্পন্ন করবে না, তবে পরবর্তী পদক্ষেপে আপনি SETools তৈরি করতে অক্ষম হবেন। আপনি যদি এটি মিস করেন বা অন্য কোনও ভুল করেন তবে কেবল একটি জারি করুনmake clean
এবং আপনার সংকলন পুনরায় চালু করুন।
সেলইনাক্স সরঞ্জামগুলি সংকলন এবং ইনস্টল করুন
সেলইনক্স সরঞ্জামগুলি একটি পূর্বনির্মাণ আকারে সরবরাহ করা হয় যার মধ্যে রয়েছে:
- পাইথন স্ক্রিপ্টস (এবং তাদের শেল স্ক্রিপ্ট মোড়ক)
$ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/
ডিরেক্টরিতে
- পাইথন প্যাকেজগুলি (
*.o
সংকলিত ফাইল সহ ) নীচে $ANDROID_BUILD_TOP/prebuilts/python/linux-x86/2.7.5/lib/python2.7/site-packages/
।
আমি এই সরঞ্জামগুলির উত্স কোডটি নীচে উপলভ্য হবে বলে আশাবাদী $ANDROID_BUILD_TOP/external
, তবে এটি তা নয়। প্রকৃতপক্ষে, আমি এমন কোনও জায়গা পাইনি যেখানে গুগল তাদের ব্যবহার করা SETools এর সঠিক সংস্করণটি ভাগ করেছিল (এফওয়াইআই জিপিএল কেবল কোডটি সংশোধন করে তবে সেগুলি ভাগ করে নিতে বাধ্যতামূলক হয়), তাই আমাদের অনুমান করতে হবে এবং চেষ্টা করতে হবে এবং যথাসম্ভব যথাসাধ্য চেষ্টা করতে হবে ।
সরঞ্জামগুলি সেগুলি পাইথন স্ক্রিপ্টস, এটি SETools 4 থেকে একটি নতুন বিবর্তন (SETools 3 তে, কমান্ডগুলির মতো sesearch
বাইনারি এক্সিকিউটেবল কোড সিডে ছিল)। তবে, সরঞ্জামগুলি এখনও তাদের 3.3.8 সংস্করণ দেখায়:
$ $ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/sesearch --version
3.3.8
সুতরাং আমার অনুমান যে গুগল SETools 4 থেকে কিছু প্রাথমিক বিকাশ স্ন্যাপশট নিয়েছে 4.০.০.০ পর্যন্ত বিটা এসইটুলগুলি libsepol
ভার্সন ২.৪ এর উপর নির্ভর করেছিল, ৪.০.০ প্রকাশের সাথে সাথে তারা গ্রন্থাগারের ২.২ সংস্করণে নির্ভর করতে শুরু করেছে যা সংস্করণের সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয় সেলইনাক্স অ্যান্ড্রয়েড .0.০ এ বান্ডিল হয়েছে (আপনি এটি সংকলনের চেষ্টা করতে পারেন, এটি কেবল ব্যর্থ হবে)।
সুতরাং বুদ্ধিমান পছন্দটি SETools 4.0.0 বিটাতে চলেছে বলে মনে হচ্ছে।
পরিপূরক নির্ভরতা ইনস্টল করুন:
sudo apt-get install python-setuptools
উত্স কোডটি ডাউনলোড করুন এবং নিষ্কাশন করুন:
cd ~/android/
wget https://github.com/TresysTechnology/setools/archive/4.0.0-beta.tar.gz
tar xzf 4.0.0-beta.tar.gz
cd ./setools-4.0.0-beta/
ফ্লেক্স 2.5 কে প্রভাবিত করার কারণে একটি বাগের কারণে আমাদের -Wredundant-decls
সংকলকের পতাকাগুলি থেকে সরানো দরকার :
sed -i '/-Wredundant-decls/d' ./setup.py
এবং শেষ পর্যন্ত সংকলন এবং ইনস্টল করুন:
python ./setup.py build
sudo python ./setup.py install
জেনেরিক পদ্ধতি (বা "কীভাবে নিজেকে আনস্টক করবেন")
উপরের পদ্ধতিটি আপনার ক্ষেত্রে কার্যকর না হলে, কীভাবে অগ্রগতির চেষ্টা করবেন সে সম্পর্কে এখানে একটি উচ্চ পর্যায়ের দৃষ্টিভঙ্গি দেওয়া আছে।
দুর্ভাগ্যক্রমে এখানে চারপাশে কোনও যাদু নেই (এবং কোনও সাহায্যকারী নয় :(): এই কোডটি সংকলিত করার একমাত্র উপায় হ'ল ধ্রুপদী অথচ ভয়ঙ্কর চক্রটি "চেষ্টা করুন এবং দেখুন" পদ্ধতির।
প্রথমবার সংকলনের চেষ্টা করুন, কিছু *.h
ফাইল পাওয়া না যাওয়ার কারণে এটি সম্ভবত ব্যর্থ হবে :
অ্যান্ড্রয়েডের external/
ডিরেক্টরিতে অনুসন্ধান করুন :
find $ANDROID_BUILD_TOP/external -name filename.h
যদি আপনি অনুরোধকৃত ফাইলটি খুঁজে পান তবে এর অর্থ হ'ল অ্যানড্রয়েড উত্স কোডের সাথে সম্পর্কিত লাইব্রেরি বা সরঞ্জামটির একটি নির্দিষ্ট সংস্করণ বান্ডিল করা হয়েছে। সুতরাং আপনাকে উবুন্টুর প্যাকেজ সিস্টেম থেকে এটি ইনস্টল করার চেষ্টা করা উচিত নয়, পরিবর্তে অ্যান্ড্রয়েড উত্স কোডে বান্ডিলিত সংস্করণটি সংকলন এবং ইনস্টল করা উচিত।
সচেতন হন যে এটি ফোরামগুলিতে পাওয়া সাধারণ পরামর্শের বিপরীতে: "এই লাইব্রেরিটি হারিয়ে যাওয়ার কারণে আপনার সংকলন ব্যর্থ হয়েছে? এই প্যাকেজটি ইনস্টল করুন তবে তা ঠিক হয়ে যাবে!" এটি করার মাধ্যমে আপনি সম্ভবত আরও খারাপ সমস্যার মধ্যে চলে যাবেন: যদি একটি নির্দিষ্ট সংস্করণ বান্ডিল করা হয় তবে এটি সম্ভবত সম্ভবত একটি নির্দিষ্ট সংস্করণ প্রয়োজন (সামঞ্জস্যতার কারণে বা এই সংস্করণে গুগলের নির্দিষ্ট পরিবর্তন রয়েছে)।
বিটিডাব্লু, আপনি যদি ভাবছেন: অবশ্যই এই লাইব্রেরি বা সরঞ্জামটিতে কিছু *.h
ফাইল পাওয়া না যাওয়ার কারণে ত্রুটি বাড়ানোর ক্ষেত্রে নির্ভরতাও থাকতে পারে , এবং হ্যাঁ আপনার এই একই চক্রটি "চেষ্টা করে দেখুন" পদ্ধতির প্রয়োগ করা উচিত।
সিস্টেমভিত্তিতে অনুসন্ধান করুন:
find / -name filename.h 2>/dev/null
যদি আপনি কিছু প্রমিত শেয়ার্ড লাইব্রেরি স্থানে আপনার সিস্টেমে ইতিমধ্যে উপস্থিত ফাইলটিকে "অনুপস্থিত" দেখতে পান তবে এর অর্থ হ'ল এই নির্ভরতা সম্ভবত আপনার পরিবেশে ইতিমধ্যে মিলিত হয়েছে তবে ত্রুটি উত্থাপনকারী মেকফিল এটি খুঁজে পাওয়া খুব মূক।
আপনি যদি ম্যানুয়ালি সরাসরি এই মেকফিলটিকে কল করেন তবে আপনার পক্ষে কিছু পরিবেশের পরিবর্তনশীল এটি ঠিক করা ( LIBDIR=/usr/lib make
উদাহরণস্বরূপ) সেট করা সম্ভব হতে পারে , অন্যথায় আপনাকে নিজেই মেকফিলটি সংশোধন pkg-config
করতে হবে ( কমান্ডটি স্বয়ংক্রিয়ভাবে নিখোঁজ বিল্ড প্যারামিটার তৈরি করতে অমূল্য সহায়তা হতে পারে) ।
প্যাকেজিং সিস্টেমে অনুসন্ধান করুন:
apt-cache search filename-dev
যেখানে অনুচ্ছেদে প্রতিস্থাপিত প্রতিস্থাপনের filename-dev
সাথে ছোট হাতের অক্ষরে থাকা ফাইলটির নাম প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, যদি এটি পাওয়া না যায় তবে অনুসন্ধান করুন )। সঠিক প্যাকেজটি সন্ধানের জন্য সঠিক নামে কিছু টুইট করার প্রয়োজন হতে পারে।.h
-dev
Python.h
python-dev
আপনি যদি আটকে থাকেন এবং ইন্টারনেটে দ্রুত অনুসন্ধান সন্ধানের কোনও সুস্পষ্ট উত্তর সরবরাহ না করে, তবে apt-file
আপনার সেরা বন্ধু হবে। apt-file
ডিফল্টরূপে ইনস্টল করা হয়নি, আপনাকে এটি ইনস্টল করতে হবে এবং এটির ডাটাবেস তৈরি করতে হবে:
sudo apt-get apt-file
sudo apt-file update
apt-file
আপনাকে একটি নির্দিষ্ট ফাইল সরবরাহকারী প্যাকেজগুলি (এমনকি আনইনস্টল হওয়াগুলি) অনুসন্ধান করার অনুমতি দেয়। অত্যধিক ফলাফল এড়াতে, আমি grep
নীচের সাথে এটি যুক্ত করার পরামর্শ দিচ্ছি :
apt-file search filename.h | grep -w filename.h
উবুন্টুর সংগ্রহস্থলে যদি এই ফাইলটি সরবরাহ করে এমন কোনও প্যাকেজ থাকে, তবে apt-file
এটি সন্ধান করা উচিত।
একবার আপনি সঠিক প্যাকেজটি সন্ধান করার পরে এটি আপনার প্যাকেজের নাম apt-get install packagename
কোথায় তা ব্যবহার করে ইনস্টল করুন packagename
।
টিপ: আপনি আপনার সিস্টেমে কিছু মাতাল পারেন, কমান্ড পুনরায় ইনস্টল করার একটি প্যাকেজ এই এক হল:apt-get reinstall pkg_name
। এটি নির্ভর করবে এমনকি ক্লাসিকাল অপসারণ ও ইনস্টল করা নির্ভরতা ভাঙার কারণে সম্ভব হবে না (এটি সিস্টেমের গ্রন্থাগারের ক্ষেত্রে সম্ভবত)।
পরিপূরক সরঞ্জাম
এই পদক্ষেপে, আপনার এখন একটি পরিষ্কার পরিবেশ থাকা উচিত যা আপনাকে সংকলিত এবং উত্স ফর্ম্যাট উভয়ই অ্যান্ড্রয়েডের সেলিনাক্স নিয়মগুলি তদন্ত করতে দেয়।
তবে, বেশিরভাগ সম্ভাবনা হ'ল আপনার তদন্ত শেষে আপনি কিছু পদক্ষেপ নিতে চান। বর্তমান আকারে, আপনার পরিবেশ আপনাকে কোনও ডিভাইসের sepolicy
ফাইল সংশোধন করার অনুমতি দিবে না । প্রকৃতপক্ষে, এই ফাইলটি ইজিলি প্রতিস্থাপন করা যায় না: এটি ডিভাইস রুট ডিরেক্টরিটির একটি অংশ এবং একটি র্যাম ডিস্ক ফাইল থেকে বুট করার সময় মূল ডিরেক্টরিটির বিষয়বস্তু এক্সট্র্যাক্টর, যা যন্ত্রটি ডিভাইসের বুট ইমেজে সংরক্ষণ করা হয়।
আপনার পরিবেশ সম্পূর্ণ হওয়ার আগে আপনি এখনও দুটি জিনিস মিস করেন:
- ডিভাইসের বুট চিত্রটি অ্যাক্সেস এবং সংশোধন করার একটি উপায়,
- এর
sepolicy
ফাইলটি পরিবর্তন করার একটি উপায় ।
ভাগ্যক্রমে, এগুলি অবশ্যই এই পোস্টের শেষ দুটি বিভাগের বিষয়! :)
ডিভাইসের বুট চিত্রটি আনুন এবং আপডেট করুন
ডিভাইসের বুট ইমেজ আনতে এবং আপডেট করার সরঞ্জামগুলি সেলইনাক্স বিধি বিধানের বিরুদ্ধে ছড়িয়ে দেওয়া ছাড়াও বিভিন্ন ধরণের জিনিসগুলির জন্য ব্যবহার করা যেতে পারে। তাই আমি একটি উত্সর্গীকৃত উত্তর তৈরি করেছি , দয়া করে এটি উল্লেখ করুন।
ডিভাইসের SELinux বিধিগুলি সংশোধন করুন
আপনার এখানে দুটি প্রধান সম্ভাবনা রয়েছে:
sepolicy
আপনার উত্স ট্রিতে নিয়মাবলী থেকে একটি নতুন ফাইল তৈরি করুন (তাদের সন্ধান করার জন্য .te
ফাইলগুলি অনুসন্ধান করুন find $ANDROID_BUILD_TOP -name \*.te
:, সেগুলি বেশ কয়েকটি ডিরেক্টরিতে ছড়িয়ে পড়েছে)।
sepolicy
ডিভাইস দ্বারা বর্তমানে ব্যবহৃত ফাইলটি পরিবর্তন করুন ।
আপনার স্ক্র্যাচ থেকে সত্যিই আপনার নিয়মগুলি তৈরি করা দরকার না, যা এটি আরও উন্নয়নের সাথে সম্পর্কিত একটি কাজ এবং সুতরাং এখানে সুযোগের বাইরে, দ্বিতীয় পছন্দটি সবচেয়ে নিরাপদ হিসাবে মনে হয় কারণ আপনি নিশ্চিত যে একমাত্র পরিবর্তনগুলি হ'ল আপনার স্পষ্টভাবে তৈরি।
একটি সরঞ্জাম তৈরি করার জন্য একটি প্রকল্প তৈরি করা হয়েছে যাতে আপনি কোনও sepolicy
ফাইলকে পুনরায় সংশোধনযোগ্য ফর্মের মধ্যে ছড়িয়ে দিতে পারবেন, এর মধ্যে অবাধে নিয়মগুলি সম্পাদন করতে পারবেন allowing তবে এই প্রকল্পটি প্রুফ-অফ-কনসেপ্ট অবস্থায় ছেড়ে দেওয়া হয়েছে। আপনি এই ব্লগ পোস্টের শেষে সমস্ত তথ্য পাবেন , বাকী নিবন্ধে আগ্রহী অন্য কাউকে গ্রহণ করার অনুমতি দেওয়ার জন্য পর্যাপ্ত বিবরণ রয়েছে।
sepolicy
নিয়ম পরিবর্তনের জন্য বর্তমানে প্রস্তাবিত উপায়টি অন্য পথে চলেছে: sepolicy
বাইনারি ফাইলটি সরাসরি সংশোধন করে । সিপোলিসি-ইনজেকশন সরঞ্জামটি কেবল এটির অনুমতি দেয় এবং সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়।
সম্পূর্ণতার জন্য, নোট করুন যে এই সরঞ্জামটির একটি কাঁটাচামচ বিদ্যমান। এটি কয়েকটি বৈশিষ্ট্য যুক্ত করেছে, তাদের মধ্যে কয়েকটি মূল লেখকের করণীয় তালিকায় রয়েছে (কোনও নিয়ম সরানোর সম্ভাবনার মতো), আমাকে অবদানের পরিবর্তে কাঁটাচামচ কেন বেছে নিয়েছে তা জিজ্ঞাসা করবেন না ...
সংকলন এবং ইনস্টল করতে sepolicy-inject
, কেবল নিম্নলিখিত হিসাবে এগিয়ে যান:
cd ~/android/
git clone https://bitbucket.org/joshua_brindle/sepolicy-inject.git
cd ./sepolicy-inject/
LIBDIR=/usr/lib make
sudo cp ./sepolicy-inject /usr/bin/
ব্যবহারের ক্ষেত্রে উদাহরণ
উদাহরণস্বরূপ বলা যাক আপনি নিম্নলিখিত ত্রুটি বার্তার সাথে মিলে অটোরিজেশন যুক্ত করতে চান:
avc: denied { read } for pid=128 comm="file-storage"
path="/data/media/0/path/to/some/file"
dev="mmcblk0p28" ino=811035 scontext=u:r:kernel:s0
tcontext=u:object_r:media_rw_data_file:s0 tclass=file permissive=0
আপনাকে ডিভাইসের বুট চিত্রটি আনতে হবে, তারপরে এটির sepolicy
ফাইলে অ্যাক্সেস পাওয়ার জন্য আনপ্যাক করুন।
ব্যবহার করে একটি দ্রুত চেক sesearch
দেখায় যে প্রকৃতপক্ষে কোনও অনুমতি নিয়ম নেই (এখনও!):
$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
$
কমান্ডটির কোনও আউটপুট নেই।
তারপরে, প্রয়োজনীয় নিয়মাবলী যুক্ত করতে নীচের কমান্ডটি ব্যবহার করুন ( sesearch
এবং sepolicy-inject
প্যারামিটারগুলির মধ্যে মিলটি নোট করুন ):
sepolicy-inject -s kernel -t media_rw_data_file -c file -p read -P ./sepolicy
এখন আমরা আমাদের sesearch
আদেশটি ফিরে বলতে পারি :
$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
allow kernel media_rw_data_file:file read;
$
sesearch
আউটপুট দেখায় যে নীতিটি সঠিকভাবে আপডেট হয়েছে।
আপনি এখন ডিভাইসের boot.img
ফাইলটি পুনরায় চেক করতে এবং ডিভাইসে এটি ফ্ল্যাশ করতে পারেন। /sepolicy
আপনার ডিভাইসটি সদ্য আপডেট হওয়া sepolicy
ফাইলটি চালাচ্ছে কিনা তা নিশ্চিত করার একটি সহজ উপায় ফাইলটির সর্বশেষ পরিবর্তনের সময় পরীক্ষা করা ।
উপসংহার
আপনার এখন একটি সম্পূর্ণ পরিবেশ থাকা উচিত যা আপনাকে অ্যান্ড্রয়েড ডিভাইসগুলি সেলইনাক্স নীতিগুলি নির্দ্বিধায় পরিদর্শন ও সংশোধন করার অনুমতি দেয়। উপভোগ করুন! :)
পার্শ্ব নোট হিসাবে, ডিভাইস থেকে সরাসরি সেলইনক্স নীতিটি বিশ্লেষণ ও সংশোধন করার অনুমতিপ্রাপ্ত সরঞ্জাম রয়েছে ।