#!/bin/bash # //////////////////////////////////////////////////////////////////////////////// # //BOCA Online Contest Administrator # // Copyright (C) 2003-2014 by BOCA Development Team (bocasystem@gmail.com) # // # // This program is free software: you can redistribute it and/or modify # // it under the terms of the GNU General Public License as published by # // the Free Software Foundation, either version 3 of the License, or # // (at your option) any later version. # // # // This program is distributed in the hope that it will be useful, # // but WITHOUT ANY WARRANTY; without even the implied warranty of # // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # // GNU General Public License for more details. # // You should have received a copy of the GNU General Public License # // along with this program. If not, see . # //////////////////////////////////////////////////////////////////////////////// # // Last modified 26/Aug/2015 by cassio@ime.usp.br #/////////////////////////////////////////////////////////////////////////////////////////// echo "#############################################################" echo "### $0 by cassio@ime.usp.br for Ubuntu 14.04.3 ###" echo "#############################################################" if [ "`id -u`" != "0" ]; then echo "Must be run as root" exit 1 fi ## REMOVE NOTIFICATIONS # killall update-notifier # if [ ! -f /usr/bin/update-notifier.orig ]; then # mv /usr/bin/update-notifier /usr/bin/update-notifier.orig # fi # echo "#!/bin/bash" >/usr/bin/update-notifier # find /usr/lib -name notify-osd | xargs chmod -x # killall notify-osd 2>/dev/null apt-get -y install python-software-properties 2>/dev/null gconftool -s -t bool /apps/update-notifier/auto_launch false for i in id chown chmod cut awk tail grep cat sed mkdir rm mv sleep apt-get add-apt-repository update-alternatives; do p=`which $i` if [ -x "$p" ]; then echo -n "" else echo command "$i" not found exit 1 fi done sleep 2 echo "$0" | grep -q "install.*sh" if [ $? != 0 ]; then echo "Make the install script executable (using chmod) and run it directly, like ./install.sh" else if [ "$1" != "alreadydone" ]; then echo "It is recommended that you run the commands" echo " apt-get update; apt-get upgrade" echo "by your own before running this script. If you have already done it," echo "please run the script as" echo " ./install.sh alreadydone" exit 1 fi if [ ! -r /etc/lsb-release ]; then echo "File /etc/lsb-release not found. Is this a ubuntu or debian-like distro?" exit 1 fi . /etc/lsb-release echo "=============================================================" echo "========= UNINSTALLING SOME UNNECESSARY PACKAGES ===========" echo "=============================================================" apt-get -y purge libreoffice-common libreoffice-base-core apt-get -y purge thunderbird apt-get -y purge unity-lens-shopping apt-get -y purge unity-webapps-common apt-get -y install sysvinit-utils gsettings set com.canonical.Unity.Lenses disabled-scopes "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope', 'more_suggestions-populartracks.scope', 'music-musicstore.scope', 'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope', 'more_suggestions-skimlinks.scope']" >/dev/null 2>&1 apt-get -y autoremove echo "==============================================================" echo "============== CHECKING FOR OTHER APT SERVERS ===============" echo "==============================================================" echo "============== CHECKING FOR canonical.com APT SERVER ========" cd grep -q "^[^\#]*deb http://archive.canonical.com.* $DISTRIB_CODENAME .*partner" /etc/apt/sources.list if [ $? != 0 ]; then add-apt-repository "deb http://archive.canonical.com/ubuntu $DISTRIB_CODENAME partner" fi apt-add-repository -y ppa:webupd8team/sublime-text-3 apt-get -y update apt-get -y upgrade libCppdev=`apt-cache search libstdc++ | grep "libstdc++6-.*-dev " | sort | tail -n1 | cut -d' ' -f1` if [ "$libCppdev" == "" ]; then echo "libstdc++6-*-dev not found" exit 1 fi libCppdbg=`apt-cache search libstdc++ | grep "libstdc++6-.*-dbg " | sort | tail -n1 | cut -d' ' -f1` if [ "$libCppdbg" == "" ]; then echo "libstdc++6-*-dbg not found" exit 1 fi libCppdoc=`apt-cache search libstdc++ | grep "libstdc++6-.*-doc " | sort | tail -n1 | cut -d' ' -f1` if [ "$libCppdoc" == "" ]; then echo "libstdc++6-*-doc not found" exit 1 fi echo "=====================================================================" echo "================= installing packages needed by BOCA ===============" echo "=====================================================================" apt-get -y install zenity apache2 eclipse-pde eclipse-rcp eclipse-platform eclipse-jdt eclipse-cdt eclipse emacs \ evince g++ gcc gedit scite libstdc++6 makepasswd manpages-dev php5-cli php5-mcrypt openjdk-7-dbg openjdk-7-jdk \ php5 php5-pgsql postgresql postgresql-client postgresql-contrib quota sharutils default-jdk openjdk-7-doc \ vim-gnome geany geany-plugin-addons geany-plugins geany-plugin-debugger default-jre sysstat \ vim xfce4 $libCppdev $libCppdoc $libCppdbg php5-gd stl-manual gcc-doc debootstrap schroot c++-annotations \ sublime-text-installer libgnomekbd-common if [ $? != 0 ]; then echo "" echo "ERROR running the apt-get -- must check if all needed packages are available" exit 1 fi apt-get -y autoremove apt-get -y clean for i in makepasswd useradd update-rc.d; do p=`which $i` if [ -x "$p" ]; then echo -n "" else echo command "$i" not found exit 1 fi done echo "==================================================================" echo "============= creating user icpc with password icpc =============" echo "==================================================================" mkdir -p /etc/skel/Desktop/ cat < /etc/skel/Desktop/javadoc.desktop [Desktop Entry] Version=1 Name=Java API Comment=Java API Exec=firefox /usr/share/doc/openjdk-7-jre-headless/api/index.html Terminal=false Type=Application EOF cat < /etc/skel/Desktop/stldoc.desktop [Desktop Entry] Version=1 Name=C++ STL Comment=C++ STL Exec=firefox /usr/share/doc/stl-manual/html/index.html Terminal=false Type=Application EOF cat < /etc/skel/Desktop/cppannotations.desktop [Desktop Entry] Version=1 Name=C++ Annotations Comment=C++ Annotations Exec=firefox /usr/share/doc/c++-annotations/html/index.html Terminal=false Type=Application EOF [ -f /usr/share/applications/eclipse.desktop ] && cp /usr/share/applications/eclipse.desktop /etc/skel/Desktop/ [ -f /usr/share/applications/gedit.desktop ] && cp /usr/share/applications/gedit.desktop /etc/skel/Desktop/ [ -f /usr/share/applications/emacs23.desktop ] && cp /usr/share/applications/emacs23.desktop /etc/skel/Desktop/ [ -f /usr/share/applications/emacs24.desktop ] && cp /usr/share/applications/emacs24.desktop /etc/skel/Desktop/ cp /usr/share/applications/gnome-terminal.desktop /etc/skel/Desktop/ chmod 755 /etc/skel/Desktop/*.desktop pass=`echo -n icpc | makepasswd --clearfrom - --crypt-md5 | cut -d'$' -f2-` pass=\$`echo $pass` id -u icpc >/dev/null 2>/dev/null if [ $? != 0 ]; then useradd -d /home/icpc -k /etc/skel -m -p "$pass" -s /bin/bash -g users icpc else usermod -d /home/icpc -p "$pass" -s /bin/bash -g users icpc echo "user icpc already exists" fi lightdmfile=/etc/lightdm/lightdm.conf if [ -d "`dirname $lightdmfile`" ]; then echo "==============================================================" echo "====== disabling guest account on lightdm ========" echo "==============================================================" echo -e "[SeatDefaults]\n" > $lightdmfile echo -e "allow-guest=false\ngreeter-hide-users=true\ngreeter-show-remote-login=false\ngreeter-show-manual-login=true\n" >> $lightdmfile fi # echo "=====================================================================================" # echo "============ updating grub boot loader to make it password protected ===============" # echo "=====================================================================================" # grep -q "^[^\#]*password" /etc/grub.d/40_custom # if [ $? != 0 ]; then # echo "updated with new password (if needed, see the password at /etc/grub.d/40_custom)" # echo -e "set superusers=\"root\"" >> /etc/grub.d/40_custom # echo -e "password root `makepasswd`" >> /etc/grub.d/40_custom # chmod go-rw /etc/grub.d/40_custom # grub-mkconfig > /boot/grub/grub.cfg # chmod go-rw /boot/grub/grub.cfg # fi # echo "grub loader configured with password (if needed, see the password at /etc/grub.d/40_custom)" echo "==============================================================" echo "============= INSTALLING SCRIPTS at /etc/icpc ===============" echo "==============================================================" mkdir -p /etc/icpc chown root.root /etc/icpc chmod 755 /etc/icpc cat < /etc/icpc/installscripts.sh #!/bin/bash echo "================================================================================" echo "========== downloading config files from www.ime.usp.br/~cassio/boca ==========" echo "================================================================================" iptables -F wget -O /tmp/.boca.tmp "http://www.ime.usp.br/~cassio/boca/icpc.etc.date.txt" echo ">>>>>>>>>>" echo ">>>>>>>>>> Downloading scripts release \`cat /tmp/.boca.tmp\`" echo ">>>>>>>>>>" if [ "\$1" == "" ]; then wget -O /tmp/.boca.tmp "http://www.ime.usp.br/~cassio/boca/icpc.etc.ver.txt" icpcver=\`cat /tmp/.boca.tmp\` else icpcver=\$1 fi echo "Looking for version \$icpcver from http://www.ime.usp.br/~cassio/boca/" rm -f /tmp/icpc.etc.tgz wget -O /tmp/icpc.etc.tgz "http://www.ime.usp.br/~cassio/boca/download.php?filename=icpc-\$icpcver.etc.tgz" if [ "\$?" != "0" -o ! -f /tmp/icpc.etc.tgz ]; then echo "ERROR downloading file icpc-\$icpcver.etc.tgz. Aborting *****************" exit 1 fi grep -qi "bad parameters" /tmp/icpc.etc.tgz if [ "\$?" == "0" ]; then echo "ERROR downloading file icpc-\$icpcver.etc.tgz. Aborting *****************" exit 1 fi cd /etc di=\`date +%s\` echo "==============================================================" echo "====================== BACKUPING CONFIG FILES ===============" for i in \`tar tvzf /tmp/icpc.etc.tgz | awk '{ print \$6; }'\`; do if [ -f "\$i" ]; then bn=\`basename \$i\` dn=\`dirname \$i\` mv \$i \$dn/.\$bn.bkp.\$di chmod 600 \$dn/.\$bn.bkp.\$di fi done echo "==============================================================" echo "====================== EXTRACTING CONFIG FILES ===============" tar -xkvzf /tmp/icpc.etc.tgz for i in \`tar tvzf /tmp/icpc.etc.tgz | awk '{ print \$6; }'\`; do chown root.root \$i chmod o-w,u+rx \$i done EOF chmod 750 /etc/icpc/installscripts.sh /etc/icpc/installscripts.sh $3 service procps start grep -q "quota" /etc/fstab if [ $? != 0 ]; then cp -f /etc/fstab /etc/fstab.bkp.$di sed "s/relatime/quota,relatime/" < /etc/fstab.bkp.$di > /etc/fstab.bkp.$di.1 sed "s/errors=remount-ro/quota,errors=remount-ro/" < /etc/fstab.bkp.$di.1 > /etc/fstab fi echo "============================================================" echo "===================== SETTING UP USER QUOTA ===============" echo "============================================================" for i in `mount | grep gvfs | cut -d' ' -f3`; do umount $i done mount / -o remount quotaoff -a 2>/dev/null quotacheck -M -a quotaon -a setquota -u postgres 0 3000000 0 10000 -a setquota -u icpc 0 500000 0 10000 -a setquota -u nobody 0 500000 0 10000 -a setquota -u www-data 0 1500000 0 10000 -a echo "==============================================================" echo "================= UPDATING rc.local symlinks ===============" echo "==============================================================" #update-rc.d rc.local defaults update-rc.d -f cups remove apt-get -y clean #echo "==============================================================" #echo "====================== SETTING UP IPs and PASSWORDs (server config follows) ===============" # /etc/icpc/restart.sh #/etc/icpc/setup.sh startscript="NOTOK" if [ -d "`dirname $lightdmfile`" ]; then startscript="OK" [ -f $lightdmfile ] && grep -q "^[^\#]*greeter-setup-script=/etc/icpc/setup.sh" $lightdmfile if [ $? != 0 ]; then echo "greeter-setup-script=/etc/icpc/setup.sh" >> $lightdmfile fi fi if [ -d /etc/gdm/Init ]; then startscript="OK" echo "======================================================================================" echo "========== UPDATING /etc/gdm/Init/Default TO PROVIDE CONFIG AT STARTUP ===============" echo "======================================================================================" echo -e "#!/bin/bash\n[ -x /etc/icpc/setup.sh ] && /etc/icpc/setup.sh\n\n" > /tmp/.boca.tmp cat /etc/gdm/Init/Default >> /tmp/.boca.tmp mv /tmp/.boca.tmp /etc/gdm/Init/Default chmod 755 /etc/gdm/Init/Default fi if [ "$startscript" != "OK" ]; then echo "************ STARTUP CALL OF SCRIPTS NOT CONFIGURED **************" echo "****** neither /etc/gdm/Init nor /etc/lightdm/lightdm.conf were found ************" fi if [ -f /etc/icpc/createbocajail.sh ]; then chmod 750 /etc/icpc/createbocajail.sh if [ "$2" != "notbuildjail" ]; then /etc/icpc/createbocajail.sh fi else echo "************** SCRIPT TO CREATE BOCAJAIL NOT FOUND -- SOMETHING LOOKS WRONG ***************" fi # BOCA CONFIG if [ -f /etc/icpc/installboca.sh ]; then chmod 750 /etc/icpc/installboca.sh /sbin/iptables -F /etc/icpc/installboca.sh "$3" "$4" else echo "************* SCRIPT TO INSTALL BOCA NOT FOUND -- SOMETHING IS WRONG -- I CANT INSTALL BOCA **************" fi fi