@@ -26,6 +26,54 @@ echo -e " Custom Besu: ${CUSTOM_BESU_DIR}"
2626BESU_PACKAGE_TAG=" beta-v2.1-rc16.2-20250521134911-f6cb0f2"
2727BESU_BASE_IMAGE=" consensys/linea-besu-package:${BESU_PACKAGE_TAG} "
2828
29+ # Publish options (can be overridden by flags or env)
30+ PUSH_IMAGES=${PUSH_IMAGES:- false}
31+ REGISTRY=${REGISTRY:- }
32+ NAMESPACE=${NAMESPACE:- }
33+ BESU_IMAGE_NAME=${BESU_IMAGE_NAME:- linea-besu-minimal-rln}
34+ RLN_PROVER_IMAGE_NAME=${RLN_PROVER_IMAGE_NAME:- status-rln-prover}
35+ IMAGE_TAG_SUFFIX=${IMAGE_TAG_SUFFIX:- }
36+
37+ print_usage () {
38+ cat << USAGE
39+ Usage: $( basename " $0 " ) [options]
40+
41+ Options:
42+ --push Push images to a registry after build (default: ${PUSH_IMAGES} )
43+ --registry <host> Registry host (e.g. ghcr.io, docker.io)
44+ --namespace <ns> Namespace/org (e.g. status-im)
45+ --besu-name <name> Besu image repository name (default: ${BESU_IMAGE_NAME} )
46+ --prover-name <name> RLN prover image repository name (default: ${RLN_PROVER_IMAGE_NAME} )
47+ --tag-suffix <suffix> Optional tag suffix to append after timestamp (e.g. -dev)
48+ -h, --help Show this help
49+
50+ Environment vars:
51+ PUSH_IMAGES, REGISTRY, NAMESPACE, BESU_IMAGE_NAME, RLN_PROVER_IMAGE_NAME, IMAGE_TAG_SUFFIX
52+ USAGE
53+ }
54+
55+ # Simple args parser
56+ while [[ $# -gt 0 ]]; do
57+ case " $1 " in
58+ --push)
59+ PUSH_IMAGES=true; shift ;;
60+ --registry)
61+ REGISTRY=" $2 " ; shift 2 ;;
62+ --namespace)
63+ NAMESPACE=" $2 " ; shift 2 ;;
64+ --besu-name)
65+ BESU_IMAGE_NAME=" $2 " ; shift 2 ;;
66+ --prover-name)
67+ RLN_PROVER_IMAGE_NAME=" $2 " ; shift 2 ;;
68+ --tag-suffix)
69+ IMAGE_TAG_SUFFIX=" $2 " ; shift 2 ;;
70+ -h|--help)
71+ print_usage; exit 0 ;;
72+ * )
73+ echo -e " ${YELLOW} Unknown option: $1 ${NC} " ; print_usage; exit 1 ;;
74+ esac
75+ done
76+
2977echo -e " ${BLUE} π¦ Building RLN Bridge Rust Library for Linux...${NC} "
3078cd " ${LINEA_SEQUENCER_DIR} /sequencer/src/main/rust/rln_bridge"
3179
@@ -202,7 +250,8 @@ rm -f extract-deps.sh
202250
203251# Build the minimal custom image
204252TIMESTAMP=$( date +%Y%m%d%H%M%S)
205- BESU_IMAGE_TAG=" linea-besu-minimal-rln:${TIMESTAMP} "
253+ TAG_WITH_TIME=" ${TIMESTAMP}${IMAGE_TAG_SUFFIX} "
254+ BESU_IMAGE_TAG=" ${BESU_IMAGE_NAME} :${TAG_WITH_TIME} "
206255
207256echo -e " ${YELLOW} π¨ Building Docker image...${NC} "
208257docker build --platform linux/amd64 -t " $BESU_IMAGE_TAG " .
@@ -211,25 +260,64 @@ echo -e "${GREEN}β
Minimal custom Besu image built: $BESU_IMAGE_TAG${NC}"
211260
212261echo -e " ${BLUE} π³ Building RLN Prover Docker image...${NC} "
213262cd " $STATUS_RLN_PROVER_DIR "
214- RLN_PROVER_TAG=" status-rln-prover :${TIMESTAMP } "
263+ RLN_PROVER_TAG=" ${RLN_PROVER_IMAGE_NAME} :${TAG_WITH_TIME } "
215264docker build --platform linux/amd64 -t " $RLN_PROVER_TAG " .
216265
217266echo -e " ${GREEN} β
RLN Prover image built: $RLN_PROVER_TAG ${NC} "
218267
268+ # ##############################################
269+ # Optional: Push images to a registry
270+ # ##############################################
271+
272+ BESU_IMAGE_REMOTE=" $BESU_IMAGE_TAG "
273+ RLN_PROVER_IMAGE_REMOTE=" $RLN_PROVER_TAG "
274+
275+ if [[ -n " $REGISTRY " || -n " $NAMESPACE " ]]; then
276+ BESU_IMAGE_REMOTE=" ${REGISTRY: +${REGISTRY} / }${NAMESPACE: +${NAMESPACE} / }${BESU_IMAGE_NAME} :${TAG_WITH_TIME} "
277+ RLN_PROVER_IMAGE_REMOTE=" ${REGISTRY: +${REGISTRY} / }${NAMESPACE: +${NAMESPACE} / }${RLN_PROVER_IMAGE_NAME} :${TAG_WITH_TIME} "
278+ fi
279+
280+ if [[ " $PUSH_IMAGES " == " true" ]]; then
281+ echo -e " ${BLUE} π€ Pushing images to registry...${NC} "
282+ echo -e " Besu: ${BESU_IMAGE_REMOTE} "
283+ echo -e " RLN Prover: ${RLN_PROVER_IMAGE_REMOTE} "
284+ docker tag " $BESU_IMAGE_TAG " " $BESU_IMAGE_REMOTE "
285+ docker push " $BESU_IMAGE_REMOTE "
286+ docker tag " $RLN_PROVER_TAG " " $RLN_PROVER_IMAGE_REMOTE "
287+ docker push " $RLN_PROVER_IMAGE_REMOTE "
288+ echo -e " ${GREEN} β
Images pushed successfully${NC} "
289+ fi
290+
219291echo -e " ${BLUE} π Updating Docker Compose...${NC} "
220292COMPOSE_FILE=" ${SCRIPT_DIR} /docker/compose-spec-l2-services-rln.yml"
221293if [[ -f " $COMPOSE_FILE " ]]; then
222294 # Create backup
223295 cp " $COMPOSE_FILE " " ${COMPOSE_FILE} .backup.$( date +%Y%m%d%H%M%S) "
224-
225- # Update only the sequencer and l2-node-besu images
226- sed -i.tmp " s|image: linea-besu.*:.*|image: ${BESU_IMAGE_TAG} |g" " $COMPOSE_FILE "
227- sed -i.tmp " s|image: status-rln-prover:.*|image: ${RLN_PROVER_TAG} |g" " $COMPOSE_FILE "
228- rm -f " ${COMPOSE_FILE} .tmp"
229-
296+
297+ # Update image lines for specific services only
298+ awk -v besu_img=" $BESU_IMAGE_REMOTE " -v rln_img=" $RLN_PROVER_IMAGE_REMOTE " '
299+ /^[[:space:]]*container_name:[[:space:]]*sequencer$/ { tgt = "besu" }
300+ /^[[:space:]]*container_name:[[:space:]]*l2-node-besu$/ { tgt = "besu" }
301+ /^[[:space:]]*container_name:[[:space:]]*rln-prover$/ { tgt = "rln" }
302+ /^[[:space:]]*container_name:[[:space:]]*karma-service$/ { tgt = "rln" }
303+ {
304+ if (tgt != "" && $0 ~ /^[[:space:]]*image:[[:space:]]*/) {
305+ match($0, /^[[:space:]]*/); lead = substr($0, 1, RLENGTH);
306+ if (tgt == "besu") {
307+ print lead "image: " besu_img;
308+ } else {
309+ print lead "image: " rln_img;
310+ }
311+ tgt = "";
312+ next;
313+ }
314+ print $0;
315+ }
316+ ' " $COMPOSE_FILE " > " ${COMPOSE_FILE} .tmp" && mv " ${COMPOSE_FILE} .tmp" " $COMPOSE_FILE "
317+
230318 echo -e " ${GREEN} β
Updated Docker Compose with minimal images:${NC} "
231- echo -e " Besu: $BESU_IMAGE_TAG "
232- echo -e " RLN Prover: $RLN_PROVER_TAG "
319+ echo -e " sequencer, l2-node-besu -> ${BESU_IMAGE_REMOTE} "
320+ echo -e " rln-prover, karma-service -> ${RLN_PROVER_IMAGE_REMOTE} "
233321fi
234322
235323# Clean up build directory
@@ -240,14 +328,14 @@ echo -e "${GREEN}π Minimal Build Complete!${NC}"
240328echo -e " ${BLUE} π Built Components:${NC} "
241329echo -e " Custom Sequencer JAR: $( basename " $SEQUENCER_JAR " ) "
242330echo -e " RLN Library: librln_bridge.so (Linux x86-64)"
243- echo -e " Minimal Besu Image: $BESU_IMAGE_TAG "
244- echo -e " RLN Prover Image: $RLN_PROVER_TAG "
331+ echo -e " Minimal Besu Image: $BESU_IMAGE_REMOTE "
332+ echo -e " RLN Prover Image: $RLN_PROVER_IMAGE_REMOTE "
245333echo
246334echo -e " ${YELLOW} π Next Steps:${NC} "
247335echo -e " 1. Run: ${GREEN} make start-env-with-rln${NC} "
248336echo -e " 2. Test gasless transactions"
249337echo -e " 3. Check logs: ${GREEN} docker logs sequencer${NC} "
250338echo
251339echo -e " ${BLUE} π§ Environment Variables:${NC} "
252- echo -e " export BESU_IMAGE_TAG =${BESU_IMAGE_TAG } "
253- echo -e " export RLN_PROVER_IMAGE_TAG =${RLN_PROVER_TAG } "
340+ echo -e " export BESU_IMAGE_REF =${BESU_IMAGE_REMOTE } "
341+ echo -e " export RLN_PROVER_IMAGE_REF =${RLN_PROVER_IMAGE_REMOTE } "
0 commit comments