@@ -150,43 +150,98 @@ parse_configuration() {
150150# Distro-specific handling is done via an inner case.
151151# ==============================================================================
152152image_preproccessing_iot () {
153- case " $( echo " $DISTRO " | tr ' [:upper:]' ' [:lower:]' ) " in
154- ubuntu|ubuntu-server)
155- local LOOP_DEV PART_DEV
156- echo " [INFO][iot][ubuntu] Downloading base image..."
157- if ! wget -c " $IMG_URL " -O " $IMG_XZ_NAME " ; then
158- echo " [ERROR] Failed to download image from: $IMG_URL "
159- exit 1
160- fi
153+ case " $( echo " $DISTRO " | tr ' [:upper:]' ' [:lower:]' ) " in
154+ ubuntu|ubuntu-server)
155+ echo " [INFO][iot][ubuntu] Preparing environment..."
156+
157+ # --- Silent ensure of 7z (p7zip-full) ---
158+ if ! command -v 7z > /dev/null 2>&1 ; then
159+ echo " [INFO][iot][ubuntu] '7z' not found. Installing p7zip-full silently..."
160+ export DEBIAN_FRONTEND=noninteractive
161+ # Use -qq for quiet and redirect all output to /dev/null
162+ apt-get -qq update > /dev/null 2>&1 || true
163+ apt-get -qq install -y p7zip-full > /dev/null 2>&1 || {
164+ echo " [ERROR] Failed to install 'p7zip-full' required for 7z."
165+ exit 1
166+ }
167+ fi
168+
169+ # Check unsquashfs (required). Keep explicit to avoid unexpected installs.
170+ if ! command -v unsquashfs > /dev/null 2>&1 ; then
171+ echo " [ERROR] 'unsquashfs' not found. Please install 'squashfs-tools'."
172+ echo " e.g., apt-get install -y squashfs-tools"
173+ exit 1
174+ fi
161175
162- echo " [INFO][iot][ubuntu] Extracting preinstalled image..."
163- 7z x " $IMG_XZ_NAME "
176+ echo " [INFO][iot][ubuntu] Downloading ISO..."
164177
165- echo " [INFO][iot][ubuntu] Setting up loop device..."
166- LOOP_DEV=$( losetup --show --partscan --find " $IMG_NAME " )
167- PART_DEV=" ${LOOP_DEV} p1"
178+ # Derive a sane ISO_NAME if not provided
179+ if [[ -z " $ISO_NAME " ]]; then
180+ ISO_NAME=$( basename " ${IMG_URL%% \? * } " )
181+ [[ -z " $ISO_NAME " || " $ISO_NAME " == " /" ]] && ISO_NAME=" image.iso"
182+ fi
168183
169- if [[ ! -b " $PART_DEV " ]]; then
170- losetup -d " $LOOP_DEV "
171- echo " [ERROR] Partition not found: $PART_DEV "
172- exit 1
173- fi
184+ # Working dirs
185+ ISO_EXTRACT_DIR=" ${ISO_EXTRACT_DIR:- isoImage} "
186+ SQUASHFS_WORK_DIR=" ${SQUASHFS_WORK_DIR:- squashfs-root} "
187+ MNT_DIR=" ${MNT_DIR:-/ mnt/ iot-iso-tmp} " # kept for compatibility with other logic
188+
189+ # Fetch ISO
190+ if ! wget -q -c " $IMG_URL " -O " $ISO_NAME " ; then
191+ echo " [ERROR] Failed to download ISO from: $IMG_URL "
192+ exit 1
193+ fi
174194
175- mkdir -p " $MNT_DIR " " $ROOTFS_DIR "
176- mount " $PART_DEV " " $MNT_DIR "
177- cp -rap " $MNT_DIR /" * " $ROOTFS_DIR /"
178- umount -l " $MNT_DIR "
179- losetup -d " $LOOP_DEV "
180- ;;
181- debian)
182- echo " [ERROR][iot][debian] Not implemented yet."
195+ echo " [INFO][iot][ubuntu] Extracting ISO with 7z..."
196+ rm -rf " $ISO_EXTRACT_DIR " " $SQUASHFS_WORK_DIR "
197+ mkdir -p " $ISO_EXTRACT_DIR " " $ROOTFS_DIR "
198+
199+ if ! 7z x " $ISO_NAME " -o" $ISO_EXTRACT_DIR " -y > /dev/null; then
200+ echo " [ERROR] Failed to extract ISO: $ISO_NAME "
201+ exit 1
202+ fi
203+
204+ # Prefer minimal.squashfs; fallback to filesystem.squashfs
205+ SQUASHFS_PATH=" "
206+ if [[ -f " $ISO_EXTRACT_DIR /casper/minimal.squashfs" ]]; then
207+ SQUASHFS_PATH=" $ISO_EXTRACT_DIR /casper/minimal.squashfs"
208+ elif [[ -f " $ISO_EXTRACT_DIR /casper/filesystem.squashfs" ]]; then
209+ SQUASHFS_PATH=" $ISO_EXTRACT_DIR /casper/filesystem.squashfs"
210+ echo " [WARN][iot][ubuntu] 'minimal.squashfs' not found, using 'filesystem.squashfs'."
211+ else
212+ echo " [ERROR] Neither 'casper/minimal.squashfs' nor 'casper/filesystem.squashfs' found in ISO."
213+ echo " Looked under: $ISO_EXTRACT_DIR /casper/"
183214 exit 1
184- ;;
185- * )
186- echo " [ERROR][iot] Unsupported distro: $DISTRO "
215+ fi
216+
217+ echo " [INFO][iot][ubuntu] Unsquashing rootfs from: $SQUASHFS_PATH "
218+ if ! unsquashfs -d " $SQUASHFS_WORK_DIR " " $SQUASHFS_PATH " > /dev/null; then
219+ echo " [ERROR] Failed to unsquash: $SQUASHFS_PATH "
220+ exit 1
221+ fi
222+
223+ echo " [INFO][iot][ubuntu] Copying rootfs into: $ROOTFS_DIR "
224+ mkdir -p " $ROOTFS_DIR "
225+ if ! cp -rap " ${SQUASHFS_WORK_DIR} /" * " $ROOTFS_DIR /" ; then
226+ echo " [ERROR] Failed to copy rootfs into: $ROOTFS_DIR "
187227 exit 1
188- ;;
189- esac
228+ fi
229+
230+ echo " [INFO][iot][ubuntu] Rootfs prepared at: $ROOTFS_DIR "
231+ # Optional cleanup:
232+ # rm -rf "$ISO_EXTRACT_DIR" "$SQUASHFS_WORK_DIR"
233+ ;;
234+
235+ debian)
236+ echo " [ERROR][iot][debian] Not implemented yet."
237+ exit 1
238+ ;;
239+
240+ * )
241+ echo " [ERROR][iot] Unsupported distro: $DISTRO "
242+ exit 1
243+ ;;
244+ esac
190245}
191246
192247# Empty stubs for future targets
@@ -207,35 +262,23 @@ else
207262 CFG[" CODENAME" ]=" questing"
208263 CFG[" ARCH" ]=" arm64"
209264 CFG[" VARIANT" ]=" server"
210- CFG[" CHANNEL" ]=" daily-preinstalled"
211- CFG[" STREAM" ]=" current"
212- CFG[" FLAVOR" ]=" ubuntu-server"
265+ CFG[" BASE_IMAGE_URL" ]=" https://cdimage.ubuntu.com/releases/questing/release/ubuntu-25.10-live-server-arm64.iso"
213266fi
214267
215268TARGET_PLATFORM=" ${CFG[QCOM_TARGET_PLATFORM]:- iot} "
216269DISTRO=" ${CFG[DISTRO]:- ubuntu} "
217270CODENAME=" ${CFG[CODENAME]:- questing} "
218271ARCH=" ${CFG[ARCH]:- arm64} "
219272VARIANT=" ${CFG[VARIANT]:- server} "
220- CHANNEL=" ${CFG[CHANNEL]:- daily-preinstalled} "
221- STREAM=" ${CFG[STREAM]:- current} "
222- FLAVOR=" ${CFG[FLAVOR]:- ubuntu-server} "
273+ BASE_IMAGE_URL=" ${CFG[BASE_IMAGE_URL]:- " https://cdimage.ubuntu.com/releases/questing/release/ubuntu-25.10-live-server-arm64.iso" } "
223274
224275# Derive image parameters for Ubuntu (others can be added later)
225276case " $( echo " $DISTRO " | tr ' [:upper:]' ' [:lower:]' ) " in
226277 ubuntu|ubuntu-server)
227- IMG_STEM=" ${CODENAME} -preinstalled-${VARIANT} -${ARCH} .img"
228- IMG_XZ_NAME=" ${IMG_STEM} .xz"
229- # Ubuntu daily-preinstalled URL format (no codename directory in the path):
230- # https://cdimage.ubuntu.com/<flavor>/<channel>/<stream>/<codename>-preinstalled-<variant>-<arch>.img.xz
231- IMG_URL=" https://cdimage.ubuntu.com/${FLAVOR} /${CHANNEL} /${STREAM} /${IMG_XZ_NAME} "
232- IMG_NAME=" $IMG_STEM "
278+ IMG_URL=${BASE_IMAGE_URL}
233279 ;;
234280 * )
235281 # Leave unsupported distros to be implemented inside the respective target function later.
236- IMG_STEM=" "
237- IMG_XZ_NAME=" "
238- IMG_NAME=" "
239282 IMG_URL=" "
240283 ;;
241284esac
@@ -246,10 +289,7 @@ echo " DISTRO=$DISTRO"
246289echo " CODENAME=$CODENAME "
247290echo " ARCH=$ARCH "
248291echo " VARIANT=$VARIANT "
249- echo " CHANNEL=$CHANNEL "
250- echo " STREAM=$STREAM "
251- echo " FLAVOR=$FLAVOR "
252- [[ -n " $IMG_URL " ]] && echo " URL=$IMG_URL "
292+ echo " BASE_IMAGE_URL=${BASE_IMAGE_URL} "
253293
254294# ==============================================================================
255295# Step 2–3: Target platform switch – preprocess image to fill rootfs/
0 commit comments