CasperSecurity

Current Path : /var/lib/dpkg/info/
Upload File :
Current File : /var/lib/dpkg/info/ubuntu-advantage-tools.postinst

#!/bin/sh

set -e

. /etc/os-release  # For VERSION_ID

# Needed even if this script doesn't call debconf, see:
# https://lintian.debian.org/tags/postinst-does-not-load-confmodule.html
# Note: this may re-exec the postinst script.
. /usr/share/debconf/confmodule

if [ -z "${VERSION_ID}" ]; then
    echo "Warning: missing VERSION_ID in /etc/os-release" >&2
    VERSION_ID="NO-VERSION_ID"
fi

APT_TRUSTED_KEY_DIR="/etc/apt/trusted.gpg.d"

# ubuntu-advantage-* GPG keys renamed to ubuntu-pro-* in version 29
OLD_ESM_INFRA_KEY_TRUSTY="ubuntu-advantage-esm-infra-trusty.gpg"
OLD_ESM_APPS_KEY="ubuntu-advantage-esm-apps.gpg"
ESM_INFRA_KEY="ubuntu-pro-esm-infra.gpg"
ESM_APPS_KEY="ubuntu-pro-esm-apps.gpg"

APT_SRC_DIR="/etc/apt/sources.list.d"
APT_PREFERENCES_DIR="/etc/apt/preferences.d"
ESM_INFRA_OLD_APT_SOURCE_FILE_TRUSTY="$APT_SRC_DIR/ubuntu-esm-infra-trusty.list"
ESM_INFRA_APT_SOURCE_FILE="$APT_SRC_DIR/ubuntu-esm-infra.list"
ESM_APPS_APT_SOURCE_FILE="$APT_SRC_DIR/ubuntu-esm-apps.list"
FIPS_APT_SOURCE_FILE="$APT_SRC_DIR/ubuntu-fips.list"

OLD_CLIENT_FIPS_PPA="private-ppa.launchpad.net/ubuntu-advantage/fips/ubuntu"
UA_TIMER_NAME="ua-timer.timer"
OLD_MESSAGING_TIMER="ua-messaging.timer"
OLD_MESSAGING_TIMER_MASKED_LOCATION="/etc/systemd/system/timers.target.wants/$OLD_MESSAGING_TIMER"
OLD_LICENSE_CHECK_PATH="ua-license-check.path"
OLD_LICENSE_CHECK_PATH_MASKED_LOCATION="/etc/systemd/system/multi-user.target.wants/$OLD_LICENSE_CHECK_PATH"
XENIAL_CLOUD_ID_SHIM_UNIT_LOCATION="/etc/systemd/system/multi-user.target.wants/ubuntu-advantage-cloud-id-shim.service"

ESM_APT_PREF_FILE_TRUSTY="$APT_PREFERENCES_DIR/ubuntu-esm-trusty"
ESM_INFRA_OLD_APT_PREF_FILE_TRUSTY="$APT_PREFERENCES_DIR/ubuntu-esm-infra-trusty"
ESM_INFRA_APT_PREF_FILE="$APT_PREFERENCES_DIR/ubuntu-esm-infra"
ESM_APPS_APT_PREF_FILE="$APT_PREFERENCES_DIR/ubuntu-esm-apps"

SYSTEMD_WANTS_AUTO_ATTACH_LINK="/etc/systemd/system/multi-user.target.wants/ua-auto-attach.service"
SYSTEMD_HELPER_ENABLED_AUTO_ATTACH_DSH="/var/lib/systemd/deb-systemd-helper-enabled/ua-auto-attach.service.dsh-also"
SYSTEMD_HELPER_ENABLED_WANTS_LINK="/var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/ua-auto-attach.service"

REBOOT_CMD_MARKER_FILE="/var/lib/ubuntu-advantage/marker-reboot-cmds-required"
OLD_LICENSE_CHECK_MARKER_FILE="/var/lib/ubuntu-advantage/marker-license-check"

MACHINE_TOKEN_FILE="/var/lib/ubuntu-advantage/private/machine-token.json"
PUBLIC_MACHINE_TOKEN_FILE="/var/lib/ubuntu-advantage/machine-token.json"

UA_MESSAGES_DIR="/var/lib/ubuntu-advantage/messages"
APT_ESM_MESSAGE_FILE="$UA_MESSAGES_DIR/apt-pre-invoke-esm-service-status"
ESM_APPS_APT_MSG_FILES="$UA_MESSAGES_DIR/apt-pre-invoke-no-packages-apps.tmpl $UA_MESSAGES_DIR/apt-pre-invoke-no-packages-apps $UA_MESSAGES_DIR/apt-pre-invoke-packages-apps.tmpl $UA_MESSAGES_DIR/apt-pre-invoke-packages-apps"
UA_FLAGS_DIR="/var/lib/ubuntu-advantage/flags"
APT_NEWS_FLAG_FILE="$UA_FLAGS_DIR/show-apt-news"

TMP_CANDIDATE_CACHE_PATH="/tmp/ubuntu-advantage/candidate-version"

NOTICES_DIR="/var/lib/ubuntu-advantage/notices"
TEMP_NOTICES_DIR="/run/ubuntu-advantage/notices"

add_notice() {
    notice=$1
    mkdir -p $NOTICES_DIR
    touch $NOTICES_DIR/$notice
}
add_temp_notice() {
    notice=$1
    mkdir -p $TEMP_NOTICES_DIR
    touch $TEMP_NOTICES_DIR/$notice
}

# Rename apt config files for ua services removing ubuntu release names
redact_ubuntu_release_from_ua_apt_filenames() {
    DIR=$1
    # It is okay if this list is outdated, because this function is only used for an old migration.
    # Any services that were introduced after this migration was added won't need to be migrated.
    UA_SERVICES="cc-eal cis esm-infra esm-apps fips fips-updates livepatch ros ros-updates"

    for file in "$DIR"/*; do
        release_name=""
        case "$file" in
            *-trusty*)
                release_name=trusty;;
            *-xenial*)
                release_name=xenial;;
            *-bionic*)
                release_name=bionic;;
            *-focal*)
                release_name=focal;;
            *-groovy*)
                release_name=groovy;;
            *) release_name="";;
         esac
         if [ "$release_name" ]; then
             # We have a ubuntu release name in the apt config.
             # Remove $release_name from original $file.
             new_file=${file%-${release_name}*}${file#*${release_name}}
             for service in ${UA_SERVICES}; do
                 if [ "${file#*$service}" != "$file" ]; then
                      # Valid apt cfg file for an ubuntu-advantage service
                      mv "$file" "$new_file"
                 fi
             done
         fi
    done
}

# Check cached service status from status.json and return 0 if enabled else 1
check_service_is_enabled() {
    service_name=$1
    _RET=$(/usr/bin/python3 -c "
from uaclient.files.state_files import status_cache_file
try:
    status = status_cache_file.read()
    if status:
        for service in status.get('services', []):
            if service.get('name', '') == '${service_name}':
                print(service.get('status', ''))
except Exception:
    # Assume not enabled
    pass
")
   if [ "${_RET}" = "enabled" ]; then
       return  0
   else
       return  1
   fi
}


esm_infra_cleanup() {
    if ! check_service_is_enabled esm-infra; then
        rm -f "$APT_TRUSTED_KEY_DIR/ubuntu-esm*gpg"  # Remove previous esm keys
        rm -f "$APT_TRUSTED_KEY_DIR/$OLD_ESM_INFRA_KEY_TRUSTY"
        rm -f "$APT_TRUSTED_KEY_DIR/$ESM_INFRA_KEY"
        rm -f "$ESM_INFRA_APT_SOURCE_FILE"
        rm -f "$ESM_INFRA_OLD_APT_SOURCE_FILE_TRUSTY"
        rm -f "$ESM_APT_PREF_FILE_TRUSTY" "$ESM_INFRA_OLD_APT_PREF_FILE_TRUSTY"
        rm -f "$ESM_INFRA_APT_PREF_FILE"
    fi
}


esm_apps_cleanup() {
    if ! check_service_is_enabled esm-apps; then
        rm -f "$APT_TRUSTED_KEY_DIR/$OLD_ESM_APPS_KEY"
        rm -f "$APT_TRUSTED_KEY_DIR/$ESM_APPS_KEY"
        rm -f "$ESM_APPS_APT_SOURCE_FILE"
        rm -f "$ESM_APPS_APT_PREF_FILE"
    fi
}


# If held fips packages exist, we are on a FIPS PRO machine with FIPS enabled
mark_reboot_for_fips_pro() {
    FIPS_HOLDS=$(apt-mark showholds | grep -E 'fips|libssl1|openssh-client|openssh-server|linux-fips|openssl|strongswan' || exit 0)
    if [ "$FIPS_HOLDS" ]; then
       mark_reboot_cmds_as_needed
       add_temp_notice 20-fips_reboot_required
    fi
}

mark_reboot_cmds_as_needed() {
    if [ ! -f "$REBOOT_CMD_MARKER_FILE" ]; then
      touch $REBOOT_CMD_MARKER_FILE
    fi
}

patch_status_json_0_1_for_non_root() {
    # UA client 27.2 broke status.json schema backward-compatibility for
    # non-root users. Apply a patch to allow non-root user to run `ua status`
    # without Tracebacks
    if dpkg --compare-versions "$PREVIOUS_PKG_VER" gt-nl "27.2"; then
        return
    fi
    if [ ! -e "/var/lib/ubuntu-advantage/status.json" ]; then
        return
    fi
    /usr/lib/ubuntu-advantage/patch_status_json.py || true
}

notify_wrong_fips_metapackage_on_cloud() {

    # On xenial, we don't have FIPS optimized kernels on the clouds.
    # Because of that, we block enabling FIPS on xenial clouds. However,
    # we do have a config override that allows users to install the generic
    # FIPS packages into the cloud instance. We don't want to notify those users
    if [ "$VERSION_ID" = "16.04" ]; then
        return
    fi

    fips_metapkg="ubuntu-fips"

    cloud_id=$(cloud-id 2>/dev/null) || cloud_id=""

    # If the package is not installed, we don't want the postinst script to fail
    fips_installed=$(dpkg-query -W --showformat='${db:Status-Status}\n' $fips_metapkg 2>/dev/null || true)

    if echo "$cloud_id" | grep -E -q "^(azure|aws)"; then
      if echo "$fips_installed" | grep -E -q "installed"; then
        add_notice 25-wrong_fips_metapackage_on_cloud
      fi
    fi
}

rm_old_license_check_marker() {
    rm -f $OLD_LICENSE_CHECK_MARKER_FILE
}

disable_new_timer_if_old_timer_already_disabled() {
    # If the user has disabled the ua-messaging
    # then we will assume that the user would want the
    # ua-timer to be disabled as well. In that case, we will
    # disable the ua-timer here.

    # We should only perform this check on UA version that have the
    # ua-messaging.timer: 27.0 until 27.2. This will also guarantee
    # that on 27.3 and forward, we will not run this logic.
    if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "27.0~" \
       || dpkg --compare-versions "$PREVIOUS_PKG_VER" ge "27.3~"; then
        return
    fi
    if ! deb-systemd-helper --quiet was-enabled $OLD_MESSAGING_TIMER; then
        # We have the following entry on our rules file:
        #    dh_systemd_enable -pubuntu-advantage-tools ua-timer.timer
        # This rule will append some code at the end of the postinst script
        # that checks if the ua-timer.timer was already enabled on the system.
        # This means that if we manually disable the service here, that logic will
        # still enable it in the end of the postinst script.
        # Because of this logic we are now manually enabling ua-timer.timer here
        # and then we manually disable it. This will guarantee that the was-enabled
        # logic introduced by the rules file will not be triggered and we will not
        # re-enable the ua-timer.timer service after calling this function.
        echo "$OLD_MESSAGING_TIMER was disabled. Disabling $UA_TIMER_NAME." >&2
        deb-systemd-helper enable $UA_TIMER_NAME > /dev/null 2>&1 || true
        deb-systemd-helper disable $UA_TIMER_NAME > /dev/null 2>&1 || true
    fi
}

remove_old_systemd_units() {
    # These are the commands that are run when the package is purged.
    # Since we actually want to remove this service from now on
    # we have replicated that behavior here
    if [ -L $OLD_MESSAGING_TIMER_MASKED_LOCATION ]; then
        deb-systemd-helper purge ua-messaging.timer > /dev/null || true
        deb-systemd-helper unmask ua-messaging.timer > /dev/null || true
    fi
    if [ -L $OLD_LICENSE_CHECK_PATH_MASKED_LOCATION ]; then
        if [ -d /run/systemd/system ]; then
            # If the old ua-license-check.timer was running during upgrade
            # then it will be in a failed state because the files were removed
            # The failed state is ephemeral and only needs to be cleared if
            # it is there so that the system doesn't say it is degraded.
            # If the old timer was not running, then this is a noop.
            systemctl --system daemon-reload > /dev/null || true
            systemctl reset-failed ua-license-check.timer > /dev/null 2>&1 || true
            # In rare race-condition scenarios, the service can also get into
            # the same failed state.
            systemctl reset-failed ua-license-check.service > /dev/null 2>&1 || true
        fi
        deb-systemd-helper purge ua-license-check.path > /dev/null || true
        deb-systemd-helper unmask ua-license-check.path > /dev/null || true
    fi

    # If we're do-release-upgrad-ing to bionic, then clean up the xenial-only
    # cloud-id-shim unit
    if [ "$VERSION_ID" = "18.04" ]; then
        if echo "$PREVIOUS_PKG_VER" | grep -q "16.04"; then
            if [ -L $XENIAL_CLOUD_ID_SHIM_UNIT_LOCATION ]; then
                deb-systemd-helper purge ubuntu-advantage-cloud-id-shim.service > /dev/null || true
                deb-systemd-helper unmask ubuntu-advantage-cloud-id-shim.service > /dev/null || true
            fi
        fi
    fi
}

create_public_machine_token_file() {
    # When we perform the write operation through
    # MachineTokenFile we already write the public
    # version of the machine-token file with all the
    # sensitive data removed.
    /usr/bin/python3 -c "
from uaclient.files import MachineTokenFile
machine_token_file = MachineTokenFile()
content = machine_token_file.read()
machine_token_file.write(content)
"
}

migrate_ubuntu_pro_beta_banner() {
    # This only shipped in 27.11.2~
    if dpkg --compare-versions "$PREVIOUS_PKG_VER" ge "27.11.2~" \
       && dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "27.11.3~"; then
        # if the banner was present, remove it and add the new flag file which is configurable
        if [ -f $APT_ESM_MESSAGE_FILE ]; then
            if cat $APT_ESM_MESSAGE_FILE | grep -q "Try Ubuntu Pro beta"; then
                rm -f $APT_ESM_MESSAGE_FILE
                rm -f $ESM_APPS_APT_MSG_FILES
                mkdir -p $UA_FLAGS_DIR
                touch $APT_NEWS_FLAG_FILE
            fi
        fi
    fi
}
migrate_old_notices(){
    notices_file=/var/lib/ubuntu-advantage/notices.json
    # only run if notices.json is present
    if [ ! -f $notices_file ];then
        return
    fi

    # This migration will happen for pro client versions <27.14 that still use notices.json.
    # Notices are generally short lived, so the chances of an upgrade happening while a
    # notice is in place is very small.
    # Despite that we do a simple migration here of the most important notices: reboot required notices.
    # All notices with "reboot" in them can be safely transformed into a generic reboot required message.
    # The new message won't include the exact reason for the reboot, but the recommended action is the same.
    if grep -q -i "reboot" $notices_file; then
        add_temp_notice 10-reboot_required
    fi
    rm -f $notices_file
}


cleanup_candidate_version_stamp_permissions() {
    if [ -f $TMP_CANDIDATE_CACHE_PATH ]; then
        rm -f $TMP_CANDIDATE_CACHE_PATH
    fi
}

cleanup_apt_news_flag_file() {
    if [ -f $APT_NEWS_FLAG_FILE ]; then
        rm -f $APT_NEWS_FLAG_FILE
    fi
}

cleanup_old_motd_files() {
    rm -rf $UA_MESSAGES_DIR/motd*
}

migrate_user_config_post() {
    # LP: #2004280
    preinst_file="/etc/ubuntu-advantage/uaclient.conf.preinst-backup"
    bkp_file="/etc/ubuntu-advantage/uaclient.conf.dpkg-bak"

    if [ -f /etc/ubuntu-advantage/uaclient.conf.preinst-backup ]; then
        # This script modifies the preinst-backup version of the file in-place
        /usr/bin/python3 /usr/lib/ubuntu-advantage/migrate_user_config.py

        if cmp --silent $preinst_file $bkp_file; then
            # This should only happen if we failed to perform the migration.
            # Therefore, there is no need to keep the backup file around
            rm -f $bkp_file
        fi

        # Overwrite uaclient.conf with the now-migrated version from preinst
        mv $preinst_file /etc/ubuntu-advantage/uaclient.conf
        # just in case this temp file was left behind
        rm -f /etc/ubuntu-advantage/uaclient.conf.preinst-backup-migrated-temp
    fi
}

rename_gpg_keys() {
    # esm-infra doesn't follow the name pattern
    if [ -f "$APT_TRUSTED_KEY_DIR/$OLD_ESM_INFRA_KEY_TRUSTY" ]; then
        mv "$APT_TRUSTED_KEY_DIR/$OLD_ESM_INFRA_KEY_TRUSTY" "$APT_TRUSTED_KEY_DIR/$ESM_INFRA_KEY"
    fi
    SERVICES="cc-eal cis esm-apps fips ros realtime-kernel"
    for service in $SERVICES; do
        if [ -f "$APT_TRUSTED_KEY_DIR/ubuntu-advantage-$service.gpg" ]; then
            mv "$APT_TRUSTED_KEY_DIR/ubuntu-advantage-$service.gpg" "$APT_TRUSTED_KEY_DIR/ubuntu-pro-$service.gpg"
        fi
    done
}

case "$1" in
    configure)
      PREVIOUS_PKG_VER=$2
      # We changed the way we store public files in 19.5
      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt-nl "19.5~"; then
          # Remove all publicly-readable files
          find /var/lib/ubuntu-advantage/ -maxdepth 1 -type f -delete
      fi

      # Are we upgrading from a previously release Ubuntu Advantage Pro pkg?
      # We broke package compatibility in 20.2 for any image with 19.7
      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt-nl "20.2~"; then
          if dpkg --compare-versions "$PREVIOUS_PKG_VER" ge-nl "19.7~"; then
              # Drop stale symlinks for migrated auto-attach-service
              rm -f $SYSTEMD_WANTS_AUTO_ATTACH_LINK
              rm -f $SYSTEMD_HELPER_ENABLED_AUTO_ATTACH_DSH
              rm -f $SYSTEMD_HELPER_ENABLED_WANTS_LINK
          fi
      fi
      patch_status_json_0_1_for_non_root
      # UA service PPAs support all ubuntu releases, no need to
      # specialize apt config filenames per ubuntu release.
      redact_ubuntu_release_from_ua_apt_filenames $APT_SRC_DIR
      redact_ubuntu_release_from_ua_apt_filenames $APT_PREFERENCES_DIR

      # Repo for FIPS packages changed from old client
      if [ -f $FIPS_APT_SOURCE_FILE ]; then
        if grep -q $OLD_CLIENT_FIPS_PPA $FIPS_APT_SOURCE_FILE; then
            add_notice 22-fips_install_out_of_date
        fi
      fi

      notify_wrong_fips_metapackage_on_cloud

      # CACHE_DIR is no longer present or used since 19.1
      rm -rf /var/cache/ubuntu-advantage-tools
      # machine-access cache files no longer present or used since 20.1
      rm -f /var/lib/ubuntu-advantage/private/machine-access-*.json

      # log files need to be world-readable
      if [ ! -f /var/log/ubuntu-advantage.log ]; then
          touch /var/log/ubuntu-advantage.log
          # We are only making new log files world readable
          chmod 0644 /var/log/ubuntu-advantage.log
      fi
      chown root:root /var/log/ubuntu-advantage.log

      private_dir="/var/lib/ubuntu-advantage/private"
      if [ -d "$private_dir" ]; then
          chmod 0700 "$private_dir"
      fi

      if [ "$VERSION_ID" = "16.04" ]; then
        if echo "$PREVIOUS_PKG_VER" | grep -q "14.04"; then
          mark_reboot_cmds_as_needed
          add_temp_notice 30-lp_lts_reboot_required
        fi
        if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "27.13~"; then
          # Clean any unauthenticated ESM infra files previously inserted
          # on Xenial, unless the service is enabled
          esm_infra_cleanup
        fi
      fi

      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "27.13.5~"; then
          # esm-apps unauthenticated ESM should not be in any release
          esm_apps_cleanup
      fi

      mark_reboot_for_fips_pro
      rm_old_license_check_marker
      disable_new_timer_if_old_timer_already_disabled
      remove_old_systemd_units

      # On old version of ubuntu-advantange-tools, we don't have a public
      # machine_token.json file on attached machines. Since the non-root
      # status now needs that file, we need to create it during the upgrade
      if [ -f $MACHINE_TOKEN_FILE ] && [ ! -f $PUBLIC_MACHINE_TOKEN_FILE ]; then
          create_public_machine_token_file
      fi
      migrate_ubuntu_pro_beta_banner
      cleanup_candidate_version_stamp_permissions
      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "27.13~"; then
          cleanup_apt_news_flag_file
      fi

      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "27.14~"; then
          cleanup_old_motd_files
          migrate_old_notices
          migrate_user_config_post
      fi

      # Rename the gpg keys to -pro-
      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "29~"; then
          rename_gpg_keys
      fi

      if dpkg --compare-versions "$PREVIOUS_PKG_VER" lt "31~"; then
          /usr/lib/ubuntu-advantage/postinst-migrations.sh $PREVIOUS_PKG_VER
      fi
      ;;
esac

# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/update-motd.d/99-esm 19.1~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/update-motd.d/80-esm 19.1~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/update-motd.d/80-livepatch 19.1~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/cron.daily/ubuntu-advantage-tools 19.1~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/init/ua-auto-attach.conf 20.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/update-motd.d/88-esm-announce 27.14~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper rm_conffile /etc/ubuntu-advantage/help_data.yaml 30~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/logrotate.d/ubuntu-advantage-tools /etc/logrotate.d/ubuntu-pro-client 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/apt/apt.conf.d/20apt-esm-hook.conf /etc/apt/apt.conf.d/20apt-esm-hook.conf 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/apt/preferences.d/ubuntu-pro-esm-apps /etc/apt/preferences.d/ubuntu-pro-esm-apps 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/apt/preferences.d/ubuntu-pro-esm-infra /etc/apt/preferences.d/ubuntu-pro-esm-infra 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/ubuntu-advantage/uaclient.conf /etc/ubuntu-advantage/uaclient.conf 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/update-manager/release-upgrades.d/ubuntu-advantage-upgrades.cfg /etc/update-manager/release-upgrades.d/ubuntu-advantage-upgrades.cfg 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper mv_conffile /etc/update-motd.d/91-contract-ua-esm-status /etc/update-motd.d/91-contract-ua-esm-status 31.2~ ubuntu-advantage-tools -- "$@"
# End automatically added section

exit 0
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY