69 lines
2.0 KiB
Bash
Executable File
69 lines
2.0 KiB
Bash
Executable File
#!/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" |