Compare commits
10 Commits
5bbf26be78
...
2560e543a1
Author | SHA1 | Date |
---|---|---|
Lance Vick | 2560e543a1 | |
Lance Vick | 352783aa65 | |
Lance Vick | 09c3a79d8c | |
Lance Vick | 88527fc427 | |
Lance Vick | cb72be053f | |
Lance Vick | 78376e2094 | |
Lance Vick | e75a319f87 | |
Lance Vick | 489fcbabf3 | |
Lance Vick | c55daf1cdf | |
Seán C McCord | e1e6792569 |
72
Makefile
72
Makefile
|
@ -43,25 +43,14 @@ else
|
||||||
endif
|
endif
|
||||||
BIN_DIR := $(CACHE_DIR_ROOT)/bin
|
BIN_DIR := $(CACHE_DIR_ROOT)/bin
|
||||||
SRC_DIR := src
|
SRC_DIR := src
|
||||||
KEY_DIR := keys
|
KEY_DIR := fetch/keys
|
||||||
OUT_DIR := out
|
OUT_DIR := out
|
||||||
docker = docker
|
docker = docker
|
||||||
|
|
||||||
include $(CONFIG_DIR)/toolchain.env
|
|
||||||
export $(shell sed 's/=.*//' $(CONFIG_DIR)/toolchain.env)
|
|
||||||
export
|
export
|
||||||
|
|
||||||
AUTOBUILD_TOOLCHAIN := true
|
include $(CONFIG_DIR)/make.env
|
||||||
ifeq ($(AUTOBUILD_TOOLCHAIN),true)
|
export $(shell sed 's/=.*//' $(CONFIG_DIR)/make.env)
|
||||||
ifeq ("$(wildcard $(CACHE_DIR_ROOT)/make.env)","")
|
|
||||||
echo := $(info $(shell echo "Initializing toolchain."))
|
|
||||||
build_env := $(shell $(MAKE) AUTOBUILD_TOOLCHAIN=false toolchain )
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
ifneq (,$(wildcard $(CACHE_DIR_ROOT)/make.env))
|
|
||||||
include $(CACHE_DIR_ROOT)/make.env
|
|
||||||
export $(shell sed 's/=.*//' $(CACHE_DIR_ROOT)/make.env)
|
|
||||||
endif
|
|
||||||
|
|
||||||
## Use env vars from existing release if present
|
## Use env vars from existing release if present
|
||||||
ifneq (,$(wildcard $(DIST_DIR)/release.env))
|
ifneq (,$(wildcard $(DIST_DIR)/release.env))
|
||||||
|
@ -78,8 +67,7 @@ toolchain: \
|
||||||
$(BIN_DIR) \
|
$(BIN_DIR) \
|
||||||
$(OUT_DIR) \
|
$(OUT_DIR) \
|
||||||
$(CACHE_DIR_ROOT)/toolchain.state \
|
$(CACHE_DIR_ROOT)/toolchain.state \
|
||||||
$(CACHE_DIR_ROOT)/container.env \
|
$(CACHE_DIR_ROOT)/container.env
|
||||||
$(CACHE_DIR_ROOT)/make.env
|
|
||||||
|
|
||||||
# Launch a shell inside the toolchain container
|
# Launch a shell inside the toolchain container
|
||||||
.PHONY: toolchain-shell
|
.PHONY: toolchain-shell
|
||||||
|
@ -88,17 +76,21 @@ toolchain-shell: toolchain
|
||||||
|
|
||||||
.PHONY: toolchain-update
|
.PHONY: toolchain-update
|
||||||
toolchain-update:
|
toolchain-update:
|
||||||
rm \
|
rm -rf \
|
||||||
$(CONFIG_DIR)/apt-pins-x86_64.list \
|
$(CONFIG_DIR)/apt-pins-x86_64.list \
|
||||||
$(CONFIG_DIR)/apt-sources-x86_64.list \
|
$(CONFIG_DIR)/apt-sources-x86_64.list \
|
||||||
$(CONFIG_DIR)/apt-hashes-x86_64.list
|
$(CONFIG_DIR)/apt-hashes-x86_64.list \
|
||||||
$(MAKE) $(CONFIG_DIR)/apt-hashes-x86_64.list \
|
$(FETCH_DIR)/apt
|
||||||
|
$(MAKE) $(CONFIG_DIR)/apt-hashes-x86_64.list
|
||||||
|
|
||||||
|
$(CONFIG_DIR)/apt-base.list:
|
||||||
|
touch $(CONFIG_DIR)/apt-base.list
|
||||||
|
|
||||||
# Regenerate toolchain dependency packages to latest versions
|
# Regenerate toolchain dependency packages to latest versions
|
||||||
$(CONFIG_DIR)/apt-base.list \
|
|
||||||
$(CONFIG_DIR)/apt-pins-x86_64.list \
|
$(CONFIG_DIR)/apt-pins-x86_64.list \
|
||||||
$(CONFIG_DIR)/apt-sources-x86_64.list \
|
$(CONFIG_DIR)/apt-sources-x86_64.list \
|
||||||
$(CONFIG_DIR)/apt-hashes-x86_64.list:
|
$(CONFIG_DIR)/apt-hashes-x86_64.list: \
|
||||||
|
$(CONFIG_DIR)/apt-base.list
|
||||||
mkdir -p $(FETCH_DIR)/apt \
|
mkdir -p $(FETCH_DIR)/apt \
|
||||||
&& docker run \
|
&& docker run \
|
||||||
--rm \
|
--rm \
|
||||||
|
@ -114,7 +106,7 @@ $(CONFIG_DIR)/apt-hashes-x86_64.list:
|
||||||
/usr/local/bin/packages-update
|
/usr/local/bin/packages-update
|
||||||
|
|
||||||
# Pin all packages in toolchain container to latest versions
|
# Pin all packages in toolchain container to latest versions
|
||||||
$(FETCH_DIR)/apt/Packages.gz:
|
$(FETCH_DIR)/apt/Packages.bz2: $(CONFIG_DIR)/apt-hashes-x86_64.list
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
--tty \
|
--tty \
|
||||||
|
@ -169,9 +161,8 @@ $(FETCH_DIR):
|
||||||
$(OUT_DIR):
|
$(OUT_DIR):
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
|
|
||||||
$(CACHE_DIR_ROOT)/make.env $(CACHE_DIR_ROOT)/container.env: \
|
$(CACHE_DIR_ROOT)/container.env: \
|
||||||
$(CONFIG_DIR)/global.env \
|
$(CONFIG_DIR)/make.env \
|
||||||
$(CONFIG_DIR)/toolchain.env \
|
|
||||||
$(CACHE_DIR_ROOT)/toolchain.state
|
$(CACHE_DIR_ROOT)/toolchain.state
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
|
@ -195,6 +186,7 @@ $(CACHE_DIR_ROOT)/make.env $(CACHE_DIR_ROOT)/container.env: \
|
||||||
--env DIST_DIR="$(DIST_DIR)" \
|
--env DIST_DIR="$(DIST_DIR)" \
|
||||||
--env FETCH_DIR="$(FETCH_DIR)" \
|
--env FETCH_DIR="$(FETCH_DIR)" \
|
||||||
--env KEY_DIR="$(KEY_DIR)" \
|
--env KEY_DIR="$(KEY_DIR)" \
|
||||||
|
--env BIN_DIR="$(BIN_DIR)" \
|
||||||
--env OUT_DIR="$(OUT_DIR)" \
|
--env OUT_DIR="$(OUT_DIR)" \
|
||||||
--env SRC_DIR="$(SRC_DIR)" \
|
--env SRC_DIR="$(SRC_DIR)" \
|
||||||
--env CACHE_DIR="$(CACHE_DIR)" \
|
--env CACHE_DIR="$(CACHE_DIR)" \
|
||||||
|
@ -206,16 +198,16 @@ $(CACHE_DIR_ROOT)/make.env $(CACHE_DIR_ROOT)/container.env: \
|
||||||
--volume $(TOOLCHAIN_VOLUME) \
|
--volume $(TOOLCHAIN_VOLUME) \
|
||||||
--workdir $(TOOLCHAIN_WORKDIR) \
|
--workdir $(TOOLCHAIN_WORKDIR) \
|
||||||
$(shell cat cache/toolchain.state 2> /dev/null) \
|
$(shell cat cache/toolchain.state 2> /dev/null) \
|
||||||
$(SRC_DIR)/toolchain/scripts/environment $(CACHE_DIR_ROOT)
|
$(SRC_DIR)/toolchain/scripts/environment > $@
|
||||||
|
|
||||||
$(CACHE_DIR_ROOT)/toolchain.tar: \
|
$(CACHE_DIR_ROOT)/toolchain.tar: \
|
||||||
$(CONFIG_DIR)/toolchain.env \
|
$(CONFIG_DIR)/make.env \
|
||||||
$(SRC_DIR)/toolchain/Dockerfile \
|
$(SRC_DIR)/toolchain/Dockerfile \
|
||||||
$(CONFIG_DIR)/apt-base.list \
|
$(CONFIG_DIR)/apt-base.list \
|
||||||
$(CONFIG_DIR)/apt-sources-$(ARCH).list \
|
$(CONFIG_DIR)/apt-sources-$(ARCH).list \
|
||||||
$(CONFIG_DIR)/apt-pins-$(ARCH).list \
|
$(CONFIG_DIR)/apt-pins-$(ARCH).list \
|
||||||
$(CONFIG_DIR)/apt-hashes-$(ARCH).list \
|
$(CONFIG_DIR)/apt-hashes-$(ARCH).list \
|
||||||
$(FETCH_DIR)/apt/Packages.gz
|
$(FETCH_DIR)/apt/Packages.bz2
|
||||||
mkdir -p $(CACHE_DIR)
|
mkdir -p $(CACHE_DIR)
|
||||||
DOCKER_BUILDKIT=1 \
|
DOCKER_BUILDKIT=1 \
|
||||||
docker build \
|
docker build \
|
||||||
|
@ -260,18 +252,33 @@ define fetch_file
|
||||||
"
|
"
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define git_archive
|
||||||
|
$(call git_clone,$(CACHE_DIR)/$(notdir $@),$(1),$(2)) \
|
||||||
|
&& tar \
|
||||||
|
-C $(CACHE_DIR)/$(notdir $@) \
|
||||||
|
--sort=name \
|
||||||
|
--mtime='@0' \
|
||||||
|
--owner=0 \
|
||||||
|
--group=0 \
|
||||||
|
--numeric-owner \
|
||||||
|
-cvf - \
|
||||||
|
. \
|
||||||
|
| gzip -n > $@ \
|
||||||
|
&& rm -rf $(CACHE_DIR)/$(notdir $@)
|
||||||
|
endef
|
||||||
|
|
||||||
define git_clone
|
define git_clone
|
||||||
[ -d $(1) ] || \
|
[ -d $(1) ] || \
|
||||||
mkdir -p $(FETCH_DIR) && \
|
mkdir -p $(1).tmp && \
|
||||||
mkdir $(1).tmp && \
|
|
||||||
git -C $(1).tmp init && \
|
git -C $(1).tmp init && \
|
||||||
git -C $(1).tmp remote add origin $(2) && \
|
git -C $(1).tmp remote add origin $(2) && \
|
||||||
git -C $(1).tmp fetch origin $(3) && \
|
git -C $(1).tmp fetch origin $(3) && \
|
||||||
git -C $(1).tmp -c advice.detachedHead=false checkout $(3) && \
|
git -C $(1).tmp -c advice.detachedHead=false checkout $(3) && \
|
||||||
|
git -C $(1).tmp submodule update --init && \
|
||||||
git -C $(1).tmp rev-parse --verify HEAD | grep -q $(3) || { \
|
git -C $(1).tmp rev-parse --verify HEAD | grep -q $(3) || { \
|
||||||
echo 'Error: Git ref/branch collision.'; exit 1; \
|
echo 'Error: Git ref/branch collision.'; exit 1; \
|
||||||
} && \
|
} && \
|
||||||
mv $(1).tmp $(1);
|
mv $(1).tmp $(1)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define apply_patches
|
define apply_patches
|
||||||
|
@ -300,7 +307,7 @@ define fetch_pgp_key
|
||||||
--recv-keys "$(1)" \
|
--recv-keys "$(1)" \
|
||||||
&& break; \
|
&& break; \
|
||||||
done; \
|
done; \
|
||||||
gpg --export -a $(1) > $(KEY_DIR)/$(1).asc; \
|
gpg --export -a $(1) > $@; \
|
||||||
')
|
')
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -311,6 +318,7 @@ define toolchain
|
||||||
$(2) \
|
$(2) \
|
||||||
--env UID=$(UID) \
|
--env UID=$(UID) \
|
||||||
--env GID=$(GID) \
|
--env GID=$(GID) \
|
||||||
|
--env PATH_PREFIX=$(PATH_PREFIX) \
|
||||||
--platform=linux/$(ARCH) \
|
--platform=linux/$(ARCH) \
|
||||||
--privileged \
|
--privileged \
|
||||||
--cpus $(CPUS) \
|
--cpus $(CPUS) \
|
||||||
|
|
|
@ -55,8 +55,8 @@ us as desired.
|
||||||
3. Define any build/dev dependencies for toolchain container
|
3. Define any build/dev dependencies for toolchain container
|
||||||
|
|
||||||
```
|
```
|
||||||
echo "libfaketime" >> config/toolchain/packages-base.txt
|
echo "libfaketime" >> config/apt-base.list
|
||||||
echo "build-essential" >> config/toolchain/packages-base.txt
|
echo "build-essential" >> config/apt-base.list
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Lock a base Debian container image hash
|
4. Lock a base Debian container image hash
|
||||||
|
@ -97,7 +97,7 @@ make reproduce
|
||||||
### Add and lock a new container dependency
|
### Add and lock a new container dependency
|
||||||
|
|
||||||
```
|
```
|
||||||
echo "vim-nox" >> config/toolchain/packages-base.txt
|
echo "vim-nox" >> config/apt-base.list
|
||||||
make toolchain-update
|
make toolchain-update
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
CACHE_DIR_ROOT=${1?}
|
|
||||||
HOME=/home/build
|
HOME=/home/build
|
||||||
CONFIG_DIR=/home/build/config
|
CONFIG_DIR=/home/build/config
|
||||||
|
|
||||||
cat ${CONFIG_DIR}/toolchain.env > ${CACHE_DIR_ROOT}/container.env
|
cat ${CONFIG_DIR}/make.env
|
||||||
|
|
||||||
cat <<- EOF >> ${CACHE_DIR_ROOT}/container.env
|
cat <<- EOF
|
||||||
HOME=${HOME}
|
HOME=${HOME}
|
||||||
PATH=${HOME}/${BIN_DIR}:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
PATH=${HOME}/${BIN_DIR}:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
TZ=UTC
|
TZ=UTC
|
||||||
|
@ -39,6 +38,6 @@ cat <<- EOF >> ${CACHE_DIR_ROOT}/container.env
|
||||||
FETCH_DIR=${HOME}/${FETCH_DIR}
|
FETCH_DIR=${HOME}/${FETCH_DIR}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
envsubst < ${CONFIG_DIR}/global.env > ${CACHE_DIR_ROOT}/make.env
|
if [ -f "${CONFIG_DIR}/container.env" ]; then
|
||||||
|
envsubst < ${CONFIG_DIR}/container.env
|
||||||
cat ${CACHE_DIR_ROOT}/make.env >> ${CACHE_DIR_ROOT}/container.env
|
fi
|
||||||
|
|
|
@ -5,6 +5,8 @@ uid=${UID?}
|
||||||
gid=${GID?}
|
gid=${GID?}
|
||||||
user=${USER:-"build"}
|
user=${USER:-"build"}
|
||||||
export HOME="/home/${user}"
|
export HOME="/home/${user}"
|
||||||
|
[ ! -z "$PATH_PREFIX" ] && \
|
||||||
|
export PATH="${PATH_PREFIX}:${PATH}"
|
||||||
|
|
||||||
# If running user is not root, pivot to custom user/group
|
# If running user is not root, pivot to custom user/group
|
||||||
if [ "$uid" != "0" ]; then
|
if [ "$uid" != "0" ]; then
|
||||||
|
|
|
@ -5,7 +5,10 @@ set -e
|
||||||
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
cp /config/* /etc/apt/
|
cp /config/apt-sources-x86_64.list /etc/apt/sources.list
|
||||||
|
cp /config/apt-hashes-x86_64.list /etc/apt/
|
||||||
|
cp /config/apt-pins-x86_64.list /etc/apt/
|
||||||
|
rm /etc/apt/sources.list.d/*
|
||||||
apt update -o Acquire::Check-Valid-Until=false
|
apt update -o Acquire::Check-Valid-Until=false
|
||||||
|
|
||||||
until apt-get install \
|
until apt-get install \
|
||||||
|
@ -31,4 +34,4 @@ mkdir -p /fetch/apt
|
||||||
|
|
||||||
mv /var/cache/apt/archives/*.deb /fetch/apt/
|
mv /var/cache/apt/archives/*.deb /fetch/apt/
|
||||||
apt-get install -y dpkg-dev
|
apt-get install -y dpkg-dev
|
||||||
env -C /fetch dpkg-scanpackages apt | gzip > /fetch/apt/Packages.gz
|
env -C /fetch dpkg-scanpackages apt | bzip2 > /fetch/apt/Packages.bz2
|
||||||
|
|
|
@ -3,7 +3,7 @@ set -e;
|
||||||
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
cp /config/* /etc/apt/
|
cp -R /config/* /etc/apt/
|
||||||
|
|
||||||
cat <<-EOF > /etc/apt/sources.list
|
cat <<-EOF > /etc/apt/sources.list
|
||||||
deb [trusted=yes] file:///fetch apt/
|
deb [trusted=yes] file:///fetch apt/
|
||||||
|
|
Loading…
Reference in New Issue