This commit is contained in:
2026-03-29 22:21:36 +02:00
parent 08748a3498
commit 1c3c319d41
9 changed files with 26 additions and 45 deletions

7
Jenkinsfile vendored
View File

@@ -4,7 +4,6 @@ pipeline {
parameters { parameters {
booleanParam(name: 'BUILD_ALL_PROFILES', defaultValue: true, description: 'Build all profiles one by one') booleanParam(name: 'BUILD_ALL_PROFILES', defaultValue: true, description: 'Build all profiles one by one')
string(name: 'PROFILE', defaultValue: 'demo', description: 'Profile to build when BUILD_ALL_PROFILES is false') string(name: 'PROFILE', defaultValue: 'demo', description: 'Profile to build when BUILD_ALL_PROFILES is false')
booleanParam(name: 'FAKE_LEGACY', defaultValue: false, description: 'Use fake lh_config/lh_build wrappers')
booleanParam(name: 'KEEP_CONTAINERS', defaultValue: false, description: 'Stop at end but do not remove runtime containers') booleanParam(name: 'KEEP_CONTAINERS', defaultValue: false, description: 'Stop at end but do not remove runtime containers')
} }
@@ -21,11 +20,7 @@ pipeline {
else else
CMD="$CMD --profile $PROFILE" CMD="$CMD --profile $PROFILE"
fi fi
if [ "$FAKE_LEGACY" = "true" ]; then
CMD="$CMD --fake-legacy"
fi
if [ "$KEEP_CONTAINERS" = "true" ]; then if [ "$KEEP_CONTAINERS" = "true" ]; then
CMD="$CMD --keep-containers" CMD="$CMD --keep-containers"
fi fi

View File

@@ -19,16 +19,4 @@ load_env_file() {
set -a set -a
. "$ENV_FILE" . "$ENV_FILE"
set +a set +a
} }
maybe_fake_legacy() {
TOOL_NAME="$1"
if command -v "$TOOL_NAME" >/dev/null 2>&1; then
return 1
fi
if [ "${RETRODEBIAN_FAKE_LEGACY_TOOLS:-1}" = "1" ]; then
echo "[fake-legacy] $TOOL_NAME not found, emulating." >&2
return 0
fi
fail "$TOOL_NAME not found and RETRODEBIAN_FAKE_LEGACY_TOOLS != 1"
}

View File

@@ -12,11 +12,4 @@ load_env_file "$ENV_FILE"
[ -n "${PROFILE_ARTIFACT_DIR:-}" ] || fail "PROFILE_ARTIFACT_DIR is required" [ -n "${PROFILE_ARTIFACT_DIR:-}" ] || fail "PROFILE_ARTIFACT_DIR is required"
mkdir -p "$PROFILE_ARTIFACT_DIR/final" mkdir -p "$PROFILE_ARTIFACT_DIR/final"
if maybe_fake_legacy lh_build; then
OUTPUT_FILE="$PROFILE_ARTIFACT_DIR/final/${PROFILE_NAME:-profile}.iso"
printf 'fake iso for %s
' "${PROFILE_NAME:-unknown}" > "$OUTPUT_FILE"
exit 0
fi
exec lh_build "$LIVE_DIR" exec lh_build "$LIVE_DIR"

View File

@@ -11,11 +11,4 @@ load_env_file "$ENV_FILE"
[ -n "${LIVE_DIR:-}" ] || fail "LIVE_DIR is required" [ -n "${LIVE_DIR:-}" ] || fail "LIVE_DIR is required"
mkdir -p "$LIVE_DIR" mkdir -p "$LIVE_DIR"
if maybe_fake_legacy lh_config; then
mkdir -p "$LIVE_DIR/.fake-live-helper"
printf 'fake lh_config for %s
' "${PROFILE_NAME:-unknown}" > "$LIVE_DIR/.fake-live-helper/lh_config.txt"
exit 0
fi
exec lh_config "$LIVE_DIR" exec lh_config "$LIVE_DIR"

View File

@@ -0,0 +1,6 @@
FROM lpenz/debian-lenny-i386-minbase
ARG DEBIAN_FRONTEND=noninteractive
ARG ARCH=i386
RUN apt-get update && \
apt-get -y --force-yes install live-helper genisoimage syslinux squashfs-tools aptitude && \
apt-get clean

View File

@@ -0,0 +1,2 @@
FROM python:3.14-alpine
RUN apk add --no-cache git ca-certificates

View File

@@ -0,0 +1,12 @@
# building a modified Kernel + modules
FROM lpenz/debian-etch-i386-minbase
ARG DEBIAN_FRONTEND=noninteractive
ARG ARCH=i386
ARG CONCURRENCY_LEVEL=4
# Preparing Environment
RUN (echo "deb http://archive.debian.org/debian etch main contrib non-free" > /etc/apt/sources.list) && \
(echo "deb-src http://archive.debian.org/debian etch main contrib non-free" >> /etc/apt/sources.list) && \
mkdir -p /usr/src/modules &&\
apt-get update && \
apt-get install -y aptitude build-essential quilt cvs unzip git-core ncurses-dev

View File

@@ -100,7 +100,6 @@ def export_env(args: argparse.Namespace) -> int:
root = root_dir() root = root_dir()
ctx = build_context(root, args.phase, args.kind, args.profile or '', args.base or '', args.feature or '') ctx = build_context(root, args.phase, args.kind, args.profile or '', args.base or '', args.feature or '')
values = ctx.to_env() values = ctx.to_env()
values['RETRODEBIAN_FAKE_LEGACY_TOOLS'] = os.environ.get('RETRODEBIAN_FAKE_LEGACY_TOOLS', '1')
write_env_file(Path(args.output), values) write_env_file(Path(args.output), values)
return 0 return 0
@@ -214,9 +213,8 @@ def _env_and_path(root: Path, kind: str, phase: str, profile: str, base: str = '
ctx = build_context(root, phase, kind, profile, base, feature) ctx = build_context(root, phase, kind, profile, base, feature)
values = os.environ.copy() values = os.environ.copy()
values.update(ctx.to_env()) values.update(ctx.to_env())
values['RETRODEBIAN_FAKE_LEGACY_TOOLS'] = values.get('RETRODEBIAN_FAKE_LEGACY_TOOLS', '1')
env_path = profile_artifacts_dir(root, profile) / 'runtime' / f'{kind}-{ctx.current_name}-{phase}.env' env_path = profile_artifacts_dir(root, profile) / 'runtime' / f'{kind}-{ctx.current_name}-{phase}.env'
write_env_file(env_path, {k: str(v) for k, v in values.items() if k in ctx.to_env() or k == 'RETRODEBIAN_FAKE_LEGACY_TOOLS'}) write_env_file(env_path, {k: str(v) for k, v in values.items() if k in ctx.to_env()})
return values, env_path return values, env_path

View File

@@ -130,15 +130,13 @@ class Orchestrator:
builder: RuntimeSpec, builder: RuntimeSpec,
etch: RuntimeSpec, etch: RuntimeSpec,
lenny: RuntimeSpec, lenny: RuntimeSpec,
fake_legacy: bool = False,
keep_containers: bool = False, keep_containers: bool = False,
) -> None: ) -> None:
self.root = root self.root = root
self.fake_legacy = fake_legacy
self.keep_containers = keep_containers self.keep_containers = keep_containers
self.builder = Runtime(root, 'builder', self._resolve_image('builder-alpine', builder)) self.builder = Runtime(root, 'builder', self._resolve_image('orchestrator', builder))
self.etch = Runtime(root, 'etch', self._resolve_image('package-builder-etch', etch)) self.etch = Runtime(root, 'etch', self._resolve_image('package-builder', etch))
self.lenny = Runtime(root, 'lenny', self._resolve_image('live-helper', lenny)) self.lenny = Runtime(root, 'lenny', self._resolve_image('live-helper', lenny))
self.defaults = { self.defaults = {
'python': self.builder, 'python': self.builder,
@@ -173,7 +171,7 @@ class Orchestrator:
pass pass
def builder_env(self) -> dict[str, str]: def builder_env(self) -> dict[str, str]:
return {'RETRODEBIAN_FAKE_LEGACY_TOOLS': '1'} if self.fake_legacy else {} return {}
def context(self, phase: str, kind: str, *, profile: str = '', base: str = '', feature: str = '') -> BuildContext: def context(self, phase: str, kind: str, *, profile: str = '', base: str = '', feature: str = '') -> BuildContext:
profile_spec = load_profile(self.root, profile) if profile else None profile_spec = load_profile(self.root, profile) if profile else None
@@ -203,8 +201,6 @@ class Orchestrator:
def write_phase_env(self, phase: str, kind: str, output: Path, *, profile: str = '', base: str = '', feature: str = '') -> None: def write_phase_env(self, phase: str, kind: str, output: Path, *, profile: str = '', base: str = '', feature: str = '') -> None:
values = self.context(phase, kind, profile=profile, base=base, feature=feature).to_env() values = self.context(phase, kind, profile=profile, base=base, feature=feature).to_env()
if self.fake_legacy:
values['RETRODEBIAN_FAKE_LEGACY_TOOLS'] = '1'
write_env_file(output, values) write_env_file(output, values)
def python_phase(self, runtime: Runtime, phase: str, kind: str, *, profile: str = '', base: str = '', feature: str = '') -> None: def python_phase(self, runtime: Runtime, phase: str, kind: str, *, profile: str = '', base: str = '', feature: str = '') -> None:
@@ -358,7 +354,6 @@ def parser() -> argparse.ArgumentParser:
run_p.add_argument('--lenny-image', default='') run_p.add_argument('--lenny-image', default='')
run_p.add_argument('--lenny-dockerfile', default='builder/docker/live-helper/Dockerfile') run_p.add_argument('--lenny-dockerfile', default='builder/docker/live-helper/Dockerfile')
run_p.add_argument('--lenny-context', default='.') run_p.add_argument('--lenny-context', default='.')
run_p.add_argument('--fake-legacy', action='store_true')
run_p.add_argument('--keep-containers', action='store_true') run_p.add_argument('--keep-containers', action='store_true')
return p return p
@@ -372,7 +367,6 @@ def main() -> int:
builder=RuntimeSpec(args.builder_image, args.builder_dockerfile, args.builder_context), builder=RuntimeSpec(args.builder_image, args.builder_dockerfile, args.builder_context),
etch=RuntimeSpec(args.etch_image, args.etch_dockerfile, args.etch_context), etch=RuntimeSpec(args.etch_image, args.etch_dockerfile, args.etch_context),
lenny=RuntimeSpec(args.lenny_image, args.lenny_dockerfile, args.lenny_context), lenny=RuntimeSpec(args.lenny_image, args.lenny_dockerfile, args.lenny_context),
fake_legacy=args.fake_legacy,
keep_containers=args.keep_containers, keep_containers=args.keep_containers,
) )
orch.run(profile_names=profiles) orch.run(profile_names=profiles)