web-dev-qa-db-fra.com

Comment puis-je (dés) activer un PPA à partir de la ligne de commande avec une seule commande?

Ubuntu propose ne interface graphique simple qui vous permet de modifier, (dé-) activer et supprimer les PPA.

Mais parcourir toutes les boîtes de dialogue et menus de l'interface graphique peut parfois être fastidieux, surtout si vous avez ajouté de nombreux PPA à votre système.

C'est pourquoi je me demandais s'il y avait un moyen de désactiver (et d'activer) un PPA à partir de la ligne de commande.


Remarque : Je ne parle pas d'ajouter/supprimer le PPA (c'est assez facile à faire: Sudo add-apt-repository ppa/Sudo add-apt-repository --remove ppa). Ce que je recherche, c'est un moyen de désactiver temporairement un PPA et de le réactiver à volonté - le tout depuis la CLI.


Modifier:

Les réponses de Sushantp606 et Davidson Chua ont été un bon point de départ et m'ont fait changer la portée de ma question. Il est certainement bon de savoir que les référentiels peuvent être gérés avec le sources.list fichiers mais cela me semble toujours une tâche très fastidieuse. J'aimerais savoir s'il existe un moyen d'automatiser cela de la même manière que la fenêtre des propriétés du logiciel.

Idéalement, je voudrais trouver une commande qui permettra d'activer et de désactiver rapidement un PPA par son adresse PPA, par exemple:

ppa_activate ppa:synapse-core/ppa

et

ppa_deactivate ppa:synapse-core/ppa
2
Glutanimate

Encore un script plus simple pour basculer entre l'activation ou la désactivation d'un ppa particulier. Enregistrez le code ci-dessous dans un fichier, par exemple 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

Suivez la procédure donnée à l'autre réponse pour conserver le fichier dans PATH et le rendre exécutable.

Usage

Sudo toggle_ppa.sh <full-ppa-name>

Exemple

Sudo toggle_ppa.sh ppa:webupd8team/Java

Comment ça fonctionne

Le principe de fonctionnement de ce code est le comme dans mon autre réponse . Le code agit de manière très interactive. Lorsque quelqu'un exécute cela avec le nom ppa comme argument, il affichera l'état actuel du PPA et ce que le code va faire en cas d'exécution réussie. Ensuite, il demandera la permission de l'utilisateur. Uniquement si l'utilisateur saisit 'y' pour confirmer le code changera le statut du PPA et l'activer/le désactiver. Il sera immédiatement abandonné si l'utilisateur met un 'n' pour non.

4
souravc

les informations ppa sont enregistrées dans des fichiers séparés dans /etc/apt/sources.list. Voici le code qui fera l'action souhaitée pour désactiver ou activer le dépôt souhaité. Enregistrez le code donné ci-dessous dans un fichier, dites 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

enregistrez le script dans /home/<username>/bin/, qui se trouve généralement dans PATH. Pour vérifier l'écriture dans le terminal

echo $PATH

Sinon, ajoutez /home/<username>/bin/ à PATH en ajoutant la ligne suivante à .bash_profile ou .bashrc selon ce qui vous convient,

export PATH=$PATH:$HOME/bin

Puis sourcez le fichier, écrivez dans le terminal

source .bash_profile [or source .bashrc]

Donner mod_ppa autorisation d'exécution, écrire dans le terminal

chmod +x mod_ppa

Usage

Pour désactiver une utilisation ppa

Sudo mod_ppa -d <ppa_name's_initial_part>

Par exemple, pour désactiver ppa:webupd8team/Java utilisation

Sudo mod_ppa -d webupd8team

Pour activer une utilisation ppa

Sudo mod_ppa -a <ppa_name's_initial_part>

Par exemple, pour activer ppa:synapse-core utilisation

Sudo mod_ppa -a synapse-core

aide

mod_ppa --help

J'ai supposé que vous ne seriez pas intéressé à désactiver les services de base et par défaut répertoriés dans /etc/apt/sources.list. De toute façon il n'y en a que peu, vous pouvez les désactiver à la main si vous le souhaitez. La réponse de Sushantp606 a été très utile.

Comment ça marche

Lorsqu'un repo ppa est désactivé à l'aide du centre logiciel (GUI), il met en fait un # devant toutes les lignes à l'intérieur du ppa correspondant .list fichier sur /etc/apt/sources.list.d/. Habituellement, la plupart des .list les fichiers contiennent deux lignes commençant par deb http et deb-src, quelques-uns n'en ont qu'un. Le script ci-dessus fait la même chose en utilisant sed. Tout d'abord, il vérifie que la liste ppa (saisie par l'utilisateur) est présente ou non. Mettez ensuite ou supprimez un # devant les lignes en conséquence.

Comme le script est censé traiter une partie sensible du système d'exploitation, j'ai essayé de le coder de manière défensive. Vérifie les arguments transmis au script et définit certains messages d'erreur en conséquence. Un petit help est également ajouté. Cette partie augmente la longueur du code.

7
souravc

En éditant

/etc/apt/sources.list

fichier à partir de la ligne de commande, nous pouvons ajouter, supprimer ou désactiver temporairement les référentiels logiciels.

Je ne peux pas faire la commande, c'est juste une idée. faites-moi savoir si vous pouvez le connecter via une commande de terminal comme-

La commande pour commenter les référentiels sources dans /etc/apt/sources.list est:

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

et pour le commenter, utilisez

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

utilisez le référentiel que vous souhaitez désactiver/commenter au lieu de s/^\#deb\-src/deb\-src/ et avant toute modification, créez un fichier de liste de sources de sauvegarde comme ci-dessous-

Sudo cp -v /etc/apt/sources.list /etc/apt/sources.list.backup
3
Sukupa91

Jetez un oeil à Comment désactiver un PPA particulier? . Bien que la première réponse de qeoh utilise le frontend GTK, la deuxième réponse de minimec suggère de commenter le ppa dans /etc/apt/sources.list. Je ne sais pas si c'est ce que vous cherchez, mais c'est une méthode possible.

2
Davidson Chua