#!/bin/ash mknod /dev/ttyprintk c 5 3 echo "hello world" > /dev/ttyprintk # Setup our path export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin # This is the very first script invoked by the Linux kernel and is # running out of the ram disk. There are no fileysstems mounted. # It is important to have a way to invoke a recovery shell in case # the boot scripts are messed up, but also important to modify the # PCRs if this happens to prevent the TPM disk keys from being revealed. # First thing it is vital to mount the /dev and other system directories mkdir /proc /sys /dev /tmp /boot /media 2>&- 1>&- mount /dev 2>/dev/ttyprintk mount /proc 2>/dev/ttyprintk mount /sys 2>/dev/ttyprintk mount /sys/firmware/efi/efivars # Setup the pty psudeo filesystem mkdir /dev/pts mount /dev/pts 2>/dev/ttyprintk if [ ! -r /dev/ptmx ]; then ln -s /dev/pts/ptmx /dev/ptmx fi # Recovery shells will erase anything from here mkdir -p /tmp/secret # Now it is safe to print a banner if [ -r /etc/motd ]; then cat /etc/motd cat /etc/motd > /dev/tty0 fi # Load the date from the hardware clock, setting it in local time hwclock -l -s # Read the system configuration parameters . /etc/functions . /etc/config if [ "$CONFIG_COREBOOT" = "y" ]; then /bin/cbfs-init fi if [ "$CONFIG_LINUXBOOT" = "y" ]; then /bin/uefi-init fi # Set GPG_TTY before calling gpg in key-init export GPG_TTY=$(tty) /bin/key-init # Setup recovery serial shell if [ ! -z "$CONFIG_BOOT_RECOVERY_SERIAL" ]; then stty -F "$CONFIG_BOOT_RECOVERY_SERIAL" 115200 pause_recovery 'Console recovery shell' \ < "$CONFIG_BOOT_RECOVERY_SERIAL" \ > "$CONFIG_BOOT_RECOVERY_SERIAL" 2>&1 & fi # If the user has been holding down r, enter a recovery shell # otherwise immediately start the configured boot script. # We don't print a prompt, since this is a near instant timeout. read \ -t 0.1 \ -n 1 \ boot_option echo if [ "$boot_option" = "r" ]; then # Start an interactive shell recovery 'User requested recovery shell' # just in case... if [ "$CONFIG_TPM" = "y" ]; then tpm extend -ix 4 -ic recovery fi exec /bin/ash exit fi combine_configs . /tmp/config # Add our boot devices into the /etc/fstab, if they are defined # in the configuration file. if [ ! -z "$CONFIG_BOOT_DEV" ]; then echo >> /etc/fstab "$CONFIG_BOOT_DEV /boot auto defaults,ro 0 0" fi if [ ! -z "$CONFIG_USB_BOOT_DEV" ]; then echo >> /etc/fstab "$CONFIG_USB_BOOT_DEV /media auto defaults,ro 0 0" fi if [ ! -x "$CONFIG_BOOTSCRIPT" -a ! -x "$CONFIG_BOOTSCRIPT_NETWORK" ]; then recovery 'Boot script missing? Entering recovery shell' else if [ -x "$CONFIG_BOOTSCRIPT_NETWORK" ]; then echo '***** Network Boot:' $CONFIG_BOOTSCRIPT_NETWORK $CONFIG_BOOTSCRIPT_NETWORK echo '***** Network Boot Completed:' $CONFIG_BOOTSCRIPT_NETWORK # not blocking fi if [ -x "$CONFIG_BOOTSCRIPT" ]; then echo '***** Normal boot:' $CONFIG_BOOTSCRIPT exec "$CONFIG_BOOTSCRIPT" # We should never reach here, but just in case... recovery 'Boot script failure? Entering recovery shell' else # wait for boot via network to occur pause_recovery 'Override network boot. Entering recovery shell' fi fi # belts and suspenders, just in case... if [ "$CONFIG_TPM" = "y" ]; then tpm extend -ix 4 -ic recovery fi exec /bin/ash