Implement basic yocto build setup based on protos from jhnc-oss

This commit is contained in:
2023-07-12 18:27:59 +02:00
parent 7b3cf1dbea
commit e65e90cba5
13 changed files with 392 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
#!/bin/sh
set -o errexit
set -o nounset
USERNAME="$(logname)"
echo "${USERNAME}":"$(id -u "${USERNAME}")":65536 >> /etc/subuid
echo "${USERNAME}":"$(id -g "${USERNAME}")":65536 >> /etc/subgid

90
dev/bootstrap.sh Executable file
View File

@@ -0,0 +1,90 @@
#!/usr/bin/env bash
set -o errexit
set -o pipefail
MANIFEST_BRANCH="${1:-main}"
YOCTO_GID="4040"
YOCTO_UID="2000"
YOCTO_USER="yocto"
YOCTO_WORKDIR="/opt/${YOCTO_USER}"
[[ -d "$PWD"/download ]] || mkdir "$PWD"/download
[[ -d "$PWD"/sstate-cache ]] || mkdir "$PWD"/sstate-cache
#sudo chmod -R 775 "${PWD}"/{download,sstate-cache}
subgidSize=$(( $(podman info --format "{{ range .Host.IDMappings.GIDMap }}+{{.Size }}{{end }}" ) - 1 ))
subuidSize=$(( $(podman info --format "{{ range .Host.IDMappings.UIDMap }}+{{.Size }}{{end }}" ) - 1 ))
if [ -z "$DO_DEPLOY" ] ; then DO_DEPLOY=false ; fi
if [ -z "$DO_SSTATE" ] ; then DO_SSTATE=false ; fi
usage() {
echo " --deploy map deploy folder for outside access"
echo " --sstate map sstate folder to preserve regarless of container"
echo " --name=<name> assign a name to the container"
}
while [ -n "$1" ] ; do
case "$1" in
--deploy)
DO_DEPLOY=true
;;
--sstate)
DO_SSTATE=true
;;
--name=*)
CONTAINER_NAME="$1"
;;
*)
usage
exit 1
;;
esac
shift
done
if $DO_SSTATE ; then
SSTATE_PATH="sstate-cache"
mkdir -p $SSTATE_PATH
sstate_param1="-v"
sstate_param2="${PWD}"/"${SSTATE_PATH}":"${YOCTO_WORKDIR}"/"${SSTATE_PATH}"
fi
if $DO_DEPLOY ; then
DEPLOY_PATH="deploy-rpms"
mkdir -p $DEPLOAY_PATH
deploy_param1="-v"
deploy_param2="${PWD}"/"${DEPOLY_PATH}":"${YOCTO_WORKDIR}"/"${DEPLOY_PATH}"
fi
podman run \
-ti \
--rm \
--pull=always \
--gidmap ${YOCTO_GID}:0:1 \
--gidmap $((YOCTO_GID+1)):$((YOCTO_GID+1)):$((subgidSize-YOCTO_GID)) \
--gidmap 0:1:${YOCTO_GID} \
--uidmap ${YOCTO_UID}:0:1 \
--uidmap $((YOCTO_UID+1)):$((YOCTO_UID+1)):$((subuidSize-YOCTO_UID)) \
--uidmap 0:1:${YOCTO_UID} \
--user "${YOCTO_USER}:${YOCTO_USER}" \
--workdir "${YOCTO_WORKDIR}" \
${deploy_param1} ${deploy_param2} \
${sstate_param1} ${sstate_param2} \
-v "${PWD}"/default.xml:"${YOCTO_WORKDIR}"/default.xml \
-v "${PWD}"/meta-caros:"${YOCTO_WORKDIR}"/meta-caros:Z \
-v "${PWD}"/dev:"${YOCTO_WORKDIR}"/dev:Z \
-v "${PWD}"/download:"${YOCTO_WORKDIR}"/download:Z \
-v "${PWD}"/sstate:"${YOCTO_WORKDIR}"/sstate:Z \
--env TEMPLATECONF="${YOCTO_WORKDIR}"/meta-caros/conf/templates \
--env SSTATE_PATH="${SSTATE_PATH}" \
${CONTAINER_NAME} \
ghcr.io/jhnc-oss/yocto-image/yocto:38 \
bash -c "dev/init_env.sh "

20
dev/init_env.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -o errexit
# Workaround for unsupported local manifest
mkdir _local
cd "${YOCTO_DIR}/_local"
cp "${YOCTO_DIR}/default.xml" .
git init -b master
git add .
git commit -m "local manifest"
cd - > /dev/null
repo --color=always init _local
repo sync --no-clone-bundle
rm -rf "${YOCTO_DIR}/_local"
source poky/oe-init-build-env
exec /bin/bash