Created
August 25, 2012 21:32
-
-
Save ag4ve/3471167 to your computer and use it in GitHub Desktop.
byzantium build
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# SEARCH AG4VE for notes for you | |
# Byzantium Linux top level build script. | |
# by: Sitwon | |
# This shell script, when executed inside of a Porteus build machine, will | |
# result in the generation of the file 000-byzantium.xzm. | |
# Bail on errors | |
set -e | |
FAKE_ROOT=${FAKE_ROOT:-/tmp/fakeroot} | |
BUILD_HOME=${BUILD_HOME:-/home/guest} | |
OUTPUT=${OUTPUT:-/tmp} | |
# clean $FAKE_ROOT if true | |
CLEAN_FAKE_ROOT=false | |
# set true to run http_placeholder.sh to add the web service placeholder pages | |
HTTP_PLACEHOLDER=true | |
if_def(){ | |
# if $1 is defined include $2 inline (execute it's contents in the | |
# current scope) | |
if [ -n $1 ] ;then | |
. $2 | |
fi | |
} | |
is_user(){ | |
####### check if user exists: function for build machines | |
## @param $1 user[:group] | |
## @param $2 UID[:GID] | |
## @return 0|1 where 0 is | |
################################################# | |
# check for user and if it does not exist create it with the UID passed to this function | |
user=${1//[\.\:]*/} #username | |
uid=${2//[\.\:]*/} #uid | |
grptmp=${1//*[\.\:]/} #temporary value for getting the groupname | |
gidtmp=${2//*[\.\:]/} #temporary value for getting the gid | |
group=${grptmp//$user/} #groupname or '' | |
gid=${gidtmp//$uid/} #gid or '' | |
if [ $group ] ;then | |
if [[ `grep -e "^${group}:" /etc/group` == '' ]] ;then | |
echo "creating group ${group} with gid ${gid}" | |
groupadd -g $gid $group | |
fi | |
if [[ `grep -e "^${user}:" /etc/passwd` == '' ]] ;then | |
echo "creating user ${user} with uid ${uid} and gid ${gid}" | |
useradd -u ${uid} -g $gid $user | |
fi | |
elif [[ `grep -e "^${user}:" /etc/passwd` == '' ]] ;then | |
echo "creating user ${user} with uid ${uid}" | |
useradd -u ${uid} ${user} | |
fi | |
} | |
safe_chown(){ | |
is_user $1 $2 | |
chown ${1} ${*:3} | |
} | |
# Create the fakeroot. | |
cd $BUILD_HOME/Byzantium | |
echo "Deleting and recreating the fakeroot..." | |
if $CLEAN_FAKE_ROOT ;then | |
read -p "Rebuilding fakeroot, okay? [press enter to continue]" rebuild | |
rm -rf ${FAKE_ROOT} | |
mkdir -p ${FAKE_ROOT} | |
# Test to see if the Byzantium SVN repository has been checked out into the | |
# home directory of the guest user. ABEND if it's not. | |
if [ ! -d $BUILD_HOME/byzantium ]; then | |
echo "ERROR: Byzantium SVN package repository not found in $BUILD_HOME." | |
exit 1 | |
fi | |
# Unpack all of the .xzm packages into the fakeroot to populate it with the | |
# libraries and executables under the hood of Byzantium. | |
#AG4VE check files to see if they are included in your install | |
for i in `cat required_packages.txt` ; do | |
echo "Now installing $i to ${FAKE_ROOT}..." | |
echo $i | |
# xzm2dir $BUILD_HOME/byzantium/$i ${FAKE_ROOT} | |
echo "Done." | |
done | |
# The thing about symlinks is that they're absolute. When you're building in | |
# a fakeroot this breaks things. So, we have to set up the web server's | |
# content directories manually. | |
echo "Deleting bad symlinks to httpd directories." | |
rm ${FAKE_ROOT}/srv/httpd | |
rm ${FAKE_ROOT}/srv/www | |
else | |
echo "Skipping fakeroot rebuild." | |
fi # end if $CLEAN_FAKE_ROOT | |
echo "Creating database and web server content directories." | |
mkdir -p ${FAKE_ROOT}/srv/httpd/htdocs | |
if_def $HTTP_PLACEHOLDER ${BUILD_HOME}/Byzantium/http_placeholder.sh # conditionally run the script at arg 2 | |
mkdir -p ${FAKE_ROOT}/srv/httpd/cgi-bin | |
mkdir -p ${FAKE_ROOT}/srv/httpd/databases | |
cd ${FAKE_ROOT}/srv | |
ln -s httpd www || echo -n | |
# We should build a controlpanel module to obviate these steps. | |
echo "Creating directories for the traffic graphs." | |
mkdir -p ${FAKE_ROOT}/srv/controlpanel/graphs | |
echo "Copying control panel's HTML templates into place." | |
cp -rv $BUILD_HOME/Byzantium/control_panel/srv/controlpanel/* ${FAKE_ROOT}/srv/controlpanel | |
echo "Installing control panel config files." | |
mkdir -p ${FAKE_ROOT}/etc/controlpanel | |
cp $BUILD_HOME/Byzantium/control_panel/etc/controlpanel/* ${FAKE_ROOT}/etc/controlpanel | |
echo "Installing control panel's SQLite databases and schemas." | |
mkdir -p ${FAKE_ROOT}/var/db/controlpanel | |
cp -rv $BUILD_HOME/Byzantium/control_panel/var/db/controlpanel/* ${FAKE_ROOT}/var/db/controlpanel | |
# Create the xdg directory tree and populate it with our wicd disabler. | |
echo "Creating desktop environment autostart directories." | |
mkdir -p ${FAKE_ROOT}/etc/xdg/autostart/ | |
mkdir -p ${FAKE_ROOT}/usr/share/autostart/ | |
cp -rv $BUILD_HOME/Byzantium/porteus/etc/xdg/autostart/wicd-tray.desktop ${FAKE_ROOT}/etc/xdg/autostart | |
cp -rv $BUILD_HOME/Byzantium/porteus/usr/share/autostart/wicd-tray.desktop ${FAKE_ROOT}/usr/share/autostart | |
cd $BUILD_HOME/Byzantium/scripts | |
# Could these be placed in a module? | |
echo "Installing custom initscripts." | |
cp rc.local rc.mysqld rc.ssl rc.setup_mysql rc.inet1 rc.M ${FAKE_ROOT}/etc/rc.d | |
chmod +x ${FAKE_ROOT}/etc/rc.d/rc.* | |
# Set up mDNS service descriptor repository. | |
mkdir -p ${FAKE_ROOT}/etc/avahi/inactive | |
# Configure libnss to reference mDNS for resolution in addition to DNS. | |
cp ${FAKE_ROOT}/etc/nsswitch.conf-mdns ${FAKE_ROOT}/etc/nsswitch.conf | |
# This stuff probably belongs in the controlpanel package. | |
echo "Installing rrdtool shell script." | |
cp traffic_stats.sh ${FAKE_ROOT}/usr/local/bin | |
echo "Installing the control panel." | |
cd ../control_panel | |
mkdir -p ${FAKE_ROOT}/usr/local/sbin | |
cp *.py *.sh ${FAKE_ROOT}/usr/local/sbin | |
cp etc/rc.d/rc.byzantium ${FAKE_ROOT}/etc/rc.d/ | |
echo "Installing OpenSSL configuration file." | |
mkdir -p ${FAKE_ROOT}/etc/ssl | |
cp etc/ssl/openssl.cnf ${FAKE_ROOT}/etc/ssl | |
# Install the CGI-BIN script that implements the service directory the users | |
# see. | |
echo "Installing the service directory." | |
cd ../service_directory | |
cp index.html ${FAKE_ROOT}/srv/httpd/htdocs | |
cp -r services.py _services.py _utils.py tmpl ${FAKE_ROOT}/srv/httpd/cgi-bin | |
chmod 0755 ${FAKE_ROOT}/srv/httpd/cgi-bin/services.py | |
mkdir -p ${FAKE_ROOT}/opt/byzantium/avahi/ | |
cp avahiclient.sh avahiclient.py _utils.py ${FAKE_ROOT}/opt/byzantium/avahi/ | |
chmod -R 0755 ${FAKE_ROOT}/opt/byzantium/avahi/ | |
cp rc.avahiclient ${FAKE_ROOT}/etc/rc.d/ | |
chmod 0755 ${FAKE_ROOT}/etc/rc.d/rc.avahiclient | |
# Add the custom Firefox configuration. | |
echo "Installing Mozilla configs for the guest user." | |
cd ../porteus | |
mkdir -p ${FAKE_ROOT}/home/guest/.mozilla/firefox/c3pp43bg.default | |
cp home/guest/.mozilla/firefox/c3pp43bg.default/prefs.js ${FAKE_ROOT}/home/guest/.mozilla/firefox/c3pp43bg.default | |
# Why aren't these in their modules? | |
echo "Installing custom configuration files and initscripts for services." | |
cp -rv apache/etc/httpd/* ${FAKE_ROOT}/etc/httpd | |
cp babel/babeld.conf ${FAKE_ROOT}/etc | |
cp dnsmasq/dnsmasq.conf ${FAKE_ROOT}/etc | |
cp etherpad-lite/rc.etherpad-lite ${FAKE_ROOT}/etc/rc.d | |
cp etherpad-lite/settings.json ${FAKE_ROOT}/opt/etherpad-lite | |
cp etherpad-lite/etherpad-lite.service ${FAKE_ROOT}/etc/avahi/inactive | |
cp sudo/etc/sudoers ${FAKE_ROOT}/etc | |
chown root:root ${FAKE_ROOT}/etc/sudoers | |
chmod 0440 ${FAKE_ROOT}/etc/sudoers | |
cp avahi/etc/avahi/avahi-daemon.conf ${FAKE_ROOT}/etc/avahi | |
cp etc/profile ${FAKE_ROOT}/etc | |
# Install our custom avahi-dnsconfd.action script. | |
cp avahi/etc/avahi/avahi-dnsconfd.action ${FAKE_ROOT}/etc/avahi | |
# Install our custom dhcpcd event script. | |
mkdir -p ${FAKE_ROOT}/lib/dhcpcd/dhcpcd-hooks | |
cp dhcpcd/lib/dhcpcd/dhcpcd-hooks/*.conf ${FAKE_ROOT}/lib/dhcpcd/dhcpcd-hooks | |
chmod 0444 ${FAKE_ROOT}/lib/dhcpcd/dhcpcd-hooks/*.conf | |
# AG4VE make sure you want these | |
# Add the custom passwd and group files. | |
echo "Installing custom system configuration files." | |
cp etc/passwd ${FAKE_ROOT}/etc | |
cp etc/shadow ${FAKE_ROOT}/etc | |
cp etc/hosts ${FAKE_ROOT}/etc | |
cp etc/HOSTNAME ${FAKE_ROOT}/etc | |
cp etc/inittab ${FAKE_ROOT}/etc | |
cp etc/group ${FAKE_ROOT}/etc | |
chown root:root ${FAKE_ROOT}/etc/passwd ${FAKE_ROOT}/etc/shadow ${FAKE_ROOT}/etc/hosts ${FAKE_ROOT}/etc/HOSTNAME ${FAKE_ROOT}/etc/inittab ${FAKE_ROOT}/etc/group | |
chmod 0600 ${FAKE_ROOT}/etc/shadow | |
# These belong in modules! | |
echo "Installing config files for MySQL, ngircd, and PHP." | |
cp mysql/my.cnf ${FAKE_ROOT}/etc | |
cp ngircd/ngircd.conf ${FAKE_ROOT}/etc | |
cp ngircd/ngircd.service ${FAKE_ROOT}/etc/avahi/inactive | |
cp ngircd/rc.ngircd ${FAKE_ROOT}/etc/rc.d | |
cp php/etc/httpd/php.ini ${FAKE_ROOT}/etc/httpd | |
# This should be a module | |
echo "Installing qwebirc configuration file and initscript." | |
mkdir -p ${FAKE_ROOT}/opt/qwebirc | |
cp qwebirc/config.py ${FAKE_ROOT}/opt/qwebirc | |
cp qwebirc/rc.qwebirc ${FAKE_ROOT}/etc/rc.d | |
cp qwebirc/qwebirc.service ${FAKE_ROOT}/etc/avahi/inactive | |
# Install the database files. | |
echo "Installing database files." | |
cd .. | |
cp databases/* ${FAKE_ROOT}/srv/httpd/databases | |
# Add our custom desktop stuff. | |
echo "Customizing desktop for guest user." | |
mkdir -p ${FAKE_ROOT}/home/guest/Desktop | |
cp porteus/home/guest/Desktop/Control\ Panel.desktop ${FAKE_ROOT}/home/guest/Desktop | |
mkdir -p ${FAKE_ROOT}/usr/share/pixmaps/porteus | |
cp byzantium-icon.png ${FAKE_ROOT}/usr/share/pixmaps/porteus | |
# Create the runtime directory for ngircd because its package doesn't. | |
echo "Setting up directories for ngircd." | |
mkdir -p ${FAKE_ROOT}/var/run/ngircd | |
safe_chown ngircd:root 1002:0 ${FAKE_ROOT}/var/run/ngircd | |
chmod 0750 ${FAKE_ROOT}/var/run/ngircd | |
# Install the captive portal daemon. | |
echo "Installing captive portal." | |
mkdir -p ${FAKE_ROOT}/srv/captiveportal | |
mkdir -p ${FAKE_ROOT}/etc/captiveportal | |
cd $BUILD_HOME/Byzantium/captive_portal | |
cp captive_portal.py ${FAKE_ROOT}/usr/local/sbin | |
cp captive-portal.sh ${FAKE_ROOT}/usr/local/sbin | |
cp mop_up_dead_clients.py ${FAKE_ROOT}/usr/local/sbin | |
cp fake_dns.py ${FAKE_ROOT}/usr/local/sbin | |
cp etc/captiveportal/captiveportal.conf ${FAKE_ROOT}/etc/captiveportal/ | |
cp srv/captiveportal/* ${FAKE_ROOT}/srv/captiveportal/ | |
# Directory ownership sanity for ~guest. | |
echo "Confirming ownership of guest user's home directory." | |
safe_chown guest:guest 1000:1000 -R ${FAKE_ROOT}/home/guest | |
# Slap branding into module. This needs to be done more cleanly. | |
echo "Installing branding stuff." | |
cp -dr $BUILD_HOME/Byzantium/branding/* ${FAKE_ROOT}/ | |
# Build the Byzantium module. | |
echo "Building 000-byzantium.xzm. Sit back and enjoy the ride." | |
#AG4VE this would normally build the xzm from the collective fake root | |
# dir2xzm ${FAKE_ROOT} ${OUTPUT}/000-byzantium.xzm | |
echo done | |
# "Hey, Bishop - do the thing with the knife!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment