Как я могу (де) активировать PPA из командной строки с помощью одной команды?

Ubuntu предлагает простой графический интерфейс , который позволяет редактировать, (де) активировать и удалять PPA.

Но просмотр всех диалогов и меню графического интерфейса иногда может быть утомительным, особенно если в вашу систему добавлено много PPA.

Вот почему мне было интересно, есть ли способ отключить (и включить) PPA из командной строки.


Примечание : я не говорю о добавлении / удалении PPA (это довольно легко сделать: sudo add-apt-repository ppa / sudo add-apt-repository --remove ppa). То, что я ищу, - это способ временно отключить PPA и включить его по желанию - и все это из CLI.


Редактировать:

Ответы Sushantp606 и Дэвидсона Чуа были хорошей отправной точкой и заставили меня изменить сферу моего вопроса. Конечно, полезно знать, что с репозиториями можно управлять файлами sources.list, но это все еще выглядит для меня очень утомительной задачей. Я хотел бы знать, есть ли способ автоматизировать это таким же образом, как в окне «Свойства программного обеспечения».

В идеале я хотел бы найти команду, которая позволит быстро включать и отключать PPA по его адресу PPA, например :

ppa_activate ppa:synapse-core/ppa

и

ppa_deactivate ppa:synapse-core/ppa
2
задан 13 April 2017 в 15:23

5 ответов

Даже более простой сценарий для переключения между активацией или деактивацией конкретного ppa. Сохраните код, данный ниже в файле, например toggle_ppa.sh.

#!/bin/bash
#
# toggle_ppa.sh
#
# created by souravc (https://askubuntu.com/users/127327/)
# modified by Glutanimate (https://askubuntu.com/users/81372/)
#
# originally released at https://askubuntu.com/q/383605/81372
#
# DESCRIPTION:  Detects if a PPA is active/inactive and deactivates/activates it
#               on user confirmation.
#
# USAGE:        toggle_ppa.sh ppa:launchpaduser/ppaname

### VARIABLES

SOURCEDIRECTORY=/etc/apt/sources.list.d
PPA="$1"

### USAGE CHECKS

## Arguments

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

4
ответ дан 13 April 2017 в 15:23
  • 1
    @Dimitris ничто не использует Вашу камеру каждый раз, когда Вы делаете grep с PS PS, перечисляет grep к списку процессов и показывает его – bolzano 27 May 2015 в 19:16

Взгляните на Как отключить определенный PPA? . Хотя первый ответ от qeoh использует интерфейс GTK, второй ответ от minimec предлагает закомментировать ppa в /etc/apt/sources.list. Я не уверен, что это то, что вы ищете, но это возможный метод.

0
ответ дан 13 April 2017 в 15:23

Редактируя файл

/etc/apt/sources.list

из командной строки, мы можем добавлять, удалять или временно отключать программные репозитории. Просто закомментируйте нежелательные репозитории через терминал.

Я не могу сделать команду, это просто идея. дайте мне знать, если вы можете подключить его через терминальную команду, например-

Команда для комментирования исходных репозиториев в /etc/apt/sources.list:

sudo sed -i 's/^deb\-src/\#deb\-src/' /etc/apt/sources.list

и un закомментируйте его, используя

sudo sed -i 's/^\#deb\-src/deb\-src/' /etc/apt/sources.list

, используйте репозиторий, который вы хотите отключить / закомментировать вместо s/^\#deb\-src/deb\-src/, и, прежде чем вносить какие-либо изменения, создайте файл списка источников резервных копий, как показано ниже-

sudo cp -v /etc/apt/sources.list /etc/apt/sources.list.backup
0
ответ дан 13 April 2017 в 15:23

Информация PPA фактически сохраняется в отдельных файлах в /etc/apt/sources.list. Вот код, который выполнит желаемое действие для деактивации или активации нужного репо. Сохраните приведенный ниже код в файле, скажем mod-ppa

#!/bin/bash
mydir=/etc/apt/sources.list.d
function getlist(){
    echo -e "\n\tchose one of the following lists"
    echo -e "\t================================"
    for itm in `seq 1 $1`
    do
        echo -e "\t`echo $2 | awk -v x=$itm '{print $x}' | awk -F/ '{print $NF}'`"
    done
}

if [ $# -lt 1 ]
then
    echo "E: mod_ppa: missing operand"
    echo "Try 'mod_ppa --help' for more information."
    exit 0
elif [ $# -lt 2 ]
then
    echo -e "E: syntax error,\nTry 'mod_ppa --help' for more information."
    exit 0
fi

case "$1" in
    -d )
        ppa=`ls $mydir/$2*.list`
        num=`echo $ppa | wc -w`
        if [ `echo $num` -gt 1 ]
        then
            getlist "$num" "$ppa"
        else
            if [ -e $mydir/$2*.list ]
            then
                sed -i "s/^deb\-src/\#deb\-src/" $ppa
                sed -i "s/^deb\ http/\#deb\ http/" $ppa
            else
                echo "E: ppa does not exist/check ppa name"
            fi
        fi
        ;;
    -a )
        ppa=`ls $mydir/$2*.list`
        num=`echo $ppa | wc -w`
        if [ `echo $num` -gt 1 ]
        then
            getlist "$num" "$ppa"
        else
            if [ -e $mydir/$2*.list ]
            then
                sed -i "s/^\#deb\-src/deb\-src/" $ppa
                sed -i "s/^\#deb\ http/deb\ http/" $ppa
            else
                echo "E: ppa does not exist/check ppa name"
            fi
        fi
        ;;
    --help)
        echo "Usage: mod_ppa [OPTION] [PPA NAME'S INITIAL PART]"
        echo "Mandatory argument options."
        echo "-a       Activate certain ppa"
        echo "-d       Deactivate certain ppa"
        ;;
    * ) 
        echo "mod_ppa: invalid option '$1'"
        echo "Try 'mod_ppa --help' for more information."
        ;;
esac

сохраните сценарий в /home/<username>/bin/, который обычно находится в PATH. Чтобы проверить запись в терминале

echo $PATH

Если нет, добавьте /home/<username>/bin/ в PATH, добавив следующую строку в .bash_profile или .bashrc, в зависимости от того, что удобно,

export PATH=$PATH:$HOME/bin

Тогда Исходный файл, запись в терминал

source .bash_profile [or source .bashrc]

Дайте mod_ppa разрешение на выполнение, запись в терминал

chmod +x mod_ppa

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

Для деактивации Использование ppa

sudo mod_ppa -d <ppa_name's_initial_part>

Например, для деактивации ppa:webupd8team/java используйте

sudo mod_ppa -d webupd8team

Для активации ppa используйте

sudo mod_ppa -a <ppa_name's_initial_part>

Например, чтобы активировать ppa:synapse-core, используйте

sudo mod_ppa -a synapse-core

help

mod_ppa --help

Я предположил, что вас не заинтересует деактивация базовой и стандартной настройки. ppa (s), перечисленные в /etc/apt/sources.list. В любом случае их немного, вы можете отключить их вручную, если хотите. Ответ Sushantp606 оказался весьма полезным.

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

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

Поскольку предполагается, что скрипт работает с какой-то уязвимой частью ОС, я попытался защитить его от кода. Проверял, какие аргументы передаются в сценарий, и соответственно устанавливаю некоторые сообщения об ошибках. Также добавлен небольшой help. Эти части увеличивают длину кода.

0
ответ дан 13 April 2017 в 15:23

Я знаю, что этот ответ не то, о чем вы просите (решение с одной командой). Но эта ветка является одной из самых популярных в результатах поиска Google для людей, которые ищут, как отключить PPA, не удаляя его.

Самый простой способ — просто отключить комментариями запись в папке /etc/apt/sources.list.d. Кстати, как работает «Программное обеспечение и обновления» при отключении записи на вкладке «Другие обновления».

Пример: отключить обновления Chrome

Откройте терминал и отредактируйте файл /etc/apt/sources.list.d/google-chrome.list:

sudo nano /etc/apt/sources.list.d/google-chrome.list

Затем отключите deb примерно такая строка:

# deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

Сохраните и готово.

0
ответ дан 3 December 2020 в 13:01

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

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