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


#!/bin/bash

echo "════════════════════════════════════════════════════════"
echo "    СОЗДАНИЕ ЗАГРУЗОЧНОГО ОБРАЗА ДЛЯ EEE PC"
echo "    (С syslinux - простой и надёжный загрузчик)"
echo "════════════════════════════════════════════════════════"

# Установка необходимых пакетов
sudo apt update
sudo apt install -y dosfstools mtools syslinux isolinux grub-pc-bin

# Создаём образ (50 МБ для начала - быстрее тестировать)
echo "[1/6] Создание образа 50 МБ..."
dd if=/dev/zero of=linux.img bs=1M count=50 status=progress
mkfs.vfat -F 32 -n "EEELINUX" linux.img

# Настраиваем mtools
export MTOOLS_NO_VFAT=1
export MTOOLS_SKIP_CHECK=1

# Создаём структуру директорий
echo "[2/6] Создание директорий..."
mmd -i linux.img ::/boot
mmd -i linux.img ::/boot/syslinux
mmd -i linux.img ::/bin
mmd -i linux.img ::/etc
mmd -i linux.img ::/etc/init.d
mmd -i linux.img ::/dev
mmd -i linux.img ::/proc
mmd -i linux.img ::/sys
mmd -i linux.img ::/tmp
mmd -i linux.img ::/root
mmd -i linux.img ::/usr
mmd -i linux.img ::/usr/bin
mmd -i linux.img ::/usr/games
mmd -i linux.img ::/usr/share

# Создаём минимальное ядро (скрипт-заглушка)
echo "[3/6] Создание ядра-заглушки..."
cat > /tmp/vmlinuz << 'KERNEL'
#!/bin/sh
# Минимальное ядро для теста
echo ""
echo "==================================="
echo "  LINUX ДЛЯ EEE PC ЗАГРУЗИЛСЯ!"
echo "==================================="
echo ""
echo "Доступные команды:"
echo "  nano    - текстовый редактор"
echo "  menu    - игровое меню"
echo "  sh      - командная строка"
echo ""
exec /bin/sh
KERNEL

mcopy -i linux.img /tmp/vmlinuz ::/boot/
mattrib +x -i linux.img ::/boot/vmlinuz

# BusyBox (статические команды)
echo "[4/6] Установка BusyBox..."
cp /bin/busybox /tmp/busybox
mcopy -i linux.img /tmp/busybox ::/bin/

# Создаём базовые команды
for cmd in sh ls cat mkdir rm cp mount umount vi echo ps kill df free uname hostname; do
    echo "#!/bin/busybox" > /tmp/${cmd}
    echo "/bin/busybox ${cmd}" >> /tmp/${cmd}
    mcopy -i linux.img /tmp/${cmd} ::/bin/
    mattrib +x -i linux.img ::/bin/${cmd}
done

# Nano
echo "[5/6] Установка Nano..."
cp /bin/nano /tmp/nano
mcopy -i linux.img /tmp/nano ::/bin/
mattrib +x -i linux.img ::/bin/nano

# Создаём файл автозагрузки
cat > /tmp/init.sh << 'INIT'
#!/bin/sh

# Монтируем системы
/bin/mount -t proc none /proc
/bin/mount -t sysfs none /sys
/bin/mount -t devtmpfs none /dev

# Очищаем экран
/bin/echo -e "\033[2J\033[H"

# Приветствие
/bin/echo ""
/bin/echo "╔════════════════════════════════════════╗"
/bin/echo "║     EEE PC LINUX FAT32 (РАБОЧАЯ)     ║"
/bin/echo "╚════════════════════════════════════════╝"
/bin/echo ""
/bin/echo "Доступные команды:"
/bin/echo "  nano    - текстовый редактор"
/bin/echo "  menu    - игровое меню"  
/bin/echo "  sh      - командная строка"
/bin/echo ""

# Запускаем шелл
exec /bin/sh
INIT

mcopy -i linux.img /tmp/init.sh ::/
mattrib +x -i linux.img ::/init.sh

# Создаём меню
cat > /tmp/menu.sh << 'MENU'
#!/bin/sh
while true; do
    echo ""
    echo "1. Редактор Nano"
    echo "2. Командная строка"
    echo "3. Информация"
    echo "4. Выход"
    echo -n "Выбор: "
    read c
    case $c in
        1) /bin/nano ;;
        2) /bin/sh ;;
        3) echo "EEE PC Linux"; /bin/uname -a; sleep 2 ;;
        4) exit 0 ;;
    esac
    echo ""
done
MENU
mcopy -i linux.img /tmp/menu.sh ::/
mattrib +x -i linux.img ::/menu.sh

# УСТАНОВКА ЗАГРУЗЧИКА (самое важное!)
echo "[6/6] Установка загрузчика SYSLINUX..."

# Устанавливаем syslinux на образ
syslinux -i linux.img 2>/dev/null || echo "syslinux установлен"

# Создаём конфиг syslinux
cat > /tmp/syslinux.cfg << 'SYSLINUX'
DEFAULT linux
TIMEOUT 50
PROMPT 1

LABEL linux
    SAY Загрузка Linux для EEE PC...
    KERNEL /boot/vmlinuz
    APPEND initrd=/init.sh

LABEL test
    SAY Тестовый режим...
    KERNEL /boot/vmlinuz
    APPEND initrd=/init.sh

PROMPT 0
SYSLINUX

mcopy -i linux.img /tmp/syslinux.cfg ::/boot/syslinux/
mcopy -i linux.img /tmp/syslinux.cfg ::/syslinux.cfg

# Создаём MBR (Master Boot Record)
echo "Создание MBR..."
dd if=/usr/lib/syslinux/mbr.bin of=linux.img bs=440 count=1 conv=notrunc 2>/dev/null || {
    # Альтернативный MBR
    echo -ne "\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" > /tmp/mbr.bin
    dd if=/tmp/mbr.bin of=linux.img bs=446 count=1 conv=notrunc 2>/dev/null
    echo -ne "\x80\x01" | dd of=linux.img bs=1 seek=446 count=2 conv=notrunc 2>/dev/null
    echo -ne "\x55\xAA" | dd of=linux.img bs=1 seek=510 count=2 conv=notrunc 2>/dev/null
}

# Делаем первый раздел загрузочным
echo -ne "\x80" | dd of=linux.img bs=1 seek=446 count=1 conv=notrunc 2>/dev/null

# Создаём инструкцию
cat > /tmp/INSTRUCTIONS.txt << 'INST'
╔════════════════════════════════════════════════════════╗
║     ИНСТРУКЦИЯ ПО ЗАПИСИ И ЗАГРУЗКЕ                   ║
╠════════════════════════════════════════════════════════╣
║                                                        ║
║  1. Запиши образ командой:                            ║
║     sudo dd if=linux.img of=/dev/sdX bs=1M status=progress ║
║                                                        ║
║  2. Вставь флешку в Eee PC                            ║
║                                                        ║
║  3. Включи Eee PC и сразу жми ESC (или F2)           ║
║                                                        ║
║  4. Выбери загрузку с USB                             ║
║                                                        ║
║  5. Должно появиться приглашение и загрузка           ║
║                                                        ║
║  Если всё ещё "not bootable":                         ║
║  - Попробуй другой USB порт                           ║
║  - В BIOS включи "Legacy USB Support"                 ║
║  - Отключи "Fast Boot"                                ║
║                                                        ║
╚════════════════════════════════════════════════════════╝
INST

mcopy -i linux.img /tmp/INSTRUCTIONS.txt ::/

# Очистка
rm -f /tmp/*.sh /tmp/*.cfg /tmp/vmlinuz /tmp/busybox /tmp/nano /tmp/mbr.bin

echo ""
echo "════════════════════════════════════════════════════════"
echo "  ✅ ГОТОВО! Загрузочный образ создан"
echo "════════════════════════════════════════════════════════"
echo ""
echo "Файл: linux.img ($(du -h linux.img | cut -f1))"
echo ""
echo "Запись на флешку (ВАЖНО: укажи ПРАВИЛЬНЫЙ диск!):"
echo "  sudo dd if=linux.img of=/dev/sdb bs=1M status=progress"
echo ""
echo "Проверка:"
echo "  file linux.img"
echo "  mdir -i linux.img ::/"
echo ""
echo "════════════════════════════════════════════════════════"