#!/bin/bash echo "=== YACBA Builder ===" detect_system() { if [[ "$OSTYPE" == "darwin"* ]]; then echo "macOS" elif [[ "$OSTYPE" == "linux-gnu"* ]]; then echo "Linux" else echo "Unknown" fi } SYSTEM=$(detect_system) case $SYSTEM in "macOS") echo "[!] На macOS невозможно нативно собрать i386 bare-metal код" echo "[*] Используйте Docker версию:" echo "" echo " chmod +x docker-build.sh" echo " ./docker-build.sh" echo "" echo "[*] Или скопируйте код на Linux машину" exit 1 ;; "Linux") echo "[*] Linux обнаружен, начинаю сборку..." ;; *) echo "[!] Неизвестная система, попробую собрать..." ;; esac check_tools() { local missing=() command -v nasm >/dev/null 2>&1 || missing+=("nasm") command -v gcc >/dev/null 2>&1 || missing+=("gcc") command -v ld >/dev/null 2>&1 || missing+=("binutils") if [ ${#missing[@]} -ne 0 ]; then echo "[-] Отсутствуют инструменты: ${missing[*]}" echo "[*] Ubuntu/Debian: apt install nasm gcc binutils" echo "[*] CentOS/RHEL: yum install nasm gcc binutils" exit 1 fi } check_tools echo "[*] Сборка загрузчика..." nasm -f bin bootloader.asm -o bootloader.bin || exit 1 echo "[*] Сборка ядра..." gcc -m32 -ffreestanding -nostdlib -nodefaultlibs -fno-builtin \ -fno-stack-protector -c kernel.c -o kernel.o || exit 1 echo "[*] Линковка ядра..." ld -m elf_i386 -T linker.ld kernel.o -o kernel.bin || exit 1 echo "[*] Создание образа ОС..." cat bootloader.bin kernel.bin > os.bin truncate -s 1440K os.bin echo "[+] Готово! Образ os.bin создан" echo "[*] Размер: $(ls -lh os.bin | awk '{print $5}')" echo "[*] Для создания флешки: sudo ./create_boot_usb.sh /dev/sdX"