فقط برای سرگرمی!
قرار بود امروز درمورد ساختار توزیع های گنو/لینوکسی و سیستمعامل گنو توی دانشگاه صحبت کنم.
متاسفانه وقت نشد و ارائه من افتاد برای هفته بعدی... توی این پست از بلاگم میخوام صحبت کنم که چطور میشه یک توزیع مینیمال رو با ترکیب کرنل و بیزیباکس بیلد کرد.
شروع به کار
خب برای شروع باید یک مشت پیشنیاز رو نصب کنیم. روی دبیان بیسا باید این ها رو نصب کنید:
sudo apt install -y build-essential libncurses-dev libelf-dev libssl-dev qemu-system-x86
و روی آرچ بیسا باید اینارو نصب کنید:
sudo pacman -S bc base-devel git ncurses qemu-system-x86
و الان باید بریم برای دریافت سورسها و شروع به کار.
دریافت سورسها
برای دریافت سورس کرنل میتونید از وبگاه kernel.org استفاده کنید. من اینجا از نسخه 6.17.7 استفاده کردم:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.17.7.tar.xz
tar -xvf linux-6.17.7.tar.xz
و برای بیزیباکس:
wget https://github.com/mirror/busybox/archive/refs/tags/1_36_0.tar.gz
tar -xvzf 1_36_0.tar.gz
کامپایل کرنل
cd linux-6.17.7
make defconfig
make menuconfig
توی menuconfig باید چندتا چیز رو فعال کنید:
- General setup → Initial RAM filesystem support
- مطمئن بشید 64-bit kernel فعاله
- Device Drivers → Generic Driver Options → devtmpfs و Automount devtmpfs at /dev
بعدش کامپایل میکنیم:
make -j$(nproc) bzImage
cp arch/x86_64/boot/bzImage ../
cd ..
کامپایل بیزیباکس
cd busybox-1_36_0
make menuconfig
توی Settings باید "Build static binary" رو فعال کنید.
make -j$(nproc)
make install
cd ..
نکته! اگر در کامپایل و نصب بیزیباکس با خطای نتورک مواجه شدید کافیه برید و کلاً تیک تمامی بخش های مربوط به نتورک رو بردارید.
ساخت Initramfs
mkdir initramfs
mkdir -p initramfs/{bin,sbin,etc,proc,sys,dev,usr/bin,usr/sbin}
cp -a busybox-1_36_0/_install/* ./initramfs/
حالا باید اسکریپت init رو بنویسیم:
cat > initramfs/init << 'EOF'
#!/bin/sh
mount -t devtmpfs devtmpfs /dev
mount -t proc none /proc
mount -t sysfs none /sys
cat <<!
Welcome to Micro Linux!
Boot took $(cut -d' ' -f1 /proc/uptime) seconds
!
exec /bin/sh
EOF
chmod +x initramfs/init
و در آخر آرشیو رو میسازیم:
cd initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz
cd ..
اجرا
qemu-system-x86_64 -kernel bzImage -initrd initramfs.cpio.gz -nographic -append "console=ttyS0"
برای خروج: Ctrl+A و بعد X
جمعبندی
خب همین. یک لینوکس مینیمال با کرنل + بیزیباکس که توی چند ثانیه بوت میشه و کمتر از 10 مگ حجم داره.
امیدوارم واسه ارائه هفته بعد وقت بشه و بتونم درمورد جزئیات بیشتری صحبت کنم.
کامنتها
نظر خودتان را بنویسید! با هر حساب متصل به فدیورس میتوانید نظر خود را بنویسید (مانند ماستودون)
بارگیری کامنتها...