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

5

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

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

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

    
задан NobbZ 09.10.2012 в 06:43
источник

3 ответа

4

Вы можете использовать скрипт, чтобы отключить / включить 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 деактивируется с использованием Software Center (GUI), оно фактически помещает # перед всеми строками внутри соответствующего файла ppa .list в /etc/apt/sources.list.d/ . Обычно большинство файлов .list содержат две строки, начинающиеся с deb http и deb-src , некоторые из них имеют только один. Вышеупомянутый скрипт делает то же самое, используя sed . Сначала он проверяет наличие ppa .list (вход пользователя) или нет. Затем положите или удалите # перед строками соответственно.

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

Примечание Я предложил этот код в этом ответе . glutanimate помогли значительно улучшить код.

    
ответ дан souravc 24.02.2014 в 04:36
источник
1

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

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

См. также:

ответ дан landroni 24.02.2014 в 07:44
0

Вы можете либо прокомментировать PPAs таким образом:

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

Или вы можете использовать Источники программного обеспечения Ubuntu , выбрав все:

    
ответ дан Praveen Kumar Purushothaman 09.10.2012 в 06:50