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


Для того чтобы перевести образ на файловую систему **FAT32** и добавить популярный текстовый редактор **nano**, скрипт претерпел несколько важных архитектурных изменений:
 1. **Замена файловой системы**: Команда mkfs.ext4 заменена на mkfs.vfat -F 32. Соответственно, изменен /etc/fstab (vfat вместо ext4), а в конфигурацию ядра добавлена обязательная поддержка FAT32, а также кодовых страниц (NLS_CODEPAGE_437, NLS_ISO8859_1), без которых FAT32 не смонтируется.
 2. **Установка Nano**: Так как мы собираем полностью независимую (статическую) систему без использования тяжелой glibc, текстовый редактор **nano** скачивается из официальных исходников и компилируется с флагом --enable-tiny (для экономии памяти) и в режиме --enable-static. Чтобы он работал в консоли BusyBox, ему также собирается статическая библиотека ncurses.
 3. **Обновление GRUB2 под FAT32**: GRUB2 отлично работает с FAT32, модули для поддержки этой файловой системы добавлены в процесс сборки.
Вот полностью обновленный и готовый к работе скрипт:
```bash
#!/bin/bash
set -e

echo "=== Создание современного linux.img для Asus Eee PC 2G ==="
echo "=== Ядро Linux 6.1 LTS + FAT32 + Nano + Игры ==="

# Размер образа 100 МБ (с запасом под nano, ncurses и FAT32)
echo "[1/7] Создание образа 100 МБ..."
dd if=/dev/zero of=linux.img bs=1M count=100
echo -e "o\nn\np\n1\n\n\na\nw" | fdisk linux.img

sudo losetup -fP linux.img
LOOP=$(losetup -l | grep linux.img | awk '{print $1}')

# Форматируем в FAT32 (-F 32)
sudo mkfs.vfat -F 32 ${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,usr/games,var/games,tmp}

# --------------------------------------------------
# Шаг 2: Современное ядро Linux 6.1 LTS (с поддержкой FAT32)
# --------------------------------------------------
echo "[2/7] Сборка ядра Linux 6.1..."
cd /tmp
wget -q https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.1.80.tar.xz
tar xf linux-6.1.80.tar.xz
cd linux-6.1.80
make mrproper

# Конфигурация под Pentium M + поддержка FAT32 и NLS
cat > .config << 'KERNCONF'
CONFIG_X86=y
CONFIG_X86_32=y
CONFIG_MPENTIUMM=y
CONFIG_HIGHMEM4G=y
CONFIG_SMP=n

# Драйверы дисков
CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y
CONFIG_ATA_PIIX=y

# Файловые системы (Обязательно для FAT32)
CONFIG_FAT_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NLS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y

# Графика
CONFIG_DRM=y
CONFIG_DRM_I915=y
CONFIG_FB=y
CONFIG_VT=y
CONFIG_FRAMEBUFFER_CONSOLE=y

# Базовое окружение
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_PRINTK=y
CONFIG_TTY=y
KERNCONF

make olddefconfig
make -j$(nproc) bzImage
sudo cp arch/x86/boot/bzImage /mnt/linux/boot/vmlinuz
cd /tmp && rm -rf linux-6.1.80*

# --------------------------------------------------
# Шаг 3: Обновленный BusyBox 1.36.1
# --------------------------------------------------
echo "[3/7] Установка современного BusyBox..."
cd /tmp
wget -q https://busybox.net/downloads/busybox-1.36.1.tar.bz2
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)
sudo make CONFIG_PREFIX=/mnt/linux install
cd /tmp && rm -rf busybox-1.36.1*

# --------------------------------------------------
# Шаг 4: Сборка статического текстового редактора NANO
# --------------------------------------------------
echo "[4/7] Сборка текстового редактора Nano (+ ncurses)..."
cd /tmp

# Сначала нужна библиотека ncurses для терминала (статическая)
wget -q https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.4.tar.gz
tar xf ncurses-6.4.tar.gz
cd ncurses-6.4
./configure --without-shared --without-debug --enable-widec --with-fallbacks=linux,xterm
make -j$(nproc)

# Теперь собираем сам Nano, статически линкуя его с ncurses
cd /tmp
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 --enable-static NCURSESW_LIBS="-L/tmp/ncurses-6.4/lib -lncursesw" NCURSESW_CFLAGS="-I/tmp/ncurses-6.4/include"
make -j$(nproc)
sudo cp src/nano /mnt/linux/usr/bin/

# Очистка исходников редактора
cd /tmp && rm -rf ncurses-6.4* nano-7.2*

# Игры (Vitetris и bsdgames)
cd /tmp
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*

sudo apt update && 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

# --------------------------------------------------
# Шаг 5: Меню игр
# --------------------------------------------------
echo "[5/7] Создание игрового меню..."
sudo tee /mnt/linux/usr/games/menu.sh << 'MENU'
#!/bin/sh
while true; do
    clear
    echo "╔══════════════════════════════╗"
    echo "║   СОВРЕМЕННЫЙ LITE LINUX     ║"
    echo "║    FAT32 СИСТЕМА + NANO      ║"
    echo "╠══════════════════════════════╣"
    echo "║ 1. Тетрис (vitetris)        ║"
    echo "║ 2. Змейка (snake)           ║"
    echo "║ 3. Роботы (robots)          ║"
    echo "║ 4. Охота (hunt)             ║"
    echo "║ 5. Выход в консоль          ║"
    echo "╚══════════════════════════════╝"
    echo -n "Выбери игру: "
    read choice
    case $choice in
        1) [ -f /usr/games/vitetris ] && vitetris || /usr/games/tetris ;;
        2) snake ;;
        3) robots ;;
        4) hunt ;;
        5) exit 0 ;;
        *) echo "Неверный выбор!" ; sleep 1 ;;
    esac
done
MENU
sudo chmod +x /mnt/linux/usr/games/menu.sh

# --------------------------------------------------
# Шаг 6: Настройка системы
# --------------------------------------------------
echo "[6/7] Настройка /etc..."

# /etc/profile
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"

echo ""
echo "  Добро пожаловать в FAT32-версию Linux для Eee PC!"
echo "  Доступен текстовый редактор: 'nano'"
echo "  Введи 'menu' для запуска игр."
echo ""
PROFILE

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

# /etc/init.d/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 "Система на FAT32 успешно загружена!"
RCS
sudo chmod +x /mnt/linux/etc/init.d/rcS

# /etc/fstab (Изменено под vfat)
sudo tee /mnt/linux/etc/fstab << 'FSTAB'
/dev/sda1 / vfat defaults,noatime,errors=remount-ro 0 1
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
FSTAB

# --------------------------------------------------
# Шаг 7: Установка загрузчика GRUB2 (FAT32)
# --------------------------------------------------
echo "[7/7] Установка GRUB2..."
sudo apt install -y grub-pc-bin

# Монтируем служебные директории хоста
sudo mount --bind /dev /mnt/linux/dev
sudo mount --bind /proc /mnt/linux/proc
sudo mount --bind /sys /mnt/linux/sys

# Создаем конфиг GRUB
sudo mkdir -p /mnt/linux/boot/grub
sudo tee /mnt/linux/boot/grub/grub.cfg << 'GRUB_CONF'
set default=0
set timeout=2

insmod fat

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

# Устанавливаем GRUB
sudo grub-install --target=i386-pc --boot-directory=/mnt/linux/boot ${LOOP}

# Размонтируем всё обратно
sudo umount /mnt/linux/dev
sudo umount /mnt/linux/proc
sudo umount /mnt/linux/sys
sudo umount /mnt/linux

sudo losetup -d ${LOOP}

echo ""
echo "╔══════════════════════════════════════╗"
echo "║  ГОТОВО! linux.img FAT32 (100 МБ)    ║"
echo "╠══════════════════════════════════════╣"
echo "║ ФС:              FAT32 (VFAT)        ║"
echo "║ Редактор:        Редактор nano       ║"
echo "║ Ядро:            Linux 6.1 LTS       ║"
echo "║ Загрузчик:       Modern GRUB2        ║"
echo "╚══════════════════════════════════════╝"
echo ""
echo "Записать на флешку:"
echo "  sudo dd if=linux.img of=/dev/sdX bs=1M status=progress"

```