自动禁用 ppa

自动禁用 ppa

有没有办法自动删除或者禁用不再起作用的 ppa?

当我这样做时,apt-get update我收到很多关于无法找到某些 ppa 的错误消息。

我现在已经手动禁用它们了,但是有没有办法自动禁用它们?由于我有很多 ppa,因此手动搜索和禁用它们是一项艰巨的工作。

答案1

您可以使用脚本轻松禁用/启用 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

怎么运行的

当使用软件中心(GUI)停用任何 ppa 存储库时,它实际上会在处相应的 ppa 文件#内的所有行前面放置一个。通常大多数文件包含以和开头的两行,少数文件只有一行。上面的脚本使用 执行相同的操作。首先,它检查 ppa (用户输入)是否存在。然后相应地在行前面放置或删除一个。.list/etc/apt/sources.list.d/.listdeb httpdeb-srcsed.list#

该代码以非常交互的方式运行。当有人以 ppa 名称作为参数运行此代码时,它将显示 PPA 的当前状态以及代码在成功执行后将执行的操作。然后它将请求用户的许可。只有当用户输入'y'确认代码时,它才会更改 PPA 的状态并激活/停用它。如果用户输入“否”,它将立即中止'n'

笔记我提出了这个代码这回答了谷氨酸对改进代码有很大帮助。

答案2

使用 禁用 PPAUbuntu Software Sources非常麻烦,因为没有办法(以人性化的方式)过滤或排序 PPA。相反,您可以使用y-ppa-manager它的Manage PPAs窗口,该窗口按字母顺序显示 PPA,从而可以更轻松/更快地找到给定的 PPA 源。

您可以安装Y PPA 经理来自ppa:webupd8team/y-ppa-manager电力价格协议。

也可以看看:

答案3

您可以通过以下方式注释掉 PPA:

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

或者你可以使用Ubuntu 软件源选择全部:

软件源

相关内容