#!/bin/bash
VERSION="10.10"
echo ""
echo "+------------------------------------------------------------------------------+"
echo "|                                                                              |"
echo "|      ..:: DigitalEnigma Networks, LLC - APT Sources List Generator ::..      |"
echo "|                                                                              |"
echo "+------------------------------------------------------------------------------+"
echo "|                                                                              |"
echo "|  This script will generate and install a new 'sources.list' file on your     |"
echo "|  system as well as move your current 'sources.list' to 'sources.list.bak'.   |"
echo "|  The script is smart enough to figure out what version you are running &     |"
echo "|  what architecture you are using and will automagically fill in the          |"
echo "|  'codename' portion & 'architecture' portion in the script for you.          |"
echo "|                                                                              |"
echo "|  Supported Ubuntu versions are:                                              |"
echo "|    4.10,  5.04,  5.10,  6.06 LTS,  6.10,  7.04,  7.10,  8.04 LTS,            |"
echo "|    8.10,  9.04,  9.10, 10.04 LTS, 10.10                                      |"
echo "|                                                                              |"
echo "|  Supported system architectures are:                                         |"
echo "|    i686, powerpc, sparc64, x86_64                                            |"
echo "|                                                                              |"
echo "|  NOTICE: LTS (Long Term Support) releases are supported by this script up    |"
echo "|  to the EOL (End Of Life) date for server platforms.  Thus, if you have a    |"
echo "|  desktop edition of an LTS release installed, you may have to manually edit  |"
echo "|  '/etc/apt/sources.list' by hand after using this script.                    |"
echo "|                                                                              |"
echo "|  WARNING: As with any software, this script comes with some risks involved.  |"
echo "|  Although not outlined here, by using this script you are agreeing that      |"
echo "|  DigitalEnigma Networks, LLC will not be held responsible should any harm    |"
echo "|  come to your system.  Use this script at your own risk!                     |"
echo "|                                                                              |"
echo "|  Luke@DigitalEnigma.net                                       Version $VERSION  |"
echo "|                                                                              |"
echo "+------------------------------------------------------------------------------+"
echo ""
read -p "Do you wish to proceed? [y/N]: " PROCEED;
if [[ "$PROCEED" == "y" ]]; then
  SHELL=/bin/bash
  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  CODENAME=`lsb_release -c | awk -F " " '{print $2}'`
  RELEASE=`lsb_release -r | awk -F " " '{print $2}'`
  ARCHITECTURE=`uname -a | awk -F " " '{print $12}'`
  if [[ "$ARCHITECTURE" == "GNU/Linux" ]]; then
    ARCHITECTURE=`uname -a | awk -F " " '{print $11}'`
  fi
  read -p "I've detected that you are running '$CODENAME', is this true? [y/N]: " VERIFY1;
  if [[ "$VERIFY1" == "y" ]]; then
    read -p "I've detected that you are using '$ARCHITECTURE' architecture, is this true? [y/N]: " VERIFY2;
    if [[ "$VERIFY2" == "y" ]]; then
      case "$RELEASE" in
        4.10|5.04|5.10|6.10|7.04|7.10|8.10|9.04)
          ENDOFLIFE="1"
        ;;
        6.06|8.04|9.10|10.04|10.10)
          ENDOFLIFE="0"
        ;;
      esac
      if [[ ("$ARCHITECTURE" == "x86_64") && ("$ENDOFLIFE" == "0") ]]; then
        REPOSBIN="us.archive"
        REPOSSRC="us.archive"
        REPOSBINPATH="ubuntu"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="deb"
        REPOSSRCSEC="deb-src"
      elif [[ ("$ARCHITECTURE" == "x86_64") && ("$ENDOFLIFE" == "1") ]]; then
        REPOSBIN="old-releases"
        REPOSSRC="old-releases"
        REPOSBINPATH="ubuntu"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="# deb"
        REPOSSRCSEC="# deb-src"
      elif [[ ("$ARCHITECTURE" == "i686") && ("$ENDOFLIFE" == "0") ]]; then
        REPOSBIN="us.archive"
        REPOSSRC="us.archive"
        REPOSBINPATH="ubuntu"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="deb"
        REPOSSRCSEC="deb-src"
      elif [[ ("$ARCHITECTURE" == "i686") && ("$ENDOFLIFE" == "1") ]]; then
        REPOSBIN="old-releases"
        REPOSSRC="old-releases"
        REPOSBINPATH="ubuntu"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="# deb"
        REPOSSRCSEC="# deb-src"
      elif [[ ("$ARCHITECTURE" == "powerpc") && ("$ENDOFLIFE" == "0") ]]; then
        REPOSBIN="ports"
        REPOSSRC="us.archive"
        REPOSBINPATH="ubuntu-ports"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="deb"
        REPOSSRCSEC="deb-src"
      elif [[ ("$ARCHITECTURE" == "powerpc") && ("$ENDOFLIFE" == "1") ]]; then
        REPOSBIN="old-releases"
        REPOSSRC="old-releases"
        REPOSBINPATH="ubuntu"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="# deb"
        REPOSSRCSEC="# deb-src"
      elif [[ ("$ARCHITECTURE" == "sparc64") && ("$ENDOFLIFE" == "0") ]]; then
        REPOSBIN="ports"
        REPOSSRC="us.archive"
        REPOSBINPATH="ubuntu-ports"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="deb"
        REPOSSRCSEC="deb-src"
      elif [[ ("$ARCHITECTURE" == "sparc64") && ("$ENDOFLIFE" == "1") ]]; then
        REPOSBIN="old-releases"
        REPOSSRC="old-releases"
        REPOSBINPATH="ubuntu"
        REPOSSRCPATH="ubuntu"
        REPOSBINSEC="# deb"
        REPOSSRCSEC="# deb-src"
      else
        echo ""
        echo "ABORT: Architecture is not yet supported."
        echo ""
        GOCODE="1"
      fi
      if [[ "$GOCODE" != "1" ]]; then
        echo "Backing up your current 'sources.list' file..."
        mv /etc/apt/sources.list /etc/apt/sources.list.bak
        COMPARE=`echo "$RELEASE * 100" | bc | awk -F "." '{print $1}'`
        if [[ "$COMPARE" -ge "1010" ]]; then
          echo "Disabling languages (speeds APT up)..."
          echo "APT::Acquire::Languages \"none\";" > /etc/apt/apt.conf.d/01languages
        else
          echo "Disabling translations (speeds APT up)..."
          echo "APT::Acquire::Translation \"none\";" > /etc/apt/apt.conf.d/01translations
        fi
        echo "Generating new 'sources.list' file with header..."
        echo "################################################################################" > /etc/apt/sources.list
        echo "#                                                                              #" >> /etc/apt/sources.list
        echo "#                DigitalEnigma Networks, LLC - APT Sources List                #" >> /etc/apt/sources.list
        echo "#                      Created Using Script Version $VERSION                      #" >> /etc/apt/sources.list
        echo "#                                                                              #" >> /etc/apt/sources.list
        echo "################################################################################" >> /etc/apt/sources.list
        echo "" >> /etc/apt/sources.list
        echo "Adding '$CODENAME' repositories..."
        echo "deb http://$REPOSBIN.ubuntu.com/$REPOSBINPATH $CODENAME main restricted universe multiverse" >> /etc/apt/sources.list
        echo "deb-src http://$REPOSSRC.ubuntu.com/$REPOSSRCPATH $CODENAME main restricted universe multiverse" >> /etc/apt/sources.list
        echo "" >> /etc/apt/sources.list
        echo "Adding '$CODENAME-backports' repositories..."
        echo "deb http://$REPOSBIN.ubuntu.com/$REPOSBINPATH $CODENAME-backports main restricted universe multiverse" >> /etc/apt/sources.list
        echo "deb-src http://$REPOSSRC.ubuntu.com/$REPOSSRCPATH $CODENAME-backports main restricted universe multiverse" >> /etc/apt/sources.list
        echo "" >> /etc/apt/sources.list
        echo "Adding '$CODENAME-proposed' repositories..."
        echo "deb http://$REPOSBIN.ubuntu.com/$REPOSBINPATH $CODENAME-proposed main restricted universe multiverse" >> /etc/apt/sources.list
        echo "deb-src http://$REPOSSRC.ubuntu.com/$REPOSSRCPATH $CODENAME-proposed main restricted universe multiverse" >> /etc/apt/sources.list
        echo "" >> /etc/apt/sources.list
        echo "Adding '$CODENAME-security' repositories..."
        echo "$REPOSBINSEC http://$REPOSBIN.ubuntu.com/$REPOSBINPATH $CODENAME-security main restricted universe multiverse" >> /etc/apt/sources.list
        echo "$REPOSSRCSEC http://$REPOSSRC.ubuntu.com/$REPOSSRCPATH $CODENAME-security main restricted universe multiverse" >> /etc/apt/sources.list
        echo "" >> /etc/apt/sources.list
        echo "Adding '$CODENAME-updates' repositories..."
        echo "deb http://$REPOSBIN.ubuntu.com/$REPOSBINPATH $CODENAME-updates main restricted universe multiverse" >> /etc/apt/sources.list
        echo "deb-src http://$REPOSSRC.ubuntu.com/$REPOSSRCPATH $CODENAME-updates main restricted universe multiverse" >> /etc/apt/sources.list
        echo "" >> /etc/apt/sources.list
        echo "Adding '$CODENAME-partner' repositories..."
        echo "deb http://archive.canonical.com/ubuntu $CODENAME partner" >> /etc/apt/sources.list
        echo "deb-src http://archive.canonical.com/ubuntu $CODENAME partner" >> /etc/apt/sources.list
        echo "Your new 'sources.list' file is ready!"
        echo "Please run 'apt-get update' to refresh."
        echo ""
      fi
    else
      echo ""
      echo "ABORT: Architecture not verified or not correct!"
      echo ""
    fi
  else
    echo ""
    echo "ABORT: Codename not verified or not correct!"
    echo ""
  fi
else
  echo ""
  echo "ABORT: User does not wish to proceed!"
  echo ""
fi
#eof

