From e4813ea818e252d5ad2ea9c522a41d80df631f1e Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Wed, 15 Apr 2015 13:58:58 -0500 Subject: [PATCH] Initial commit to provide biuld status on l-b-cgi frontend. --- frontend/cgi/Makefile | 2 + frontend/cgi/live-build-status-cgi | 138 +++++++++++++++++++++++++++++ templates/cgi/debian/build.html | 6 +- templates/cgi/debian/status.html | 64 +++++++++++++ 4 files changed, 208 insertions(+), 2 deletions(-) create mode 100755 frontend/cgi/live-build-status-cgi create mode 100644 templates/cgi/debian/status.html diff --git a/frontend/cgi/Makefile b/frontend/cgi/Makefile index 8ac08ddac..b4eab43d8 100644 --- a/frontend/cgi/Makefile +++ b/frontend/cgi/Makefile @@ -2,6 +2,7 @@ install: install -D -m 0755 live-build-cgi $(DESTDIR)/usr/lib/cgi-bin/live-build + install -D -m 0755 live-build-status-cgi $(DESTDIR)/usr/lib/cgi-bin/live-build-status install -D -m 0755 live-build-cgi.cron $(DESTDIR)/etc/cron.hourly/live-build-cgi install -D -m 0644 live-build-cgi.crontab $(DESTDIR)/etc/cron.d/live-build-cgi install -D -m 0644 live-build-cgi.default $(DESTDIR)/etc/default/live-build-cgi @@ -13,6 +14,7 @@ install: uninstall: rm -f $(DESTDIR)/usr/lib/cgi-bin/live-build + rm -f $(DESTDIR)/usr/lib/cgi-bin/live-build-status rm -f $(DESTDIR)/etc/cron.d/live-build-cgi rm -f $(DESTDIR)/etc/cron.hourly/live-build-cgi rm -f $(DESTDIR)/etc/default/live-build-cgi diff --git a/frontend/cgi/live-build-status-cgi b/frontend/cgi/live-build-status-cgi new file mode 100755 index 000000000..24135f0d9 --- /dev/null +++ b/frontend/cgi/live-build-status-cgi @@ -0,0 +1,138 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2015 Daniel Baumann +## Copyright (C) 2015 Richard Nelson +## +## This program 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 +. /usr/lib/live/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 true +if [ "${_DEBUG}" = "true" ] +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 + echo "

Error: No cgi build specified.

" +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' + + # Standard options + _CGI_BUILD=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])cgi_build=[0-9.]+' | cut -f 2 -d '=' | head -n1) + + #echo ${_CGI_BUILD} + #echo ${QUERY_STRING} + + # FIXME: filter invalid options + unset QUERY_STRING + + if [ -z "${_CGI_BUILD}" ] + then + echo "

Error: No cgi build specified.

" + sed -e "s/VERSION/${VERSION}/" "${_TEMPLATES}"/footer.html + _CGI_BUILD="BAD" + fi + + # Getting number of builds pending. + _QUEUENUM=$(ls "${_TEMPDIR}"/*.build | wc -l) + + # Find the build if exists and populate status html else respond no build. + #echo "${QUERY_STRING}" + if [ -f "${_TEMPDIR}"/"${_CGI_BUILD}".build ] + then + # If build file exists in the tempdir folder then the build is pending. + _STATUS="PENDING" + . "${_TEMPDIR}"/"${_CGI_BUILD}".build + + elif [ -f "${_TEMPDIR}"/"${_CGI_BUILD}"/"${_CGI_BUILD}".build ] + then + # If build file exists the tempdir/build folder the build is running. + _STATUS="RUNNING" + . "${_TEMPDIR}"/"${_CGI_BUILD}"/"${_CGI_BUILD}".build + + elif [ -f "${_DESTDIR}"/"${_CGI_BUILD}"/build ] + then + # If build file exists the tempdir/build folder the build is running. + _STATUS="COMPLETED" + . "${_DESTDIR}"/"${_CGI_BUILD}"/build + + else + _STATUS="Bad or malformed" + fi + + # Test whether to send out information + if [ "${_STATUS}" != "Bad or malformed" ] + then + # Send out the html + # Note: On each string remember to use a delimeter that is not in the string. + sed -e "s/BUILD/${_CGI_BUILD}/g" \ + -e "s/EMAIL/${_EMAIL}/" \ + -e "s/STATUS/${_STATUS}/" \ + -e "s/QUEUENUM/${_QUEUENUM}/" \ + -e "s/LIVE_IMAGE_TYPE/${LIVE_IMAGE_TYPE}/" \ + -e "s/LB_DISTRIBUTION/${LB_DISTRIBUTION}/" \ + -e "s#_LB_CONFIG#${_LB_CONFIG}#" \ + -e "s/LB_APT_INDICES/${LB_APT_INDICES}/" \ + -e "s/LB_APT/${LB_APT}/" \ + -e "s/_LB_CGIPACKAGES/${_LB_CGIPACKAGES}/" \ + -e "s/LIVE_IMAGE_ARCHITECTURE/${LIVE_IMAGE_ARCHITECTURE}/" \ + -e "s/LIVE_IMAGE_ARCHIVE_AREAS/${LIVE_IMAGE_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_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}/" \ + "${_TEMPLATES}"/status.html + + else + echo "Your request of ${_CGI_BUILD}, resulted in a malformed request or build number not found. All requests are logged." + fi + echo "$(date +%b\ %d\ %H:%M:%S) ${_HOSTNAME} live-build-status: ${_STATUS} build status requested for (${_CGI_BUILD}) from ${REMOTE_ADDR}." >> /var/log/live/live-build-status +fi +sed -e "s/VERSION/${VERSION}/" "${_TEMPLATES}"/footer.html diff --git a/templates/cgi/debian/build.html b/templates/cgi/debian/build.html index 642de6314..0a95615b7 100644 --- a/templates/cgi/debian/build.html +++ b/templates/cgi/debian/build.html @@ -1,8 +1,10 @@
-

Your build 'BUILD' was recorded and will be processed soon. Depending on the options you have selected, a build attempt generally takes between 5 and 20 minutes to complete. Currently there are 'QUEUENUM' pending build(s) to be processed ahead of your request. You will be notified by email when the attempt has completed.

+

Your build 'BUILD' was recorded and will be processed soon. Depending on the options you have selected, a build attempt generally takes between 5 and 60 minutes to complete. Currently there are 'QUEUENUM' pending build(s) to be processed ahead of your request. You will be notified by email when the attempt has completed.

-

Your build will be available at: SERVER/BUILD/.

+

Your build build status is available at: SERVER/../cgi-bin/live-build-status?cgi_build=BUILD.

+ +

Your build upon completion will be available at: SERVER/BUILD/.

diff --git a/templates/cgi/debian/status.html b/templates/cgi/debian/status.html new file mode 100644 index 000000000..a9f7e30b1 --- /dev/null +++ b/templates/cgi/debian/status.html @@ -0,0 +1,64 @@ +
+ +

Build 'BUILD' shows a status of STATUS. Depending on the options you have selected, upon build showing a status of running it generally takes between 5 and 60 minutes to complete. Currently there are 'QUEUENUM' pending build(s) request waiting to be processed on the server. You will be notified by email when the attempt has completed.

+ +

Your build when completed will be available at: SERVER/BUILD/.

+ +
+ +Options + +Standard options + + + + + + + + +
Email: EMAIL
--binary-image: LB_BINARY_IMAGES
--distribution: LB_DISTRIBUTION
--config: _LB_CONFIG
--apt: LB_APT
cgipackages.list.chroot: _LB_CGIPACKAGES
+ +Advanced bootstrap options + + + + +
--architectures: LB_ARCHITECTURES
--archive-areas: LB_ARCHIVE_AREAS
+ +Advanced chroot options + + + + + +
--chroot-fileystem: LB_CHROOT_FILESYSTEM
--linux-flavours: LB_LINUX_FLAVOURS
--security: LB_SECURITY
+ +Advanced binary options + + + + + + + + + + + + + + +
--apt-indices: LB_APT_INDICES
--bootappend-live: LB_BOOTAPPEND_LIVE
--bootloader: LB_BOOTLOADER
--debian-installer: LB_DEBIAN_INSTALLER
--bootappend-install: LB_BOOTAPPEND_INSTALL
--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
+ +Advanced source options + + + + +
--source: LB_SOURCE
--source-images: LB_SOURCE_IMAGES
+ +
+ +
+