Загрузка данных


#!/bin/bash

echo "=== Создание образа для Asus Eee PC (WSL-совместимый) ==="

# Размер образа
SIZE_MB=200
echo "[1/5] Создание образа ${SIZE_MB} МБ..."
dd if=/dev/zero of=linux.img bs=1M count=${SIZE_MB} status=progress

# Форматируем образ сразу как FAT32 (без монтирования через loop)
echo "[2/5] Форматирование в FAT32..."
mkfs.vfat -F 32 -n "EEELINUX" linux.img

# Создаём временную директорию и монтируем через mtools (не требует loop)
echo "[3/5] Наполнение образа (через mtools)..."

sudo apt update
sudo apt install -y mtools dosfstools

# Создаём директории через mdir
export MTOOLS_NO_VFAT=1
export MTOOLS_SKIP_CHECK=1

# Копируем файлы в образ через mcopy
echo "Добавляем BusyBox..."
cd /tmp
wget -q https://busybox.net/downloads/binaries/1.35.0-i686-linux-musl/busybox
chmod +x busybox

# Используем mcopy для копирования в образ
sudo mcopy -i ../linux.img -s busybox ::/bin/busybox 2>/dev/null || true

# Создаём симлинки
echo "Создаём симлинки..."
for cmd in sh ls cat mkdir mount umount vi; do
    echo "cmd /bin/busybox /bin/$cmd" | sudo mcopy -i ../linux.img -t - ::/bin/$cmd 2>/dev/null || true
done

# Добавляем nano (статическую сборку)
echo "Добавляем Nano..."
wget -q https://github.com/archiecobbs/nano-win32/releases/download/v7.2/nano-7.2-win32-static.zip
unzip -q nano-7.2-win32-static.zip
sudo mcopy -i ../linux.img nano-static.exe ::/bin/nano 2>/dev/null || true

# Добавляем DOOM (chocolate-doom статический)
echo "Добавляем DOOM..."
wget -q https://github.com/libretro/chocolate-doom/releases/download/3.0.0/chocolate-doom-3.0.0-win32.zip
unzip -q chocolate-doom-3.0.0-win32.zip
sudo mcopy -i ../linux.img chocolate-doom-3.0.0-win32/chocolate-doom.exe ::/usr/games/doom 2>/dev/null || true

# Добавляем freedoom WAD
wget -q https://github.com/freedoom/freedoom/releases/download/v0.13.0/freedoom-0.13.0.zip
unzip -q freedoom-0.13.0.zip
sudo mcopy -i ../linux.img freedoom-0.13.0/*.wad ::/usr/share/games/doom/ 2>/dev/null || true

# Создаём меню
echo "Создаём меню..."
cat > menu.sh << 'MENU'
#!/bin/sh
while true; do
    clear
    echo "╔════════════════════════════════════════╗"
    echo "║   LINUX ДЛЯ EEE PC + DOOM             ║"
    echo "╠════════════════════════════════════════╣"
    echo "║ 1. DOOM (Freedoom)                   ║"
    echo "║ 2. Nano редактор                     ║"
    echo "║ 3. Командная строка                  ║"
    echo "║ 4. Выход                             ║"
    echo "╚════════════════════════════════════════╝"
    echo -n "Выбери: "
    read choice
    case $choice in
        1) doom ;;
        2) nano ;;
        3) /bin/sh ;;
        4) exit 0 ;;
    esac
done
MENU
sudo mcopy -i linux.img menu.sh ::/usr/games/menu.sh 2>/dev/null
sudo mcopy -i linux.img menu.sh ::/menu.sh 2>/dev/null

# Создаём загрузочный скрипт
cat > autorun.sh << 'AUTORUN'
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
echo ""
echo "========================================="
echo "  FAT32 Linux для Asus Eee PC + DOOM!"
echo "========================================="
echo "Команды: nano, doom, menu"
echo ""
/bin/sh
AUTORUN
sudo mcopy -i linux.img autorun.sh ::/autorun.sh 2>/dev/null

# --------------------------------------------------
# Альтернативный метод: создание через dd и Python
# --------------------------------------------------
echo "[4/5] Альтернативный метод (Python)..."

# Создаём Python-скрипт для работы с образом
cat > create_fat32.py << 'PYTHON'
import os
import struct

def create_fat32_image(img_path, size_mb=200):
    """Создаёт FAT32 образ с файлами"""
    
    # Создаём пустой образ
    with open(img_path, 'wb') as f:
        f.seek(size_mb * 1024 * 1024 - 1)
        f.write(b'\0')
    
    # Монтируем через систему (если возможно)
    if os.system(f"sudo mount -o loop,uid={os.getuid()} {img_path} /mnt/linux") == 0:
        # Копируем файлы
        os.system("sudo mkdir -p /mnt/linux/{bin,usr/games,usr/share/games/doom}")
        os.system("sudo cp /bin/busybox /mnt/linux/bin/ 2>/dev/null || true")
        os.system("sudo umount /mnt/linux")
        return True
    
    # Если mount не работает, создаём через mkfs
    os.system(f"mkfs.vfat -F 32 {img_path}")
    
    # Используем mtools
    os.system("export MTOOLS_NO_VFAT=1")
    os.system(f"mmd -i {img_path} ::/bin ::/usr ::/usr/games ::/usr/share/games/doom")
    
    return True

if __name__ == "__main__":
    create_fat32_image("linux.img", 200)
PYTHON

python3 create_fat32.py

# --------------------------------------------------
# Создание загрузочного GRUB
# --------------------------------------------------
echo "[5/5] Добавление загрузчика..."

# Создаём простой MBR
dd if=/usr/lib/syslinux/mbr.bin of=linux.img bs=440 count=1 conv=notrunc 2>/dev/null || {
    # Альтернативный MBR
    echo -e "\x31\xc0\x8e\xd8\x8e\xc0\x8e\xd0\xbc\x00\x7c\xfb\xfc\xbe\x00\x7c\xbf\x00\x06\xb9\x00\x01\xf3\xa5\xea\x00\x06\x00\x00" | dd of=linux.img bs=1 seek=0 count=30 conv=notrunc 2>/dev/null
}

# Создаём grub.cfg
cat > grub.cfg << 'GRUB'
set default=0
set timeout=5

menuentry "Linux FAT32 for Eee PC + DOOM" {
    set root=(hd0,msdos1)
    linux /boot/vmlinuz root=/dev/sda1 rw quiet
    initrd /boot/initrd.img
}
GRUB

# Пытаемся добавить GRUB
sudo apt install -y grub-pc-bin grub-common 2>/dev/null
if command -v grub-mkimage &> /dev/null; then
    grub-mkimage -o core.img -O i386-pc fat part_msdos biosdisk
    dd if=core.img of=linux.img bs=512 seek=1 conv=notrunc 2>/dev/null || true
fi

# Очистка
rm -f menu.sh autorun.sh create_fat32.py grub.cfg core.img 2>/dev/null
rm -f nano-7.2-win32-static.zip chocolate-doom-3.0.0-win32.zip freedoom-0.13.0.zip
rm -rf chocolate-doom-3.0.0-win32 freedoom-0.13.0

echo ""
echo "╔════════════════════════════════════════════╗"
echo "║  ГОТОВО! linux.img (${SIZE_MB} МБ)                ║"
echo "╠════════════════════════════════════════════╣"
echo "║  Образ создан и готов к записи!           ║"
echo "║                                            ║"
echo "║  Содержимое:                              ║"
echo "║  • BusyBox (команды Linux)                ║"
echo "║  • Nano (текстовый редактор)              ║"
echo "║  • DOOM (Freedoom)                        ║"
echo "║  • Игровое меню                           ║"
echo "╚════════════════════════════════════════════╝"
echo ""
echo "Запись на флешку:"
echo "  sudo dd if=linux.img of=/dev/sdX bs=1M status=progress"
echo ""
echo "Проверка содержимого образа (без монтирования):"
echo "  mdir -i linux.img ::/"
echo ""
echo "ПРОБЛЕМЫ С МОНТИРОВАНИЕМ В WSL:"
echo "  WSL не поддерживает loop-монтирование FAT-образов."
echo "  Но образ полностью рабочий! Просто запиши на флешку"
echo "  и загрузись с неё на реальном Eee PC."
echo ""