| #!/bin/bash |
| set -e |
|
|
| echo "🚀 Bắt đầu quá trình xây dựng Linh Hương Linux OS (Core)..." |
|
|
| |
| WORK_DIR="/workspace/work" |
| OUTPUT_DIR="/workspace/output" |
| ROOTFS_DIR="${WORK_DIR}/rootfs" |
| ISO_DIR="${WORK_DIR}/iso" |
|
|
| |
| rm -rf ${WORK_DIR}/iso ${ROOTFS_DIR} |
| mkdir -p ${ROOTFS_DIR} ${OUTPUT_DIR} ${ISO_DIR}/casper ${ISO_DIR}/boot/grub |
|
|
| |
| 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 --bind /dev ${ROOTFS_DIR}/dev |
| mount -t proc /proc ${ROOTFS_DIR}/proc |
| mount -t sysfs /sys ${ROOTFS_DIR}/sys |
|
|
| |
| cp /etc/resolv.conf ${ROOTFS_DIR}/etc/resolv.conf |
|
|
| |
| |
| 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/* |
| " |
| |
|
|
| |
| umount ${ROOTFS_DIR}/dev |
| umount ${ROOTFS_DIR}/proc |
| umount ${ROOTFS_DIR}/sys |
|
|
| echo "🗜️ Đang nén file hệ thống (SquashFS)..." |
| |
| cp ${ROOTFS_DIR}/boot/vmlinuz-* ${ISO_DIR}/casper/vmlinuz |
| cp ${ROOTFS_DIR}/boot/initrd.img-* ${ISO_DIR}/casper/initrd |
|
|
| |
| 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..." |
| |
| 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" |
|
|