#!/bin/sh ## live-build(7) - System Build Scripts ## Copyright (C) 2006-2012 Daniel Baumann ## ## live-build comes with ABSOLUTELY NO WARRANTY; for details see COPYING. ## This is free software, and you are welcome to redistribute it ## under certain conditions; see COPYING for details. # Including common functions . "${LB_BASE:-/usr/share/live/build}"/scripts/build.sh # Reading defaults if [ -r /etc/default/live-build-cgi ] then . /etc/default/live-build-cgi else echo "E: /etc/default/live-build-cgi missing" exit 1 fi _HOSTNAME="$(hostname -f)" # Turn on debug if enabled if [ "${_DEBUG}" = "enabled" ] then set -x fi # Sending http header echo "Content-type: text/html" echo # Sending html header cat "${_TEMPLATES}"/header.html # CGI if [ -z "${QUERY_STRING}" ] then # Sending html form sed -e "s/VERSION/${VERSION}/" \ -e "s/DATE/`date +%Y%m%d-%H:%M`/" \ "${_TEMPLATES}"/form.html else # Converting spaces: sed 's/+/ /g' # Converting '@': sed 's/%40/@/g' # Converting ':': sed 's/%3A/:/g' # Converting ';': sed 's/%3B/\;/g' # Converting '/': sed 's/%2F/\//g' # Converting '~': sed 's/%7E/\~/g' # Converting '=': sed 's/%3D/=/g' # Converting '+': sed 's/%2B/+/g' # Translate parameters QUERY_STRING=$(echo "${QUERY_STRING}" | sed -e 's/%2F/\//g' -e 's/+/ /g' -e 's/%3B/;/g' -e 's/%7E/~/g' -e 's/%3A/:/g' -e 's/%40/@/g' -e 's/%3D/=/g' -e 's/%2B/+/g') # Debug the filtering string # echo ${QUERY_STRING} # Email _EMAIL=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])email=[-0-9a-zA-Z._@]+' | cut -f 2 -d '=' | head -n1) # CGI Packages List _LB_CGIPACKAGES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])cgipackages=[-0-9a-zA-Z. _+]+' | cut -f 2 -d '=' | head -n1) # Standard options LB_BINARY_IMAGES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])binary_images=[-a-z]+' | cut -f 2 -d '=' | head -n1) LB_DISTRIBUTION=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])distribution=[a-z]+' | cut -f 2 -d '=' | head -n1) LB_PACKAGE_LISTS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])package_lists=[-0-9a-z]+' | cut -f 2 -d '=' | head -n1) LB_TASKS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])tasks=[-0-9a-zA-Z. _]+' | cut -f 2 -d '=' | head -n1) # Advanced bootstrap options LB_ARCHITECTURES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])architectures=[0-9a-z]+' | cut -f 2 -d '=' | head -n1) LB_BOOTSTRAP_FLAVOUR=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootstrap_flavour=[a-z]+' | cut -f 2 -d '=' | head -n1) LB_ARCHIVE_AREAS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])archive_areas=[a-z]+' | cut -f 2 -d '=' | head -n1) # Advanced chroot options LB_CHROOT_FILESYSTEM=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])chroot_filesystem=[0-9a-z]+' | cut -f 2 -d '=' | head -n1) LB_LINUX_FLAVOURS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])linux_flavours=[-0-9a-z]+' | cut -f 2 -d '=' | head -n1) LB_SECURITY=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])security=[a-z]+' | cut -f 2 -d '=' | head -n1) # Advanced binary options LB_BINARY_INDICES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])binary_indices=[a-z]+' | cut -f 2 -d '=' | head -n1) LB_BOOTAPPEND_INSTALL=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootappend_install=[-0-9a-zA-Z. _+=:/]+' | cut -f2- -d '=' | head -n1) LB_BOOTAPPEND_LIVE=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootappend_live=[-0-9a-zA-Z. _+=:/]+' | cut -f2- -d '=' | head -n1) LB_BOOTLOADER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootloader=[a-z]+' | cut -f 2 -d '=' | head -n1) LB_DEBIAN_INSTALLER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])debian_installer=[a-z]+' | cut -f 2 -d '=' | head -n1) LB_ISO_APPLICATION=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_application=[-0-9a-zA-Z. ~;:/_]+' | cut -f 2 -d '=' | head -n1) LB_ISO_PREPARER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_preparer=[-0-9a-zA-Z. ~;:/_]+' | cut -f 2 -d '=' | head -n1) LB_ISO_PUBLISHER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_publisher=[-0-9a-zA-Z. ~;:/_@]+' | cut -f 2 -d '=' | head -n1) LB_ISO_VOLUME=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_volume=[-0-9a-zA-Z. ~;:/_]+' | cut -f 2 -d '=' | head -n1) LB_MEMTEST=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])memtest=[0-9a-z+]+' | cut -f 2 -d '=' | head -n1) LB_NET_ROOT_PATH=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])net_path=[-0-9a-zA-Z._/]+' | cut -f 2 -d '=' | head -n1) LB_NET_ROOT_SERVER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])net_server=[0-9.]+' | cut -f 2 -d '=' | head -n1) # Advanced source options LB_SOURCE=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])source=[a-z]+' | cut -f 2 -d '=' | head -n1) LB_SOURCE_IMAGES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])source_images=[a-z]+' | cut -f 2 -d '=' | head -n1) # Unofficial options _CUSTOM_BOOTSTRAP=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])custom_bootstrap=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) _CUSTOM_BINARY=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])custom_binary=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) # FIXME: filter invalid options unset QUERY_STRING if [ -z "${_EMAIL}" ] then echo "

Error: No email address specified.

" sed -e "s/VERSION/${VERSION}/" \ -e "s/DATE/`date +%Y%m%d-%H:%M`/" \ "${_TEMPLATES}"/form.html exit fi # Getting build identifier _BUILD=$(date +%Y%m%d.%H%M%S.%N) # Getting number of builds pending. _QUEUENUM=$(ls "${_TEMPDIR}"/*.build | wc -l) #echo "${QUERY_STRING}" # Sending html confirmation # Note: On each string remember to use a delimeter that is not in the string. sed -e "s/BUILD/${_BUILD}/g" \ -e "s/EMAIL/${_EMAIL}/" \ -e "s/QUEUENUM/${_QUEUENUM}/" \ -e "s/LB_BINARY_IMAGES/${LB_BINARY_IMAGES}/" \ -e "s/LB_DISTRIBUTION/${LB_DISTRIBUTION}/" \ -e "s/LB_PACKAGE_LISTS/${LB_PACKAGE_LISTS}/" \ -e "s/LB_TASKS/${LB_TASKS}/" \ -e "s/_LB_CGIPACKAGES/${_LB_CGIPACKAGES}/" \ -e "s/LB_ARCHITECTURES/${LB_ARCHITECTURES}/" \ -e "s/LB_BOOTSTRAP_FLAVOUR/${LB_BOOTSTRAP_FLAVOUR}/" \ -e "s/LB_ARCHIVE_AREAS/${LB_ARCHIVE_AREAS}/" \ -e "s/LB_CHROOT_FILESYSTEM/${LB_CHROOT_FILESYSTEM}/" \ -e "s/LB_LINUX_FLAVOURS/${LB_LINUX_FLAVOURS}/" \ -e "s/LB_SECURITY/${LB_SECURITY}/" \ -e "s/LB_BINARY_INDICES/${LB_BINARY_INDICES}/" \ -e "s#LB_BOOTAPPEND_INSTALL#${LB_BOOTAPPEND_INSTALL}#" \ -e "s#LB_BOOTAPPEND_LIVE#${LB_BOOTAPPEND_LIVE}#" \ -e "s/LB_BOOTLOADER/${LB_BOOTLOADER}/" \ -e "s/LB_DEBIAN_INSTALLER/${LB_DEBIAN_INSTALLER}/" \ -e "s#LB_ISO_APPLICATION#${LB_ISO_APPLICATION}#" \ -e "s#LB_ISO_PREPARER#${LB_ISO_PREPARER}#" \ -e "s#LB_ISO_PUBLISHER#${LB_ISO_PUBLISHER}#" \ -e "s#LB_ISO_VOLUME#${LB_ISO_VOLUME}#" \ -e "s/LB_MEMTEST/${LB_MEMTEST}/" \ -e "s#LB_NET_ROOT_PATH#${LB_NET_ROOT_PATH}#" \ -e "s/LB_NET_ROOT_SERVER/${LB_NET_ROOT_SERVER}/" \ -e "s#SERVER#${_SERVER}#g" \ -e "s/LB_SOURCE_IMAGES/${LB_SOURCE_IMAGES}/" \ -e "s/LB_SOURCE/${LB_SOURCE}/" \ -e "s#CUSTOM_BOOTSTRAP#${_CUSTOM_BOOTSTRAP}#" \ -e "s#CUSTOM_BINARY#${_CUSTOM_BINARY}#" \ "${_TEMPLATES}"/build.html # Creating temporary directory mkdir -p "${_TEMPDIR}" # Writing build file cat > "${_TEMPDIR}"/"${_BUILD}".build << EOF # live-build-cgi "${VERSION}" build file # `date -R` _BUILD="${_BUILD}" _EMAIL="${_EMAIL}" REMOTE_ADDR="${REMOTE_ADDR}" # CGI Packages List _LB_CGIPACKAGES="${_LB_CGIPACKAGES}" # Standard options LB_BINARY_IMAGES="${LB_BINARY_IMAGES}" LB_DISTRIBUTION="${LB_DISTRIBUTION}" LB_PACKAGE_LISTS="${LB_PACKAGE_LISTS}" LB_TASKS="${LB_TASKS}" # Advanced bootstrap options LB_ARCHITECTURES="${LB_ARCHITECTURES}" LB_ARCHIVE_AREAS="${LB_ARCHIVE_AREAS}" # Advanced chroot options LB_CHROOT_FILESYSTEM="${LB_CHROOT_FILESYSTEM}" LB_LINUX_FLAVOURS="${LB_LINUX_FLAVOURS}" LB_SECURITY="${LB_SECURITY}" # Advanced binary options LB_BINARY_INDICES="${LB_BINARY_INDICES}" LB_BOOTAPPEND_INSTALL="${LB_BOOTAPPEND_INSTALL}" LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE}" LB_BOOTLOADER="${LB_BOOTLOADER}" LB_DEBIAN_INSTALLER="${LB_DEBIAN_INSTALLER}" LB_ISO_APPLICATION="${LB_ISO_APPLICATION}" LB_ISO_PREPARER="${LB_ISO_PREPARER}" LB_ISO_PUBLISHER="${LB_ISO_PUBLISHER}" LB_ISO_VOLUME="${LB_ISO_VOLUME}" LB_MEMTEST="${LB_MEMTEST}" LB_NET_ROOT_PATH="${LB_NET_ROOT_PATH}" LB_NET_ROOT_SERVER="${LB_NET_ROOT_SERVER}" # Advanced source options LB_SOURCE_IMAGES="${LB_SOURCE_IMAGES}" LB_SOURCE="${LB_SOURCE}" # Unofficial options _CUSTOM_BOOTSTRAP="${_CUSTOM_BOOTSTRAP}" _CUSTOM_BINARY="${_CUSTOM_BINARY}" # Other LB_ARCHIVES="${LB_ARCHIVES}" EOF echo "$(date +%b\ %d\ %H:%M:%S) ${_HOSTNAME} live-build-cgi: add web build (${_BUILD}) from ${REMOTE_ADDR}." >> /var/log/live echo "$(date +%b\ %d\ %H:%M:%S) ${_HOSTNAME} live-build-cgi: options ${_BUILD} |email ${_EMAIL}|binary_images ${LB_BINARY_IMAGES}|distribution ${LB_DISTRIBUTION}|package_lists ${LB_PACKAGE_LISTS}|tasks ${LB_TASKS}|cgipackages ${_LB_CGIPACKAGES}|architectures ${LB_ARCHITECTURES}|archive_areas ${LB_ARCHIVE_AREAS}|chroot_filesystem ${LB_CHROOT_FILESYSTEM}|linux_flavours ${LB_LINUX_FLAVOURS}|security ${LB_SECURITY}|binary_indices ${LB_BINARY_INDICES}|bootappend_install ${LB_BOOTAPPEND_INSTALL}|bootappend_live ${LB_BOOTAPPEND_LIVE}|bootloader ${LB_BOOTLOADER}|debian_installer ${LB_DEBIAN_INSTALLER}|iso_application ${LB_ISO_APPLICATION}|iso_preparer ${LB_ISO_PREPARER}|iso_publisher ${LB_ISO_PUBLISHER}|iso_volume ${LB_ISO_VOLUME}|memtest ${LB_MEMTEST}|net_path ${LB_NET_ROOT_PATH}|net_server ${LB_NET_ROOT_SERVER}|source_images ${LB_SOURCE_IMAGES}|sources ${LB_SOURCE}|custom_bootstrap ${_CUSTOM_BOOTSTRAP}|custom_binary ${_CUSTOM_BINARY}" >> /var/log/live fi sed -e "s/VERSION/${VERSION}/" "${_TEMPLATES}"/footer.html