mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 13:11:31 +00:00
krata: rework cross-compilation
This commit is contained in:
@ -7,20 +7,31 @@ cd "$(dirname "${REAL_SCRIPT}")/../.."
|
||||
./hack/dist/apk.sh
|
||||
KRATA_VERSION="$(./hack/dist/version.sh)"
|
||||
TARGET_ARCH="$(./hack/build/arch.sh)"
|
||||
TARGET_ARCH_ALT="$(KRATA_ARCH_KERNEL_NAME=1 ./hack/build/arch.sh)"
|
||||
CROSS_COMPILE="$(./hack/build/cross-compile.sh)"
|
||||
|
||||
TARGET_DIR="${PWD}/target"
|
||||
TARGET_OS_DIR="${TARGET_DIR}/os"
|
||||
mkdir -p "${TARGET_OS_DIR}"
|
||||
cp "${TARGET_DIR}/dist/krata_${KRATA_VERSION}_${TARGET_ARCH}.apk" "${TARGET_OS_DIR}/krata.apk"
|
||||
cp "${TARGET_DIR}/dist/krata_${KRATA_VERSION}_${TARGET_ARCH}.apk" "${TARGET_OS_DIR}/krata-${TARGET_ARCH}.apk"
|
||||
|
||||
DOCKER_INTERACTIVE_FLAGS=""
|
||||
DOCKER_FLAGS=""
|
||||
if [ -t 0 ]
|
||||
then
|
||||
DOCKER_INTERACTIVE_FLAGS="-it"
|
||||
DOCKER_FLAGS="-it"
|
||||
fi
|
||||
|
||||
docker run --rm --privileged -v "${PWD}:/mnt" ${DOCKER_INTERACTIVE_FLAGS} alpine:latest "/mnt/os/internal/stage1.sh"
|
||||
sudo chown "${USER}:${GROUP}" "${TARGET_OS_DIR}/rootfs.tar"
|
||||
if [ "${CROSS_COMPILE}" = "1" ]
|
||||
then
|
||||
DOCKER_FLAGS="${DOCKER_FLAGS} --platform linux/${TARGET_ARCH_ALT}"
|
||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
fi
|
||||
|
||||
ROOTFS="${TARGET_OS_DIR}/rootfs-${TARGET_ARCH}.tar"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
docker run --rm --privileged -v "${PWD}:/mnt" ${DOCKER_FLAGS} alpine:latest "/mnt/os/internal/stage1.sh" "${TARGET_ARCH}"
|
||||
sudo chown "${USER}:${GROUP}" "${ROOTFS}"
|
||||
sudo modprobe nbd
|
||||
|
||||
next_nbd_device() {
|
||||
@ -42,10 +53,10 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OS_IMAGE="${TARGET_OS_DIR}/krata.qcow2"
|
||||
OS_IMAGE="${TARGET_OS_DIR}/krata-${TARGET_ARCH}.qcow2"
|
||||
EFI_PART="${NBD_DEVICE}p1"
|
||||
ROOT_PART="${NBD_DEVICE}p2"
|
||||
ROOT_DIR="${TARGET_OS_DIR}/root"
|
||||
ROOT_DIR="${TARGET_OS_DIR}/root-${TARGET_ARCH}"
|
||||
EFI_DIR="${ROOT_DIR}/boot/efi"
|
||||
|
||||
cleanup() {
|
||||
@ -58,7 +69,7 @@ cleanup() {
|
||||
}
|
||||
|
||||
rm -f "${OS_IMAGE}"
|
||||
qemu-img create -f qcow2 "${TARGET_OS_DIR}/krata.qcow2" "2G"
|
||||
qemu-img create -f qcow2 "${OS_IMAGE}" "2G"
|
||||
|
||||
trap cleanup EXIT HUP INT TERM
|
||||
sudo qemu-nbd --connect="${NBD_DEVICE}" --cache=writeback -f qcow2 "${OS_IMAGE}"
|
||||
@ -75,7 +86,7 @@ sudo mount -t ext4 "${ROOT_PART}" "${ROOT_DIR}"
|
||||
sudo mkdir -p "${EFI_DIR}"
|
||||
sudo mount -t vfat "${EFI_PART}" "${EFI_DIR}"
|
||||
|
||||
sudo tar xf "${TARGET_OS_DIR}/rootfs.tar" -C "${ROOT_DIR}"
|
||||
sudo tar xf "${ROOTFS}" -C "${ROOT_DIR}"
|
||||
ROOT_UUID="$(sudo blkid "${ROOT_PART}" | sed -En 's/.*\bUUID="([^"]+)".*/\1/p')"
|
||||
EFI_UUID="$(sudo blkid "${EFI_PART}" | sed -En 's/.*\bUUID="([^"]+)".*/\1/p')"
|
||||
echo "${ROOT_UUID}"
|
||||
@ -89,7 +100,7 @@ sudo mount --make-private "${ROOT_DIR}/sys"
|
||||
|
||||
sudo cp "${PWD}/os/internal/stage2.sh" "${ROOT_DIR}/stage2.sh"
|
||||
echo "${ROOT_UUID}" | sudo tee "${ROOT_DIR}/root-uuid" > /dev/null
|
||||
sudo chroot "${ROOT_DIR}" /bin/sh -c "/stage2.sh"
|
||||
sudo chroot "${ROOT_DIR}" /bin/sh -c "/stage2.sh ${TARGET_ARCH} ${TARGET_ARCH_ALT}"
|
||||
sudo rm -f "${ROOT_DIR}/stage2.sh"
|
||||
sudo rm -f "${ROOT_DIR}/root-uuid"
|
||||
|
||||
@ -101,6 +112,6 @@ sudo rm -f "${ROOT_DIR}/root-uuid"
|
||||
|
||||
cleanup
|
||||
|
||||
OS_SMALL_IMAGE="${TARGET_OS_DIR}/krata.small.qcow2"
|
||||
OS_SMALL_IMAGE="${TARGET_OS_DIR}/krata-${TARGET_ARCH}.small.qcow2"
|
||||
qemu-img convert -O qcow2 "${OS_IMAGE}" "${OS_SMALL_IMAGE}"
|
||||
mv -f "${OS_SMALL_IMAGE}" "${OS_IMAGE}"
|
||||
|
Reference in New Issue
Block a user