🇩🇪 Quelltext bauen mit Docker

Ich hab mich ans bauen des Quelltextes mit der Hilfe von Docker gewagt.

Nach offizieller Anleitung habe ich es geschaft bis zu einem Prozent zu kommen.

Dann bricht es ab.

Deshalb wollte ich mal fragen ob es bereits fertige Dockerfiles gibt die ich zum Vergleichen nutzen kann.

Aktuell habe ich keinen Zugriff auf meinen Rechner deswegen ersteinmal ohne Protokolle.

Ich habe nun geschafft, an das Skript zu gelangen.
Es ist bei weitem noch nicht fertig,
Vielleicht kann jemand auf typische Fehler aufmerksam machen.

Es ist erst mein dritter Versuch Android zu bauen.
Also abzuraten das einfach so zu nutzen.
Die Fehlermeldungen muss ich noch aus dem System ziehen.

docker.bash

#! /bin/env bash

set -eu

source variables.bash

mkdir -p "$build_dir"

cd "$build_dir"

cat <<'EOF' > "$build_dir/variables.bash"
#! /bin/env bash

# Do not uncomment. It is used for release only.
# set -eu

current_directory="$PWD"
data_directory="$current_directory/data"
binary_directory="$data_directory/binary"
fair_phone_os_directory="$data_directory/fair-phone-os"
qssi_directory="$fair_phone_os_directory/qssi"
target_directory="$fair_phone_os_directory/target"
download_directory="$data_directory/download"
extracted_directory="$data_directory/extracted"
compiled_directory="$data_directory/compiled"
repo_dir="/root/bin"

target_blob_url="https://storage.googleapis.com/fairphone-updates/fp6/d7467c7c-0355-40e0-bdd0-fdb92cdca113/FP6-target-QREL.15.105.0.20250623223003-blobs.tgz"
qssi_blob_url="https://storage.googleapis.com/fairphone-updates/fp6/d7467c7c-0355-40e0-bdd0-fdb92cdca113/FP6-QSSI-QREL.15.105.0.20250623223003-blobs.tgz"

qssi_blob_file="fp6-qssi-binaries.tgz"
qssi_blob_directory="$download_directory"
qssi_blob_path="$qssi_blob_directory/$qssi_blob_file"
qssi_extracted_directory="$extracted_directory/qssi"
qssi_proprietary_directory="$qssi_directory/device/fairphone/fp6-proprietary"
qssi_compiled_directory="$compiled_directory/qssi"

target_blob_file="fp6-target-binaries.tgz"
target_blob_directory="$download_directory"
target_blob_path="$target_blob_directory/$target_blob_file"
target_extracted_directory="$extracted_directory/target"
target_proprietary_directory="$target_directory/device/fairphone/fp6-proprietary"
target_compiled_directory="$compiled_directory/target"

repo="$repo_dir/repo"
EOF

cat <<EOF > "$build_dir/OS.Dockerfile"
FROM debian:13-slim

RUN apt update
RUN apt install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

RUN apt install -y python3 procps clang clangd

ADD install-repo.bash /root/
RUN bash /root/install-repo.bash
RUN /root/bin/repo version > /root/repo-version.txt
EOF

cat <<EOF > "$build_dir/Dockerfile"
FROM aosp_custom_debian

ADD variables.bash /root/

ADD download-source.bash /root/
ADD download-binaries.bash /root/
ADD extract-binaries.bash /root/
ADD compile.bash  /root/
ADD compile-qssi.bash /root/
ADD compile-target.bash /root/

ADD build.bash /root/
WORKDIR /root/
CMD ["/bin/bash"]
EOF

cat <<'EOF' > "$build_dir/install-repo.bash"
export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
mkdir -p /root/bin
curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
EOF

cat <<'EOF' > "$build_dir/build.bash"
#! /bin/env bash

export PATH="/root/bin:$PATH"

git config --global user.email "you@localhost"
git config --global user.name "Your Name"

cd /root/

/bin/bash /root/download-source.bash
/bin/bash /root/download-binaries.bash
/bin/bash /root/extract-binaries.bash
/bin/bash /root/compile.bash
EOF

cat <<'EOF' > "$build_dir/download-source.bash"
# SOURCE: URI: https://code.fairphone.com/projects/fairphone-gen-6/build-instructions.html

set -eu

source variables.bash

echo "Changing into fair phone OS directory."
mkdir -p "$fair_phone_os_directory" && cd "$fair_phone_os_directory"

if [[ ! -d $qssi_directory ]]
then
	echo "Download qssi source."
	mkdir -p "$qssi_directory" && cd "$qssi_directory"
	# $repo init -u ssh://gerrit-public.fairphone.software:29418/manifest -b refs/heads/odm/public-build/15/fp6 -m qssi.xml
	# or for http based access
	$repo init -u https://gerrit-public.fairphone.software/manifest -b refs/heads/odm/public-build/15/fp6 -m qssi.xml
	$repo sync --detach --current-branch --no-tags
else
	echo "Reusing existing qssi source."
fi

echo "Change back into the initial directory."
cd "$current_directory"

if [[ ! -d $target_directory ]]
then
	echo "Downloading the target source."
	mkdir -p "$target_directory" && cd "$target_directory"
	# $repo init -u ssh://gerrit-public.fairphone.software:29418/manifest -b refs/heads/odm/public-build/15/fp6 -m target.xml
	# or for http based access
	$repo init -u https://gerrit-public.fairphone.software/manifest -b refs/heads/odm/public-build/15/fp6 -m target.xml
	$repo sync --detach --current-branch --no-tags
else
	echo "Reusing existing target source."
fi
EOF

cat <<'EOF' > "$build_dir/download-binaries.bash"
# SOURCE: URI: https://code.fairphone.com/projects/fairphone-gen-6/binary-blobs-package.html#fairphone-gen-6-blobs

set -eu

source variables.bash

mkdir -p "$binary_directory"

cd "$binary_directory"

mkdir -p "$qssi_blob_directory"

curl \
	--output "$qssi_blob_path" \
	-C - \
	"$qssi_blob_url"

mkdir -p "$target_blob_directory"

curl \
	--output "$target_blob_path" \
	-C - \
	"$target_blob_url"
EOF

cat <<'EOF' > "$build_dir/extract-binaries.bash"

set -eu

source variables.bash

mkdir -p "$extracted_directory"

cd "$extracted_directory"

if [[ ! -d $qssi_extracted_directory ]]
then
	mkdir -p "$qssi_extracted_directory"
	cd "$qssi_extracted_directory"
	echo Extracting QSSI blobs.
	tar -xvzf "$qssi_blob_path"
else
	echo "Already extracted QSSI blobs."
fi

if [[ ! -d $qssi_proprietary_directory ]]
then
	echo "Running qssi script."
	cd "$qssi_extracted_directory"
	./FP6-QSSI-*-blobs.sh --target "$qssi_proprietary_directory"
else
	echo "Already ran qssi script."
fi

if [[ ! -d $target_extracted_directory ]]
then
	mkdir -p "$target_extracted_directory"
	cd "$target_extracted_directory"
	echo Extracting Target blobs.
	tar -xvzf "$target_blob_path"
else
	echo "Already extracted Target blobs."
fi

if [[ ! -d $target_proprietary_directory ]]
then
	echo "Running target script."
	cd "$target_extracted_directory"
	./FP6-target-*-blobs.sh --target "$target_proprietary_directory"
else
	echo "Already ran target script."
fi

EOF

cat <<'EOF' > "$build_dir/compile.bash"
source variables.bash

if [[ ! -L /usr/bin/python ]]
then
	echo Linking python.
	ln -s /usr/bin/python3 /usr/bin/python
else
	echo Already linked python.
fi

set +eu

if [[ ! -d "$qssi_compiled_directory" ]]
then
	echo "Compiling qssi."
	bash /root/compile-qssi.bash &> qssi.log
	mkdir -p "$qssi_compiled_directory"
else
	echo "Already compiled qssi."
fi

if [[ ! -d "$target_compiled_directory" ]]
then
	echo "Compiling target."
	bash /root/compile-target.bash &> target.log
	mkdir -p "$target_compiled_directory"
else
	echo "Already compiled target."
fi

EOF

cat <<'EOF' > "$build_dir/compile-qssi.bash"
source variables.bash
cd "$qssi_directory"
source build/envsetup.sh
lunch qssi_64-userdebug
bash build.sh dist --qssi_only
EOF

cat <<'EOF' > "$build_dir/compile-target.bash"
source variables.bash
cd "$target_directory"
source build/envsetup.sh
lunch fps-userdebug
RECOMPILE_KERNEL=1 bash kernel_platform/build/android/prepare_vendor.sh fps consolidate
bash build.sh dist --target_only
EOF

sudo docker build \
	-t "aosp_custom_debian" \
	-f "OS.Dockerfile" \
	.

sudo docker build \
	--no-cache \
	-t "$name:$version" \
	.

mkdir -p "$build_dir/data"

sudo docker run \
	--rm \
	--tty \
	--interactive \
	--name "$name" \
	-v "$build_dir/data":/root/data:Z \
	"$name:$version"