48 lines
1.5 KiB
Bash
Executable File
48 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
echo "=== YACBA Docker Builder ==="
|
||
|
||
if ! command -v docker &> /dev/null; then
|
||
echo "[-] Docker не установлен"
|
||
echo "[*] Установите Docker: https://docs.docker.com/get-docker/"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверяем архитектуру хоста
|
||
ARCH=$(uname -m)
|
||
if [[ "$ARCH" == "arm64" || "$ARCH" == "aarch64" ]]; then
|
||
echo "[!] Обнаружена ARM64 архитектура"
|
||
echo "[*] Будет использована эмуляция x86_64 (может быть медленно)"
|
||
fi
|
||
|
||
echo "[*] Сборка через Docker контейнер..."
|
||
|
||
docker run --platform linux/amd64 --rm -v "$(pwd)":/work -w /work ubuntu:20.04 bash -c '
|
||
apt-get update -qq
|
||
apt-get install -y nasm gcc binutils make
|
||
|
||
echo "[*] Сборка загрузчика..."
|
||
nasm -f bin bootloader.asm -o bootloader.bin
|
||
|
||
echo "[*] Сборка ядра..."
|
||
gcc -m32 -ffreestanding -nostdlib -nodefaultlibs -fno-builtin -fno-stack-protector -c kernel.c -o kernel.o
|
||
|
||
echo "[*] Линковка ядра..."
|
||
ld -m elf_i386 -T linker.ld kernel.o -o kernel.bin
|
||
|
||
echo "[*] Создание образа ОС..."
|
||
cat bootloader.bin kernel.bin > os.bin
|
||
truncate -s 1440K os.bin
|
||
|
||
echo "[+] Сборка завершена!"
|
||
ls -lh os.bin
|
||
'
|
||
|
||
if [ -f "os.bin" ]; then
|
||
echo "[+] Образ os.bin готов!"
|
||
echo "[*] Размер: $(ls -lh os.bin | awk '{print $5}')"
|
||
echo "[*] Для создания флешки: sudo ./create_boot_usb.sh /dev/sdX"
|
||
else
|
||
echo "[-] Ошибка сборки"
|
||
exit 1
|
||
fi |