diff options
Diffstat (limited to 'system-config/frontend/live-config')
-rwxr-xr-x | system-config/frontend/live-config | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/system-config/frontend/live-config b/system-config/frontend/live-config new file mode 100755 index 0000000..0f037e1 --- /dev/null +++ b/system-config/frontend/live-config @@ -0,0 +1,204 @@ +#!/bin/sh + +## live-config(7) - System Configuration Components +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see <http://www.gnu.org/licenses/>. +## +## The complete text of the GNU General Public License +## can be found in /usr/share/common-licenses/GPL-3 file. + + +#set -e + +# Defaults +LIVE_HOSTNAME="debian" +LIVE_USERNAME="user" +LIVE_USER_FULLNAME="Debian Live user" +LIVE_USER_DEFAULT_GROUPS="audio cdrom dip floppy video plugdev netdev powerdev scanner bluetooth debian-tor" +export LIVE_HOSTNAME LIVE_USERNAME LIVE_USER_FULLNAME LIVE_USER_DEFAULT_GROUPS + +DEBIAN_FRONTEND="noninteractive" +DEBIAN_PRIORITY="critical" +DEBCONF_NOWARNINGS="yes" +export DEBIAN_FRONTEND DEBIAN_PRIORITY DEBCONF_NOWARNINGS + +_IP_SEPARATOR="-" +_PROC_OPTIONS="onodev,noexec,nosuid" +export _IP_SEPARATOR _PROC_OPTIONS + +_COMPONENTS="$(ls /lib/live/config/*)" + +# Reading configuration files from filesystem and live-media +set -o allexport +for _FILE in /etc/live/config.conf /etc/live/config.conf.d/*.conf \ + /lib/live/mount/medium/live/config.conf /lib/live/mount/medium/live/config.conf.d/*.conf \ + /lib/live/mount/persistence/*/live/config.conf /lib/live/mount/persistence/*/live/config.conf.d/*.conf +do + if [ -e "${_FILE}" ] + then + . "${_FILE}" + fi +done +set +o allexport + +Cmdline () +{ + for _PARAMETER in ${LIVE_CONFIG_CMDLINE} + do + case "${_PARAMETER}" in + # Components + live-config.components=*|components=*) + # Only run requested components + LIVE_CONFIG_COMPONENTS="${_PARAMETER#*components=}" + LIVE_CONFIG_NOCOMPONENTS="" + _COMPONENTS="" + ;; + + live-config.components|components) + # Run all components + LIVE_CONFIG_COMPONENTS="" + LIVE_CONFIG_NOCOMPONENTS="" + _COMPONENTS="$(ls /lib/live/config/*)" + ;; + + live-config.nocomponents=*|nocomponents=*) + # Don't run requested components + LIVE_CONFIG_COMPONENTS="" + LIVE_CONFIG_NOCOMPONENTS="${_PARAMETER#*nocomponents=}" + _COMPONENTS="$(ls /lib/live/config/*)" + ;; + + live-config.nocomponents|nocomponents) + # Don't run any component + LIVE_CONFIG_COMPONENTS="" + LIVE_CONFIG_NOCOMPONENTS="" + _COMPONENTS="" + ;; + + # Special options + live-config.debug|debug) + LIVE_CONFIG_DEBUG="true" + ;; + esac + done + + # Include requested components + if [ -n "${LIVE_CONFIG_COMPONENTS}" ] + then + for _COMPONENT in $(echo ${LIVE_CONFIG_COMPONENTS} | sed -e 's|,| |g') + do + _COMPONENTS="${_COMPONENTS} $(ls /lib/live/config/????-${_COMPONENT} 2> /dev/null || true)" + done + fi + + # Exclude requested components + if [ -n "${LIVE_CONFIG_NOCOMPONENTS}" ] + then + for _NOCOMPONENT in $(echo ${LIVE_CONFIG_NOCOMPONENTS} | sed -e 's|,| |g') + do + _COMPONENTS="$(echo ${_COMPONENTS} | sed -e "s|$(ls /lib/live/config/????-${_NOCOMPONENT} 2> /dev/null || echo none)||")" + done + fi +} + +Trap () +{ + _RETURN="${?}" + + case "${_RETURN}" in + 0) + + ;; + + *) + echo ":ERROR" + ;; + esac + + return ${_RETURN} +} + +Setup_network () +{ + if [ -z "${_NETWORK}" ] && [ -e /etc/init.d/live-config ] + then + /etc/init.d/mountkernfs.sh start > /dev/null 2>&1 + /etc/init.d/mountdevsubfs.sh start > /dev/null 2>&1 + /etc/init.d/networking start > /dev/null 2>&1 + + # Now force adapter up if specified with ethdevice= on cmdline + if [ -n "${ETHDEVICE}" ] + then + ifup --force "${ETHDEVICE}" + fi + + _NETWORK="true" + export _NETWORK + fi +} + +Main () +{ + if [ ! -e /proc/version ] + then + mount -n -t proc -o${_PROC_OPTIONS} -odefaults proc /proc + fi + + LIVE_CONFIG_CMDLINE="${LIVE_CONFIG_CMDLINE:-$(cat /proc/cmdline)}" + export LIVE_CONFIG_CMDLINE + + if ! echo ${LIVE_CONFIG_CMDLINE} | grep -qs "boot=live" + then + exit 0 + fi + + # Setting up log redirection + rm -f /var/log/live/config.log + rm -f /tmp/live-config.pipe + + mkdir -p /var/log/live + mkfifo /tmp/live-config.pipe + tee < /tmp/live-config.pipe /var/log/live/config.log & + exec > /tmp/live-config.pipe 2>&1 + + echo -n "live-config:" > /tmp/live-config.pipe 2>&1 + trap 'Trap' EXIT HUP INT QUIT TERM + + # Processing command line + Cmdline + + case "${LIVE_CONFIG_DEBUG}" in + true) + set -x + ;; + esac + + # Configuring system + _COMPONENTS="$(echo ${_COMPONENTS} | sed -e 's| |\n|g' | sort -u)" + + for _COMPONENT in ${_COMPONENTS} + do + [ "${LIVE_CONFIG_DEBUG}" = "true" ] && echo "[$(date +'%F %T')] live-config: ${_COMPONENT}" > /tmp/live-config.pipe + + ${_COMPONENT} > /tmp/live-config.pipe 2>&1 + done + + echo "." > /tmp/live-config.pipe + + # Cleaning up log redirection + rm -f /tmp/live-config.pipe +} + +Main ${@} |