Files
ForceArchCTBuilder/Readme.md
2023-10-01 19:45:51 +02:00

53 lines
2.1 KiB
Markdown

# Forced architecture LXC-CT builder
Scripts support ARM builds only.
This only works if the binary of the target system can run on the host one,
if that is not the case it will fail trying to build it.
For example you are able to build an armHF contaiter on a arm64(Aarch64) system,
or an build i368(x86) container on a amd64(x86_64) system.
## Usage
Use `buildDistroBuilder.sh` to build distrobuilder with the required patch
Use `buildCT.sh -i` to iteratively build a LXC-Container template
Use `buildCT.sh -a <Architecture> -d <Distro> -v <Variant>` to iteratively build a LXC-Container template
**Available Distros**
* Debian11 (Debian 11)
* Debian12 (Debian 12)
* Alpine318 (Alpine 3.18)
* RasPiOS11 (Raspbian/Raspberry Pi OS 11)
**Available Variants**
* minimal (Bare minimal for CT to run)
* default (Adds nano and ssh server)
**Available Architecture**
* armhf (All distros)
* aarch64 (Alpine)
* armv7 (Alpine)
* arm64 (Debian)
* armel (Debian)
## Install software dependencies
dependencies avalible in apt
```
apt install ca-certificates git make debootstrap curl gcc libc-dev nano gnupg2 rsync xz-utils --no-install-recommends -y
```
Golang in the apt repo is not new enough install it directly from release binary
```
rm -rf /usr/local/go
curl -L https://go.dev/dl/go$(curl -Ls https://go.dev/VERSION?m=text |sed 's/go//g').linux-<Arch>.tar.gz -o /tmp/go.tar.gz
tar -C /usr/local -xzf /tmp/go.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> $HOME/.profile
export PATH=$PATH:/usr/local/go/bin
```
## How it works
It applies a patch to [distrobuilder](https://github.com/lxc/distrobuilder) before building it,
this patch disables the default architecture mapping behavior, and allows an architecture to be forced using the `image.architecture_mapped=` parameter.
the default behavior will check the architecture of the host system and map it to the target CT distro (for example if building a Debian container on a Aarch64 system it will map it to arm64)
Tesed on [distrobuilder](https://github.com/lxc/distrobuilder) commit `29e94ac90dc52ae4e5fc0c6ad34951d4369aa001`