কার্নেল এবং ব্যাসিবক্স সহ ন্যূনতম লিনাক্স: / etc / inittab উপেক্ষা করা হবে, কেবল / init সঞ্চালিত হবে


12

আমি একটি ছোট এবং সম্পূর্ণ ক্রিয়ামূলক লাইভ লিনাক্স সিডি তৈরি করতে পরিচালিত করেছি যার মধ্যে কেবল কার্নেল রয়েছে (ডিফল্ট বিকল্পগুলির সাথে সংকলিত) এবং ব্যাসিবক্স (ডিফল্ট বিকল্পসমূহ + স্ট্যাটিক সহ সমস্ত অ্যাপলেট উপস্থিত রয়েছে /sbin/init) আমি তৈরি করতে কোন বিষয় ছিল initrdএবং পূরণ /dev, /procএবং /sysএবং আমি আমার সঙ্গে সব সময়ে কোন সমস্যা ছিল /initশেল স্ক্রিপ্ট।

সম্প্রতি আমি পড়েছি যে ব্যাসিবক্স /etc/inittabকনফিগারেশনগুলিকে সমর্থন করে (কমপক্ষে কিছু স্তর পর্যন্ত) এবং আমি খুব নীচের যে কোনওটি করতে চাই:

  • আমার /initশেল স্ক্রিপ্টটি ভুলে যান এবং সম্পূর্ণরূপে /etc/inittabকনফিগারেশনের উপর নির্ভর করুন ।
  • /initশেল স্ক্রিপ্ট এবং /etc/inittabকনফিগারেশন উভয়ই ব্যবহার করুন ।

এখন আসল সমস্যা - /etc/inittabআমার ডিস্ট্রো বুট আপ করার পরে এটি সম্পূর্ণ উপেক্ষা করা হবে বলে মনে হয়। লক্ষণগুলি হ'ল:

  • আমি যখন সরান /initএবং ছেড়ে /etc/inittabদিই আমি কেবল কর্নেল আতঙ্কের সাথে শেষ করি। আমার অনুমান যে কার্নেল মোটেও কার্যকর /sbin/initহয় না, বা /sbin/initএটি (বা পঠিত) খুঁজে পায় না /etc/inittab
  • আমি পড়েছি যে ব্যাসিবক্সেরও ভাল কাজ করা উচিত /etc/inittab। তাই, আমি মুছে উভয় /initএবং /etc/inittabএবং কি অনুমান - আবার আতঙ্কিত কার্নেল।
  • আমি চালানো চেষ্টা /sbin/initআমার শেল থেকে এবং বিভিন্ন অনুমান যার মধ্যে পরে exec /sbin/init, setsid /sbin/initএবং exec setsid /sbin/initআমি কার্নেল প্যানিক সঙ্গে শেষ পর্যন্ত। উভয়ই / etc / inittab ফাইল সিস্টেমে উপস্থিত রয়েছে।

এখানে আমার /initশেল স্ক্রিপ্টের সামগ্রী রয়েছে :

#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh

এই মুহুর্তে আমি বিষয়বস্তুটি কী /etc/inittabহবে তা আমি ততক্ষণ চিন্তা করি না, যতক্ষণ না আমার জানার উপায় রয়েছে যে সেখানে কনফিগারেশনটি আসলে কাজ করে। আমি এখানে/etc/inittab পাওয়া তথ্যের উপর ভিত্তি করে কয়েকটি কনফিগারেশন চেষ্টা করেছি ।

খালি ন্যূনতম হিসাবে আমার / ইত্যাদি / সূচনাতে কেবল এই এক লাইন রয়েছে:

::sysinit:/bin/sh

আবার - আমি কর্নেল আতঙ্কের সাথে শেষ করেছি এবং মনে হচ্ছে এটি /etc/inittabউপেক্ষা করা হয়েছিল।

ব্যাসিবক্সের সাথে কীভাবে আমার ছোট্ট লাইভ ডিস্ট্রোকে জরিমানা করতে বাধ্য করা যায় /etc/inittabসেগুলির কোনও পরামর্শ অত্যন্ত প্রশংসিত!

হালনাগাদ:

  • শুধু এটা স্পষ্ট করতে - আমি না আমার বর্তমান সঙ্গে যন্ত্রণার প্যানিক কার্নেল আছে /initউভয় সঙ্গে ছাড়া শেল স্ক্রিপ্ট /etc/inittab। এটি সব /bin/ashঠিকঠাক কাজ করে , আমার কনসোলটি দুর্দান্ত কাজ করে এবং আমি কোনও অপ্রত্যাশিত ঝামেলা अनुभव করি না। /etc/inittabআমি উপরে বর্ণিত হিসাবে একমাত্র ইস্যুটি সম্পূর্ণ উপেক্ষা করা হয় described
  • আমি তিনটি ভিন্ন লাইভ লিনাক্স বিতরণ পরীক্ষা করেছি: স্ল্যাক্স, ফিনিক্স এবং সিসরেসসিডি। তাদের সবার আছে /initএবং তাদের কারওর নেই /etc/inittab। এছাড়াও এই উইকি নিবন্ধটি আমার সন্দেহের /sbin/initঅবসান ঘটায় যা মোটেও অনুরোধ করা হয়নি।

আপনি যদি এখানে এসে থাকেন তবে নূন্যতম লিনাক্স লাইভটি দেখুন যা দেখে মনে হয় যা করতে চায় এবং কেবল কাজ করে: github.com/ivandavidov/minimal
Ciro Santilli

আহ, ওপি লিখেছেন ন্যূনতম লিনাক্স লাইভ! ম্যান আপনি রক।
সিরো সান্তিলি 冠状 病毒 审查 六四 事件

উত্তর:


11

ঠিক আছে, আমি অনেক বিস্তৃত গবেষণা করেছি এবং আমি খুঁজে পেয়েছি কী ভুল ছিল। একে একে শুরু করা যাক:

  • যখন আমরা initramfsবুট স্কিমটি ব্যবহার করি তখন কার্নেলটি যে প্রথম প্রক্রিয়াটি আহ্বান করে তা হ'ল /initস্ক্রিপ্ট। কার্নেল কখনই /sbin/initসরাসরি চালানোর চেষ্টা করবে না ।
  • /init প্রক্রিয়া শনাক্তকারী নির্ধারিত হয় 1. এটি খুব গুরুত্বপূর্ণ!
  • এখন সমস্যাটি /sbin/initকেবল এটি হিসাবে শুরু করা যেতে পারে PID 1তবে আমরা ইতিমধ্যে /initপিআইডি 1 হিসাবে চলছি।
  • সমাধানটি হ'ল exec /sbin/initআমরা ভিতরে থাকা অবস্থায় কমান্ড লাইনটি কার্যকর করা /init। এইভাবে নতুন প্রক্রিয়াটি (যা হ'ল /sbin/init) তার পিতামাতার কাছ থেকে পিআইডি উত্তরাধিকারী হবে ( /initপিআইডি 1 সহ) এবং আমাদের কেবল এটিই করতে হবে।

আমার প্রাথমিক কনফিগারেশন (প্রশ্নটি দেখুন) নিয়ে আমি যে সমস্যার /initমুখোমুখি হয়েছি তা হ'ল আমার স্ক্রিপ্টটি যে শেষ কাজটি করেছে তা হল নতুন /bin/shপ্রক্রিয়া তৈরি করা যা ব্র্যান্ড নিউ পিআইডি বরাদ্দ করা হয়। এই বিন্দু /sbin/initথেকে সরাসরি ইন্টারেক্টিভ কনসোল থেকে চালানো অসম্ভব কারণ আমরা কমান্ড লাইনটি সম্পাদন করার পরেও exec /sbin/init, সেরাটি হ'ল একই পিআইডি নির্ধারণ করা যা ইতিমধ্যে শেলের জন্য বরাদ্দ করা হয়েছে এবং এই পিআইডি অবশ্যই পিআইডি 1 নয়।

দীর্ঘ গল্প সংক্ষিপ্ত - কমান্ড লাইনটি exec /sbin/initসরাসরি প্রয়োগ করুন এবং এগুলি /initসবই।

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