info
|
1 |
Суть создать контейнер и в нем собрать образ любой фигни из гита. |
Полная очистка (если пересобираем с нуля)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Выйти из контейнера, если сидишь в нём exit cd /opt/build-linux-system docker compose down docker rmi my-builder docker rm -f armbian-ophub #docker image prune -a #удаляет вообще все образы #docker container prune Выходим из каталога: cd Удаляем все связанное с нашей сборкой: sudo rm -rf /opt/build-linux-system |
Пример:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
0. Создаем каталог mkdir /opt/build-linux-system cd /opt/build-linux-system 1. Создаем файлы конфигов докеров и композа cat > Dockerfile << "EOF" FROM debian:bookworm ENV DEBIAN_FRONTEND=noninteractive # 1. Сначала ставим ca-certificates, чтобы работали защищенные соединения RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* # 2. Добавляем КОРРЕКТНЫЙ репозиторий testing и ставим свежий qemu-user-static RUN echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list.d/testing.list && \ apt-get update && apt-get install -y --no-install-recommends -t testing qemu-user-static && \ rm /etc/apt/sources.list.d/testing.list && \ rm -rf /var/lib/apt/lists/* # 3. Устанавливаем все остальные пакеты из bookworm RUN apt-get update && apt-get install -y --no-install-recommends \ git curl wget sudo bc build-essential bison flex \ libssl-dev libncurses-dev device-tree-compiler \ python3 python3-pip python3-setuptools swig libpython3-dev \ rsync cpio kmod fakeroot debootstrap binfmt-support \ dosfstools parted gdisk util-linux e2fsprogs mtools u-boot-tools \ nano vim less tree htop procps uuid-runtime udev \ gcc-11 g++-11 \ && rm -rf /var/lib/apt/lists/* RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 && \ update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100 WORKDIR /work CMD ["bash"] EOF cat > docker-compose.yaml << "EOF" services: builder: build: . image: my-builder:latest container_name: builder privileged: true volumes: - ./work:/work - /dev:/dev working_dir: /work stdin_open: true tty: true command: bash EOF cat > .dockerignore << 'EOF' work/ output/ cache/ *.log EOF 2. Создаем директорию mkdir work 3. Включить qemu для ARM (один раз на хосте): docker run --privileged --rm tonistiigi/binfmt:latest --install all 3.1 Добавить луп устройства sudo modprobe loop max_loop=64 проверка: cat /proc/sys/fs/binfmt_misc/qemu-aarch64 # в строке flags должен быть F 4. Собрать образ (один раз и после правок Dockerfile) #docker compose build docker compose build --no-cache docker compose up -d 5. Зайти в контейнер (войти в VM): docker compose exec builder bash pwd # ожидаем /work ps aux | grep udev # udevd должен быть запущен ls -la /dev/loop* # loop-устройства видны В контейнере проверяем: cat /proc/sys/fs/binfmt_misc/qemu-aarch64 Если пусто то выполняем: mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc 6. Качаем репозиторий cd /work git clone -b napi-boards https://github.com/QwaSeeK/build.git cd build 7. Сборка: для напи2 (первый раз): ./compile.sh BOARD=napi2 BRANCH=current RELEASE=bookworm EXPERT=yes CPUTHREADS=2 #./compile.sh BOARD=napi2 BRANCH=current BUILD_DESKTOP=no BUILD_MINIMAL=no CPUTHREADS=2 EXPERT=yes KERNEL_CONFIGURE=no RELEASE=bookworm для napi2 (первый раз после сбоев): ./compile.sh BOARD=napi2 BRANCH=current RELEASE=bookworm EXPERT=yes CLEAN_LEVEL=make,dkms CPUTHREADS=2 для napi2 (последующие): ./compile.sh BOARD=napi2 BRANCH=current RELEASE=bookworm EXPERT=yes для napi-c: ./compile.sh BOARD=napi-c BRANCH=current RELEASE=bookworm EXPERT=yes 8. Для выхода на хост написать: exit 9. Готовый образ окажется на хосте в: ./work/build/output/ P.S. Проблема при зборке: # Сначала полностью сбросьте старые регистрации docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # Попробуйте версию 7.0.0, которая считается стабильной (Если 7.0.0 не поможет, попробуйте 8.1.5) docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --install arm64 docker run --privileged --rm tonistiigi/binfmt:qemu-v8.1.5 --install arm64 Проверка и уборка лишнего: docker compose ps # что запущено docker compose down # остановить docker system df # сколько места занято docker compose build --no-cache # Принудительно пересобрать без кэша Команды для изучения что можно собрать ядра/софт: Доступные борды napi: grep -r "KERNEL_TARGET" config/boards/ | grep -i napi | grep -v bana Что собирается: cat config/boards/napi-c.csc cat config/boards/napi2.csc Еще информации: cat config/sources/families/rk35xx.conf Очистка: cd /work/build rm -rf output/logs output/images cache/armbian # или CLEAN_LEVEL=make,dkms в команде |
Сборка с ядром 5.10.160
|
1 |
./compile.sh BOARD=rock-3a BRANCH=vendor RELEASE=bookworm EXPERT=yes CLEAN_LEVEL=make,dkms CPUTHREADS=2 USE_CCACHE=yes |