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