Use global /tmp/config that combines multiple config files

As part of the config gui we want to be able to have the system define
new config options without them being lost if the user makes their own
changes in CBFS. To allow that this change creates a function initiated
in init that combines all /etc/config* files into /tmp/config. All
existing scripts have been changed to source /tmp/config instead of
/etc/config. The config-gui.sh script now uses /etc/config.user to hold
user configuration options but the combine_configs function will allow
that to expand as others want to split configuration out further.

As it stands here are the current config files:

/etc/config -- Compiled-in configuration options
/etc/config.user -- User preferences that override /etc/config
/tmp/config -- Running config referenced by the BIOS, combination
               of existing configs
This commit is contained in:
Kyle Rankin 2018-12-06 15:24:28 -08:00
parent 49a131fa4b
commit 3eb62eed1a
No known key found for this signature in database
GPG Key ID: 555577116BFA74B9
16 changed files with 42 additions and 31 deletions

View File

@ -2,7 +2,7 @@
#
set -e -o pipefail
. /etc/functions
. /etc/config
. /tmp/config
file_selector() {
FILE=""
@ -49,15 +49,6 @@ file_selector() {
exit 1
fi
}
replace_config() {
CONFIG_OPTION=$1
NEW_SETTING=$2
awk "gsub(\"^export ${CONFIG_OPTION}=.*\",\"export ${CONFIG_OPTION}=\\\"${NEW_SETTING}\\\"\")" /etc/config > /tmp/config
awk "gsub(\"^${CONFIG_OPTION}=.*\",\"${CONFIG_OPTION}=\\\"${NEW_SETTING}\\\"\")" /etc/config >> /tmp/config
grep -v "^export ${CONFIG_OPTION}=" /etc/config | grep -v "^${CONFIG_OPTION}=" >> /tmp/config
mv /tmp/config /etc/config
}
while true; do
unset menu_choice
@ -76,7 +67,7 @@ while true; do
exit 0
;;
"b" )
CURRENT_OPTION=`grep 'CONFIG_BOOT_DEV=' /etc/config | cut -f2 -d '=' | tr -d '"'`
CURRENT_OPTION=`grep 'CONFIG_BOOT_DEV=' /tmp/config | cut -f2 -d '=' | tr -d '"'`
find /dev -name 'sd*' -o -name 'nvme*' > /tmp/filelist.txt
file_selector "/tmp/filelist.txt" "Choose the default /boot device.\n\nCurrently set to $CURRENT_OPTION."
if [ "$FILE" == "" ]; then
@ -85,7 +76,8 @@ while true; do
SELECTED_FILE=$FILE
fi
replace_config "CONFIG_BOOT_DEV" "$SELECTED_FILE"
replace_config /etc/config.user "CONFIG_BOOT_DEV" "$SELECTED_FILE"
combine_configs
whiptail --title 'Config change successful' \
--msgbox "The /boot device was successfully changed to $SELECTED_FILE" 16 60
@ -94,7 +86,7 @@ while true; do
whiptail --title 'Insert a USB thumb drive' \
--msgbox "Insert a USB thumb drive so we can detect the device" 16 60
mount-usb
CURRENT_OPTION=`grep 'CONFIG_USB_BOOT_DEV=' /etc/config | cut -f2 -d '=' | tr -d '"'`
CURRENT_OPTION=`grep 'CONFIG_USB_BOOT_DEV=' /tmp/config | cut -f2 -d '=' | tr -d '"'`
find /dev -name 'sd*' -o -name 'nvme*' > /tmp/filelist.txt
file_selector "/tmp/filelist.txt" "Choose the default USB boot device.\n\nCurrently set to $CURRENT_OPTION."
if [ "$FILE" == "" ]; then
@ -103,7 +95,8 @@ while true; do
SELECTED_FILE=$FILE
fi
replace_config "CONFIG_USB_BOOT_DEV" "$SELECTED_FILE"
replace_config /etc/config.user "CONFIG_USB_BOOT_DEV" "$SELECTED_FILE"
combine_configs
whiptail --title 'Config change successful' \
--msgbox "The USB boot device was successfully changed to $SELECTED_FILE" 16 60
@ -116,10 +109,10 @@ while true; do
exit 1
fi
if (cbfs -o /tmp/config-gui.rom -l | grep -q "heads/initrd/etc/config") then
cbfs -o /tmp/config-gui.rom -d "heads/initrd/etc/config"
if (cbfs -o /tmp/config-gui.rom -l | grep -q "heads/initrd/etc/config.user") then
cbfs -o /tmp/config-gui.rom -d "heads/initrd/etc/config.user"
fi
cbfs -o /tmp/config-gui.rom -a "heads/initrd/etc/config" -f /etc/config
cbfs -o /tmp/config-gui.rom -a "heads/initrd/etc/config.user" -f /etc/config.user
if (whiptail --title 'Update ROM?' \
--yesno "This will reflash your BIOS with the updated version\n\nDo you want to proceed?" 16 90) then

View File

@ -2,7 +2,7 @@
#
set -e -o pipefail
. /etc/functions
. /etc/config
. /tmp/config
mount_usb(){
# Mount the USB boot device

View File

@ -4,7 +4,7 @@
#
set -e -o pipefail
. /etc/functions
. /etc/config
. /tmp/config
case "$CONFIG_BOARD" in
librem* )

View File

@ -2,7 +2,7 @@
# Boot from a local disk installation
. /etc/functions
. /etc/config
. /tmp/config
mount_boot()
{

View File

@ -4,7 +4,7 @@
CONFIG_BOOT_GUI_MENU_NAME='Heads Boot Menu'
. /etc/functions
. /etc/config
. /tmp/config
mount_boot()
{

View File

@ -1,7 +1,7 @@
#!/bin/sh
# Launches kexec from saved configuration entries
set -e -o pipefail
. /etc/config
. /tmp/config
. /etc/functions
dryrun="n"

View File

@ -2,7 +2,7 @@
# Boot from signed ISO
set -e -o pipefail
. /etc/functions
. /etc/config
. /tmp/config
MOUNTED_ISO_PATH="$1"
ISO_PATH="$2"

View File

@ -1,7 +1,7 @@
#!/bin/sh
# Save these options to be the persistent default
set -e -o pipefail
. /etc/config
. /tmp/config
. /etc/functions
while getopts "b:d:p:i:" arg; do

View File

@ -11,7 +11,7 @@ TPM_SEALED="/tmp/secret/secret.sealed"
RECOVERY_KEY="/tmp/secret/recovery.key"
. /etc/functions
. /etc/config
. /tmp/config
paramsdir=$1
if [ -z "$paramsdir" ]; then

View File

@ -1,7 +1,7 @@
#!/bin/sh
# Generic configurable boot script via kexec
set -e -o pipefail
. /etc/config
. /tmp/config
. /etc/functions
add=""

View File

@ -1,7 +1,7 @@
#!/bin/sh
# Sign a valid directory of kexec params
set -e -o pipefail
. /etc/config
. /tmp/config
. /etc/functions
rollback="n"

View File

@ -2,7 +2,7 @@
# Boot a USB installation
. /etc/functions
. /etc/config
. /tmp/config
if [ "$CONFIG_TPM" = "y" ]; then
# Extend PCR4 as soon as possible

View File

@ -2,7 +2,7 @@
# Scan for USB installation options
set -e -o pipefail
. /etc/functions
. /etc/config
. /tmp/config
# Unmount any previous boot device
if grep -q /boot /proc/mounts ; then

View File

@ -3,7 +3,7 @@
# invoke a recovery shell and prompt the user for how to proceed
. /etc/functions
. /etc/config
. /tmp/config
insmod /lib/modules/ehci-hcd.ko
insmod /lib/modules/ehci-pci.ko

View File

@ -217,3 +217,20 @@ preserve_rom() {
fi
done
}
replace_config() {
CONFIG_FILE=$1
CONFIG_OPTION=$2
NEW_SETTING=$3
# first pull out the existing option from the global config and place in a tmp file
awk "gsub(\"^export ${CONFIG_OPTION}=.*\",\"export ${CONFIG_OPTION}=\\\"${NEW_SETTING}\\\"\")" /tmp/config > ${CONFIG_FILE}.tmp
awk "gsub(\"^${CONFIG_OPTION}=.*\",\"${CONFIG_OPTION}=\\\"${NEW_SETTING}\\\"\")" /tmp/config >> ${CONFIG_FILE}.tmp
# then copy any remaining settings from the existing config file, minus the option you changed
grep -v "^export ${CONFIG_OPTION}=" ${CONFIG_FILE} | grep -v "^${CONFIG_OPTION}=" >> ${CONFIG_FILE}.tmp
mv ${CONFIG_FILE}.tmp ${CONFIG_FILE}
}
combine_configs() {
sort /etc/config* | uniq > /tmp/config
}

View File

@ -40,7 +40,8 @@ hwclock -l -s
# Read the system configuration parameters
. /etc/functions
. /etc/config
combine_configs
. /tmp/config
# Add our boot devices into the /etc/fstab, if they are defined
# in the configuration file.