#!/bin/bash if [ "$IN_CHROOT" != "1" ] ; then echo This is supposed to run inside the chroot, oops exit 1 fi set -e set -x # Set up live username and hostname cat >/etc/casper.conf <<"EOF" export USERNAME="nilm" export USERFULLNAME="NILM User" export HOST="nilmbuntu" export BUILD_SYSTEM="Ubuntu" export FLAVOUR="NILMbuntu" # Do the inital user setup even though UID 1000 already exists. # This also needs to be set in /etc/environment, for ubiquity, # but we do that in preseed/early_command so that it only shows # up in the LiveCD image. export OVERRIDE_SYSTEM_USER=true EOF # Set up NILM-specific stuff to get added to /etc/hosts after installation cat >/etc/hosts.nilm <<"EOF" 127.0.2.1 nilm.primary 127.0.2.2 nilm.secondary EOF # And copy it for now (although it will get overwritten at boot) cat /etc/hosts.nilm >> /etc/hosts # Upgrade packages apt update apt -y dist-upgrade apt -y --purge autoremove # Remove old kernels, and reinstall the latest one (to make sure # it's present in /boot) LATEST_KERNEL=$(ls --sort=version /lib/modules/ | tail -n 1) for VER in $(ls --sort=version /lib/modules/) ; do if [ $VER != $LATEST_KERNEL ] ; then apt -y --purge remove "linux-.*$VER" fi done apt -y --reinstall install linux-{,signed-}image-${LATEST_KERNEL} # Disable upgrade popups sed -i -s -e 's/Prompt=.*/Prompt=never/g' \ /etc/update-manager/release-upgrades || true # Set up & install postfix for local mail delivery debconf-set-selections <<"EOF" postfix postfix/mailname string localdomain postfix postfix/main_mailer_type select Local only EOF apt -y install postfix # Required packages apt -y install \ python3 \ python2.7 \ python2.7-dev \ python-setuptools \ python-pip \ cython \ git \ build-essential \ python-cherrypy3 \ python-decorator \ python-simplejson \ python-requests \ python-dateutil \ python-tz \ python-progressbar \ python-psutil \ python-numpy \ python-nose \ python-coverage \ apache2 \ libapache2-mod-wsgi \ python-scipy \ python-daemon # Install other useful stuff apt -y install \ adb \ avrdude \ chromium-browser \ curl \ debconf-utils \ devscripts \ dfu-programmer \ dlocate \ emacs \ emacs-goodies-el \ esptool \ flashrom \ gcc-arm-none-eabi \ gcc-avr \ gdb-arm-none-eabi \ gddrescue \ gnuplot \ help2man \ ipython \ libnewlib-arm-none-eabi \ libreoffice \ libstdc++-arm-none-eabi-newlib \ texlive \ mailutils \ moreutils \ mutt \ network-manager-openvpn-gnome \ octave \ octave-missing-functions \ octave-signal \ openocd \ openssh-server \ openssl \ openvpn \ python-matplotlib \ screen \ sigrok \ silversearcher-ag \ subversion \ tcpdump \ zip # Install the packages required for en_US language support # This avoids a prompt and package download at first install apt -y install $(/usr/bin/check-language-support -l en_US) # Set up timezone to America/New_York for the live CD ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime dpkg-reconfigure -f noninteractive tzdata # Put some default desktop shortcuts in place DESKTOP=/etc/skel/Desktop mkdir -p $DESKTOP cp /usr/share/applications/exo-terminal-emulator.desktop $DESKTOP || true cp /usr/share/applications/exo-web-browser.desktop $DESKTOP || true chmod +x $DESKTOP/* # Custom background image (which was already copied in by customize.sh) XML=/etc/xdg/xdg-xubuntu/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml BG=/usr/share/xfce4/backdrops/nilmbuntu.png apt -y install xmlstarlet xmlstarlet ed -L -u "//property[@name='image-path']/@value" -v "$BG" $XML xmlstarlet ed -L -u "//property[@name='image-style']/@value" -v "3" $XML # Configure Firefox with our default homepage (now irrelevant since # it won't be the default browser) HOMEPAGE="http://www.wattsworth.net/" cat >/etc/firefox/syspref.js </etc/skel/.config/xfce4/helpers.rc <<"EOF" WebBrowser=chromium-browser EOF mkdir -p /etc/skel/.local/share/xfce4/helpers cat >/etc/skel/.local/share/xfce4/helpers/chromium-browser.desktop <<"EOF" [Desktop Entry] Version=1.0 Name=Chromium Web Browser X-XFCE-Category=WebBrowser X-XFCE-Commands=chromium-browser X-XFCE-CommandsWithParameter=chromium-browser "%s" Exec=chromium-browser %U Type=X-XFCE-Helper Icon=chromium-browser MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https; StartupNotify=true EOF # Make Chromium a little nicer: # - No first run mkdir -p /etc/skel/.config/chromium/Default touch '/etc/skel/.config/chromium/First Run' # - Set up some default bookmarks on the bookmark bar cat >/etc/skel/.config/chromium/Default/Bookmarks <<"EOF" { "version": 1, "roots": { "other": { "id": "2", "name": "Other bookmarks", "type": "folder", "children": [ ] }, "synced": { "id": "3", "name": "Mobile bookmarks", "type": "folder", "children": [ ] }, "bookmark_bar": { "id": "1", "name": "Bookmarks bar", "type": "folder", "children": [ { "id": "6", "type": "url", "name": "Wattsworth", "url": "http://www.wattsworth.net/" }, { "id": "7", "type": "url", "name": "Standalone NILM", "type": "url", "url": "http://nilm.primary/" } ] } } } EOF # Create NILM user. This should happen after anything that we put in # /etc/skel, since files get copied from there. Note that this user # is the same as what we have in the preseed file and casper.conf if ! getent passwd nilm ; then adduser --gecos "NILM User" --disabled-password nilm fi # Make sure locate databases are up-to-date /etc/cron.daily/mlocate /etc/cron.daily/dlocate # Make sure initramfs was regenerated with casper changes update-initramfs -u