Ubuntu – Why is the google PPA reenabled after an upgrade to a new release

googlegoogle-talkpparelease-upgradesoftware-sources

PPA's are normally disabled when you upgrade, and must be re-enabled manually. I upgraded to 12.04 about a month ago and I just noticed that while my other PPAs had all been disabled, the Google PPAs were not disabled. Why is this?

Best Answer

(Credit to Jorge Castro for this answer)

The Google packages install a cron job in /etc/cron.daily/ for custumizing the repository configuration and reenabling the source after a release upgrade.

Each Google package will put its own script (or a link to a script) here. For example: google-musicmanager, google-chrome or google-talkplugin (the latter being a symlink to a script at /opt/google/talkplugin/cron/google-talkplugin).

Here is the description from the google-talkplugin script:

# This script is part of the google-talkplugin package.
#
# It creates the repository configuration file for package updates, and it
# monitors that config to see if it has been disabled by the overly aggressive
# distro upgrade process (e.g.  intrepid -> jaunty). When this situation is
# detected, the respository will be re-enabled. If the respository is disabled
# for any other reason, this won't re-enable it.
#
# This functionality can be controlled by creating the $DEFAULTS_FILE and
# setting "repo_add_once" and/or "repo_reenable_on_distupgrade" to "true" or
# "false" as desired. An empty $DEFAULTS_FILE is the same as setting both values
# to "false".

The script will:

  1. # Install the repository signing key
  2. # Update the Google repository if it's not set correctly.
  3. # Add the Google repository to the apt sources.
  4. # Remove our custom sources list file. and
  5. # Detect if the repo config was disabled by distro upgrade and enable if necessary.

Here is the portion of the script that detects and reenables the repo config after a release upgrade.

handle_distro_upgrade() {
  if [ ! "$REPOCONFIG" ]; then
    return 0
  fi

  find_apt_sources
  SOURCELIST="$APT_SOURCESDIR/google-talkplugin.list"
  if [ -r "$SOURCELIST" ]; then
    REPOLINE=$(grep -E "^[[:space:]]*#[[:space:]]*$REPOCONFIG[[:space:]]*# disabled on upgrade to .*" "$SOURCELIST")
    if [ $? -eq 0 ]; then
      sed -i -e "s,^[[:space:]]*#[[:space:]]*\($REPOCONFIG\)[[:space:]]*# disabled on upgrade to .*,\1," \
        "$SOURCELIST"
      LOGGER=$(which logger 2> /dev/null)
      if [ "$LOGGER" ]; then
        "$LOGGER" -t "$0" "Reverted repository modification: $REPOLINE."
      fi
    fi
  fi
}

And here is the /etc/apt/sources.list.d/google-talkplugin.list file that is created by the script.

### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
deb http://dl.google.com/linux/talkplugin/deb/ stable main