0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng dẫn chi tiết tạo bản phân phối Linux từ Windows CMD

Đăng vào 3 tuần trước

• 2 phút đọc

1. Tổng quan

Bài viết này sẽ hướng dẫn bạn cách tạo một bản phân phối Linux cho kiến trúc x86. Quá trình này có ba phần quan trọng:

  • Kernel (Nhân hệ điều hành)
  • User Space (Không gian người dùng, sẽ sử dụng Busy Box)
  • Boot Loader (Trình khởi động, ở đây là Syslinux)

Quá trình khởi động sẽ diễn ra theo các giai đoạn:

Boot → Kernel → User Space

2. Chuẩn bị môi trường

Để thực hiện việc này, bạn cần cài đặt một số công cụ sau:

Cài đặt Docker Desktop

Đầu tiên, hãy cài đặt Docker Desktop để đảm bảo môi trường build nhất quán:

Docker Desktop

Cài đặt QEMU

Tiếp theo, cài đặt QEMU để có thể chạy thử sản phẩm trên một máy ảo x86:

Download QEMU

3. Quy trình xây dựng bản phân phối

Mở cửa sổ CMD của Windows và khởi động Docker Desktop. Sau đó, bạn có thể bắt đầu quy trình build:

bash Copy
$ docker run --privileged -it ubuntu

Tiến hành cập nhật và cài đặt các gói cần thiết:

bash Copy
$ apt update
$ apt install bzip2 git vim make gcc libncurses-dev flex bison bc cpio libelf-dev libssl-dev syslinux dosfstools

Tạo Image cho Kernel

  • Clone mã nguồn Linux:
bash Copy
$ git clone --depth 1 https://github.com/torvalds/linux.git
$ cd linux/
  • Cấu hình Kernel:
bash Copy
$ make menuconfig
  • Chọn Exit và xác nhận với Yes. Sau đó, biên dịch Kernel:
bash Copy
$ make -j 8
  • Lưu Image Kernel:
bash Copy
$ mkdir /boot-files
$ cp arch/x86/boot/bzImage /boot-files
$ cd ..

Tạo initramfs

  • Clone mã nguồn BusyBox:
bash Copy
$ git clone --depth 1 https://git.busybox.net/busybox
$ cd busybox
  • Cấu hình BusyBox:
bash Copy
$ make menuconfig
  • Tìm đến mục Build static binary (no shared libs) và chọn Y. Sau đó chọn Exit và lưu lại. Biên dịch BusyBox:
bash Copy
$ make -j 8
  • Nếu gặp lỗi build fail, hãy sửa lại mã nguồn theo patch sau patch link và chạy lại lệnh make -j 8.
  • Lưu initramfs:
bash Copy
$ mkdir /boot-files/initramfs
$ make CONFIG_PREFIX=/boot-files/initramfs install

Tạo tệp init

  • Di chuyển vào thư mục initramfs:
bash Copy
$ cd /boot-files/initramfs/
$ vim init
  • Thêm đoạn mã sau vào tệp init:
bash Copy
#!/bin/sh
/bin/sh
  • Lưu và thoát. Xoá tệp linuxrc và thay đổi quyền cho tệp init:
bash Copy
$ rm linuxrc
$ chmod +x init
  • Lưu lại initramfs:
bash Copy
$ find . | cpio -o -H newc > ../init.cpio
$ cd ..

Tạo Bootloader

Cài đặt Syslinux:

bash Copy
$ apt install syslinux
  • Tạo vùng chứa bootloader, kernel, và initramfs:
bash Copy
$ dd if=/dev/zero of=boot bs=1M count=50
  • Định dạng filesystem để Syslinux hỗ trợ:
bash Copy
$ apt install dosfstools
$ mkfs -t fat boot
$ syslinux boot
$ mkdir m
$ mount boot m
$ cp bzImage init.cpio m
$ umount m

4. Quá trình khởi động

Mở một tab CMD mới để thực hiện các bước sau:

Sao chép dữ liệu từ Docker về máy Windows

bash Copy
$ docker ps -a
  • Lấy ID của Docker mà bạn vừa sử dụng để build:
bash Copy
$ docker cp dockerid:/boot-files/boot .
  • Thử nghiệm với QEMU:
bash Copy
$ qemu-system-x86_64 boot

Khởi động Kernel và Initramfs

Khi giả lập hiển thị, bạn sẽ thấy chương trình bootloader cho x86. Nhập lệnh sau để chọn Kernel và Initramfs:

bash Copy
$ /bzImage -initrd=/init.cpio
  • Nhấn Enter và tận hưởng thành quả của bạn!

5. Kết quả

Nếu mọi thứ diễn ra suôn sẻ, bạn sẽ thấy một hệ điều hành Linux hoạt động trên máy ảo x86 của mình. Chúc mừng bạn đã hoàn tất quá trình tạo bản phân phối Linux thành công!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào