#!/bin/bash set -e echo "🚀 Bắt đầu quá trình xây dựng Linh Hương Linux OS (Core)..." # Thư mục làm việc WORK_DIR="/workspace/work" OUTPUT_DIR="/workspace/output" ROOTFS_DIR="${WORK_DIR}/rootfs" ISO_DIR="${WORK_DIR}/iso" # Xóa rác cũ (nếu có) rm -rf ${WORK_DIR}/iso ${ROOTFS_DIR} mkdir -p ${ROOTFS_DIR} ${OUTPUT_DIR} ${ISO_DIR}/casper ${ISO_DIR}/boot/grub # Link tải Ubuntu Base 26.04 (hoặc bạn có thể đổi thành 24.04 nếu link 26.04 gặp lỗi 404) UBUNTU_BASE_URL="https://cdimage.ubuntu.com/ubuntu-base/releases/26.04/release/ubuntu-base-26.04-base-amd64.tar.gz" TAR_FILE="ubuntu-base-amd64.tar.gz" echo "📥 Đang tải Ubuntu Base Core..." if [ ! -f "${WORK_DIR}/${TAR_FILE}" ]; then wget -q --show-progress -O "${WORK_DIR}/${TAR_FILE}" "${UBUNTU_BASE_URL}" else echo "✅ Đã tìm thấy bộ nhớ đệm, bỏ qua tải xuống." fi echo "📦 Đang giải nén RootFS..." tar -xzf "${WORK_DIR}/${TAR_FILE}" -C "${ROOTFS_DIR}" echo "🔧 Đang cấu hình lõi hệ thống (Chroot)..." # Mount các thiết bị ảo để chroot có thể tương tác với phần cứng lúc build mount --bind /dev ${ROOTFS_DIR}/dev mount -t proc /proc ${ROOTFS_DIR}/proc mount -t sysfs /sys ${ROOTFS_DIR}/sys # Inject DNS để chroot có mạng tải gói cp /etc/resolv.conf ${ROOTFS_DIR}/etc/resolv.conf # === BẮT ĐẦU CHROOT === # Tại đây, chúng ta cài Kernel, Systemd, và Casper (công cụ quan trọng để boot file ISO) chroot ${ROOTFS_DIR} /bin/bash -c " export DEBIAN_FRONTEND=noninteractive # Cập nhật danh sách gói apt-get update # Cài đặt các gói cốt lõi để khởi động # casper là thành phần bắt buộc để Linux hiểu đây là một đĩa Live CD apt-get install -y linux-image-generic systemd-sysv casper sudo nano curl iputils-ping net-tools # Xóa rác để file ISO nhẹ nhất có thể apt-get clean rm -rf /var/lib/apt/lists/* " # === KẾT THÚC CHROOT === # Cleanup mount umount ${ROOTFS_DIR}/dev umount ${ROOTFS_DIR}/proc umount ${ROOTFS_DIR}/sys echo "🗜️ Đang nén file hệ thống (SquashFS)..." # Copy Kernel ra ngoài để GRUB có thể thấy cp ${ROOTFS_DIR}/boot/vmlinuz-* ${ISO_DIR}/casper/vmlinuz cp ${ROOTFS_DIR}/boot/initrd.img-* ${ISO_DIR}/casper/initrd # Nén hệ điều hành thành file filesystem.squashfs mksquashfs ${ROOTFS_DIR} ${ISO_DIR}/casper/filesystem.squashfs -noappend -comp xz echo "⚙️ Đang cấu hình Bootloader (GRUB)..." cat << 'EOF' > ${ISO_DIR}/boot/grub/grub.cfg set default=0 set timeout=5 menuentry "Linh Huong Linux (Terminal Mode)" { linux /casper/vmlinuz boot=casper quiet splash --- initrd /casper/initrd } EOF echo "💿 Đang tạo file ISO..." # Lệnh này sẽ sinh ra file ISO boot được grub-mkrescue -o "${OUTPUT_DIR}/linhhuong-linux-amd64.iso" ${ISO_DIR} echo "✅ Hoàn tất! File ISO đã được lưu tại thư mục output/linhhuong-linux-amd64.iso"