Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: OTA uploads slim kernel + initramfs for universal Mac/ThinkPad boot

- upload-release.sh: auto-uploads vmlinuz-slim + initramfs.cpio.gz if
they exist as siblings of vmlinuz
- native-builder.mjs: extracts slim kernel + initramfs from Docker
- ac-os pull: downloads slim kernel + initramfs from CDN when available
- ac-os flash: auto-detects slim kernel and uses systemd-boot mode

One `ac-os pull && ac-os flash` now produces a USB that boots on both.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+46 -4
+15
fedac/native/ac-os
··· 1184 1184 fi 1185 1185 log "SHA256 verified: ${ACTUAL_HASH:0:16}..." 1186 1186 1187 + # Download slim kernel + initramfs for universal Mac/ThinkPad boot 1188 + local SLIM_URL="${CDN_BASE}/native-notepat-latest.vmlinuz-slim" 1189 + local INITRAMFS_URL="${CDN_BASE}/native-notepat-latest.initramfs.cpio.gz" 1190 + local PULLED_SLIM="${PULL_DIR}/vmlinuz-slim" 1191 + local PULLED_INITRAMFS="${PULL_DIR}/initramfs.cpio.gz" 1192 + if curl -sf --head "${SLIM_URL}" >/dev/null 2>&1; then 1193 + log "Downloading slim kernel..." 1194 + curl -f --progress-bar -o "${PULLED_SLIM}" "${SLIM_URL}" || true 1195 + log "Downloading initramfs..." 1196 + curl -f --progress-bar -o "${PULLED_INITRAMFS}" "${INITRAMFS_URL}" || true 1197 + if [ -f "${PULLED_SLIM}" ] && [ -f "${PULLED_INITRAMFS}" ]; then 1198 + log "Universal boot files ready (slim $(du -sh "${PULLED_SLIM}" | cut -f1) + initramfs $(du -sh "${PULLED_INITRAMFS}" | cut -f1))" 1199 + fi 1200 + fi 1201 + 1187 1202 # Override VMLINUZ and build name so flash_usb uses the downloaded kernel 1188 1203 # (not the locally-generated name from scripts/build-name.sh) 1189 1204 VMLINUZ="${PULLED_KERNEL}"
+16
fedac/native/scripts/upload-release.sh
··· 208 208 | node "$SCRIPT_DIR/track-build.mjs" record 2>&1 || true 209 209 fi 210 210 211 + # Upload slim kernel + initramfs for universal Mac/ThinkPad boot 212 + SLIM_SIBLING="$(dirname "$VMLINUZ")/vmlinuz-slim" 213 + INITRAMFS_SIBLING="$(dirname "$VMLINUZ")/initramfs.cpio.gz" 214 + if [ -f "$SLIM_SIBLING" ]; then 215 + echo " Uploading slim kernel ($(du -sh "$SLIM_SIBLING" | cut -f1))..." 216 + do_upload "$SLIM_SIBLING" "os/${CHANNEL_PREFIX}native-notepat-latest.vmlinuz-slim" "application/octet-stream" 217 + fi 218 + if [ -f "$INITRAMFS_SIBLING" ]; then 219 + echo " Uploading initramfs ($(du -sh "$INITRAMFS_SIBLING" | cut -f1))..." 220 + do_upload "$INITRAMFS_SIBLING" "os/${CHANNEL_PREFIX}native-notepat-latest.initramfs.cpio.gz" "application/octet-stream" 221 + fi 222 + 211 223 # Also upload ISO if it exists next to vmlinuz 212 224 ISO_SIBLING="$(dirname "$VMLINUZ")/ac-os.iso" 213 225 if [ -f "$ISO_SIBLING" ]; then ··· 218 230 echo "" 219 231 echo "Release published: $BUILD_NAME ($FULL_VERSION)" 220 232 echo " ${BASE_URL}/os/${CHANNEL_PREFIX}native-notepat-latest.vmlinuz" 233 + if [ -f "$SLIM_SIBLING" ]; then 234 + echo " ${BASE_URL}/os/${CHANNEL_PREFIX}native-notepat-latest.vmlinuz-slim" 235 + echo " ${BASE_URL}/os/${CHANNEL_PREFIX}native-notepat-latest.initramfs.cpio.gz" 236 + fi 221 237 echo " ${BASE_URL}/os/${CHANNEL_PREFIX}releases.json" 222 238 if [ -f "$ISO_SIBLING" ]; then 223 239 echo " ${BASE_URL}/os/${CHANNEL_PREFIX}native-notepat-latest.iso"
+15 -4
oven/native-builder.mjs
··· 412 412 413 413 job.percent = 75; 414 414 415 - addLogLine(job, "stdout", "Phase 3: Extracting C kernel + ISO..."); 415 + addLogLine(job, "stdout", "Phase 3: Extracting C kernel + ISO + slim kernel + initramfs..."); 416 416 const cid = (await fs.readFile(cidFile, "utf8")).trim(); 417 417 const isoOut = `/tmp/oven-iso-${job.id}`; 418 - await runPhase(job, "extract", "bash", ["-c", 419 - `docker cp ${cid}:/tmp/ac-build/vmlinuz ${vmlinuzOut} && docker cp ${cid}:/tmp/ac-build/ac-os.iso ${isoOut} 2>/dev/null; docker rm ${cid} >/dev/null` 420 - ], repoDir); 418 + const slimOut = `/tmp/oven-vmlinuz-slim-${job.id}`; 419 + const initramfsOut = `/tmp/oven-initramfs-${job.id}`; 420 + await runPhase(job, "extract", "bash", ["-c", [ 421 + `docker cp ${cid}:/tmp/ac-build/vmlinuz ${vmlinuzOut}`, 422 + `docker cp ${cid}:/tmp/ac-build/ac-os.iso ${isoOut} 2>/dev/null || true`, 423 + `docker cp ${cid}:/tmp/ac-build/vmlinuz-slim ${slimOut} 2>/dev/null || true`, 424 + `docker cp ${cid}:/tmp/ac-build/initramfs.cpio.gz ${initramfsOut} 2>/dev/null || true`, 425 + `docker rm ${cid} >/dev/null`, 426 + ].join("; ")], repoDir); 421 427 422 428 job.percent = 80; 423 429 ··· 425 431 const uploadDir = `/tmp/oven-upload-${job.id}`; 426 432 const vmlinuzUpload = `${uploadDir}/vmlinuz`; 427 433 const isoUpload = `${uploadDir}/ac-os.iso`; 434 + const slimUpload = `${uploadDir}/vmlinuz-slim`; 435 + const initramfsUpload = `${uploadDir}/initramfs.cpio.gz`; 428 436 await fs.mkdir(uploadDir, { recursive: true }); 429 437 await fs.rename(vmlinuzOut, vmlinuzUpload); 430 438 try { await fs.rename(isoOut, isoUpload); } catch {} 439 + try { await fs.rename(slimOut, slimUpload); } catch {} 440 + try { await fs.rename(initramfsOut, initramfsUpload); } catch {} 441 + // upload-release.sh auto-detects sibling files (vmlinuz-slim, initramfs.cpio.gz, ac-os.iso) 431 442 await runPhase(job, "upload", "bash", [uploadScript, vmlinuzUpload], NATIVE_DIR, uploadEnv); 432 443 433 444 try { await fs.rm(uploadDir, { recursive: true }); } catch {}