ক্রুটের অভ্যন্তরে একটি সিস্টেমযুক্ত পরিষেবা শুরু করুন


38

থ্রি স্ক্রিপ্টগুলি (বা ওপেনসিআর সহ) আমি সর্বদা আলাদা ইনস্টলেশন রুট থেকে পরিষেবা চালাতে পারি।
তবে আমি যখন দৌড়েছি তখন chroot /somepath/to_root /usr/bin/systemctl start someserviceপেয়েছি:

Running in chroot, ignoring request.

সিস্টেমডকে পরিষেবা চালাতে বাধ্য করার কোনও উপায় আছে কি?

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


1
আমারও একটি ক্রুটে সার্ভিস চালানো দরকার, এটি সর্বদা ওপেনসিআর 2 এর আগে কাজ করত, এখন অসম্ভব বলে মনে হয়; (
নিউফুটুর

আপনি ভুল সমস্যা সমাধানের চেষ্টা করছেন। আপনার যদি ওপেনআরসি থাকে তবে আপনার সিস্টেমড পরিষেবাটি ওপেনআরসি পরিষেবাতে রূপান্তর করতে হবে। সত্যিই এর আশেপাশে কোনও উপায় নেই।
ড্যানিয়েল বি

@ ড্যানিয়েলবি: না! আপনি কি কখনও সিস্টেমেরচেকডের কথা শুনেছেন?
ব্যবহারকারী 2284570

এটি আপনার প্রশ্নের সাথে কীভাবে সম্পর্কিত তাও আমি দেখতে পাচ্ছি না।
ড্যানিয়েল বি

উত্তর:


29

সিস্টেমড ডিস্ট্রোজে একটি বিখ্যাত সমস্যা (আর্চ লিনাক্স, ওপেনসুএসই, ফেডোরা)।

সিস্টেমড সিসভিনিটকে প্রতিস্থাপন করে এবং এর থেকে একটি দুর্দান্ত সুবিধা সরবরাহ করে। সিসভিনেটে, আপনি যখন কোনও পরিষেবা শুরু করতে বলেন, স্ক্রিপ্টটি চালিত ব্যক্তির মৃত্যুদণ্ডের প্রসঙ্গটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়, যার মধ্যে পরিবেশের ভেরিয়েবল, উলিমিট এবং আরও কিছু রয়েছে। সিস্টেমড একটি ডিমনকে বিজ্ঞপ্তি দিয়ে বিপরীতে এর উন্নতি করে, যা একটি সু-সংজ্ঞায়িত, স্বাস্থ্যকর, ধ্রুবক পরিবেশে পরিষেবাটি শুরু করবে, যেখানে অবশ্যই পরিবেশের পারফরম্যান্সগুলি পূর্বাভাস দেওয়া অনেক সহজ, যেহেতু পরিবেশ সবসময় একই থাকে।

এর দ্বারা বোঝা যায় যে, আমি যখন ক্রুটের অভ্যন্তরীণ থেকে সিস্টেমেটেলকে কল করি তখন এটি অপ্রাসঙ্গিক যে আমি ক্রুটের অভ্যন্তরে আছি, যে পরিবেশটি উত্তরাধিকার সূত্রে প্রাপ্ত হবে তা এখনও আমার বর্তমানের নয় পিআইডি 1 এর। তবে এটি এর চেয়েও খারাপ হয়ে যায়: যেহেতু যোগাযোগের সকেটগুলি ভিতরে / রান / সিস্টেমডের ভিতরে স্থাপন করা হয়, একটি ক্রুটে একটি প্রক্রিয়া ডিআইআই সিস্টেমের সাথে কথা বলতেও সক্ষম হবে না!

তাহলে আপনি কীভাবে সিস্টেমেড ডিস্ট্রোসগুলিতে ক্রুটিং করা সম্পর্কে যাবেন?

  1. আপনি যদি যা করতে চান তার একটি লিনাক্স ধারক থাকলে এই আর্ক উইকি পৃষ্ঠাতে আপনাকে 30 সেকেন্ডেরও কম সময়ে কীভাবে একটি লিনাক্স ধারক সেটআপ করতে হবে তা ধন্যবাদ জানায় systemd-nspawn

  2. পরিবর্তে আপনি যদি সত্যই একটি ক্রুট পরিবেশ চান, এই সুন্দর এবং স্ফটিক পরিষ্কার ওয়েব পৃষ্ঠাটি আপনাকে দুটি কার্যনির্বাহী সমাধান সরবরাহ করবে (দ্বিতীয়টি পয়েন্ট # 1 এ প্রদত্ত একটির সংশোধিত সংস্করণ)।


আমি খোঁজ করেছি systemd-nspawnকিন্তু চালাতে পারছি না। এবং না এটি কোনও ধারক হিসাবে নয় যেহেতু পরিষেবাটি হোস্ট এবং লক্ষ্য আর্কিটেকচার উভয়েরই ব্যবহার করা দরকার।
ব্যবহারকারী 2284570

2
যেটি আমি কখনই আমার হোস্ট সিস্টেমের রুটে সিস্টেমেড ব্যবহার করি না। আমার ক্ষেত্রে আমি ওপেনড্রির সাথে সিস্টেমড মেশাতে পারি না।
ব্যবহারকারী 2284570

1
@ টুওড যে কাজ করবে না। systemd-nspawn"সিস্টেমযুক্ত সিস্টেমে চলছে না" দিয়ে রানিং ব্যর্থ হয়। হোস্ট সিস্টেমটি পাশাপাশি ব্যবহার না করে।
hvd

1
@ টুইড এবং আমি প্রতিক্রিয়া জানিয়েছিলাম কারণ এটি আমার কাছে মোটেও শোনাচ্ছে না। :) "আমি এটি চালাতে পারছি না" বলার মতো একটি অদ্ভুত বিষয় হ'ল যদি আপনার মৃত্যুদন্ড কার্যকর করতে সমস্যা হয় তবে আমি সন্দেহ করি যে সমস্যাটি আমি আমার মন্তব্যে রেখেছি: এটি চালানো ত্রুটি বার্তা দেয় এবং না করে দরকারী কিছু করবেন না। এমনকি যদি সমস্যাটি দেখা দেয় তবে এটি কোথায় পাওয়া উচিত ছিল systemd-nspawn, তবে নতুন মূলের দিকে ইঙ্গিত করলে কোনও লাভ হবে না। হয় হোস্টের এটি ইতিমধ্যে রয়েছে (কারণ এটি সিস্টেমে চলছে), হোস্ট সংস্করণটি ব্যবহার করা যেতে পারে, বা হোস্টটিতে এটি নেই, তবে নতুন রুটের সংস্করণটি কাজ করবে না।
hvd

1
systemdচালাতে অস্বীকার করবেchroot
এরকিন

4

systemd শুধুমাত্র "পরিষেবাদি" উপেক্ষা করে, তাই আমি নিজেই ডেমন কমান্ডগুলি ম্যানুয়ালি চালিত করি।

পরিবর্তে তাই

service sshd start

আমি ব্যবহার করি

/usr/sbin/sshd -D &

এটি সমস্ত পরিষেবার জন্য কাজ করে না। কিছু জর্জের মতো সিস্টেম পরিষেবা স্টার্টার অংশ হিসাবে শুরু করা প্রয়োজন।
ব্যবহারকারী 2284570

startxজন্য কাজ করবে Xorg
এরকিন

@ এরকিনএলপগনি: ক্রুটে নেই ... ডাবসের কারণে।
ব্যবহারকারী 2284570

4

বেশ কয়েকটি বছর ব্যবস্থার পরে আমি অবশ্যই স্বীকার করতে পারি যে বেশিরভাগ সিস্টেমড ব্যবহারিক সমস্যার একমাত্র সমাধান রয়েছে। কারণ ত্রুটিটি নিজেই সিস্টেমড

আমি সিস্টেমড সম্পর্কে সত্যিই বিরক্ত হয়েছি কারণ আমার এমন সমস্যা ছিল যা আমি আপস্টার্ট বা ওপেনআরসি-র মতো জিনিসের মুখোমুখি হইনি:

  • কেবল 24Mb র‌্যামের এমবেড এম্বেড থাকা সিস্টেমের জন্য এবং কোনও লিখিতযোগ্য স্টোরেজ নয় এমন সিগ্রুপস সমর্থন (একটি কনফিগার ফাইলের মধ্যে ডিফল্টরূপে সক্রিয় করার পরিবর্তে) সিনিয়র কার্নেল প্রয়োগ করা প্রয়োজন ।
  • মডুলার হওয়ার দাবি সত্ত্বেও, রানটাইম নির্ভরতা জাহান্নাম এটিকে একটি শক্তিশালী দেবতা বস্তু করে তোলে: একটি একক রিসার 4 রুটফেসে বুট করতে চান? এটি সম্ভব নয় কারণ অনেক প্রোগ্রামের জন্য systemd-udevdপ্রয়োজন systemd-initএমন একটি systemd-bootপ্যাকেজ প্রয়োজন যা grub2একটি সময়ে রিসার 4 পার্টিশন থেকে কার্নেল চিত্রগুলি পড়তে পারে না।
  • ব্লুটুথ ডায়ালআপের মাধ্যমে ইন্টারনেটের সাথে সংযোগ স্থাপন করতে চান? যদি এটি আপনার স্যামসাং জাভা আমার ফোনটির সাথে কাজ করে না, তবে আপনি আগে স্ক্রিপ্টগুলি এবং কমান্ড লাইন সফ্টওয়্যারটি চালাতে সক্ষম নন যেগুলি আগে ম্যানুয়ালি কাজ করেছিল networkd
  • যদিও আমি সবচেয়ে বড় সমস্যাটি স্বীকার করেছি তা হল যদি আপনি নিজের লিনাক্স বিতরণ তৈরি এবং রক্ষণ করেন তবে: সিস্টেমড ডিআইডি মডিউলে নিজেই এতটা নির্ভরশীলতা রেখেছেন যে আপনি বিভিন্ন ইনস্টল প্যাকেজগুলির মাধ্যমে অন্য কোনও init সিস্টেম বেছে নেওয়ার প্রস্তাব করতে পারবেন না।
  • আপনি যদি আপনার সিস্টেমে ক্রুট করতে না পারেন বা আপনি যদি libdb4.8 থেকে আপগ্রেড করতে পারেন তবে লগগুলি দেখার জন্য সৌভাগ্য (যদিও কমপক্ষে, মাইক্রোসফ্টের এক্সএমএল ফর্ম্যাটে লগ ফাইল রয়েছে)

একমাত্র সমাধান:

সিস্টেমড সমস্যা সমাধানের জন্য অবাস্তব জটিল: ওএসভি 4 এর পরিবর্তে আলসার মতো। সুতরাং আপনার যদি সিস্টেমড ব্যবহার করে এমন কিছু থাকে তবে কেবল সমস্ত ডেটা মুছুন:

dd if=/dev/urandom of=/dev/dm−0 bs=1M

এবং এমন কিছু ইনস্টল করুন যা ওপেনসিআর এর সাথে জেন্টুর মতো সিসভি ইনিশের সমস্যাগুলি সমাধান করার সময় এটি ব্যবহার করে না।
আমার প্রশ্নাবলীর সাথে সম্পর্কিত সিস্টেমগুলি উইন্ডোজ ® রেজিস্ট্রির মতো জিনিসগুলি তৈরি করে: যদি এর কোনও অংশ ভুল হয়ে যায়, তবে এটি শেষ।


3
দয়া করে সনাক্ত করুন যে কোনও কিছুর নকশা সত্যই উত্তর পাওয়া থেকে আটকাতে পারে যাতে উত্তরটি যে কাজ করে এমন কিছুতে পাল্টে যায় । এবং এটি একটি সত্য উত্তর।
ব্যবহারকারী 2284570

1
আমার একই মতামত ছিল, এখন আমি কিছুটা বেশি সুষম দৃষ্টিভঙ্গিতে আছি। সিস্টেমডির অতি-বড় সুবিধা রয়েছে যে এটি কী হত্যা করা উচিত তা সত্যই হত্যা করতে পারে । কারণ এটি কার্নেল সিগ্রুপ বৈশিষ্ট্য সহ সমস্ত কাঁটাচানা উপ-প্রক্রিয়াগুলি ট্র্যাক করে। পুরানো কোনও সরঞ্জামই এটি করতে পারে না। তদ্ব্যতীত, আপনি কি /etc/init/*.sh?I এর স্ক্রিপ্টগুলির বাজে কথা মনে রেখেছেন, তবে এটি আজ আমার কাছে খারাপ স্মৃতি। সিস্টেমেড সার্ভিস ফাইলগুলি পরিষ্কার এবং প্রায় 10 লাইন দীর্ঘ কনফিগার রয়েছে । 200 লাইনের দীর্ঘ স্ক্রিপ্ট নয় । এই বিশাল সুবিধার ব্যবস্থা রয়েছে, আমি সম্মত হই যে এর অন্যান্য সমস্ত বৈশিষ্ট্য অসুবিধে রয়েছে disadvant
পিটার বলেছেন মোনিকা

বিটিডাব্লু, আমি আপনার জবাবটি আপ দিয়েছি কারণ এর সুবিধার পাশাপাশি ঠিক এই ধরণের সমালোচকই ঠিক এই সুরে সিস্টেমড ডেভলপমেন্টকে উন্নত করতে প্রয়োজন। উদাহরণস্বরূপ, আমি কেবল একটি ক্রুটে একটি পোস্টগ্র্যাসকল শুরু করার চেষ্টা করেছি এবং এটি করার জন্য আমার মূল সিস্টেমটি ক্রপ করতে হয়েছিল। অনেক, অনেক কৃপণ জিনিস এখনও আছে, ঠিক আছে।
পিটার বলেছেন

@ পেটার: দুর্ভাগ্যক্রমে সবাই এটিকে ভাগ করে নিচ্ছে না আমি পোস্ট মুছে ফেলার মূল বিন্দুতে। এটি সিস্টেমডের বিরুদ্ধে এসআইএসভি ইন সম্পর্কে নয় বরং ওপেনসিআর বা এমনকি আপস্টার্টের মতো (যা সংক্ষিপ্ত প্রারম্ভিক স্ক্রিপ্টগুলির পাশাপাশি সমান্তরাল পরিষেবা শুরুর অনুমতি দেয়) এর বিরুদ্ধেও বেশি। কমপক্ষে আমি একটি জিনিস শিখেছি: ডারউইন বেশিরভাগ অ্যাপল ™ উইন্ডোজ হ'ল মাইক্রোসফ্ট এবং লিনাক্স ডিজাইন বেশিরভাগ ক্ষেত্রে লাল টুপি দ্বারা চালিত হয়। যদিও SysV init ধীর থাকাকালীন আপনি রানটাইমে কী করতে পারেন তা আপনাকে সীমাবদ্ধ করে না।
ব্যবহারকারী 2284570

আপনি ওপেনসিআর ব্যবহার করার সময় @ পেটার সার্ভিসেস স্ক্রিপ্টগুলি খুব স্পষ্ট হয়। সিস্টেমডে সিগ্রুপের সমস্যাটি হ'ল এটি কোনও বিকল্প নয় যা ডারউইন বা নেটবিএসডি এর মতো সিস্টেমড চালানো জিনিসগুলি প্রতিরোধ করে।
ব্যবহারকারী 2284570

3

না। পরিষেবাদিগুলি সিস্টেম্ট দ্বারা চালিত হয় (পিড 1), সরাসরি সিস্টেমটেক্ট দ্বারা নয় (যা কেবল একটি সূচনা অনুরোধ প্রেরণ করে), এবং যেহেতু সিস্টেমড ক্রোটের বাইরে চলে, তাই পরিষেবাটিও কার্যকর হবে।

যদিও প্রযুক্তিগতভাবে এটি প্রয়োগ করা সম্ভব হয়েছিল (systemctl তৈরি করে কোনওরকমভাবে এর রুটটি সিস্টেমডে রূপান্তরিত করে), এটি সম্পূর্ণরূপী পাত্রে ( systemd-nspawn /somepath/to_root) তৈরি করার একটি সরঞ্জাম ইতিমধ্যে রয়েছে বলে কিছুটা হওয়ার সম্ভাবনা কম । আপনি সর্বদা মেলিং তালিকার সাথে যোগাযোগ করতে পারেন যদিও।


1
দুর্দান্ত, তবে আমার হোস্ট সিস্টেম ওপএনসিআরসি ব্যবহার করার পরে আমার সিস্টেমসিটিএল ব্যবহার করা দরকার। আমি সম্পূর্ণ স্বাধীন সমাধান চাই
ব্যবহারকারী 2284570

3
আমি আরও জলাবদ্ধ হয়ে এই কথাটি বলে বলছি: গিস্ট! RootDirectory=পাশাপাশি উল্লেখ করুন যেহেতু আপনি বিপজ্জনকভাবে upvotes সংক্ষিপ্ত। (-:
জেডিবিপি

@ জেডিবিপি: ভেরিয়েবল RootDirectoryএবং chrootকমান্ডের মধ্যে বিট (ফলাফলের মেয়াদে) পার্থক্য কী ?
ব্যবহারকারী 2284570

@ গ্রায়েটি: তাহলে আর ডিআইপি হলে কী সংযোজন হবে pid 1?
ব্যবহারকারী 2284570

1

ক্রুট থেকে নেটওয়ার্ক কনফিগারেশন ব্যবহার করে রেসকিউ মোডে নেটওয়ার্ক আনার চেষ্টা করার পরে একবার এই সমস্যার মুখোমুখি হয়েছিল। অবশেষে এটি আমার পক্ষে কাজ করে:

service --skip-redirect <service> restart

বা:

SYSTEMCTL_SKIP_REDIRECT=_ /etc/init.d/<service> restart

খুশী হলাম। তবে এটি কেবল লিগ্যাসি ইনস সামঞ্জস্যপূর্ণ পরিষেবাদি (ফেডোরা রাহাইডে নেটওয়ার্কিংয়ের জন্য কাজ করবে না) নিয়ে কাজ করে । আমি আমার উত্তরে যেমনটি বলেছি, আসল সমাধান হ'ল সিস্টেমড ব্যবহার করে এমন কোনও জিনিস স্ক্রু করা।
ব্যবহারকারী 2284570

0

যদি আপনি সকেট অ্যাক্টিভেশন সহ একটি ইনডেড-স্টাইল পরিষেবা চালু করেন, তবে কনফিগারেশন ফাইলের পরিবর্তে স্ট্রানেল চালু করার বিষয়টি বিবেচনা করুন যা একটি ক্রোট এবং আপনার বাইনারি উভয়কে একটি ইনডেড-শৈলীর লঞ্চ লক্ষ্য হিসাবে নির্দিষ্ট করে।

নোট করুন যে আপনার সেলিনাক্স সমস্যা থাকতে পারে। ওরাকল লিনাক্স .1.১ সিস্টেমে আমাকে স্ট্যান্ডল পড়ার জন্য প্রয়োজনীয় সমস্ত ফাইলগুলিতে "chcon -v --type = stunnel_etc_t" করতে হয়েছিল।

আপনাকে সকেটের ক্লায়েন্টের পাশে টিএলএস এনক্রিপশন ব্যবহার করতে হবে (যেমন, কনফিগারেশনে "ক্লায়েন্ট = হ্যাঁ" সহ আরও একটি স্টানেল) nel আপনি যদি এই বিষয়ে আরও বিশদ চান তবে আমাকে জানান।


না এটি ডি-বাসের মতো জিনিস about লক্ষ্য ক্রুটে সমস্যাগুলি নির্ণয়ের জন্য আমি এটি করি।
ব্যবহারকারী 2284570

-1

nohupক্রুটে সার্ভিস শুরু করতে আপনি কমান্ডটি ব্যবহার করতে পারেন । httpdউদাহরণস্বরূপ পরিষেবা শুরু করার জন্য, আমি এটি এটি করি।

nohup httpd /dev/null &

এটি বন্ধ করতে pkill httpd


ডিবিবাসের মতো পরিষেবাদি সম্পর্কে কী যা কেবল ইনস্টলড বাইনারি সিস্টেমড স্ক্রিপ্ট দ্বারা শুরু করা যেতে পারে?
ব্যবহারকারী 2284570

আপনি স্টার্ট কমান্ড দিয়ে এর ডিরেক্টরি থেকে এই জাতীয় পরিষেবাগুলি শুরু করতে পারেন।
ellooku

যা systemctl এর বিপরীতে একটি সিমিলিংক। সুতরাং এটি কাজ করে না।
ব্যবহারকারী 2284570

আমি ফেডোরাতে আমার অ্যান্ড্রয়েডে চলমান সময়ে এটি করি। আপনার সমস্যাটি কী তা আমি জানি না।
ইলুকু

ফল হল এই বার্তা: Running in chroot, ignoring request.। আমি মনে করি না আপনি ক্রুট হলেও সারাক্ষণ এটি করেন। প্রকৃতপক্ষে, স্টার্টআপ স্ক্রিপ্টটির জন্য সিস্টেমড প্রয়োজন।
ব্যবহারকারী 2284570
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.