কীভাবে একটি কাস্টম লিনাক্স ডিস্ট্রো তৈরি করবেন যা কেবল একটি প্রোগ্রাম চালায় এবং অন্য কিছু নয়?


12

আমি কিভাবে আমার নিজের "বিবিধ" তৈরি সম্পর্কে যেতে পারে লিনাক্স ডিস্ট্রো যে শুধু একটা প্রোগ্রাম, প্রায় কাছাকাছি ঠিক হিসাবে একই ভাবে চালানো হবে XBMCbuntu


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

1
আমার কাছে বেশ পরিষ্কার মনে হচ্ছে ...
সোনারলোকস

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

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

উত্তর:


6

আমি এলএফএসের সাথে জগাখিচুড়ি শুরু করব না, এটি কিছু উদ্যানের পথ যা উদ্যানের পথ to

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

এরপরে আপনি কীভাবে init সিস্টেমটি আপনার উদ্দেশ্যে কনফিগার করবেন তা শিখতে চান - নোট করুন যে আপনি আরম্ভ না করে করতে পারবেন না, এবং এটি আপনার লক্ষ্য অর্জনের সেরা উপায় হতে পারে। প্রাথমিকভাবে লিনাক্সে তিনটি ব্যবহার করা যায় (তবে কিছু অন্যান্য রয়েছে ):

  • দেবিয়ান ক্লাসিক ইউনিক্স এসআইএসভি স্টাইল ইন্ডিতে একটি প্রকরণ ব্যবহার করে । jessieরিলিজ হিসাবে , ডিবিয়ানও systemd( https://wiki.debian.org/systemd ) এ স্যুইচ করেছে

  • উবুন্টু এবং ডেরিভেটিভগুলি আপস্টার্ট ব্যবহার করে ।

  • ফেডোরা, আর্চ এবং ডেরিভেটিভগুলি সিস্টেমড ব্যবহার করে

যদি আপনি এখনও এগুলির কোনও সম্পর্কে কিছু জানেন না, তবে তাদের কোনওটিই অন্যের তুলনায় বিশেষত ব্যবহার করা শক্ত। যদি আপনি পরবর্তী দুটির মধ্যে একটির সাথে যান তবে তারা সিসভির সাথে পশ্চাদপটে সামঞ্জস্যের জন্য কিছু ব্যবস্থা সরবরাহ করে তবে এটি নিয়ে বিরক্ত করবেন না , এটি কোনও সহজ নয়। 1

এখানে মূল বক্তব্যটি হ'ল init বুট এ কী করে তা হ্রাস করা এবং আপনি কীভাবে এমন একটি সিস্টেম তৈরি করতে পারেন যা আপনি ফোকাস করতে চান সেই অ্যাপ্লিকেশনটি সমর্থন করার জন্য একটি ন্যূনতম পরিমাণ সফ্টওয়্যার চালাবে - এটি সার্ভারটি কীভাবে সেট আপ করা হয় তা মূলত, বিটিডাব্লু, সুতরাং এটি একটি সাধারণ কাজ (নোট করুন যে আপনি আক্ষরিকভাবে "কেবল একটি" ব্যবহারকারীল্যান্ড প্রক্রিয়া চালাতে পারবেন না, কমপক্ষে কার্যকরভাবে কার্যকর নয়)।

আপনি যে অ্যাপ্লিকেশনটি চালাতে চান সেটি যদি জিইউআই প্রোগ্রাম হয় (তবে আপনি কেন আক্ষরিকভাবে একটি অ্যাপ্লিকেশন চালাতে পারবেন না তার একটি ভাল উদাহরণ, যেহেতু জিইআইআই অ্যাপ্লিকেশনগুলিতে এক্স সার্ভারের প্রয়োজন হয়), আপনার কাছে ~/.xinitrcএমন দেখতে পাওয়া যেতে পারে ;

#!/bin/sh

myprogram

আপনি যখন তখন startx, আপনার প্রোগ্রামটি কেবল চলমান হবে এবং ডেস্কটপগুলি পরিবর্তন করা বা অন্য কিছু শুরু করা অসম্ভব হবে কারণ আংশিকভাবে কোনও উইন্ডো ম্যানেজার বা ডেস্কটপ পরিবেশ নেই (সুতরাং, উইন্ডো ফ্রেম বা শিরোনামবারটি নেই)।

১. বিষয়টিকে কিছুটা বেলার জন্য: আপনি যখন এই গবেষণাটি চালাচ্ছেন, আপনি সিস্টেমড এবং আপস্টার্ট সম্পর্কে এমন কিছু লোককে দেখতে পাবেন যারা সিসভি দাবী সম্পর্কে আগে পরিচিত ছিল, যেমন তারা খুব জটিল। যাইহোক, বস্তুনিষ্ঠভাবে এগুলি এসআইএসভি (আইএমও সিস্টেমড ব্যবহার করা সহজ, আসলে) এর চেয়ে জটিল নয়, তবে বেশিরভাগ কুকুর তাদের পুরানো কৌশলগুলি পছন্দ করে, তাই কথা বলতে। এই গ্রিপিং মারা যেতে শুরু করছে এখন উভয় সিস্টেমই কিছু সময়ের জন্য ব্যবহার করা হচ্ছে।


1
আপনি ছাড়া এটি করতে পারবেন না initতবে আপনি এটি ছাড়া কিছু করতে পারবেন upstart, systemd,বা sysv. initকেবলমাত্র কিছু এক্সিকিউটেবল ফাইলের নাম দেওয়া হয়েছে initযা আপনার কার্নেলটি মাউন্ট করার সময় ডাকে যখন initramfs.বেশিরভাগ ক্ষেত্রে এই অন্য তিনটি হয় না initতবে এগুলি আসলে execসম্পাদিত হয় init,যার দ্বারা সাধারণত হয়busybox.
মাইকসার্ভ

@ মাইক্রোজার সম্পূর্ণ (এবং আমি স্পষ্টভাবে উল্লেখ করেছি যে এগুলি কেবলমাত্র তিনটি পছন্দ নয়)। এও নোট করুন যে আমি ইচ্ছাকৃতভাবে বাদ দিয়েছি busyboxকারণ এটি পৃথক উত্তরে পৃথক চিকিত্সার দাবিদার, তবে আমার দ্বারা নয়।
স্বর্ণলোকস

আপনি কত দয়ালু অফার! কিন্তু কোন জঘন্য উপায়।
মাইকজার্ভ

এই পদ্ধতিটি বাস্তবে বাস্তবে কার্যকর হয় কিনা তা জানতে আগ্রহী হবে। আসলেই কেউ চেষ্টা করেছে?
ফাহিম মিঠা

@ ফাহিমমিঠা যদি আপনি বোঝাতে চান যে আমি এখানে প্রস্তাব দিচ্ছি (আরআর কনফিগারেশনটি কাস্টমাইজ করুন) তবে অবশ্যই এটি করা যায় - সিস্টেমটি ইতিমধ্যে কীভাবে কাজ করে, আপনি কেবল একটি সরানো এবং সরলীকৃত সংস্করণ তৈরি করছেন (আমি নিশ্চিত যে এটি এক্সবিএমসিবুটু কী)। আপনি বলতে চাচ্ছি, আরো কিছু বিশেষ এক্সিকিউটেবল Ala, busybox সঙ্গে Init প্রতিস্থাপন, তাহলে সম্ভবত এটা মূল্য সব চাইতে বেশি কষ্টের এর যদি না আপনি আবশ্যক যে উপায় না - busybox- র প্রধান উদ্দেশ্য (ছোট্ট এমবেডেড পরিবেশের মধ্যে ব্যবহারের জন্য সঙ্গে, যেমন, মাত্র কয়েক র‌্যামের এমবি)।
স্বর্ণলোকস

18

সর্বনিম্ন আরম্ভ হ্যালো ওয়ার্ল্ড প্রোগ্রাম ধাপে ধাপে

এখানে চিত্র বর্ণনা লিখুন

অসীম লুপে শেষ হওয়া কোনও নির্ভরতা ছাড়াই হ্যালো ওয়ার্ল্ড সংকলন করুন। init.S:

.global _start
_start:
    mov $1, %rax
    mov $1, %rdi
    mov $message, %rsi
    mov $message_len, %rdx
    syscall
    jmp .
    message: .ascii "FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n"
    .equ message_len, . - message

আমরা প্রস্থান সিস্টেম কলটি ব্যবহার করতে পারি না, না হলে কার্নেল প্যানিক্স।

তারপর:

mkdir d
as --64 -o init.o init.S # assemble
ld -o d/init init.o      # link
cd d
find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
ROOTFS_PATH="$(pwd)/../rootfs.cpio.gz"

এটি আমাদের হ্যালো ওয়ার্ল্ডে একটি ফাইল সিস্টেম তৈরি করে /initযা কার্নেলটি চালিত হবে এমন প্রথম ব্যবহারকারীর প্রোগ্রাম। আমরা আরও ফাইল যুক্ত করতে পারতাম এবং যখন কার্নেলটি চালিত হয় তখন সেগুলি প্রোগ্রাম d/থেকে অ্যাক্সেসযোগ্য হবে /init

তারপরে cdলিনাক্স কার্নেল গাছের মধ্যে, বিল্ডটি যথারীতি হয় এবং এটিকে কিউইএমইউতে চালান:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v4.9
make mrproper
make defconfig
make -j"$(nproc)"
qemu-system-x86_64 -kernel arch/x86/boot/bzImage -initrd "$ROOTFS_PATH"

এবং আপনার একটি লাইন দেখতে হবে:

FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR

এমুলেটর পর্দায়! মনে রাখবেন এটি শেষ লাইন নয়, তাই আপনাকে আরও কিছুটা উপরে তাকিয়ে থাকতে হবে।

আপনি সি প্রোগ্রামগুলি স্ট্যাটিকালি লিঙ্ক করলে আপনি এটি ব্যবহার করতে পারেন:

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n");
    sleep(0xFFFFFFFF);
    return 0;
}

সঙ্গে:

gcc -static init.c -o init

ডায়নামিক লিঙ্কিংয়ের জন্য ডায়নামিক লিংক নির্বাহযোগ্য স্থাপন করা প্রয়োজন, যার মধ্যে সর্বাধিক সাধারণ গ্লিবিকের মতো সি স্ট্যান্ডার্ড লাইব্রেরির অংশ।

আপনি একটি ইউএসবি চালু /dev/sdXএবং সহ সত্যিকারের হার্ডওয়্যারটিতে চালনা করতে পারেন :

make isoimage FDINITRD="$ROOTFS_PATH"
sudo dd if=arch/x86/boot/image.iso of=/dev/sdX

এই বিষয়ে দুর্দান্ত উত্স: প্রযুক্তি টিপ: কীভাবে initramfs ব্যবহার করবেন landley.net এটি কীভাবে ব্যবহার করতে হয় তাও ব্যাখ্যা করে gen_initramfs_list.sh, যা প্রক্রিয়াটি স্বয়ংক্রিয় করতে সহায়তার জন্য লিনাক্স কার্নেল উত্স ট্রি থেকে প্রাপ্ত একটি স্ক্রিপ্ট।

উবুন্টু 16.10, QEMU 2.6.1 এ পরীক্ষিত।

পরবর্তী পদক্ষেপ

আপনি পরবর্তী কাজটি করতে চান তা হল ব্যাসিবক্স সেটআপ করা ।

ব্যাসিবক্স একটি পসিএক্স-ওয়াই শেল সহ বেসিক POSIX-y CLI ইউটিলিটিগুলি প্রয়োগ করে, যা আপনাকে আরও সহজেই সিস্টেমের সাথে ইন্টারেক্টিভভাবে পরীক্ষা করার অনুমতি দেয়।

ব্যক্তিগতভাবে, এই মুহুর্তে আমি কেবল বিল্ড্রুটের উপর নির্ভর করতে পছন্দ করি , যা স্ক্রিপ্টগুলির একটি দুর্দান্ত সেট যা উত্স থেকে সমস্ত কিছু তৈরি করে এবং মূল ফাইল সিস্টেম তৈরি করে mates

আমি এটির জন্য একটি অত্যন্ত বিশদ এবং স্বয়ংক্রিয় সহায়কটি আপলোড করেছি: https://github.com/cirosantilli/linux-kernel-module-cheat


4
এটি সম্ভবত এখানে সবচেয়ে আন্ডাররেটেড উত্তর: ডি। অসাধারণ!
মিসৌথ

1
@ সামান্য একটু কম এখন :-)
সিরো সান্তিলি 法轮功 病毒 审查 六四 事件 法轮功

1

আপনি যদি প্রোগ্রামিংয়ে সামান্য থাকেন এবং আপনি এটিকে স্ক্র্যাচ থেকে তৈরি করতে চান তবে আপনি এলএফএসের সাথে যেতে পারেন অর্থাৎ স্ক্র্যাচ থেকে লিনাক্স http://www.linuxfromscratch.org/

আপনি যদি উবুতনু কাস্টমাইজ করতে চান তবে আপনি উবুন্ট-বিল্ডার ব্যবহার করতে পারেন এবং আপনি যদি এটি আরপিএম বেসে চান তবে আপনি এসইউএসই-স্টুডিও ব্যবহার করতে পারেন, সুস স্টুডিও আপনাকে কাস্টম স্যুস লিনাক্স তৈরি করতে দেয়

চিয়ার্স


1

আপনার "একটি প্রোগ্রাম" কী প্রয়োজন তা সম্পর্কে এটি আরও বেশি।

আপনি কীভাবে একটি এলএফএস তৈরি করে জিনিসগুলি একসাথে রাখবেন তা বুঝতে শুরু করতে পারেন (ওরফে " লিনাক্স থেকে স্ক্র্যাচ ") । তারপর আপনি আপনার প্রোগ্রাম দ্বারা প্রয়োজনীয় জিনিস যোগ অথবা কারণ মত ভারী উপ-সিস্টেম নির্মাণের একটি পূর্ণ বিতরণের জন্য যেতে হবে , Gnome বা ডি-ই LFS একটি বাস্তব ব্যথা-ইন-গাধা হতে পারে।

অবশ্যই পিছিয়ে যাওয়া প্রথমে সহজ হতে পারে তবে পুরো বিতরণ থেকে জিনিসগুলি সরিয়ে ফেলা ঝামেলা হতে পারে: একটি ভিএম-এ এটি করুন এবং প্রতিটি পদক্ষেপে এই ভিএম এর অনুলিপি করুন।

(আমার 2 সেন্ট)

সম্পাদনা করুন :

সেন্টোস বা উবুন্টুর মতো সম্পূর্ণ বিতরণ থেকে শুরু না করে সিকিউরিটিবিস্টের দ্বারা নির্দেশিত হিসাবে , আপনার বিল্ডিং বিতরণ সরঞ্জামগুলির দিকেও নজর রাখতে পারে:


1

আপনাকে যা জিজ্ঞাসা করতে হবে তা হ'ল আপনার "একটি প্রোগ্রাম" কী প্রয়োজন এবং আপনার কোন সংস্থান রয়েছে।

এটির জন্য যদি গ্রন্থাগার এবং সমর্থন বাইনারিগুলির বিস্তৃত প্রয়োজন হয় তবে আপনি একটি "নিয়মিত" লিনাক্স ডিস্ট্রো (দেবিয়ান বা অনুরূপ) ব্যবহার করে এবং বুট প্রক্রিয়াটি কিছুটা বিশৃঙ্খলা করতে পারেন।

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

আপনার যদি প্রয়োজন হয় কেবল একটি নন-মডিউলার কার্নেল সরবরাহ করতে পারে এবং অন্য কোনও কিছুই না থাকে তবে আপনার নিজের বাইনারি সোজা কার্নেলে চালানো কাজ করতে পারে এবং হালকা দ্রাবণ হতে পারে ..

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