139139 # Reload systemd units generated from fstab so the mount can work on first run.
140140 # Example output:
141141 # [genesis-bootstrap] running: systemctl daemon-reload
142- if command -v systemctl > /dev/null 2>&1 ; then
143- log " running: systemctl daemon-reload"
144- systemctl daemon-reload || true
145- fi
142+ log " running: systemctl daemon-reload"
143+ systemctl daemon-reload || true
146144 else
147145 log " /etc/fstab already has the correct UUID entry for ${MOUNTPOINT} "
148146 fi
153151 # Reload systemd units generated from fstab so the mount can work on first run.
154152 # Example output:
155153 # [genesis-bootstrap] running: systemctl daemon-reload
156- if command -v systemctl > /dev/null 2>&1 ; then
157- log " running: systemctl daemon-reload"
158- systemctl daemon-reload || true
159- fi
154+ log " running: systemctl daemon-reload"
155+ systemctl daemon-reload || true
160156 fi
161157 else
162158 log " could not determine UUID for ${PART_DEV} ; skipping fstab update"
@@ -242,20 +238,29 @@ if host_mountpoint "/var/lib/genesis/data"; then
242238 if ! grep -qs " ^[[:space:]]*data_directory[[:space:]]*=[[:space:]]*'${NEW_PGDATA} '" " ${PG_CONF_FILE} " ; then
243239 log " configuring PostgreSQL data_directory to ${NEW_PGDATA} "
244240
245- if command -v systemctl > /dev/null 2>&1 ; then
246- systemctl stop postgresql || true
247- fi
248-
241+ systemctl stop postgresql || true
249242 mkdir -p " ${NEW_PGDATA} "
250243 chown -R postgres:postgres " /var/lib/genesis/data/postgresql" || true
251244
252245 if [[ -d " ${OLD_PGDATA} " && ! -f " ${NEW_PGDATA} /PG_VERSION" ]]; then
253246 log " copying PostgreSQL data directory to ${NEW_PGDATA} "
254- if command -v rsync > /dev/null 2>&1 ; then
255- rsync -aHAX --numeric-ids " ${OLD_PGDATA} /" " ${NEW_PGDATA} /"
256- else
257- cp -a " ${OLD_PGDATA} /." " ${NEW_PGDATA} /"
258- fi
247+ MAX_RETRIES=5
248+ RETRY_COUNT=0
249+ while [[ ${RETRY_COUNT} -lt ${MAX_RETRIES} ]]; do
250+ if rsync -aHAX --numeric-ids " ${OLD_PGDATA} /" " ${NEW_PGDATA} /" ; then
251+ log " rsync completed successfully"
252+ break
253+ else
254+ RETRY_COUNT=$(( RETRY_COUNT + 1 ))
255+ if [[ ${RETRY_COUNT} -lt ${MAX_RETRIES} ]]; then
256+ log " rsync failed, retrying in 0.5s (attempt ${RETRY_COUNT} /${MAX_RETRIES} )"
257+ sleep 0.5
258+ else
259+ log " ERROR: rsync failed after ${MAX_RETRIES} attempts"
260+ exit 1
261+ fi
262+ fi
263+ done
259264 chown -R postgres:postgres " ${NEW_PGDATA} " || true
260265 else
261266 log " PostgreSQL data directory already present under ${NEW_PGDATA} ; skipping copy"
@@ -267,17 +272,13 @@ if host_mountpoint "/var/lib/genesis/data"; then
267272 printf ' %s\n' " data_directory = '${NEW_PGDATA} '" >> " ${PG_CONF_FILE} "
268273 fi
269274
270- if command -v systemctl > /dev/null 2>&1 ; then
271- systemctl daemon-reload || true
272- systemctl start postgresql || true
273- fi
275+ systemctl daemon-reload || true
276+ systemctl start postgresql || true
274277 else
275278 log " PostgreSQL is already configured to use ${NEW_PGDATA} "
276279 fi
277280
278- if command -v systemctl > /dev/null 2>&1 ; then
279- systemctl start postgresql || true
280- fi
281+ systemctl start postgresql || true
281282 else
282283 log " PostgreSQL config not found at ${PG_CONF_FILE} ; skipping PostgreSQL relocation"
283284 fi
294295# Additional PostgreSQL configuration
295296sudo -u postgres psql -c " ALTER SYSTEM SET io_method = 'io_uring';"
296297
298+ # Mount CD-ROM if device is present.
299+ CDROM_DEV=" $( lsblk -dn -o NAME,TYPE | awk ' $2=="rom" {print "/dev/"$1; exit}' ) "
300+ CDROM_MOUNTPOINT=" /mnt/cdrom"
301+ if [[ -n " ${CDROM_DEV} " ]]; then
302+ log " cd-rom device detected: ${CDROM_DEV} "
303+ mkdir -p " ${CDROM_MOUNTPOINT} "
304+ if mountpoint -q " ${CDROM_MOUNTPOINT} " ; then
305+ log " cd-rom is already mounted at ${CDROM_MOUNTPOINT} "
306+ else
307+ if mount -o ro " ${CDROM_DEV} " " ${CDROM_MOUNTPOINT} " ; then
308+ log " cd-rom mounted at ${CDROM_MOUNTPOINT} "
309+ else
310+ log " failed to mount cd-rom ${CDROM_DEV} at ${CDROM_MOUNTPOINT} "
311+ fi
312+ fi
313+ else
314+ log " cd-rom device not detected"
315+ fi
316+
317+ # Prepare templated configuration files and apply them
318+ sudo gc-bootstrap-templates
319+ sudo netplan apply
320+ sudo systemctl restart \
321+ systemd-resolved.service \
322+ dnsdist@private.service
323+
297324# Apply migrations
298325source " $VENV_PATH /bin/activate"
299326# TODO(akremenetsky): Database configuration parameters should be taken
@@ -312,7 +339,7 @@ sudo systemctl enable --now \
312339 genesis-universal-scheduler
313340
314341# Perform the bootstrap of GC
315- gc-bootstrap
342+ gc-bootstrap --config-file /etc/genesis_core/genesis_core.conf
316343
317344
318345# Configure NAT
0 commit comments