forked from tfgrid/zosbuilder
ix init script duplication and CPIO creation issues
- Remove duplicate /sbin/init copying from initramfs_setup_zinit() - Only /init should be config/init (initramfs setup script) - No /sbin/init needed - config/init calls 'switch_root /mnt/root /sbin/zinit init' - Remove unsupported cpio --owner option that broke CPIO creation - Fix validation to not expect /sbin/init file - Correct boot flow: /init → switch_root → /sbin/zinit init - Remove strip and UPX compression from zinit binary copying - UPX compression was corrupting the zinit binary causing segfaults after switch_root - Keep zinit unmodified as it's
This commit is contained in:
@@ -27,18 +27,9 @@ function initramfs_setup_zinit() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Copy config/init as /sbin/init (not a symlink to zinit)
|
||||
log_info "Installing config/init as /sbin/init"
|
||||
safe_execute rm -f "${initramfs_dir}/sbin/init"
|
||||
local config_init="${PROJECT_ROOT}/config/init"
|
||||
if [[ -f "$config_init" ]]; then
|
||||
safe_execute cp "$config_init" "${initramfs_dir}/sbin/init"
|
||||
safe_execute chmod 755 "${initramfs_dir}/sbin/init"
|
||||
log_info "✓ Installed config/init as /sbin/init"
|
||||
else
|
||||
log_error "config/init not found: $config_init"
|
||||
return 1
|
||||
fi
|
||||
# Note: /sbin/init is not needed - config/init calls "switch_root /mnt/root /sbin/zinit init"
|
||||
# So after switch_root, /sbin/zinit is the init system (not /sbin/init)
|
||||
log_info "zinit will be called directly via '/sbin/zinit init' after switch_root"
|
||||
|
||||
# Copy zinit configuration (all YAML and scripts)
|
||||
log_info "Installing zinit configuration"
|
||||
@@ -117,29 +108,16 @@ function initramfs_copy_components() {
|
||||
local copied_count=0
|
||||
local missing_count=0
|
||||
|
||||
# Copy zinit to /sbin
|
||||
# Copy zinit to /sbin (NO stripping/UPX - critical init system)
|
||||
local zinit_binary="${components_dir}/zinit/target/x86_64-unknown-linux-musl/release/zinit"
|
||||
if [[ -f "$zinit_binary" ]]; then
|
||||
safe_mkdir "${initramfs_dir}/sbin"
|
||||
safe_execute cp "$zinit_binary" "${initramfs_dir}/sbin/zinit"
|
||||
safe_execute chmod +x "${initramfs_dir}/sbin/zinit"
|
||||
|
||||
# Strip and UPX compress zinit
|
||||
local original_size=$(get_file_size "${initramfs_dir}/sbin/zinit")
|
||||
if strip "${initramfs_dir}/sbin/zinit" 2>/dev/null || true; then
|
||||
log_debug "Stripped zinit"
|
||||
else
|
||||
log_debug "zinit already stripped or strip failed"
|
||||
fi
|
||||
|
||||
if command_exists "upx" && upx --best --force "${initramfs_dir}/sbin/zinit" >/dev/null 2>&1 || true; then
|
||||
log_debug "UPX compressed zinit"
|
||||
else
|
||||
log_debug "UPX failed or already compressed"
|
||||
fi
|
||||
|
||||
local final_size=$(get_file_size "${initramfs_dir}/sbin/zinit")
|
||||
log_info "✓ Copied zinit ${original_size} → ${final_size} to /sbin/zinit"
|
||||
# Keep zinit unmodified to prevent segfaults after switch_root
|
||||
local size=$(get_file_size "${initramfs_dir}/sbin/zinit")
|
||||
log_info "✓ Copied zinit (${size}) to /sbin/zinit (no optimization - critical binary)"
|
||||
((copied_count++))
|
||||
else
|
||||
log_error "✗ zinit binary not found: ${zinit_binary}"
|
||||
@@ -669,7 +647,6 @@ function initramfs_validate() {
|
||||
# Check essential files and directories
|
||||
local essential_items=(
|
||||
"init"
|
||||
"sbin/init"
|
||||
"sbin/zinit"
|
||||
"bin/busybox"
|
||||
"etc/zinit"
|
||||
@@ -699,12 +676,11 @@ function initramfs_validate() {
|
||||
((errors++))
|
||||
fi
|
||||
|
||||
# Check that /sbin/init is a script
|
||||
if [[ -f "${initramfs_dir}/sbin/init" && -x "${initramfs_dir}/sbin/init" ]]; then
|
||||
log_info "✓ /sbin/init script found"
|
||||
# Check that /sbin/init does NOT exist (zinit called directly)
|
||||
if [[ -e "${initramfs_dir}/sbin/init" ]]; then
|
||||
log_warn "⚠ /sbin/init exists but should not (zinit called directly)"
|
||||
else
|
||||
log_error "✗ /sbin/init is missing or not executable"
|
||||
((errors++))
|
||||
log_info "✓ /sbin/init correctly absent (zinit called directly)"
|
||||
fi
|
||||
|
||||
# Check zinit configuration
|
||||
|
||||
Reference in New Issue
Block a user