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


#!/bin/bash

echo "╔══════════════════════════════════════════════════════════╗"
echo "║     Специальная сборка ДЛЯ EEE PC 2G (Intel GMA 900)    ║"
echo "╚══════════════════════════════════════════════════════════╝"

# Устанавливаем зависимости
sudo apt update
sudo apt install -y dosfstools mtools busybox-static nano wget unzip python3 grub-pc-bin grub-common

# Создаём образ
SIZE_MB=200
echo "[1/7] Создание образа ${SIZE_MB} МБ..."
dd if=/dev/zero of=linux.img bs=1M count=${SIZE_MB} status=progress
mkfs.vfat -F 32 -n "EEELINUX" linux.img

# Создаём структуру
echo "[2/7] Создание структуры..."
export MTOOLS_NO_VFAT=1
mmd -i linux.img ::/bin ::/sbin ::/boot ::/boot/grub
mmd -i linux.img ::/etc ::/etc/init.d
mmd -i linux.img ::/usr ::/usr/bin ::/usr/games ::/usr/share
mmd -i linux.img ::/proc ::/sys ::/dev ::/root ::/tmp ::/var

# BusyBox
echo "[3/7] Установка BusyBox..."
mcopy -i linux.img /bin/busybox ::/bin/

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

# Nano
echo "[4/7] Установка Nano..."
mcopy -i linux.img /bin/nano ::/bin/

# Ключевое: Специальный конфиг для Eee PC
echo "[5/7] Настройка для Eee PC (Intel GMA 900)..."

# /etc/profile
cat > /tmp/profile << 'PROFILE'
#!/bin/sh
export PATH=/bin:/sbin:/usr/bin:/usr/games
export PS1="eee-pc:\w\$ "
export TERM=linux
alias ll='ls -la'
alias menu='/menu.sh'

echo ""
echo "====================================="
echo "  EEE PC LINUX FAT32 (Intel GMA 900)"
echo "  Команды: nano, menu"
echo "====================================="
PROFILE
mcopy -i linux.img /tmp/profile ::/etc/

# Важно! Правильный inittab для framebuffer
cat > /tmp/inittab << 'INITTAB'
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
INITTAB
mcopy -i linux.img /tmp/inittab ::/etc/

# rcS с поддержкой видео
cat > /tmp/rcS << 'RCS'
#!/bin/sh

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

# Хостнейм
/bin/hostname eee-pc

# Загружаем модуль для GMA 900
/sbin/modprobe i915 2>/dev/null

# Настраиваем framebuffer для Eee PC
echo "0" > /sys/class/vtconsole/vtcon1/bind 2>/dev/null
echo "1" > /sys/class/vtconsole/vtcon0/bind 2>/dev/null

# Очищаем экран
/usr/bin/clear

echo "┌─────────────────────────────────────┐"
echo "│  EEE PC FAT32 LINUX ЗАГРУЖЕН!      │"
echo "│  Введи 'menu' для запуска игр      │"
echo "└─────────────────────────────────────┘"
RCS
mcopy -i linux.img /tmp/rcS ::/etc/init.d/
mattrib +x -i linux.img ::/etc/init.d/rcS

# clear команда
echo "#!/bin/busybox" > /tmp/clear
echo "/bin/busybox clear" >> /tmp/clear
mcopy -i linux.img /tmp/clear ::/usr/bin/
mattrib +x -i linux.img ::/usr/bin/clear

# Игровое меню
cat > /tmp/menu.sh << 'MENU'
#!/bin/sh
while true; do
    printf "\033[2J\033[H"
    echo "╔════════════════════════════════╗"
    echo "║      EEE PC ИГРОВОЙ ЦЕНТР     ║"
    echo "╠════════════════════════════════╣"
    echo "║ 1. Редактор Nano              ║"
    echo "║ 2. Командная строка           ║"
    echo "║ 3. Информация                 ║"
    echo "║ 4. Тест экрана (цвета)        ║"
    echo "║ 5. Выход                      ║"
    echo "╚════════════════════════════════╝"
    printf "Выбор: "
    read choice
    case $choice in
        1) nano ;;
        2) sh ;;
        3) 
            echo "Модель: Asus Eee PC"
            echo "Видео: Intel GMA 900"
            free
            sleep 3
            ;;
        4)
            printf "\033[41m\033[37mКРАСНЫЙ\033[0m \033[42m\033[30mЗЕЛЕНЫЙ\033[0m \033[44m\033[37mСИНИЙ\033[0m"
            printf "\n\033[43m\033[30mЖЕЛТЫЙ\033[0m \033[45m\033[37mФИОЛЕТ\033[0m \033[46m\033[30mГОЛУБОЙ\033[0m\n"
            sleep 3
            ;;
        5) exit 0 ;;
    esac
done
MENU
mcopy -i linux.img /tmp/menu.sh ::/
mattrib +x -i linux.img ::/menu.sh

# Установка GRUB
echo "[6/7] Установка загрузчика GRUB..."

# Создаём конфиг GRUB для Eee PC
cat > /tmp/grub.cfg << 'GRUB'
set default=0
set timeout=5
set gfxmode=640x480
set gfxpayload=keep

insmod part_msdos
insmod fat
insmod vbe
insmod vga

# Видеорежимы для Eee PC
insmod i915
insmod fb

menuentry "EEE PC Linux FAT32 (Intel GMA 900)" {
    set root=(hd0,msdos1)
    linux /boot/vmlinuz root=/dev/sda1 rw quiet nomodeset vga=0x317 video=640x480
    echo "Загрузка..."
}

menuentry "EEE PC Linux - Безопасный режим" {
    set root=(hd0,msdos1)
    linux /boot/vmlinuz root=/dev/sda1 rw nomodeset nofb vga=normal
}

menuentry "Проверка видео" {
    set root=(hd0,msdos1)
    linux /boot/vmlinuz root=/dev/sda1 rw nomodeset video=vesafb
}
GRUB
mcopy -i linux.img /tmp/grub.cfg ::/boot/grub/

# Ядро - минимальное готовое
echo "[7/7] Добавление минимального ядра..."

# Скачиваем минимальное ядро для i386
cd /tmp
wget -q https://github.com/ivandavidov/minimal/releases/download/v0.1/minimal_linux_live_32bit.iso -O minimal.iso || {
    echo "Создаём минимальное ядро вручную..."
    
    # Простейший загрузочный скрипт
    cat > /tmp/vmlinuz << 'KERNEL'
#!/bin/sh
echo "Ядро загружено!"
/bin/sh
KERNEL
    mcopy -i ../linux.img /tmp/vmlinuz ::/boot/
    mattrib +x -i ../linux.img ::/boot/vmlinuz
}

# Если скачали ISO, извлекаем ядро
if [ -f minimal.iso ]; then
    sudo mkdir -p /tmp/iso
    sudo mount -o loop minimal.iso /tmp/iso 2>/dev/null
    if [ -f /tmp/iso/boot/vmlinuz ]; then
        mcopy -i ../linux.img /tmp/iso/boot/vmlinuz ::/boot/
    fi
    if [ -f /tmp/iso/boot/initrd ]; then
        mcopy -i ../linux.img /tmp/iso/boot/initrd ::/boot/
    fi
    sudo umount /tmp/iso
    sudo rm -rf /tmp/iso
fi

cd -

# Устанавливаем GRUB на образ (через losetup)
echo "Установка GRUB на образ..."
sudo losetup -fP linux.img
LOOP=$(losetup -l | grep linux.img | tail -1 | awk '{print $1}')

if [ -n "$LOOP" ]; then
    sudo mkdir -p /mnt/linux
    if sudo mount ${LOOP}p1 /mnt/linux 2>/dev/null; then
        sudo grub-install --target=i386-pc --boot-directory=/mnt/linux/boot ${LOOP} 2>/dev/null || echo "GRUB install warning"
        sudo umount /mnt/linux
    fi
    sudo losetup -d ${LOOP}
fi

# Создаём README с инструкцией по загрузке
cat > /tmp/README_EEE_PC.txt << 'README'
=====================================
ЗАГРУЗКА НА EEE PC - РЕШЕНИЕ ПРОБЛЕМ
=====================================

Если черный экран:

1. При загрузке GRUB нажми 'e' на пункте меню

2. Найди строку с "linux /boot/vmlinuz"

3. Замени параметры на:
   nomodeset vga=normal nofb

4. Нажми Ctrl+X для загрузки

Или попробуй разные варианты:

Вариант А (без видеоускорения):
   linux /boot/vmlinuz root=/dev/sda1 rw nomodeset

Вариант Б (VGA совместимость):
   linux /boot/vmlinuz root=/dev/sda1 rw vga=0x0117

Вариант В (минимальный):
   linux /boot/vmlinuz root=/dev/sda1 rw acpi=off noapic

Вариант Г (для очень старых Eee PC):
   linux /boot/vmlinuz root=/dev/sda1 ro quiet nomodeset acpi=off

=====================================
После загрузки введи:
   menu - игровое меню
   nano - редактор

=====================================
README

mcopy -i linux.img /tmp/README_EEE_PC.txt ::/README.txt

# Очистка
rm -f /tmp/*.sh /tmp/*.cfg /tmp/profile /tmp/inittab /tmp/rcS /tmp/*.iso 2>/dev/null

echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║  ✅ ГОТОВО! СПЕЦИАЛЬНАЯ ВЕРСИЯ ДЛЯ EEE PC               ║"
echo "╠══════════════════════════════════════════════════════════╣"
echo "║  Файл: linux.img (200 МБ)                               ║"
echo "║                                                         ║"
echo "║  ЧЕРНЫЙ ЭКРАН? Решение:                                 ║"
echo "║  При загрузке GRUB нажми 'e' → редактируй строку        ║"
echo "║  Добавь параметр: nomodeset                             ║"
echo "║                                                         ║"
echo "║  Полная инструкция в файле README.txt на флешке        ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
echo "Запись на флешку:"
echo "sudo dd if=linux.img of=/dev/sdX bs=1M status=progress"
echo ""