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
Даже более простой сценарий для переключения между активацией или деактивацией конкретного 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'
для нет.
Взгляните на Как отключить определенный PPA? . Хотя первый ответ от qeoh использует интерфейс GTK, второй ответ от minimec предлагает закомментировать ppa в /etc/apt/sources.list
. Я не уверен, что это то, что вы ищете, но это возможный метод.
Редактируя файл
/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
Информация 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
. Эти части увеличивают длину кода.
Я знаю, что этот ответ не то, о чем вы просите (решение с одной командой). Но эта ветка является одной из самых популярных в результатах поиска Google для людей, которые ищут, как отключить PPA, не удаляя его.
Самый простой способ — просто отключить комментариями запись в папке /etc/apt/sources.list.d
. Кстати, как работает «Программное обеспечение и обновления» при отключении записи на вкладке «Другие обновления».
Откройте терминал и отредактируйте файл /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
Сохраните и готово.