|
77 | 77 | #!/bin/busybox sh |
78 | 78 |
|
79 | 79 | set -e |
80 | | - set -x |
81 | 80 |
|
82 | 81 | # Create busybox symlinks (but don't overwrite kmod's modprobe/insmod) |
83 | 82 | /bin/busybox --install -s /bin |
|
94 | 93 | mkdir -p /dev/shm |
95 | 94 | mount -t tmpfs tmpfs /dev/shm |
96 | 95 |
|
| 96 | + # Mount /dev/pts for pseudo-terminals (required by debug shell) |
| 97 | + mkdir -p /dev/pts |
| 98 | + mount -t devpts devpts /dev/pts |
| 99 | +
|
97 | 100 | # Redirect all output to a log |
98 | 101 | exec >/init.log 2>&1 |
| 102 | + set -x |
99 | 103 |
|
100 | 104 | # Create necessary directories |
101 | | - mkdir -p /tmp /run /var |
| 105 | + mkdir -p /tmp /run /var /etc |
102 | 106 |
|
| 107 | + # Create minimal passwd for PTY allocation |
| 108 | + echo "root:x:0:0:root:/:/bin/sh" > /etc/passwd |
| 109 | +
|
| 110 | + # Load all kernel modules upfront |
103 | 111 | modprobe virtio_pci |
104 | 112 | modprobe virtio_blk |
| 113 | + modprobe virtio_gpu |
| 114 | + modprobe virtio_input |
| 115 | + # Storage drivers |
| 116 | + modprobe ahci || true |
| 117 | + modprobe sd_mod || true |
| 118 | + modprobe nvme || true |
| 119 | + modprobe usb_storage || true |
| 120 | + # Filesystems |
105 | 121 | modprobe nls_cp437 |
106 | 122 | modprobe nls_iso8859_1 |
107 | 123 | modprobe vfat |
108 | | - mkdir -p /var/lib/goldboot/images |
| 124 | + modprobe ext4 |
| 125 | + modprobe btrfs || true |
| 126 | + modprobe xfs || true |
| 127 | + modprobe ntfs3 || true |
| 128 | + modprobe iso9660 || true |
| 129 | + # USB host controllers |
| 130 | + modprobe xhci_pci |
| 131 | + modprobe ehci_pci |
| 132 | + # USB HID |
| 133 | + modprobe hid |
| 134 | + modprobe usbhid |
| 135 | + modprobe hid_generic |
| 136 | + # PS/2 keyboard (most laptop integrated keyboards) |
| 137 | + modprobe i8042 || true |
| 138 | + modprobe atkbd || true |
| 139 | + # I2C HID (newer laptops) |
| 140 | + modprobe i2c_hid || true |
| 141 | + modprobe i2c_hid_acpi || true |
| 142 | + # Input event interface |
| 143 | + modprobe evdev |
| 144 | + # Graphics |
| 145 | + modprobe drm |
| 146 | + modprobe drm_kms_helper |
| 147 | + # Networking |
| 148 | + modprobe r8169 || true |
| 149 | +
|
| 150 | + # Set up udev directories |
| 151 | + mkdir -p /run/udev |
| 152 | +
|
| 153 | + # Compile the udev hardware database (required for input device detection) |
| 154 | + udevadm hwdb --update |
| 155 | +
|
| 156 | + # Start udev daemon |
| 157 | + udevd --daemon |
| 158 | +
|
| 159 | + # Trigger udev to process devices and wait for them to settle |
| 160 | + udevadm trigger --action=add |
| 161 | + sleep 2 |
| 162 | + udevadm settle --timeout=30 |
109 | 163 |
|
110 | 164 | # Mount goldboot images to /var/lib/goldboot/images |
| 165 | + mkdir -p /var/lib/goldboot/images |
| 166 | + ls /dev |
111 | 167 | for dev in /dev/sd?* /dev/vd?* /dev/hd?* /dev/nvme*; do |
112 | 168 | [ -e "$dev" ] || continue |
113 | | - TMP_MNT=$(mktemp -d) |
114 | | - if mount -o ro "$dev" "$TMP_MNT" 2>/dev/null; then |
| 169 | + if mount -o ro "$dev" /var/lib/goldboot/images; then |
115 | 170 | # Check for .gb files at root |
116 | | - if ls "$TMP_MNT"/*.gb >/dev/null 2>&1; then |
117 | | - umount "$TMP_MNT" |
118 | | - rmdir "$TMP_MNT" |
119 | | - mount -o ro "$dev" /var/lib/goldboot/images |
| 171 | + if ls /var/lib/goldboot/images/*.gb; then |
120 | 172 | break |
121 | 173 | fi |
122 | | - umount "$TMP_MNT" |
| 174 | + umount /var/lib/goldboot/images |
123 | 175 | fi |
124 | | - rmdir "$TMP_MNT" |
125 | 176 | done |
126 | 177 |
|
127 | 178 | # Set up networking |
128 | | - modprobe r8169 |
129 | 179 | ip link set lo up |
130 | 180 | # Find the first ethernet interface (not lo) |
131 | 181 | for iface in /sys/class/net/*; do |
|
136 | 186 | break |
137 | 187 | done |
138 | 188 |
|
139 | | - # Set up udev directories |
140 | | - # /etc/udev/rules.d is a symlink from the initramfs, don't overwrite it |
141 | | - mkdir -p /run/udev |
142 | | -
|
143 | | - # Compile the udev hardware database (required for input device detection) |
144 | | - # This creates /etc/udev/hwdb.bin from the hwdb.d directories |
145 | | - udevadm hwdb --update |
146 | | -
|
147 | | - # Start udev daemon BEFORE loading modules so it can create device nodes |
148 | | - udevd --daemon |
149 | | -
|
150 | | - # Load GPU and input kernel modules |
151 | | - modprobe virtio_pci |
152 | | - modprobe virtio_gpu |
153 | | - modprobe virtio_input |
154 | | - modprobe xhci_pci |
155 | | - modprobe ehci_pci |
156 | | - modprobe usbhid |
157 | | - modprobe hid_generic |
158 | | - modprobe evdev |
159 | | -
|
160 | | - # Trigger udev to process existing devices and wait for them |
161 | | - udevadm trigger --action=add |
162 | | - udevadm settle --timeout=10 |
163 | | -
|
164 | 189 | export XDG_RUNTIME_DIR=/tmp/xdg-runtime |
165 | 190 | mkdir -p "$XDG_RUNTIME_DIR" |
166 | 191 | chmod 0700 "$XDG_RUNTIME_DIR" |
|
218 | 243 | "virtio_input" |
219 | 244 | "drm" |
220 | 245 | "drm_kms_helper" |
| 246 | + # USB HID |
221 | 247 | "usbhid" |
222 | 248 | "hid_generic" |
223 | 249 | "ehci_pci" |
224 | 250 | "xhci_pci" |
| 251 | + # PS/2 keyboard (most laptop integrated keyboards) |
| 252 | + "atkbd" |
| 253 | + "i8042" |
| 254 | + # I2C HID (newer laptops, ultrabooks) |
| 255 | + "i2c_hid" |
| 256 | + "i2c_hid_acpi" |
| 257 | + "hid" |
225 | 258 | "r8169" |
226 | 259 | "virtio_blk" |
227 | 260 | "vfat" |
|
401 | 434 | --os-release='NAME="Goldboot" |
402 | 435 | ID=goldboot |
403 | 436 | VERSION="0.1.0"' \ |
404 | | - --cmdline="console=ttyS0 console=tty0" \ |
| 437 | + --cmdline="quiet loglevel=0 rd.systemd.show_status=false rd.udev.log_level=0 vt.global_cursor_default=0" \ |
405 | 438 | --output=$out/goldboot.efi |
406 | 439 |
|
407 | 440 | echo "UKI created at $out/goldboot.efi" |
|
0 commit comments