পটভূমি প্রক্রিয়া এবং পরিষেবাগুলি শুরু না করে প্যাকেজ ইনস্টল করুন


43

কখনও কখনও কিছু অ্যাপ্লিকেশন ইনস্টল করা ইনস্টলেশন থেকে স্বয়ংক্রিয়ভাবে চালিত হওয়া অ্যাপ্লিকেশন থেকে একটি প্রক্রিয়া বা পরিষেবা শুরু করবে। এগুলি শুরু না করে আমি কীভাবে ইনস্টল করব?


আমি ভাবছি যে এই জাতীয় কনফিগারেশন ব্যবহার করে কার্নেল বা ডিকেএমএস প্যাকেজ ইনস্টল করার সময় অস্থির অবস্থায় একটি সিস্টেম রেখে যাওয়ার কী সম্ভাবনা রয়েছে। আমি এই অঞ্চল সম্পর্কে খুব বেশি জানি না।
ündrük

@ üন্দ্রোক যা আমাকে চিন্তায় ফেলেছে। আপনি দেখতে পাচ্ছেন যে আমি কোনও ড্রাইভে নূন্যতম উবুন্টু ইনস্টল করছি, তারপরে এটি বুট করার পরিবর্তে, chrootআমার প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে এবং ইনস্টল করতে আমি একটি লাইভ সিডি / ইউএসবি ব্যবহার করি। অবশ্যই ড্রাইভারগুলি, বিশেষত, জিপিইউ ড্রাইভারগুলি সেখানে নেই এবং এটি ইনস্টল করা প্রয়োজন।
অক্সভিভি

উত্তর:


35

একটি সামান্য হ্যাকিশ, তবে এটি করার বেশ নির্ভরযোগ্য উপায় যা আমি একটি স্বয়ংক্রিয় ইনস্টলেশন স্ক্রিপ্টে কিছু সময়ের জন্য ব্যবহার করে আসছি।

প্রথমে একটি ডিরেক্টরি তৈরি করুন, উদাহরণস্বরূপ /root/fake, যার মধ্যে ডাকার জন্য সিমলিঙ্ক রয়েছে /bin/true:

initctl
invoke-rc.d
restart
start
stop
start-stop-daemon
service
deb-systemd-helper

আপনি তাদের বাশ স্ক্রিপ্টগুলিও তৈরি করতে পারেন যা কিছুই না করে এবং সাফল্য ফেরায়।

তারপরে $PATHপ্যাকেজ ইনস্টল করার সময় সেই ডিরেক্টরিটি সামনের দিকে অন্তর্ভুক্ত করুন :

PATH=/root/fake:$PATH apt-get install whatever

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

ব্যাখ্যা

প্যাকেজ ইনস্টলেশন ও অপসারণের সময় যে স্ক্রিপ্টগুলি কার্যকর করা হয় সেগুলি invoke-rc.dপরিষেবা শুরু এবং বন্ধ করার জন্য উল্লিখিত কমান্ডের অন্যান্য কার্যকর করে ute যদিও তারা তাদেরকে পরম পাথ দিয়ে ডাকে না (কমপক্ষে আমি এর সাথে একটির মুখোমুখি হই নি)।

সুতরাং শুরুতে নকল "কোনও অপারেশন" কমান্ড সন্নিবেশ করে $PATH, আসল কমান্ডগুলি কখনই কল হয় না।

যেহেতু কেবল পরিষেবাগুলি শুরু / বন্ধ করার জন্য ব্যবহৃত কমান্ডগুলি নকল হচ্ছে, অন্য সমস্ত কিছু, বিশেষত গুরুত্বপূর্ণ কাজগুলির মধ্যে যেমন initramfs- চিত্রগুলি আপডেট / তৈরি করা এখনও কাজ করে।


সিমলিংকের সাথে যথেষ্ট পরিচিত না, আপনি কী গ্রহণ করেন তার সমস্ত পদক্ষেপের সাথে কী আপনি বিশদ বর্ণনা করতে পারেন?
অক্সভিভি

একটি সিমিলিংক একটি বিশেষ ধরণের ফাইল যা কোনও সামগ্রী নেই, পরিবর্তে এটি অন্য কোনও ফাইলকে বোঝায় (পথ / নাম দ্বারা) refers এগুলি ln -sউদাহরণস্বরূপ এ ক্ষেত্রে তৈরি করা যেতে পারে ln -s /bin/true /root/fake/initctl
bseibold

এটি কীভাবে ডেমোনগুলি শুরু / পুনরায় আরম্ভ থেকে বাধা দেয়? @ সাইসির উত্তর অনুসারে invoke-rc.dদায়ী।
অক্সভিভি

$PATHভেরিয়েবলের শুরুতে invoke-rc.dফেক কমান্ডের সাহায্যে ডিরেক্টরি স্থাপন করে , ডেমনস শুরু করতে এবং থামাতে ব্যবহৃত সমস্ত কল এবং অন্য কলগুলি জাল কমান্ড ব্যবহার করে। এটি হ'ল যদি না তাদের একটি নিখুঁত পথে ডাকা হয় তবে আমি এর আগে কখনও আসি নি।
বিসিবোল্ড

আহ, এখন আমি দেখছি এটি কীভাবে কাজ করে - মূলত, প্রতীকগুলি মৃত প্রান্তকে নিয়ে যায়। তবে /bin/trueজিনিসটি আসলে কী? এবং প্যাকেজগুলিতে জড়িত বাকি কমান্ডগুলি সম্পর্কে কী? তারা কি নির্দিষ্ট করে ফেলে দেবে না $PATH?
অক্সভিভি

27

পটভূমি ডেমনগুলি দিয়ে শুরু করা হয়েছে invoke-rc.d, এটি নিশ্চিত করে যে ডিমনটি আরম্ভ করা হয়নি যদি এর আরসি স্ক্রিপ্টটি বলে যে এটি বর্তমান সিস্টেম রানলেভলে চালানোর কথা নয়। আপনি এনভায়রনমেন্ট ভেরিয়েবল রুনলেভেল সেট করে বর্তমান সিস্টেম রানলেভেলের ধারণাটি ওভাররাইড করতে পারেন। রানলেভেল 0 এবং 6 তে কিছু চালানোর কথা নয়, তবে এটি invoke-rc.dবগি বলে মনে হয় এবং আপনি যদি এই রানলেভেলগুলি ব্যবহার করেন তবে কোনওভাবেই এটি চালায়। বেশিরভাগ ডেমোন রানলেভেল 1 তে চালিত হয় না, সুতরাং আপনি এগুলি ইনস্টল করার পরে এগুলি শুরু করতে বাধা দিতে পারেন:

sudo RUNLEVEL=1 apt-get install redis-server

আমি কোনও ড্রাইভে নূন্যতম উবুন্টু ইনস্টল করছি, তারপরে এটি বুট করার পরিবর্তে, chrootআমার প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করার জন্য একটি লাইভ সিডি / ইউএসবি ব্যবহার করি। জিনিসগুলি চলতে শুরু করার কারণে, কখনও কখনও আমি উবুন্টু (লাইভ সিডি) সেশনটি স্যুইচ আউট করি। যাই হোক, জিনিস আমি বলতে চাই, কিভাবে আমি এই ব্যবহার করব করা হয় RUNLEVELমধ্যে chroot?
অক্সভিভি

@ অক্সভিও, একইভাবে, তবে এটি আপনাকে স্বয়ংক্রিয়ভাবে সনাক্ত করা এবং ডেমোন শুরু করা বাদ দেওয়া উচিত।
psusi

invoke-rc.dআমি যে সমস্যার মুখোমুখি হয়েছি তার জন্য কি বগী দায়ী?
অক্সভিভি

@ অক্সভি, এটি সম্ভব, তবে সম্ভবত কোনও বিশেষ প্যাকেজ বগিযুক্ত এবং ব্যবহার করছে না এমনটি সম্ভবত বেশি invoke-rc.d। এটি কি প্যাকেজ ছিল?
psusi

আমার কোনও ধারণা নেই, আমি কেবলমাত্র সমস্ত প্যাকেজ ইনস্টল করার জন্য তালিকাভুক্ত করেছি এবং আউটপুটটি দেখার জন্য টার্মিনালটিকে আরও মনে করি না।
অক্সভিভি


5

আমি বিশ্বাস করি আপনি ইনস্টলটি করার --no-triggersসময় আপনার কমান্ড লাইন বিকল্পটি ব্যবহার করা উচিত dpkg। এটার মতো কিছু:

dpkg -i --no-triggers SomeBigPackage.deb

এই সেটিংটি অবিরাম করতে যাতে apt-get installকোনও ট্রিগার না চালায়, একটি কাস্টম dpkg কনফিগারেশন ফাইল এতে তৈরি করুন /etc/dpkg/dpkg.cfg.d/custom:

# Install packages without starting background processes and services
# See http://askubuntu.com/q/74061  
no-triggers

নোট করুন যে dpkg এখনও চালিয়ে গেছে হিসাবে চালিত হিসাবে ট্রিগারগুলি লগ করে না:

$ sudo apt-get install redis-server 
…
Starting redis-server: redis-server.
$ service redis-server status
redis-server is not running

বিকল্পভাবে, আপনার কাছে ইনস্টলার স্ক্রিপ্টটি serviceনতুন পরিষেবাটি বন্ধ করতে কমান্ডটি চালাতে পারে:

service name_of_service stop

1
কোন apt-getসমমান? বা সরাসরি ব্যবহার করে বা কিছু ইনস্টল করার dpkgসাথে চালানোর জন্য কনফিগার করার কোনও উপায় আছে ? --no-triggersdpkgapt-get
অক্সভিভি

ড্যান_লিন্দার, আমি আশা করি আপনি @ অক্সভিভির প্রশ্নের উত্তরে আমার সম্পাদনা করতে আপত্তি করবেন না। আপনার পছন্দ অনুসারে এটিকে সংশোধন / ফিরিয়ে আনতে নির্দ্বিধায় হন।
ündrük

5
এটি ভুল। ট্রিমনকারীদের ডেমোন শুরু করার সাথে কিছু করার নেই। ট্রিগার হ'ল একটি প্যাকেজ যা অন্যটির প্রতিক্রিয়ায় নিজেকে পুনরায় কনফিগার করার জন্য কিছু ক্রিয়াকলাপ করে, যেমন আপনি যদি একটি প্যাকেজ ইনস্টল করেন যা কোনও initramfs হুক যুক্ত করে, এটি আপনার initramfs পুনর্নির্মাণের জন্য initramfs- সরঞ্জাম প্যাকেজটিকে ট্রিগার করে।
psusi

3

আমি যে কাজটি শেষ করেছি তা হ'ল আমি প্যাকেজ ইনস্টল করার সময় ডিবুটস্ট্র্যাপ কী করে তা অনুকরণ করে, আমি ডিপি কেজি-ডাইভার্ট ব্যবহার না করে:

প্রথমে আসল ফাইলগুলি সরানোর চেষ্টা করুন:

dpkg-divert --add --rename --local /sbin/start-stop-daemon
dpkg-divert --add --rename --local /sbin/initctl

তারপরে ডামি সংস্করণগুলি তৈরি করুন:

echo \
"#!/bin/sh
echo
echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "/sbin/start-stop-daemon"
chmod 755 "/sbin/start-stop-daemon"

echo \
"#!/bin/sh
echo
echo \"Warning: Fake initctl called, doing nothing\"" > "/sbin/initctl"
chmod 755 "/sbin/initctl"

তারপরে আপনার উপযুক্ত-আপগ্রেডগুলি, ইনস্টলগুলি ইত্যাদি করুন এবং তারপরে এটি পরিষ্কার করুন:

rm /sbin/initctl /sbin/start-stop-daemon
dpkg-divert --remove --rename /sbin/initctl
dpkg-divert --remove --rename /sbin/start-stop-daemon

আমি জানি যে অন্যান্য কমান্ড রয়েছে যা পরিষেবাগুলি বন্ধ / শুরু করতে ব্যবহার করা যেতে পারে, তবে ডিবুটস্ট্র্যাপ কেবলমাত্র যত্নশীল start-stop-daemonএবং initctlতাই আমি মামলা অনুসরণ করেছি।


3

দ্রুত ওয়ান-লাইনার:

echo -e '#!/bin/sh\nexit 101' | install -m 755 /dev/stdin /usr/sbin/policy-rc.d && apt-get install **Package** && rm -f /usr/sbin/policy-rc.d

"দ্রুত ওয়ান-লাইনার" ব্যক্তির প্রতি শ্রদ্ধার সাথে আপনি /usr/sbin/policy-rc.d নির্বাহযোগ্য হিসাবে সেট করতে ভুলে গেছেন। এটি অন্যথায় উপেক্ষা করা হবে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.