انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: نصب کرنل لینوکس از صفر (بسته شد)  (دفعات بازدید: 2176 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #15 : 21 آذر 1400، 09:06 ق‌ظ »
اون پوشه arch برای معماری هست ربطی به توزیع آرچ نداره: architecture

ممنون، در درک موضوع خیلی به من کمک کرد.

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #16 : 21 آذر 1400، 09:28 ق‌ظ »
بلاخره توانستم فایل bzImage را در مرحله make بسازم.( در فلش مموری ام ساخته ام)(عکس ۱)
ولی الان مشکی که دارم این است که برای این دو تا دستور:
sudo make modules_installsudo make install
بنظرم در این مرحله اگر بخواهم از این دستورات به همین نحو استفاده کنم ، اینها در سیستم اصلی ام اعمال خواهند شد. اینجایش را زیاد مطمن نیستم!
می خواهم از chroot استفاده کنم تا این دستورات را در  سیستم عاملی که در فلش می خواهم بسازم ، اعمال شود. بنظرم چون فایل  فایل bzImage را ساخته ام این کار احتمالا شدنی است.
به ویکی انجمن هم در رابطه با chroot مراجعه کردم، ولی در این باره به مشکل خوردم و زیاد سر در نیاوردم. اگر امکان داشته باشد در رابطه با chroot در این قسمت مرا راهنمایی بفرمایید.(عکس ۲)

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #17 : 21 آذر 1400، 02:04 ب‌ظ »
مجبور شدم همینطوری ادامه بدهم.
در ادامه کار دستور make modules را انجام دادم و بدون مشکل اجرا شد.تا اینجای کار بنظرم همه چیز درست است.
دستورات make install و make modules_install برای اجرا شدن نیازمند sudo بودند و آنها را با sudo اجرا کردم و همانطور که حدس می زدم بعد از restart ، ورژن کرنل سیستم فعلی ام افزایش یافت و این دو دستور آخری به سیستم اصلی ام اعمال شد ، که البته من در پی این نبودم و می خواهم که در فلش این دو تا دستور اعمال شوند.
اگر نظر یا پیشنهادی داشتید حتمابفرمایید تا امتحان کنم و در ضمن به هیچ وجه نگران سیستم من نباشید، این قسمت کار کاملا به عهده خودم می باشد.
ورژن قبلی کرنل:  5.10.0.9
ورژن جدید کرنل:  5.10.84
البته الان سیستمم را به حالت قبل برگرداندم.

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5125
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #18 : 22 آذر 1400، 11:18 ب‌ظ »
وقتی دستورات make و make modules رو می‌زنید، به ترتیب خود کرنل و ماژول‌های اون کامپایل میشن. دستورات make و makemodules_install به ترتیب خود کرنل و ماژول‌های اون رو در جای درست قرار میده. این مرحله فقط شامل یه سری کپی کردن هست، همین. کرنل بعد از کامپایل، توی دایرکتوری زیر پیدا میشه
arch/x86_64/bootاگه کرنل برای معماری‌های دیگه هم کامپایل شده باشه، مسیر مثل بالا هست با این تفاوت که به جای x86_64، اسم اون معماری رو باید قرار بدید.

برای اینکه بتونید سیستم رو با اون کرنل بوت کنید، به یه initramfs هم نیاز دارید. توی دبیان و توزیع‌های مبتنی بر اون، به طور پیش‌فرض از initramfs-system برای ایجاد initramfs استفاده میشه، ولی میشه به جای اون از dracut (پیش‌فرض فدورا و open suse) هم استفاده کرد.

وقتی که کرنل بوت میشه، به طور پیش‌فرض میره و سعی می‌کنه داخل دایرکتوری زیر، دنبال ماژول‌ها بگرده
/lib/modules/$(uname -r)محلی که کرنل دنبال ماژول‌ها میگرده رو باید موقع کامپایل تعیین کنید، نمی‌دونم میشه از طریق خط فرمان کرنل، اون دایرکتوری رو مشخص کرد یا نه. (بعیده بشه)

شما می‌خواهید کرنل و ماژول‌های اون، توی یه مسیر دیگه قرار بگیرن. برای اینکار دو راه دارید،
۱- دستی خود کرنل و ماژول‌های کامپایل شده رو کپی کنید.
۲- با دادن آپشن‌های مناسب به make install و make modules_install، جایی که فایل‌ها کپی میشن رو تغییر بدید.

خواستید از chroot استفاده کنید، برای اینکه از chroot استفاده کنید، باید حداقل یه base system داشته باشید. همینجوری نمیشه. صفحه man مربوط به chroot رو ببینید تا بیشتر متوجه بشید.
با استفاده از debootstrap می‌تونید یه base system دبیان درست کنید. بعد کرنلی که کامپایل کردید رو توی اون base system نصب کنید (در اصل فایل‌های کامپایل شده رو کپی می‌کنید) بعد گراب رو تنظیم کنید که یه منو برای این base system ایجاد کنه. حتما لازم نیست گراب رو توی base system نصب کنید.
میدونید که زکات علم نشر آن است

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #19 : 23 آذر 1400، 11:31 ق‌ظ »

اگه کرنل برای معماری‌های دیگه هم کامپایل شده باشه، مسیر مثل بالا هست با این تفاوت که به جای x86_64، اسم اون معماری رو باید قرار بدید.
۱- تمامی رایانه ها ی شخصی و لب تاب ها از این معماری x86_64 استفاده می کنند؟
۲-  این معماری ارتباط مستقیم با کدام قطعه از کامپیوترمان دارد؟ یعنی با عوض کردن یکی از اینها در کامپیوتر نوع معماری هم احتمالا بایستی عوض بکنیم؟این معماری به cpu  و یا کارت گرافیک بستگی دارد؟

برای اینکه بتونید سیستم رو با اون کرنل بوت کنید، به یه initramfs هم نیاز دارید.
۳-فرآیند بوت شدن سیستم به  initramfs ربط دارد یا GRUB ؟ برای بوت شدن بایستی هر دو تایشان را نصب بکنم؟

۲- با دادن آپشن‌های مناسب به make install و make modules_install، جایی که فایل‌ها کپی میشن رو تغییر بدید.
۴-من می خواهم در dev/sdb1/ سیستمم را نصب کنم، آیا می توانید بگویید که چگونه مسیر نصب را به این مسیر تغییر بدهم؟

۵- در هنگام ایجاد پارتیش EFI System در نصب دبیان ، لازم بود که فرمت پارتیش FAT باشد،آیا هر پارتیشن بوتی بایستی فرمتش FAT باشد تا توسط بایوس شناخته شود؟ در این صورت در فلش مموری که من می خواهم در آن سیستم عامل نصب کنم آیا لازم است که حتما فرمتش را FAT بکنم؟ یا بایستی حتما برای اینکه فلش مموری قابلیت بوت شدن داشته باشد دو تا پارتیشن ایجاد کنم یکی با فرمت FAT برای پارتیشن boot  و دیگری با فرمت FAT یا EXT4 برای پارتیشن ریشه؟

۶- آیا لازم است طبق عکس یک ، برای بوت شدن فلش مموری گزینه یا گزینه هایی را در  قسمت flags فعال کنم؟

۷- بعد از فرمت فلش مموری ام، نام فلش مموری ام از dev/sdb/ تبدیل شد به  dev/sdb1/ ، آیا راهی وجود دارد که بتوان اسم آنرا دوباره به dev/sdb/ برگردانم؟

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5125
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #20 : 23 آذر 1400، 04:00 ب‌ظ »
۱- تقریبا همه پردازنده‌های اینتل و amd که توی ۲۰ سال گذشته ساخته شدند، از معماری x86 استفاده می‌کنند.
x86 به طور پیش‌فرض 16 بیتی هست ‌و توی همین حالت شروع به کار می‌کنه. ولی نسل‌های اول اون پردازنده‌هایی که توی لپ‌تاپ‌ها و کامپیوتر‌های شخصی استفاده شدند، اکثرا 32 بیتی بودند. x86_64 نسخه 64 بیتی معماری x86 هست.
معماری x86، بین نسخه‌های خودش سازگاری عقبرو داره؛ به این معنی که برنامه‌ای که قابلیت اجرا روی پردازنده 16 بیتی x86 داره، روی پردازنده 32 بیتی و 64 بیتی هم قابل اجراست. (کاری به کتابخانه‌ها و سیستم‌عامل ندارم.) ولی برعکسش صادق نیست، یعنی شما نمی‌تونید برنامه‌ای که برای نسخه 64 بیتی معماری x86 نوشته شده رو، روی یه پردازنده 32 با همین معماری اجرا کنید. (اگه بشه به همین راحتی نیست، احتمالا از بعضی قابلیت‌های برنامه هم نمی‌تونید استفاده کنید.)
amd بار اول پردازنده 64 بیتی با معماری x86 ساخت، به خاطر همین توی گنو/لینوکس و freebsd، به این معماری، amd64 هم گفته میشه. بعضی جاها به اسم x64 نیز شناخته میشه.
اکثر لپ‌تاپ، کامپیوتر‌ها و سرور‌ها، از پردازنده‌های x86_64 استفاده می‌کنند. (نسخه 32 بیتی دیگه زیاد استفاده نمیشه) البته این پردازنده‌های m1 جدید، که apple توی محصولات خودش استفاده می‌کنه، مبتنی بر arm64 یا همون aarch، نسخه 8.4a هست.
تلفن‌های همراه از پردازنده‌هایی با معماری خانواده‌های arm استفاده می‌کنند. دلیلش اینه که مصرف انرژی و تولید گرما پردازنده‌های با معماری خانواده arm، از پردازنده‌های با معماری x86، کمتره. (یه قائده کلی، معماری‌های risc انرژی کمتری نسبت به معماری‌های cisc مصرف می‌کنند. برای اطلاعات بیشتر، اینجا، اینجا و اینجا رو ببینید.)

اینتل و HP همراه هم، معماری ia64 رو برای جایگزینی x86 توی سرور توسعه دادند؛ اما تقریبا یه معماری شکست خورده هست و به جز بعضی پردازنده‌های سرور، جای دیگه‌ای استفاده نمیشه. (نمی‌دونم هنوز پردازنده‌هاش تولید میشن یا نه)

۲- پردازنده.
لازمه که پردازنده رو عوض کنید. چون چیپست مادربرد باید با پردازنده سازگار باشه، چیپست و بعضی قطعات مادربرد هم باید تعویض بشن، اما از اونجایی که این کار سخته و ارزش اقتصادی خاصی هم نداره، باید مادربرد و پردازنده عوض بشن. (پردازنده قسمت اصلیه)
نرم‌افزار‌ها رو هم باید عوض کنید. برنامه‌ای که برای معاری x86_64 کامپایل شده، روی پردازنده با معماری arm64 اجرا نمیشه.

۳- به هر دو.
برای بوت شدن، به initramfs نیاز دارید. معمولا یه بوتلودر هم استفاده میشه تا کرنل و initramfs رو بوت کنه. کرنل لینوکس این قابلیت رو داره تا مستقیم توی سیستم‌های efi بوت بشه. با دستور efibootmgr میشه متغییر‌های efi رو ویرایش کنید تا کرنل رو بوت کنید و محل initramfs رو هم از طریق خط فرمان کرنل مشخص کنید. خط فرمان کرنل چیزی شبیه bash نیست. همون آپشن‌هایی هست که به کرنل میدید و با منوی گراب می‌تونید تغییرش بدید. (با بوتلودر‌های دیگه هم میشه تغییرش داد.
خط فرمان کرنل رو میشه موقع بارگذاری کرنل تعیین کرد. میشه داخل initramfs هم قسمت‌هایی از خط فرمان کرنل رو مشخص کنید. برای دیدن خط فرمان کرنلی که الان در حال اجراست ، محتویات فایل cmdline توی دایرکتوری /proc/ رو ببینید. (میشه کرنل در حال اجرا رو با استفاده از kexec تغییر داد، بدون اینکه سیستم رو راه‌اندازی مجدد کرد)
cat /proc/cmdline
میشه کرنل، initramfs و خط فرمان کرنل رو با هم ترکیب کرد و یه efi image ساخت. میشه این efi image رو مستقیم توسط uefi بوت کرد. میشه از بوتلودر‌ها هم استفاده کرد. مزیت این روش این هست که میشه این فایل بدست اومده رو امضا کرد و با استفاده از secure boot مطمئن شد خط فرمان کرنل، خود کرنل و initramfs تغییری نکردن. اینکار مزیت امنیتی داره، مزیت خاص دیگه‌ای نداره. با دستور objcopy میشه این efi image رو ساخت. dracut هم این قابلیت رو داره.

برای اینکه یه efi image بسازید، باید efi stub مرتبط با معماری پردازنده رو داشته باشید. این فایل همراه systemd هست و توی سیستم‌هایی که از systemd استفاده می‌کنند، می‌تونید توی مسیر زیر پیداش کنید.
/lib/systemd/boot/efiاسمش اینجوری هست linuxARCH.efi.stub که به جای ARCH، معماری پردازنده قرار میگیره.
توی توزیع‌هایی که از systemd استفاده نمی‌کنند، معمولا یه بسته به اسم gummiboot هست که efi stub به همراه systemd boot داخلش وجود داره. در این حالت، معمولا فایل توی مسیر زیر پیدا میشه.
/lib/gummiboot
در صورتی که کامپیوتر از uefi پشتیبانی نکنه، باید از یه بوتلودر استفاده کنید تا کرنل و initramfs رو بوت کنه. کرنل برای اینکه توی master boot record جا بشه، خیلی بزرگه، حدود 6Mib؛ در حالی که maste boot record فقط اولین سکتور دیسک هست و بسته به دیسک، می‌تونه بین 512Kib تا 8Mib فضا داشته باشه. معمولا بین 512Kib تا 4Mib هست. بعضی ssd ها سکتور 8Mib داره ک اکثرا عمر و کیفیت پایینی دارند.
توی سیستم‌های legacy، می‌تونید از بوتلودر‌های گراب و syslinux استفاده کنید.
میدونید که زکات علم نشر آن است

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #21 : 23 آذر 1400، 07:55 ب‌ظ »
آقای Dragon- ،
خیلی زحمت کشیدید، از محبت هایتان بی نهایت سپاسگزارم .

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5125
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #22 : 26 آذر 1400، 03:02 ب‌ظ »
بقیه‌ش رو نگفتم. می‌خواستم توی یه ارسال دیگه بگم که قبلی خیلی طولانی نشه. (همینجوری طولانی هست)

۴- پیشنهاد نمی‌کنم که کرنل و ماژول‌های اون رو توی فلش نصب کنید و بعد سعی کنید همین سیستم رو با کرنل کامپایل شده بوت کنید، چون احتمالا باید یه لینک از جایی که ماژول‌ها هستند، به داخل دایرکتوری /lib/modules/ درست کنید، فایل fstab رو تغییر بدید تا فلش شما رو یه جا سوار کنه و initramfs رو هم درست تنظیم کنید تا:
۱- ماژول‌های موردنیاز برای بوت رو داخل خودش داشته باشه
۲- توی مراحل اولیه بوت، فلش شما رو سوار کنه تا کرنل به ماژول‌های خودش دسترسی داشته باشه تا اگه لازم شد، هر کدوم رو بارگذاری کنه.

به خاطر همین بهتره یه base system دبیان ایجاد کنید و کرنل کامپایل شده رو داخل اون قرار بدید.
اول یه پارتیشن فلش رو روی /mnt/ سوار کنید. اطلاعات روی پارتیشن رو انتقال بدید یه جای دیگه، تا پارتیشن خالی باشه.
بسته debootstrap رو نصب کنید تا بتونید باهاش، یه base system دبیان ایجاد کنید.
sudo apt install debootstrap
حالا با debootstrap کار رو شروع کنید.
sudo debootstrap bullseye /mntبه جای bullseye می‌تونید اسم چیزی که قراره نصب بشه رو قرار بدید. برای مثال، می‌تونید sid یا bookworm رو جایگزین bullseye کنید تا به ترتیب، دبیان ناپایدار یا دبیان ۱۲ نصب بشه. (دبیان ۱۲ توی حالت آزمایشی هست.) می‌تونید هم اسم‌های اوبونتو رو بذارید. focal برای اوبونتو 20.04 و بقیه اسم‌ها برای بقیه نسخه‌های اوبونتو/دبیان/devuan
به جای /mnt/ می‌تونید مسیری که قرار بسته‌ها نصب بشن رو قرار بدید.

به صورت اختیاری می‌تونید آینه‌ای که بسته‌ها از اون دریافت میشن رو تعیین کنید. در صورتی که آینه‌ای رو مشخص نکنید، به طور پیش‌فرض از http://deb.debian.org/debian استفاده میشه.

برای تعیین آینه، آدرس کامل به همراه پروتکل رو در انتهای دستور بنویسید. مثلا برای استفاده از آینه https://debian.hostiran.ir/debian اینجوری از دستور استفاده کنید.
sudo debootstrap bullseye /mnt https://debian.hostiran.ir/debianتوی مثال بالا، https پروتکل ارتباطی هست. برای اینکه ببینید چه پروتکل‌هایی پشتیبانی میشه، صفحه man مربوط به sources.list رو ببینید.
معمولا فایل‌ها توی روتِ وب‌سرور نیستند و باید دایرکتوری رو هم مشخص کنید، توی مثال بالا debian، توی اکثر آینه‌ها همین دایرکتوری هست.
debian.hostiran.ir، آدرس آینه هست، میشه مستقیم از ip هم استفاده کرد. در صورتی که پروتکل، file باشه، آدرس میشه مسیر یه دایرکتوری مثل این:
/srv/nfs/localmirrorبالاتر گفتم، man مربوط به sources.list رو ببینید.
برای دیدن یه لیست از آینه‌های دبیان، این صفحه از وبسایت دبیان رو ببینید.
من خودم از آینه https://a.docker-registry.ir/debian استفاده می‌کنم. مربوط به ابرآروان هست، سریع بروز میشه و داخلی هم هست به خاطر همین سرعت خوبی داره. از https هم پشتیبانی می‌کنه. توی وبسایت دبیان نیست، از یه جای دیگه پیداش کردم، درست یادم نیست کجا.

بعد از اینکه base system رو با debootstrap نصب کردید، سورس کرنل رو کپی کنید توی دایرکتوری زیر
/mnt/usr/srcمعمولا سورس‌ها رو اونجا قرار میدن. اگه خواستید، می‌تونید جای دیگه هم بذارید ولی ترجیحا توی فلش باشه تا آخر کار مجبور نباشید آپشن‌های make رو عوض کنید تا کرنل و ماژول‌هاش رو توی جای درست کپی کنه.

بعد از اینکه سورس کرنل رو توی جای درست گذاشتید، کامپایل رو آغاز کنید. کامپایل رو از طریق سیستم فعلی انجام بدید چون ابزار‌های مورد نیاز رو نصب کردید. می‌تونید هم توی chroot انجام بدید ولی اینجوری لازمه بسته‌های موردنیاز برای کامپایل رو توی chroot هم نصب کنید.

برای کامپایل، اول وارد دایرکتوری /mnt/usr/src/ بشید (یا اگه سورس کرنل رو جای دیگه گذاشتید، وارد اونجا بشید) بعد مثل قبل کانفیگ کرنل رو ایجاد کنید و دستور make رو بزنید. می‌تونید با آپشن j- تعیین کنید که چند  نخ (thread) برای اینکار استفاده بشه.
بهتره این عدد از تعداد هسته‌های پردازنده شما بیشتر نباشه و گرنه ممکنه load average شما برای مدت زیادی از تعداد نخ‌های پردازنده شما بیشتر بشه، رم پر بشه و سیستم کِرَش کنه.
(اگه وقت زیاد ندارید، از اینجا تا جایی که گفتم "الان که حسابی سرتون با چرت و پرت‌های من درد گرفت، برگردیم سر موضوع اصلی  ;D" رو رد کنید، زیاد به موضوع اصلی مرتبط نیستند اما خوندشون بد نیست)

اگه پردازنده از smt پشتیبانی می‌کنه و smt توی کرنل فعاله، می‌تونید عدد جلوی j- رو دو برابر کنید، برای اکثر پردازنده‌های اینتل و amd که اینطوره.
smt یه قابلیت هست که به پردازنده این امکان رو میده تا هر هسته، بتونه همزمان دوتا نخ رو اجرا کنه. برای اطلاعات بیشتر در این مورد، اینجا رو ببینید. به طور ساده و غیر دقیق یعنی مثلا پردازنده شما ۴ تا هسته داره ولی با این قابلیت، انگار ۸ تا هسته داره، که هر هسته می‌تونه در هر لحظه، یه نخ رو اجرا کنه.
البته smt می‌تونه توی بعضی پردازنده‌ها مشکل امنیتی درست کنه، عموما پردازنده‌های نسل ۶ و قبل‌تر اینتل (2016 و قبل‌تر) به این صورت که ممکنه نشت اطلاعات رخ بده.
این مشکل سخت‌افزاری هست و با نرم‌افزار یا آپدیت microcode های پردازنده رفع نمیشه، دو راه برای حلش هست، یا از smt استفاده نشه یا اینکه پردازنده رو عوض کنید. (تعمییر پردازنده نه اقتصادیه نه چیزی که بشه به همین راحتی انجامش داد. فکر نکنم حتی خود اینتل هم این رو به همین راحتی انجام بده)
برای غیرفعال کردن استفاده از smt، می‌تونید پارامتر nosmt رو موقع بوت شدن به کرنل بدید. ممکنه توی تنظیمات uefi یا bios راهی برای غیرفعال کردن  این باشه. برای کرنل در حال اجرا، میشه با نوشتن مقدار off یا forceoff (دومی رو با احتیاط استفاده کنید) توی فایل زیر، smt رو غیرفعال کرد. مشخصا این تغییر با راه‌اندازی مجدد از بین میره. راه اصلی رو بالاتر گفتم.
/sys/devices/system/cpu/smt/controlاینکه چجوری این نشت اطلاعات مشکل امنیتی حساب بشه، بستگی به برنامه و وضعیت سیستم داره، اما خیلی وقتا این مشکلی برای کامپیوتر‌های خانگی پیش نمیاره، بیشتر مربوط به سرور‌ها میشه، غیرفعال کردن smt کامپیوتر شما رو کند می‌کنه (چون انگار نصف هسته‌ها غیب شدن) پس بهتره حتی اگه این مشکل وجود داره، باز هم فعال بذاریدش.
برای اینکه ببینید این مشکل برای پردازنده شما هم هست یا نه، خروجی dmesg رو بررسی کنید. خودم همینجوری متوجه این موضوع شدم.
برای اطلاعات بیشتر، اینجا رو ببینید.
 
توی عکس‌های قبلی، دیدم که شما make رو همراه آپشن j12- اجرا کرده بودید. واقعا تعداد نخ‌های پردازنده شما اینقدره؟ اگه آره پس مشکلی نیست، در غیراینصورت ممکنه اتفاقی که بالاتر گفتم، پیش بیاد. (زیاد شدن load average )
دستور nproc میگه که شما چنتا نخ دارید. توی گنو/لینوکس، هر نخ، یه پردازنده به حساب میاد پس اگه چیزی تعداد پردازنده‌های شما رو ۸ گزارش کرد، در حالی که فقط یکی داشتید، تعجب نکنید.

الان که حسابی سرتون با چرت و پرت‌های من درد گرفت، برگردیم سر موضوع اصلی  ;D

کانفیگ  کرنل رو ایجاد کردید، حالا توی همین سیستم که هستید، make -j$(nproc) رو بزنید تا کرنل شروع به کامپایل بشه. بعد هم دستور زیر رو بزنید تا ماژول‌ها کامپایل بشن
make -j$(nproc) modulesحواستون باشه توی دستور بالا، اشتباهی modules_install رو وارد نکنید، چون باعث میشه ماژول‌ها علاوه بر کامپایل شدن، توی سیستم فعلی نصب بشن که ما نمی‌خواهیم، می‌خواهیم توی base system نصب بشن.

حالا که کامپایل خود کرنل و ماژول‌های اون به اتمام رسید، وقت نصب کرنل هست. (این مرحله در اصل یه مشت ماژول به همراه خود کرنل رو کپی می‌کنه توی جای درست، بعدش هم یه depmod اجرا می‌کنه تا cache مربوط به ماژول‌ها درست بشه. همین)

برای نصب، اول فایل‌سیستم‌های مجازی رو سوار کنید. (فکر نکنم الان بهشون نیازی باشه ولی بودنشون مشکل درست نمی‌کنه)
for i in dev dev/pts sys proc; do
sudo mount -B /$i /mnt/$i
done
حلقه بالا کار رو راحت‌تر می‌کنه. معادل این هست که دستورات پایین رو اجرا کرد
sudo mount -B /dev /mnt/dev
sudo mount -B /dev/pts /mnt/dev/pts
sudo mount -B /sys /mnt/sys
sudo mount -B /proc /mnt/proc
همونطور که می‌بینید، دستورات خیلی شبیه هم، و تکراری هستند. به خاطر همین میشه با یه حلقه کار رو راحت‌تر کرد تا کمتر لازم باشه تایپ کنید.

الان با chroot، وارد base system بشید.
sudo chroot /mnt
توی base system برید داخل جایی که سورس کرنل رو ذخیره کرده بودید و دستورات make install و make modules_install رو بزنید تا به ترتیب کرنل و ماژول‌هاش توی جای درست کپی بشن.

الان شما با موفقیت base system رو همراه کرنل شخصی‌سازی شده خودتون نصب کردید، اما هنوز کار تموم نشده. لیست مخازن رو بروزرسانی کنید و بسته‌های locales و console-setup رو نصب کنید.
apt install locales console-setupتوی منویی که از شما سوال می‌پرسه، utf8 و EN رو انتخاب کنید.
الان منطقه زمانی و locales رو تنظیم کنید.
dpkg-reconfigure tzdata localestzdata رو قبلا دید پس می‌دونید چجوری هست. برای locales، ترجیحا یه چیزی انتخاب کنید که utf8 و انگلیسی باشه.

فایل fstab رو تنظیم کنید. یه همچین چیزی کافی هست تا روت سوار بشه. ولی برای استفاده طولانی بهتره که نوع فایل‌سیستم مشخص بشه، آپشن‌ها بیشتر تنظیم بشن و بررسی fsck هم فعال بشه.
/dev/sdb1      /      auto      rw,defaults      0   0اگه چیز خاصی مد نظر شما هست، توی fstab تنظیم کنید. حواستون باشه به جای sdb1، پارتیشن درست رو قرار بدید، فلش دیگه‌ای رو هم موقع بوت به کامپیوتر وصل نکنید تا نام گذاری کرنل عوض نشه. اگه از uuid یا partuuid استفاده کنید بهتره.
ESP (همون پارتیشن EFI SYSTEM) رو توی fstab تعریف نکردیم، چون توی این شرایط، حتما لازمش نداریم. اگه می‌خواهید، خودتون تنظیمش کنید.

فایل mtab رو ایجاد کنید.
ln -s /proc/self/mounts /etc/mtabامتحان کنید که دستور mount چی میگه،اگه خطا نداد، این مرحله رو درست انجام دادید.

با passwd یه رمز برای روت بذارید. (گذاشتن رمز برای روت مناسب نیست، ولی الان برای اهداف آزمایشی/آموزشی نباید مشکل درست کنه.)

اگه خواستید، یه hostname برای این سیستم بذارید. مثلا custom-kernel  یا هرچیز دیگه. فقط فاصله نداشته و شامل کاراکتر‌های a-zA-Z0-9 و علامت‌های - یا _ باشه. پیش‌فرض debian هست.
echo "custom-kernel" > /etc/hostname
فایل hosts رو هم تنظیم کنید.
echo "custom-kernel      127.0.1.1" >> /etc/hostsبه‌جای custom-kernel  مقدار hostname رو بذارید. توی شرکت یا جایی که کامپیوتر‌های زیادی هست، باید hostname و تنظیمات فایل hosts به دقت و با توجه به تنظیمات شبکه انجام بشه اما از اونجایی که توی خانه هستید و فکر نکنم تعداد زیادی کامپیوتر توی شبکه وجود داشته باشه، فعلا لازم نیست ملاحظه خاصی در نظر بگیرید. اگه تعداد کامپیوتر‌ها بیشتر از یکی هست، حواستون باشه hostname دو کامپیوتر یکی نباشه، همین کافیه.

گراب و یه initramfs system نصب کنید. بهتره برای initramfs system، از initramfs-tools که پیش‌فرض دبیان هست، استفاده کنید. dracut هم هست.
apt install grub-efi initramds-toolsبسته grub-efi، با توجه به معماری پردازنده فعلی، بسته گراب مرتبط رو نصب می‌کنه، در این حالت، grub-efi-amd64
اگه کامپیوتر توی حالت legacy بوت میشه، بسته grub-pc رو نصب کنید.

initramfs رو ایجاد کنید.
update-initramfs -c -k allدر صورتی که dracut رو نصب کردید، دستور dracut -f رو جایگزین بالایی کنید.

تنظیمات گراب رو بروزرسانی کنید.
update-grubولی گراب رو با grub-install، روی ESP نصب نکنید. همین الان، گراب روی ESP نصب شده، لازم نیست یه بار دیگه نصبش کنید.

از chroot خارج بشید.
exit
فایل‌سیستم‌هایی که قبلا سوار کردید رو unmount کنید
sudo umount -R /mntآپشن R- برای این هست که هر فایل‌سیستمی که زیر /mnt/ سوار شده هم unmount بشه. در اصل R- باعث میشه که عملیات unmount به طور بازگشتی انجام بشه، مثل ls -R یا grep -r یا بقیه دستورات که آپشنی برای انجام کار‌ها به صورت بازگشتی دارند.
اگه R- رو مشخص نمی‌کردید، باید همه تین دستورات رو به ترتیب می‌زدید.
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt
همونطور که می‌بینید، میشه از یه حلقه هم استفاده کرد
از xargs و خیلی چیز‌های دیگه هم میشه استفاده کرد، کلا راه زیاد دارید.

مطمئن بشید که بسته os-prober نصب هست.
apt list os-proberاگه نبود نصبش کنید.
sudo apt install os-prober
الان تنظیمات گراب رو توی سیستم اصلی بروزرسانی کنید و ببینید توی خروجی، سیستمی که نصب کردید شناسایی میشه یا نه.
sudo update-grubاگه شناسایی شده بود، کامپیوتر رو راه‌اندازی مجدد کنید و توی منوی گراب، سیستم نصب شده رو انتخاب کنید.

اگه فلش از استاندارد usb3 پشتیبانی نمی‌کنه، چیز‌های زیادی روی فلش نصب نکنید، مخصوصا محیط گرافیکی چون عملکرد خیلی کندی می‌گیرید. اگه فلش usb3 هست، اون رو به یه درگاه usb3 یا بالاتر وصل کنید تا سرعت درست بگیرید، در غیر اینصورت سرعت usb2 یا حتی ممکنه usb1 بگیرید.
میدونید که زکات علم نشر آن است

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #23 : 26 آذر 1400، 07:58 ب‌ظ »
؟!

آفلاین آرمان اسماعیلی

  • High Hero Member
  • *
  • ارسال: 2366
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #24 : 26 آذر 1400، 09:10 ب‌ظ »
بقیه‌ش رو نگفتم. می‌خواستم توی یه ارسال دیگه بگم که قبلی خیلی طولانی نشه. (همینجوری طولانی هست)
تازه قرار بوده طولانی هم نباشه؟؟ هر کدوم ارسال‌های شما واسه خودش پتانسیل اینو داره که یه صفحه ویکی بشه!
صفحه‌ی من در اینستاگرام: ‎‎@armanes92

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5125
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #25 : 27 آذر 1400، 10:01 ق‌ظ »
؟!
یه جایی به مشکل خورده. همون دستوری که پایین نوشته رو اجرا کنید و دوباره همون debootstrap قبلی رو بزنید ببینید چی میشه. اگه درست نشد، همه فایل‌های داخل فلش رو پاک کنید و دوباره سعی کنید.
یه چیزی که دیدم این هست که اگه اتصال به مخازن زیاد قطع و وصل بشه، debootstrap به مشکل می‌خوره؛ مخزن http://deb.debian.org/debian بعضی وقتا زیاد قطع و وصل میشه (احتمالا به خاطر اینترنت ایران و فاصله مکانی از اینجا) به خاطر همین بهتره از یه آینه استفاده کنید که نزدیک‌تر باشه.

تازه قرار بوده طولانی هم نباشه؟؟ هر کدوم ارسال‌های شما واسه خودش پتانسیل اینو داره که یه صفحه ویکی بشه!
تا حالا سعی کردم اینها رو ویکی کنم ولی کار با ویکی انجمن وضح نیست، اگه یه چنتا دکمه مثل اینجا داشت، میشد باهاش کارد. مثلا لازمه که یه چیزی به عنوان دستور/کد نمایش داده بشه، چنین دکمه‌ای نیست، باید رفت توی یه موضوع دیگه که دستور/کد داره، ویرایش رو بزنی تا متنش نمایش داده بشه و از اونجا بفهمی باید چی بنویسی. کلا کار باهاش راحت نیست.
« آخرین ویرایش: 27 آذر 1400، 06:21 ب‌ظ توسط Dragon- »
میدونید که زکات علم نشر آن است

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5125
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر
« پاسخ #26 : 04 دی 1400، 08:17 ب‌ظ »
۵- در هنگام ایجاد پارتیش EFI System در نصب دبیان ، لازم بود که فرمت پارتیش FAT باشد،آیا هر پارتیشن بوتی بایستی فرمتش FAT باشد تا توسط بایوس شناخته شود؟ در این صورت در فلش مموری که من می خواهم در آن سیستم عامل نصب کنم آیا لازم است که حتما فرمتش را FAT بکنم؟ یا بایستی حتما برای اینکه فلش مموری قابلیت بوت شدن داشته باشد دو تا پارتیشن ایجاد کنم یکی با فرمت FAT برای پارتیشن boot  و دیگری با فرمت FAT یا EXT4 برای پارتیشن ریشه؟

۶- آیا لازم است طبق عکس یک ، برای بوت شدن فلش مموری گزینه یا گزینه هایی را در  قسمت flags فعال کنم؟

۷- بعد از فرمت فلش مموری ام، نام فلش مموری ام از dev/sdb/ تبدیل شد به  dev/sdb1/ ، آیا راهی وجود دارد که بتوان اسم آنرا دوباره به dev/sdb/ برگردانم؟

۵- fat جز مشخصات uefi هست و توی پیاده‌سازی‌های مختلف، uefi باید بتونه پارتیشن با فرمت fat32 و fat16 رو بخونه. )ممکنه بعضی مادربرد‌هت با fat16 مشکل داشته باشند.) در مورد fat12 چیزی نمی‌دونم.
اینکه uefi از چه فایل‌سیستم‌هایی پشتیبانی کنه، بستگی به سازنده داره‌. fat32 همونطور که گفتم، باید پشتیبانی بشه، ممکنه سازنده مادربرد تصمیم بگیره که بقیه فایل‌سیستم‌ها رو هم پشتیبانی کنه. مثلا efi مادربرد‌های apple، از فایل‌سیستم +hpfs و جدیدا apfs پشتیبانی می‌کنند. (هر دو انحصاری apple هستند)
لازم نیست اصلا /boot/ رو جدا کنید. اون ESP هست که باید جدا باشه. بسته به شرایط، ممکنه ESP همون پارتیشن /boot/ باشه.

۶- توی parted، و ابزار‌هایی که از اون استفاده می‌کنند مثل gparted، پرچم‌های boot و esp رو فعال کنید. فکر کنم esp یه اسم دیگه برای boot باشه. این در حالتی هست که پارتیشن‌تیبل، gpt باشه. در مورد dos مطمئن نیستم.
توی gdisk، نوع پارتیشن رو باید برابر EF00 قرار بدید. توی fdisk، باید برابر EFI system باشه.
در حالت کلی با پارتیشن‌تیبل gpt، باید ESP یه guid برابر مقدار زیر داشته باشه.
C12A7328-F81F-11D2-BA4B-00A0C93EC93Bبا فعال کردن پرچم‌های درست توی parted یا تنظیم درستِ نوعِ پارتیشن توی fdisk و gdisk، مقدار guid پارتیشن مربوط، برابر مقدار بالایی که قرار دادم میشه.

۷- پارتیشن ایجاد کردید، به خاطر همین با sdb1 مشخص شده. می‌تونید پارتیشن رو پاک کنید و مسقیما فایل‌سیستم رو روی کل فلش بسازید اما اینجوری، فکر نکنم بتونید اندازه اون فایل‌سیستم ایجاد شده رو تغییر بدید.
میدونید که زکات علم نشر آن است

آفلاین norouzi90

  • Hero Member
  • *
  • ارسال: 767
  • جنسیت : پسر
  • Linux Mint
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #27 : 05 دی 1400، 09:39 ب‌ظ »
البته چندین روز بر روی این پروژه مانند کار کرده بودم، چون بیش از اندازه برایم سخت بود، آنرا کنار گذاشته بودم.
نمی دانم شاید بعدها دوباره سعی کنم.
ولی چند مطلب بود که حیفم آمد در اینجا به آنها اشاره ای نکنم، شاید بدرد یکی بخورد.


۱- کرنل لینوکس به تنهایی به هیچ دردی نمی خورد، حتی به تنهایی قادر به انجام دستوراتی مانند copy و paste و mkdir و mv و ls و ... و خلاصه هر چیزی را که فکرش را بکنید،نیست . برای اینکه این دستورات را بشود بعد از نصب  کرنل لینوکس  استفاده کرد به busybox نیازمندیم.تنها کافیست در ترمینال تایپ کنید :

busybox --listتا به اهمیت این عنصر حیاتی در توزیع های گنو/لینوکس پی ببرید.
سیستم لینوکس در مینیمال ترین حالتش که حداقل به یک چیزی شبیه باشد و لااقل بهش بگوییم مثلا یک لیستی بگیرد( فرمان ls ) و ... بایستی هم کرنل را نصب کنیم و هم busybox را .

۲- من یک اشتباه مهلکی را انجام دادم و این اشتباه باعث شد کل سیستمم به فنا برود. در سالهای خیلی پیش که داشتم رایانه کار درجه دو را در یک آموزشگاهی می خواندم،
مربی امان یک مطلب جالب و مهمی از ما پرسید. ایشان پرسید آیا مثلا این نرم افزار word ای که دارید باهاش کار می کنید مهم است یا داده هایی که بوسیله آن ایجاد کرده اید؟ خوب همه ما گفتیم این نرم افزار word .  البته ایشان در همانجا به ما توضیح دادند و ما را متوجه اشتباهمان کردند.
این داده هایی که ما داریم شاید ماحصل چندین ساعت یا روز یا ماه ما باشد ولی این نرم افزار فرضا اگر هم حذف شود به راحتی قابل نصب می باشد.
در سیستم من چه اتفاقی افتاد؟ تمام داده های پارتیشن های دیگرم رفت روی هوا و تنها پارتیشن ریشه و هوم برایم باقی ماند. اطلاعات اساسی ام در پارتیشن های دیگرم بودند و همگی آنها هیچ شدند.
تا آن زمان تنها فکر می کردم اگر ما بر روی پارتیش ریشه دچار اشتباه بشویم، فوقش سیستم عاملمان خراب می شود، مشکلی نیست یا از timeshift کمک بگیر و یا دوباره سیستم عامل را از نو نصبش کن ولی آن طرف قضیه را ندیده بودم.
من پکیج کرنل را در /mnt/ ، از حالت فشرده خارج کردم ، بعد که کارهایم را انجام دادم ، خواستم که آنها را حذف کنم. سیستم را مجبور کردم که هر چیزی در این
پوشه /mnt/ است را حذف کند و الی ماشاءالله.


آفلاین behzad121

  • High Sr. Member
  • *
  • ارسال: 510
  • جنسیت : پسر
  • آرچ + گنوم
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #28 : 05 دی 1400، 09:44 ب‌ظ »
۱- کرنل لینوکس به تنهایی به هیچ دردی نمی خورد، حتی به تنهایی قادر به انجام دستوراتی مانند copy و paste و mkdir و mv و ls و ... و خلاصه هر چیزی را که فکرش را بکنید،نیست . برای اینکه این دستورات را بشود بعد از نصب  کرنل لینوکس  استفاده کرد به busybox نیازمندیم.تنها کافیست در ترمینال تایپ کنید :
به جای busybox، بهتره از بسته coreutils استفاده بشه که استانداردتره. busybox این دستورات رو تو یک فایل ادغام کرده و مثلا دستورات رو به busybox لینک میده.
دیگه زیاد اینجا نیستم و بیشتر تو گروه‌های گنو/لینوکسی تلگرام کمک می‌کنم، دور از هیچ اذیت و حواشی. تلگرام: behdev@

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 5125
  • جنسیت : پسر
پاسخ : نصب کرنل لینوکس از صفر (بسته شد)
« پاسخ #29 : 05 دی 1400، 10:15 ب‌ظ »
من پکیج کرنل را در /mnt/ ، از حالت فشرده خارج کردم ، بعد که کارهایم را انجام دادم ، خواستم که آنها را حذف کنم. سیستم را مجبور کردم که هر چیزی در این
پوشه /mnt/ است را حذف کند و الی ماشاءالله.
مگه بقیه فایل‌سیستم‌ها رو زیر /mnt/ سوار کرده بودید که اینجوری شد؟ یعنی پارتیشن‌هایی که اطلاعات داخلش بود رو، زیر /mnt/ سوار کردید و بعد اشتباهی با rm کل محتویات /mnt/ رو پاک کردید؟
میدونید که زکات علم نشر آن است