<sub>2025-12-20 @2100</sub> #yocto #macos-nonsense #crops #docker # About I anticipate some differences in software development transitioning from my Linux setup to macOS, but research suggests that Yocto development is achievable with a docker project called [CROPS (CROss PlatformS)](https://docs.yoctoproject.org/dev-manual/start.html#setting-up-to-use-cross-platforms-crops). I'll give this a try. # Prerequsites Install [Docker Desktop on Mac w/ Apple Silicon](https://docs.docker.com/desktop/install/mac-install/). Following installation, go into settings >> resources and adjust as needed. On my M3 MAX I have the following set. After that go grab the CROPS source. | Resources | Allocation | | --------- | ---------- | | CPU | 16 | | Memory | 16GB | | Disk | 128GB | | Swap | 1GB | > [!WARNING] > Adjusting the `Memory` and `Disk` resources may be required in order to get a successful build. If I receive errors that mention OOM (out of memory) or indicates a task being killed this is a good indication I don't have enough resources. # Fetching & Building I need two docker repos the CROPS source and then a [fork by Esa Jaaskela](https://github.com/ejaaskel/yocto-dockerfiles) that addresses issues like replacing a few GNU commands w/ BSD compatible commands for some build scripts. > [!NOTE] > Not quite understanding this process but it's important to note that I can't use the intended image from `poky-container` because it's AMD64 and we want ARM64. ```bash # CROPS ❯ git clone https://github.com/crops/poky-container.git ``` ```bash # Esa's Fork ❯ git clone [email protected]:ejaaskel/yocto-dockerfiles.git ❯ cd yocto-dockerfiles ❯ export REPO=ejaaskel/yocto ❯ export DISTRO_TO_BUILD=ubuntu-22.04 ❯ ./build_container ❯ cd .. ``` Modify the `poky-container` docker file. Then build the poky image. I'll continue as if i'm following the official [CROPS Mac Guide](https://github.com/crops/docker-win-mac-docs/wiki/Mac-Instructions) but I can easily go back and reference those steps. ```bash # Modify Dockerfile, comment out two lines, add two new ones ❯ cd poky-container && vim Dockerfile # ARG BASE_DISTRO=SPECIFY_ME # FROM crops/yocto:$BASE_DISTRO-base ARG BASE_DISTRO=ubuntu-22.04 FROM ejaaskel/yocto:$BASE_DISTRO-base # Build poky ❯ docker build . -t crops/poky:selfbuilt ❯ cd .. ``` # Volume Creation & Startup Now I need to create a volume first and then start a container to do our yocto work. The CROPS guide talks about the file server called samba but if I use `docker cp` it completely removes the need for a file server. ```bash # Create volume, start container to do work ❯ docker volume create --name myvolume ❯ docker run -it --rm -v myvolume:/workdir busybox chown -R 1000:1000 /workdir ❯ docker run --rm -it -v myvolume:/workdir crops/poky:selfbuilt --workdir=/workdir ``` This will drop me in a shell and now I can follow my normal yocto workflow with pulling down poky and other meta layers then building w/ `bitbake`. A couple useful commands to remember. ```bash # Drop yourself into the docker container as root ❯ docker exec -it --user=root <container-id> bash # Copy files over (e.g. images) ❯ docker cp <containerId>:workdir/<file> . ``` > [!NOTE] > The poky container should contain all necessary dependencies called out under the official yocto user guide. If additional packages are needed I can use that `docker exec` command above to get in as root and install them. > [!NOTE] > Still getting the fetch failure for `rpi-bootfiles` recipe. It is taking forever to check out those sources. I'm thinking it just times out? I noticed I get a bit further when I run the command `bitbake target --runall=fetch`. I think it's my wifi being 25Mbps that is causing the fetch to timeout. Need to confirm this later on my home network.