Есть ли способ автоматического удаления или отключения ppa, который больше не работает?
Когда я делаю apt-get update
, я получаю много сообщений об ошибках, касающихся некоторых ppas, которые не могут быть найдены.
Я отключил их вручную, но есть ли способ отключить их автоматически? Так как у меня много ppas, много работы по их поиску и отключению вручную.
Можно использовать сценарий для отключения/разрешения 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 помог много улучшить код.
Вы можете либо закомментировать PPA следующим образом:
# deb http://archive.canonical.com/ubuntu precise partner
# deb-src http://archive.canonical.com/ubuntu precise partner
Или, вы можете использовать Ubuntu Software Sources , выбрав все:
Отключение PPA с помощью Ubuntu Software Sources
является большой проблемой, поскольку нет способа отфильтровать или упорядочить (по-человечески полезному) PPA. Вместо этого вы можете использовать y-ppa-manager
через его окно Manage PPAs
, которое отображает PPA в алфавитном порядке и, таким образом, позволяет более легко / быстро определять конкретный источник PPA.
Вы можете установить Y PPA Manager из ppa: webupd8team / y-ppa-manager PPA.
См. Также: