Автоматически отключить ppa

Есть ли способ автоматического удаления или отключения ppa, который больше не работает?

Когда я делаю apt-get update, я получаю много сообщений об ошибках, касающихся некоторых ppas, которые не могут быть найдены.

Я отключил их вручную, но есть ли способ отключить их автоматически? Так как у меня много ppas, много работы по их поиску и отключению вручную.

5
задан 9 October 2012 в 08:43

3 ответа

Можно использовать сценарий для отключения/разрешения ppa очень легко. Сохраните сценарий как toggle_ppa.sh и вставленный в него /usr/local/bin

#!/bin/bash
#
# toggle_ppa.sh
#
# DESCRIPTION:  Detects if a PPA is active/inactive and deactivates/activates it
#               on user confirmation.

SOURCEDIRECTORY=/etc/apt/sources.list.d
PPA="$1"     
if [ -z "$PPA" ]
then
    echo "Error: Please provide a PPA name to toggle between activation/deactivation"
    echo "The PPA name should be formatted as it appears on launchpad, e.g.:
"$0" ppa:webupd8team/y-ppa-manager"
    exit 1
fi

## Root privileges

if [ "$(whoami)" != "root" ]; then
  echo "Error: This script needs root privileges. Restarting..."
  sudo "$0" "$1"
  exit
fi

### MAIN

SOURCELIST_NOPFX="${PPA#*:}" #remove 'ppa:' prefix
SOURCELIST="${SOURCELIST_NOPFX////-}"-$(lsb_release -cs) #replace all slashes with dashes, include release
SOURCEFILE="$SOURCEDIRECTORY"/"$SOURCELIST".list #compose sources list path

if [ -e "$SOURCEFILE" ]
then
    echo "Processing $SOURCEFILE..."
    SOURCE_COMMENTED=$(grep "^\#deb\ " "$SOURCEFILE") #check if sources line is commented
    if [ -z "$SOURCE_COMMENTED" ]
    then
        echo "$PPA is active. Going to deactivate. Proceed? [ y/n ]"
        read ANSWER
        if [ $ANSWER == "y" ]
        then
            sed -i "s/^deb\-src/\#deb\-src/" $SOURCEFILE
            sed -i "s/^deb\ http/\#deb\ http/" $SOURCEFILE
            echo "Updating package index files..."
            sudo apt-get update
            echo "Done."
        else
            echo "Aborted."
            exit 0
        fi
    else
        echo "$PPA is inactive. Going to activate. Proceed? [ y/n ]"
        read ANSWER
        if [ $ANSWER == "y" ]
        then
            sed -i "s/^\#deb\-src/deb\-src/" $SOURCEFILE
            sed -i "s/^\#deb\ http/deb\ http/" $SOURCEFILE
            echo "Updating package index files..."
            sudo apt-get update
            echo "Done."
        else
            echo "Aborted."
            exit 0
        fi
    fi
else
    echo "Error: Source file at $SOURCEFILE for $PPA does not exist. Please check PPA name."
    exit 0
fi

Использование

sudo toggle_ppa.sh <full-ppa-name>

Пример

sudo toggle_ppa.sh ppa:webupd8team/java

Как это работает

Когда любой ppa repo деактивируется с помощью Центра программного обеспечения (GUI), он на самом деле помещает a # перед всеми строками в соответствующем ppa .list файл в /etc/apt/sources.list.d/. Обычно большая часть .list файлы содержат две строки, который начинается deb http и deb-src, у некоторых есть только один. Вышеупомянутый сценарий делает использование того же самого sed. Сначала это проверяет ppa .list (введенный пользователем), присутствует или нет. Затем помещенный или удаляют a # впереди строки соответственно.

Код действует очень интерактивным способом. Когда кто-то выполнит это наряду с именем ppa как его аргумент, оно отобразит текущий статус PPA и что код собирается сделать на успешном выполнении. Затем это спросит разрешение пользователя. Только если вводы данных пользователем 'y' подтвердить код изменит состояние PPA и активирует/деактивирует его. Это сразу прервется, если пользователь поместит 'n' для нет.

Обратите внимание, что я предложил, чтобы этот код в этом ответил. glutanimate помог много улучшить код.

4
ответ дан 9 October 2012 в 08:43

Вы можете либо закомментировать PPA следующим образом:

# deb http://archive.canonical.com/ubuntu precise partner
# deb-src http://archive.canonical.com/ubuntu precise partner

Или, вы можете использовать Ubuntu Software Sources , выбрав все:

Software Sources

0
ответ дан 9 October 2012 в 08:43

Отключение PPA с помощью Ubuntu Software Sources является большой проблемой, поскольку нет способа отфильтровать или упорядочить (по-человечески полезному) PPA. Вместо этого вы можете использовать y-ppa-manager через его окно Manage PPAs, которое отображает PPA в алфавитном порядке и, таким образом, позволяет более легко / быстро определять конкретный источник PPA.

Вы можете установить Y PPA Manager из ppa: webupd8team / y-ppa-manager PPA.

См. Также:

0
ответ дан 9 October 2012 в 08:43

Другие вопросы по тегам:

Похожие вопросы: