Загрузка данных
#!/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 ""