WorkstationAutoinstallScripts
See Enterprise/WorkstationAutoinstallPreseed for Explanations
Skript 1: System Configuration Script
ubuntu-desktop-bootstrap.sh
# This script configures the system (executed from preseed late_command) # 2013-02-14 / Philipp Gassmann / gassmann@puzzle.ch set -x # Ensure proper logging if [ "$1" != "stage2" ]; then mkdir /root/log /bin/bash /root/desktop-bootstrap.sh 'stage2' &> /root/log/desktop-bootstrap.log exit fi RESOURCES="http://example.com/resources" ###### PACKAGE MANAGEMENT & ADDITIONAL PACKAGES ###### ###################################################### # Add oracle-java-installer PPA: add-apt-repository -y ppa:webupd8team/java # add gimp 2.8 repository add-apt-repository -y ppa:otto-kesselgulasch/gimp # accept oracle java license echo 'oracle-java7-installer shared/accepted-oracle-license-v1-1 select true' | sudo /usr/bin/debconf-set-selections # Install packages from added repositories apt-get update apt-get install -y gimp gimp-help-de oracle-java7-installer # Install appropriate graphics and wlan drivers kernel=`rpm -q kernel | sed 's/kernel-//'` # version of installed kernel, not active kernel lspci | grep VGA | grep -iq nvidia && apt-get install -y nvidia-current-updates lspci | grep VGA | grep -q ATI && apt-get install -y fglrx-updates # Auto Install proprietary drivers: jockey-text --auto-install ###### GENERAL SYSTEM SETTINGS ###### ##################################### # Set locale cat > /etc/default/locale <<EOF LANG=de_CH.UTF-8 LC_NUMERIC=de_CH.UTF-8 LC_TIME=de_CH.UTF-8 LC_MONETARY=de_CH.UTF-8 LC_MEASUREMENT=de_CH.UTF-8 EOF # output from bash in not in German. echo 'export LANG=C.UTF-8' >> /etc/bash.bashrc # regenerate locales locale-gen # update apt-file db apt-file update # Disable update-notifier notifications: sed -i /etc/update-notifier/hooks_seen -e '/apt-file-update/d' sed -i /etc/update-notifier/hooks_seen -e '/nautilus-compare-notification/d' date_s=`date +%s` echo "apt-file-update $date_s 0" >> /etc/update-notifier/hooks_seen echo "nautilus-compare-notification $date_s 0" >> /etc/update-notifier/hooks_seen ###### Custom ENVIRONMENT ###### ################################ # removed ###### Prepare End User Configuration ##### ########################################### # get desktop-bootrap file wget -qO /root/desktop-bootstrap-user.sh "http://example.com/ubuntu-desktop-bootstrap-user.sh" chmod +x /root/desktop-bootstrap-user.sh # Activate firstboot-custom (user setup) wget -qO /etc/init/firstboot-custom.conf "http://example.com/firstboot-custom.conf" # Installationsdatum speichern date +%c > /root/install-date
Skript 2: User Configuration Script
ubuntu-desktop-bootstrap-user.sh
# This script configures system for Enduser # 2013-02-14 / philipp gassmann / gassmann@puzzle.ch CRYPT_OLDPW="temporarypassword" CRYPT_ADMINPW_SHA512="[long hash] -" # For verification set -x if [ "$1" != "stage2" ]; then ## STAGE 1: Start X Server, xclock and Terminal that will run stage2 of the script # kill running xserver killall -9 X Xorg # start xserver Xorg -wr -quiet :0 & sleep 2 export DISPLAY=:0 metacity --display=$DISPLAY & xclock & # set keymap setxkbmap ch # we call ourselves again in a terminal for stage2 gnome-terminal --hide-menubar --geometry=104x37+200+5 --zoom 1 -e "/root/desktop-bootstrap-user.sh 'stage2'" killall Xorg exit # after exit, lightdm should continue starting. fi ## STAGE 2: Actual User Configuration #Disable Output (= don't show passwords) set +x # Continue? or update and shutdown Installdate=`cat /root/install-date` . /etc/os-release if zenity --question --title "Info" --text "Ready for User Setup \n\n$PRETTY_NAME\nInstalled on $Installdate" --cancel-label="Update and Poweroff" --ok-label="Continue"; then true else set -x apt-get update apt-get dist-upgrade -y sleep 5 shutdown -h 0 fi ## Detect all encrypted partitions ## crypt_devices="" crypt_luksdrives=`mktemp crypt_luksdrives.XXXX` crypt_lukdevs=`mktemp crypt_lukdevs.XXXX` mount | grep luks > $crypt_luksdrives #find mounted luks partitions swapoff -va | grep luks >> $crypt_luksdrives; swapon -a #get encrypted swap lvmdiskscan | grep luks >> $crypt_luksdrives # get encrypted physical partitions of lvm sed -n -e 's/.*\(luks-[-a-z0-9]*\).*/\1/p' $crypt_luksdrives | tee $crypt_lukdevs # get luks-9cfg-acme-... part # Ubuntu crypttab: # example:# sda5_crypt UUID=b8783528-c231-420f-a03e-a6b6e00508ba none luks cut -d" " -f 1 /etc/crypttab >> $crypt_lukdevs # get device (e.g. /dev/sda2) of luks-partition IFS=$'\n' for luks in `cat $crypt_lukdevs`; do crypt_devices="$crypt_devices `cryptsetup status /dev/mapper/$luks | sed -n -e 's/\ *device:\ *//p'`" done unset IFS #Query admin encrpytion pw but only when crypted partitions are found. if [ "$crypt_devices" != "" ]; then apwcheck=0 while [ $apwcheck -ne 1 ]; do crypt_adminpw1=`zenity --entry --hide-text --text="Default admin-password for disk encryption"` if [ "`echo $crypt_adminpw1 | sha512sum`" == "$CRYPT_ADMINPW_SHA512" ]; then apwcheck=1 crypt_adminpw="$crypt_adminpw1" else zenity --error --text="Wrong password entered!" fi done fi # query username firstname=`zenity --entry --text=Vorname` lastname=`zenity --entry --text=Nachname` fullname="$firstname $lastname" username="`echo $firstname | cut -c 1`$lastname" username=`echo $username | tr [A-ZÄÖÜ] [a-zäöü] | sed -e s/ä/ae/g -e s/ö/oe/g -e s/ü/ue/g` # query and verify password pwcheck=0 while [ $pwcheck -ne 1 ]; do # quality-check testquality=0 while [ $testquality -eq 0 ]; do pw1=`zenity --entry --hide-text --text=Passwort` # length check if [ "`expr length $pw1`" -ge 8 ]; then if `echo $pw1 | cracklib-check | grep -q ": OK"` ; then # TODO: Improve check. could use pwqcheck testquality=1 else crackliberror=`echo $pw1 | cracklib-check | cut -d ":" -f2` zenity --error --text="Password too weak \nError:$crackliberror" fi else zenity --error --text="Password too short \nMinimal length: 8 characters" fi done # verify password pw2=`zenity --entry --hide-text --text="Repeat password"` if [ "$pw1" == "$pw2" ]; then pwcheck=1 password="$pw1" else zenity --error --text="Passwords don't match" fi done fi ###### GENERAL SYSTEM SETTINGS ###### #config hostname echo 'Set hostname' old_hostname=`hostname` old_domainname=`domainname` new_hostname="$username-workstation" new_domainname='example.com' # change hostname in specific files sed -i "s/$old_hostname/$new_hostname/" /etc/ssh/ssh*key.pub sed -i "s/$old_hostname/$new_hostname/g" /etc/hosts sed -i "s/local.lan/$new_domainname/g" /etc/hosts sed -i "s/$old_domainname/$new_domainname/g" /etc/hosts echo "$new_hostname.$new_domainname" > /etc/hostname #change hostname for this session. hostname $new_hostname.$new_domainname # change and add password for found partitions echo 'Add user password to disk-encryption passwords' crypt_userpw=$password crypt_oldpw_file=`mktemp pwfile.XXXX` echo -n $CRYPT_OLDPW > $crypt_oldpw_file for dev in $crypt_devices; do echo "Set password on $dev" echo -n $crypt_userpw | cryptsetup luksAddKey $dev --key-file=$crypt_oldpw_file echo -n $crypt_adminpw | cryptsetup luksChangeKey $dev --key-file=$crypt_oldpw_file done # cleanup rm -f $crypt_luksdrives rm -f $crypt_oldpw_file # create user echo 'configure user account' grep -q $username /etc/passwd || { useradd $username -c "$fullname" -s /bin/bash -m -G sudo,libvirtd,adm,disk,lp,cdrom,audio,video,plugdev,fuse,netdev,lpadmin,libvirtd,davfs2 echo "$username:$password"|chpasswd } #chown home to user chown -R $username /home/$username/ ###### CLEAN UP ##### # Disable user setup for next boot echo "manual" >> /etc/init/firstboot-custom.override # finish stage2 zenity --info --text="User Setup finished\n" # stage 2 finished
Upstart Hook
firstboot-custom.conf
# firstboot-custom - End-user configuration after initial installation # Original file: oem-config # # Run on the first boot after shipping to the end user to reconfigure the # system for them; removes itself thereafter. description "End-user configuration for the Custom Desktop" author "Philipp Gassmann <gassmann@puzzle.ch>" start on (starting gdm or starting kdm or starting xdm or starting lxdm or starting lightdm or starting uxlaunch or starting oem-config-debconf) stop on (runlevel [06] or stopping gdm or stopping kdm or stopping xdm or stopping lxdm or stopping lightdm or stopping uxlaunch) emits starting-dm task normal exit 0 1 console output script export LANG="de_CH.UTF-8" initctl emit starting-dm DM=oem-config-dm exec /root/desktop-bootstrap-user.sh end script
Enterprise/WorkstationAutoinstallScripts (last edited 2013-06-07 21:49:56 by 80-219-107-54)