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


#!/bin/bash

echo "=== Создание образа для Asus Eee PC (из WSL) ==="

# Проверяем, что мы в WSL
if ! grep -q Microsoft /proc/version; then
    echo "ВНИМАНИЕ: Похоже, вы не в WSL. Скрипт оптимизирован для WSL."
fi

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

# Настройка loop устройства
sudo losetup -fP linux.img
LOOP=$(losetup -l | grep linux.img | tail -1 | awk '{print $1}')
echo "Loop устройство: ${LOOP}"

# Разметка (через fdisk, т.к. parted в WSL может быть не установлен)
sudo fdisk ${LOOP} << EOF
o
n
p
1


a
w
EOF

# Ждём
sleep 2
sudo partprobe ${LOOP} 2>/dev/null || true

# Форматирование в FAT32
sudo mkfs.vfat -F 32 -n "EEELINUX" ${LOOP}p1

# Монтирование
sudo mkdir -p /mnt/linux
sudo mount ${LOOP}p1 /mnt/linux

# Создаём структуру директорий
sudo mkdir -p /mnt/linux/{boot,bin,sbin,dev,proc,sys,etc,lib,usr/{bin,games,share},root,tmp,var/games}

# --------------------------------------------------
# BusyBox (статический)
# --------------------------------------------------
echo "[2/6] Сборка BusyBox..."
cd /tmp
if [ ! -f busybox-1.36.1.tar.bz2 ]; then
    wget -q https://busybox.net/downloads/busybox-1.36.1.tar.bz2
fi
tar xf busybox-1.36.1.tar.bz2
cd busybox-1.36.1
make defconfig
sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .config
make -j$(nproc) 2>&1 | grep -v "warning"
sudo make CONFIG_PREFIX=/mnt/linux install
cd /tmp && rm -rf busybox-1.36.1

# --------------------------------------------------
# Ядро - альтернативный подход (не собираем, а берём готовое)
# --------------------------------------------------
echo "[3/6] Установка ядра..."

# Скачиваем готовое минимальное ядро для i386 (из альтернативного источника)
cd /tmp
wget -q https://github.com/ivandavidov/minimal/releases/download/v0.1/minimal_linux_live_32bit.iso -O minimal.iso || {
    echo "Не удалось скачать готовое ядро, создаю минимальное..."
    
    # Самый минимальный вариант: создаём скрипт, который скажет, что ядра нет
    sudo tee /mnt/linux/boot/vmlinuz << 'EOF'
#!/bin/sh
echo "Ядро не установлено. Загрузитесь с установочного диска."
EOF
    sudo chmod +x /mnt/linux/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
        sudo cp /tmp/iso/boot/vmlinuz /mnt/linux/boot/vmlinuz
    elif [ -f /tmp/iso/boot/vmlinuz-linux ]; then
        sudo cp /tmp/iso/boot/vmlinuz-linux /mnt/linux/boot/vmlinuz
    fi
    sudo umount /tmp/iso
    sudo rm -rf /tmp/iso
fi

# --------------------------------------------------
# Nano + ncurses
# --------------------------------------------------
echo "[4/6] Установка Nano..."
cd /tmp

# Устанавливаем зависимости в WSL
sudo apt update
sudo apt install -y libncurses-dev build-essential wget

# Скачиваем и собираем nano
wget -q https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz
tar xf nano-7.2.tar.xz
cd nano-7.2
./configure --enable-tiny --prefix=/usr --exec-prefix=/usr
make -j$(nproc) 2>&1 | grep -v "warning"
sudo make install DESTDIR=/mnt/linux

# Копируем библиотеки ncurses (динамические)
sudo cp -a /lib/*/libncurses* /mnt/linux/lib/ 2>/dev/null || true
sudo cp -a /usr/lib/*/libncurses* /mnt/linux/lib/ 2>/dev/null || true

cd /tmp && rm -rf nano-7.2*

# --------------------------------------------------
# Игры + DOOM
# --------------------------------------------------
echo "[5/6] Установка игр и DOOM..."

# Устанавливаем chocolate-doom в WSL
sudo apt install -y chocolate-doom

# Копируем бинарники
sudo cp /usr/games/chocolate-doom /mnt/linux/usr/games/
sudo cp /usr/games/chocolate-setup /mnt/linux/usr/games/

# Ищем DOOM WAD файл (shareware)
sudo mkdir -p /mnt/linux/usr/share/games/doom
cd /tmp
wget -q https://github.com/freedoom/freedoom/releases/download/v0.13.0/freedoom-0.13.0.zip
if [ -f freedoom-0.13.0.zip ]; then
    sudo apt install -y unzip
    unzip -q freedoom-0.13.0.zip
    sudo cp freedoom-0.13.0/*.wad /mnt/linux/usr/share/games/doom/ 2>/dev/null || true
fi

# vitetris
wget -q https://github.com/vicgeralds/vitetris/archive/refs/tags/v0.59.1.tar.gz -O vitetris.tar.gz
tar xf vitetris.tar.gz
cd vitetris-0.59.1
./configure --prefix=/usr
make -j$(nproc)
sudo cp vitetris /mnt/linux/usr/games/
cd /tmp && rm -rf vitetris*

# bsdgames
sudo apt install -y bsdgames
for game in tetris snake robots hunt; do
    if [ -f /usr/games/$game ]; then
        sudo cp /usr/games/$game /mnt/linux/usr/games/
    fi
done

# --------------------------------------------------
# Игровое меню
# --------------------------------------------------
echo "[6/6] Создание меню..."

sudo tee /mnt/linux/usr/games/menu.sh << 'MENU'
#!/bin/sh
while true; do
    clear
    echo "╔════════════════════════════════════════╗"
    echo "║   LINUX ДЛЯ EEE PC + DOOM             ║"
    echo "╠════════════════════════════════════════╣"
    echo "║ 1. Тетрис (vitetris)                 ║"
    echo "║ 2. Змейка (snake)                    ║"
    echo "║ 3. Роботы (robots)                   ║"
    echo "║ 4. Охота (hunt)                      ║"
    echo "║ 5. DOOM (Freedoom)                   ║"
    echo "║ 6. Выход в консоль                   ║"
    echo "╚════════════════════════════════════════╝"
    echo -n "Выбери: "
    read choice
    case $choice in
        1) vitetris ;;
        2) snake ;;
        3) robots ;;
        4) hunt ;;
        5) 
            echo "Запуск DOOM..."
            if ls /usr/share/games/doom/*.wad 2>/dev/null; then
                chocolate-doom -iwad /usr/share/games/doom/freedoom1.wad
            else
                echo "WAD файл не найден!"
                sleep 2
            fi
            ;;
        6) exit 0 ;;
        *) echo "Неверный выбор!" ; sleep 1 ;;
    esac
done
MENU
sudo chmod +x /mnt/linux/usr/games/menu.sh

# --------------------------------------------------
# Настройка системы
# --------------------------------------------------
sudo tee /mnt/linux/etc/profile << 'PROFILE'
export PATH=/bin:/sbin:/usr/bin:/usr/games
export PS1="\u@eee-pc:\w\$ "
export TERM=linux
alias ll="ls -la"
alias menu="/usr/games/menu.sh"
alias doom="chocolate-doom"

echo ""
echo "========================================="
echo "  FAT32 Linux для Asus Eee PC + DOOM!"
echo "  Редактор: nano"
echo "  Игры: menu"
echo "========================================="
PROFILE

# inittab
sudo tee /mnt/linux/etc/inittab << 'INITTAB'
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/bin/umount -a -r
INITTAB

# rcS
sudo mkdir -p /mnt/linux/etc/init.d
sudo tee /mnt/linux/etc/init.d/rcS << 'RCS'
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
/bin/hostname eee-pc
echo "Система загружена!"
RCS
sudo chmod +x /mnt/linux/etc/init.d/rcS

# fstab
sudo tee /mnt/linux/etc/fstab << 'FSTAB'
/dev/sda1 / vfat defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
FSTAB

# Устанавливаем GRUB (только если есть)
echo "Установка GRUB..."
sudo apt install -y grub-pc-bin 2>/dev/null || echo "GRUB не установлен, но образ готов"

sudo mkdir -p /mnt/linux/boot/grub
sudo tee /mnt/linux/boot/grub/grub.cfg << 'GRUB_CONF'
set default=0
set timeout=5

menuentry "Linux FAT32 for Eee PC" {
    set root=(hd0,msdos1)
    linux /boot/vmlinuz root=/dev/sda1 rw quiet
}
GRUB_CONF

# Пробуем установить GRUB, если есть loop устройство
if command -v grub-install &> /dev/null; then
    sudo grub-install --target=i386-pc --boot-directory=/mnt/linux/boot ${LOOP} 2>/dev/null || echo "GRUB install skipped"
fi

# Отмонтируем
cd /
sudo umount /mnt/linux 2>/dev/null
sudo losetup -d ${LOOP} 2>/dev/null

echo ""
echo "╔════════════════════════════════════════╗"
echo "║  ГОТОВО! linux.img (${SIZE_MB} МБ)            ║"
echo "╠════════════════════════════════════════╣"
echo "║ ФС:       FAT32                        ║"
echo "║ Редактор: Nano                         ║"
echo "║ ИГРЫ:     Tetris, Snake, Robots, Hunt, ║"
echo "║           DOOM (Freedoom)              ║"
echo "╚════════════════════════════════════════╝"
echo ""
echo "Запись на флешку:"
echo "  sudo dd if=linux.img of=/dev/sdX bs=1M status=progress"
echo ""
echo "ВАЖНО: Ядро нужно будет установить отдельно."
echo "Скачай минимальное ядро для i386:"
echo "  https://github.com/ivandavidov/minimal/releases"