আমি কীভাবে একটি আলাদা আর্কিটেকচার দিয়ে একটি ফাইল সিস্টেমে প্রবেশ করতে পারি?


38

আমি chrootএকটি আর্চ লিনাক্স ARMফাইল সিস্টেম থেকে প্রবেশ করার চেষ্টা করছি x86_64

আমি দেখেছি qemuবাইনারিটি ক্রুট সিস্টেমে অনুলিপি করে স্ট্যাটিক ব্যবহার করা সম্ভব :

$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin    

তবে তা সত্ত্বেও আমি সর্বদা নিম্নলিখিত ত্রুটিটি পাই:

chroot: failed to run command ‘/bin/bash’: Exec format error

আমি জানি এটির অর্থ এই যে স্থাপত্যগুলি পৃথক। আমি কি ভুল কিছু করছি?


2
আপনাকে binfmtপ্রথমে কনফিগার করতে হবে , একটি শান্ত সংক্ষিপ্ত পরিচিতির জন্য wiki.debian.org/QemuUserEmulationএকবার দেখুন । Binfmt_misc কনফিগার করার জন্য একটি উদাহরণ পাওয়া যাবে svn.kju-app.org/trunk/qemu/qemu/qemu-binfmt-conf.sh
উলিচ ডাঙ্গেল

কিমু স্ট্যাটিক প্যাকেজগুলি আর্চ সংগ্রহস্থলগুলিতে উপস্থিত হবে না।
Jivings

2
দুঃখিত, আমি খিলানটি ব্যবহার করি না, তবে আপনি সম্ভবত -staticলিঙ্কার বিকল্পগুলিতে যোগ করে একটি স্ট্যাটিক কিমু প্যাকেজ তৈরি করতে সক্ষম হবেন
উলরিচ ড্যাঞ্জেল

উত্তর:


15

আপনি বিভিন্ন আর্কিটেকচারে ক্রট করতে পারবেন না। ক্রুট করে আপনি নিজের স্থাপত্যে বাইনারিগুলি (ক্রুট থেকে) চালাচ্ছেন। X86 এ আরএম বাইনারিগুলি কার্যকর করা (এবং সেই ক্ষেত্রে x86_64) "এক্সিকিউট ফর্ম্যাট ত্রুটি" বাড়ে।

আপনি যদি বিভিন্ন আর্কিটেকচার থেকে বাইনারি চালাতে চান তবে আপনার প্রয়োজন হবে একটি এমুলেটর। কেমু এটির জন্য ভাল প্রার্থী তবে এটি কীভাবে ব্যবহার করবেন তা আপনার শিখতে হবে। এর মধ্যে রুটএফএস তৈরি করা এবং এআরএমের জন্য একটি কার্নেল সংকলন করা হবে। আপনার সম্ভবত এআরএম বাইনারি (এবং কার্নেল) সংকলনের জন্য একটি সরঞ্জামচেনের প্রয়োজন হবে। একটি জিনিস অবশ্যই নিশ্চিত: ক্রুট পদ্ধতিটি ভুলে যান, আপনি x86 (x86_64) এআরএম-এর জন্য সংকলিত বাইনারিগুলি চালাতে পারবেন না।

সম্পাদনা: @ উরিচডাঙ্গেলের সাথে ছোট্ট আলাপের পরে, আমি বুঝতে পেরেছি, কিউমু-ব্যবহারকারী প্রোগ্রামগুলির সাথে ক্রুট পরিবেশে প্রবেশ করা সম্ভব (এই ক্ষেত্রে কিউমু আর্ম)। Chroot আপনার হোস্ট আর্কিটেকচারের জন্য কম্পাইল করা কিউমু-আর্ম চালিত করা উচিত, তারপরে কিমু-আর্ম আপনার / বিন / এস (আর্মের জন্য সংকলিত) চালাতে পারে।


6
binfmtঅ নেটিভ টার্গেটগুলি চালানোর জন্য আপনার ব্যবহার এবং কিউমু
Ulrich Dangel

2
আমি জানি যে অনুকরণের জন্য কীমু কীভাবে ব্যবহার করতে হয়। স্পষ্টতই আপনি এটি ক্রুট দিয়ে ব্যবহার করতে পারেন, যদিও স্পষ্টভাবে আমি কীভাবে এটির কাজ করতে পারি না।
Jivings

@ অরিখডাঙ্গেল, হ্যাঁ, এটি একটি ভাল তথ্য। তবে আমি মনে করি ওপি সমাধানের এই রাজা খুঁজছিল না। বিনফএমটি সম্ভব হবে একবার তিনি যখন কেমু-আর্ম এমুলেশন সহ সঠিকভাবে কেমু ইনস্টল করলেন তবে আমি বিশ্বাস করি যে তিনি তার এআরএম এমুলেশন পরিবেশে (যেমন রাস্পবেরি পাই) প্রবেশ করতে চাইছেন যেখানে তাকে কিমু-সিস্টেম-আর্মের প্রয়োজন হবে।
0xAF

@ 0 এক্সএএফ তবে binfmt/ সলিউশনটি হ'ল qemu-userওপি বর্ণনা করেছেন, একটি আর্ম ক্রুটে প্রবেশ করতে এবং কোনও উত্সর্গীকৃত রুটফেস তৈরির প্রয়োজন ছাড়াই কমান্ডগুলি চালাতে সক্ষম হন
উলিরিচ ড্যাঞ্জেল

1
@ অরিচডাঙ্গেল, এখন এক সেকেন্ডের পরেও, আমি বিশ্বাস করি আপনি ঠিক বলেছেন। কেমু-বাহু (বা হওয়া উচিত) দিয়ে এমুলেটেড ক্রোট প্রবেশ করা সম্ভব। আমি আমার মন্তব্য সম্পাদনা করব।
0xAF

33

আমি সময়ে সময়ে একটি এআরএম ক্রুট ব্যবহার করি: আমার ফোনটি লিনাক্স ডিপ্লয় চালায় এবং চিত্রটি এখন এবং তারপরে মারা যায়। তারপরে আমি এটি আমার কম্পিউটারে অনুলিপি করি এবং পরিস্থিতিটিকে এইভাবে ক্রোট সহ পরীক্ষা করি:

# This provides the qemu-arm-static binary
apt-get install qemu-user-static

# Mount my target filesystem on /mnt
mount -o loop fs.img /mnt

# Copy the static ARM binary that provides emulation
cp $(which qemu-arm-static) /mnt/usr/bin
# Or, more simply: cp /usr/bin/qemu-arm-static /mnt/usr/bin

# Finally chroot into /mnt, then run 'qemu-arm-static bash'
# This chroots; runs the emulator; and the emulator runs bash
chroot /mnt qemu-arm-static /bin/bash

এটি একটি কাজ করে তবে ক্রুট করার পরে সমস্ত কমান্ড এ জাতীয় কোনও ফাইল বা ডিরেক্টরি দেয় না। আমি ফেডোরা 24 ব্যবহার করছি, সেলিনাক্স সমস্যা? সাহায্য প্রয়োজন দয়া করে
সুপারবিজি

@ সুপেরবিজি চলছে কি /bin/lsকাজ? $PATHসেক্ষেত্রে আপনার পরিবর্তনশীলটি আনসেট বা গার্ফড। ব্যবহার করে দেখুন export PATH=/sbin:/usr/sbin:/usr/bin:/bin। আপনার যুক্ত করা উচিত অন্যান্য পাথ থাকতে পারে, তবে এটি সম্ভবত একটি ভাল শুরু। যদি এটি কাজ না করে, আপনি সম্ভবত বাইনারিগুলি ক্রুট পরিবেশে অনুলিপি করতে ভুলে গেছেন। আপনি ফাইল সিস্টেমের চারপাশে ব্রাউজ করতে ব্যাশ ব্যবহার করতে পারেন, echo /*যেমন মোটামুটি সমান ls /*। আমি জানি না যে সেলইনাক্স পথে যেতে পারে কিনা, সেখানে কোনও অভিজ্ঞতা নেই।
লুক

1
এমনকি এলএস দেয় /bin/ls: no such file or directory। এক্সপোর্ট ভাল পাথ দেখায়। তবে ইকো / * কাজ করছে, ইকো / ইউএসআর / বিন / কিউমু আর্ম * ফাইলটি তালিকাবদ্ধ করবে। আমার মাউন্ট সিস,
প্রোক

1
সহায়তার জন্য ধন্যবাদ .. সমস্যাটি খুঁজে পেয়েছিল বিনফটটি অবৈধ পথে নির্দেশকারী
সুপারবিজি

1
ঠিক আছে, কোনওভাবে এটি এর bla/usr/binপরিবর্তে qemu-arm-static অনুলিপি করে সমাধান করা হয়েছিল bla/bin। আমি যখন which qemu-arm-staticএটি চালায় তা আমাকে দেয় /bin/usrতাই আমি অনুমান করি এটি ধারাবাহিক হওয়া উচিত?
ডফনহক্তনা

11

আমি মনে করি যে আপনি অনুলিপি করা উচিত নয় যে qemu-armকিন্তু qemu-arm-static। এটি কোনও স্থিতিশীল সংকলিত নির্বাহযোগ্য যা কোনও গ্রন্থাগার ছাড়াই ক্রুটের অভ্যন্তর থেকে চালানো যায়।

/proc/sys/fs/binfmt_miscকোনও ফাইল উপস্থিত থাকলে আপনি এটিও সন্ধান করতে পারেন qemu-arm। পরিষেবাটি আরম্ভ না হলে binfmt_support


আমাকে ম্যানুয়ালি চালাতে হয়েছিল: আপডেট-বিনফ্মস্ট - আইম্পোর্টডির / ভার / লিবি / বিনফ্মস / - ইম্পোর্ট তখন সমস্ত কিছু / proc / sys / fs / binfmt_misc এবং ক্রুটের কাজগুলিতে প্রদর্শিত হয়েছিল।
মারিয়ানো আলভিরা

7

এটির কাজ পেতে আমি ইনস্টল করেছি qemu-static-armএবং binfmt-supportএওআর থেকে।

জন্য মন্তব্য পড়ুন qemu-user-static। আমাকে PKGBUILDসর্বশেষতম ডাউনলোড করা URL টি এবং মেকপেকজি শেষ করার জন্য হ্যাশগুলি আপডেট করতে হয়েছিল update

(অর থেকে ইনস্টল করার জন্য, tarball ডাউনলোড, untar, cd, রান makepkg -i)

ক্রিশ্চিয়ান ওল্ফের উত্তর গুরুত্বপূর্ণ। update-binfmtsএই ফর্ম্যাটগুলি সক্ষম করতে সঠিকভাবে কার্যকর করা হয় না। এটি করার জন্য আমি দৌড়েছি:

update-binfmts --importdir /var/lib/binfmts/ --import

আপডেট-বিনফ্মেটের জন্য ম্যানপেজে বর্ণিত। এর পরে, cat /proc/sys/fs/binfmt_miscবিভিন্ন বিনফটগুলি প্রদর্শন করবে।

তারপরে আপনি যে জিনিসটি ক্রুট করতে চান qemu-*-staticতাতে usr/bin/ডিরেক্টরিতে অনুলিপি করার বিষয়টি নিশ্চিত করুন এবং তারপরে chrootকাজটি করা উচিত।


6

আপনি অবশ্যই একটি পৃথক আর্কিটেকচারের জন্য বোঝানো একটি (মাউন্টেড) ফাইল সিস্টেমে 'ক্রুট' করতে পারেন এবং কিছু অর্থপূর্ণ কাজ করতে পারেন, আপনার কেবল সঠিক সরঞ্জামের প্রয়োজন।

প্রুটটি দেখুন, যা ক্রুট, মাউন্ট - বাইন্ড এবং বিনফ্মটি_মিস্কের ব্যবহারকারী-স্পেস বাস্তবায়ন: https://proot-me.github.io/

কিউইএমইউর ব্যবহারকারী মোড এমুলেটরগুলির সাথে একসাথে আপনি সমস্ত প্রস্তুত।

যদিও আপনি সাধারণত 'পুরো' বুটটি সম্পাদন করতে পারবেন না (অর্থাত্ আরম্ভ এবং পরিষেবাগুলি শুরু করুন) তবে তাদের 'প্রাকৃতিক' জায়গা থেকে কিছু বাইনারি চালানো যথেষ্ট ভাল, তাদের সমস্ত কনফিগারেশন ফাইলে অ্যাক্সেস সহ, যা কিছুগুলি বাঁধাই করা রয়েছে সেগুলি সহ 'হোস্ট' সিস্টেম ইত্যাদি



1

লুসের উত্তরে যুক্ত করা: আপনার অবশ্যই নিশ্চিত করতে হবে যে মূল ফাইল সিস্টেমে দোভাষীর অবস্থান একই রকম the কারন কার্নেল একটি এক্সিকিউটেবলের আর্কিটেকচার সনাক্ত করে এবং তারপরে update-binfmts --displayএটি শুরু করার জন্য দোভাষীের অবস্থানটি ব্যবহার করে । তাই লাইন

cp $(which qemu-arm-static) /mnt/usr/bin

আসলে হওয়া উচিত

cp $(which qemu-arm-static) /mnt/$(which qemu-arm-static)

অন্যথা, আপনি পেতে আপনার chroot ভিতরে -errors হিসাবে আপনার কার্নেল প্রয়োজনীয় অনুবাদক খুঁজে পাচ্ছি না, "not found" পারে অবস্থান qemu-arm-staticভিতরে নয় /usr/binআপনার সিস্টেমে।


0

আমি কেবল উবুন্টুতে একই ইস্যুতে দৌড়েছি। আমি হোস্ট সিস্টেমের মতো একই ক্রুট-এড পাথে binfmtকনফিগার করেছি এবং qemu-arm-staticঅনুলিপি করেছি।

এক ঘন্টা পরে, আমি set|grep bashএকটি হোস্ট মেশিনে করলাম । আমি দেখতে পেলাম যে আমার /bin/bashদুটি এনভ ভেরিয়েবল রয়েছে: SHELLএবং SUDO_COMMAND। ভেরিয়েবলগুলি প্রতিস্থাপনের পরে, আমার এআরএম-এর ক্রুট কাজ করেছে:

SHELL=/bin/sh SUDO_COMMAND=/bin/sh chroot hd

0

আমি বিশ্বাস করি, এই ওপির জন্য, কেবলমাত্র চালনার মাধ্যমে বিনফ্মেটগুলি কনফিগার করা দরকার ছিল:

update-binfmts --enable qemu-arm

এটি চালানোর পরে, আর্ম ফাইল সিস্টেমে ক্রুট করা সম্ভব হত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.