File size: 3,019 Bytes
79847e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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"