linhhuonglinux-os / scripts /build_iso.sh
tamhonvotri's picture
Upload folder using huggingface_hub
79847e7 verified
#!/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"