एक आसान टर्मिनल तरीके से अपडेट चैनल जोड़ें और निकालें


15

मुझे पता है Software & Updatesकि अपडेट चैनलों को सक्षम करने के लिए उबंटू में एक जीयूआई है

  • अपडेट
  • प्रस्तावित
  • backports
  • सुरक्षा

जैसा कि इस स्क्रीनशॉट में दिखाया गया है:

यहाँ छवि विवरण दर्ज करें

मैं इस तरह के आदेश का उपयोग कर एक टर्मिनल के भीतर से यह करने के लिए एक आसान तरीका के लिए देख रहा हूँ

sudo apt-add-update enable updates
sudo apt-add-update enable proposed
sudo apt-add-update enable backports
sudo apt-add-update enable security

sudo apt-add-update disable updates
sudo apt-add-update disable proposed
sudo apt-add-update disable backports
sudo apt-add-update disable security

और एक अतिरिक्त बात

sudo apt-add-update enable default

sudo apt-add-update disable default

बेहतर समझ के लिए कुछ उदाहरण

  1. एक खाली sources.list

    • cat /etc/apt/sources.list

      <empty>
    • sudo apt-add-update enable security

      <empty>
  2. एक सक्षम भंडार ( main)

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily main
    • sudo apt-add-update enable security

      deb http://archive.ubuntu.com/ubuntu wily main
      deb http://archive.ubuntu.com/ubuntu wily-security main
  3. एक या दो लाइनों में दो या अधिक सक्षम रिपोजिटरी

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily main universe

      या

      deb http://archive.ubuntu.com/ubuntu wily main
      deb http://archive.ubuntu.com/ubuntu wily universe
    • sudo apt-add-update enable security

      deb http://archive.ubuntu.com/ubuntu wily main universe
      deb http://archive.ubuntu.com/ubuntu wily-security main universe

      या

      deb http://archive.ubuntu.com/ubuntu wily main
      deb http://archive.ubuntu.com/ubuntu wily-security main
      deb http://archive.ubuntu.com/ubuntu wily universe
      deb http://archive.ubuntu.com/ubuntu wily-security universe
  4. deb-srcप्रविष्टियों के साथ

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily main universe
      deb-src http://archive.ubuntu.com/ubuntu wily main universe
    • sudo apt-add-update enable security

      deb http://archive.ubuntu.com/ubuntu wily main universe
      deb-src http://archive.ubuntu.com/ubuntu wily main universe
      deb http://archive.ubuntu.com/ubuntu wily-security main universe
      deb-src http://archive.ubuntu.com/ubuntu wily-security main universe
  5. निष्क्रिय deb-srcप्रविष्टियों के साथ

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily main universe
      # deb-src http://archive.ubuntu.com/ubuntu wily main universe
    • sudo apt-add-update enable security

      deb http://archive.ubuntu.com/ubuntu wily main universe
      # deb-src http://archive.ubuntu.com/ubuntu wily main universe
      deb http://archive.ubuntu.com/ubuntu wily-security main universe
  6. defaultबात

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily-security universe
    • sudo apt-add-update enable default

      deb http://archive.ubuntu.com/ubuntu wily universe
      deb http://archive.ubuntu.com/ubuntu wily-security universe
  7. केवल एक प्रविष्टि और disableकार्रवाई

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily-security universe
    • sudo apt-add-update disable security

      <empty>
  8. अलग या समरूपता के लिए अलग या एक ही सर्वर, प्रत्येक सर्वर का सम्मान करते हैं

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily universe
      deb http://us.archive.ubuntu.com/ubuntu wily main
    • sudo apt-add-update enable security

      deb http://archive.ubuntu.com/ubuntu wily universe
      deb http://us.archive.ubuntu.com/ubuntu wily main
      deb http://archive.ubuntu.com/ubuntu wily-security universe
      deb http://us.archive.ubuntu.com/ubuntu wily-security main
  9. अलग-अलग रिपॉजिटरी के लिए अलग-अलग उबंटू रिलीज, प्रत्येक रिलीज का सम्मान करते हैं

    • cat /etc/apt/sources.list

      deb http://archive.ubuntu.com/ubuntu wily main universe
      deb http://archive.ubuntu.com/ubuntu trusty main
    • sudo apt-add-update enable security

      deb http://archive.ubuntu.com/ubuntu wily main universe
      deb http://archive.ubuntu.com/ubuntu trusty main
      deb http://archive.ubuntu.com/ubuntu wily-security main universe
      deb http://archive.ubuntu.com/ubuntu trusty-security main
  10. PPA या अन्य पैकेज स्रोत (नहीं- Canonical) में sources.list?

    नज़रअंदाज़ करना!

  11. प्रोटोकॉल न बदलें, जैसे https,http , tor, ...

जवाबों:


5

यह वही है जो पूछा गया है;

यदि आवश्यक हो तो मैं समय-समय पर इसे अपडेट करूंगा;

इस GitHub रिपॉजिटरी में ब्लीडिंग एज वर्जन पाया जा सकता है ;

GitHub भंडार से स्थापित करने के लिए:

  • स्थापित करें git:sudo apt-get install git
  • भंडार का क्लोन: git clone https://github.com/kos0/addRemoveDistribution.git

सारांश:

enableDisableDistribution.pl <enable|disable> <default|security|updates|proposed|backports>

एस 1

s2

S3

#!/usr/bin/perl

sub printUsage {
    print("Usage: enableDisableDistribution.pl \e[4maction\e[0m \e[4mdistribution\e[0m\n\n");
    print("\e[4maction\e[0m must be \e[1menable\e[0m or \e[1mdisable\e[0m\n");
    print("\e[4mdistribution\e[0m must be \e[1mdefault\e[0m, \e[1msecurity\e[0m, \e[1mupdates\e[0m, \e[1mproposed\e[0m or \e[1mbackports\e[0m");
    exit(0);
}

sub parse {
    open(my $in, "/etc/apt/sources.list") || die("Couldn't open '/etc/apt/sources.list': $!");
    while(<$in>) {
        my $matchDistribution;
        chomp;
        if(/^deb(-src)? +(.*?).ubuntu.com\/ubuntu\/? +(.*?) +(.*?) *(#.*)?$/) {
            my $debSrc = $1 eq "-src";
            my $URI = $2;
            my @split = split("-", $3);
            my @components = sort(split(" ", $4));
            if(($distribution eq "default" && defined($split[1])) || ($distribution ne "default" && $split[1] ne $distribution)) {
                push(@add, "$debSrc,$URI,$split[0],@components");
            }
            else {
                $matchDistribution = 1;
            }
        }
        (! $matchDistribution && push(@notMatchDistribution, $_)) || push(@matchDistribution, $_);
    }
    close($in);
}

sub update {
    while(1) {
        print("Would you like to update the cache? Y-y/N-n: \n");
        my $update = <STDIN>;
        if($update =~ /^y$/i) {
            my $ret = system("apt-get update");
            exit($ret);
        }
        elsif($update =~ /^n$/i) {
            exit(0);
        }
        else {
            print("Please enter Y-y or N-n.\n");
        }
    }
}

sub rewrite {
    if($action eq "enable") {
        if(@matchDistribution == 0) {
            open(my $out, ">", "/etc/apt/sources.list") || die("Couldn't open '/etc/apt/sources.list': $!");
            foreach(@notMatchDistribution) {
                print $out ($_ . "\n");
            }
            foreach(@add) {
                my @x = split(",");
                my @y = split(" ", $x[3]);
                my $line = sprintf("deb%s $x[1].ubuntu.com/ubuntu $x[2]%s @y", $x[0] && sprintf("-src"), $distribution ne "default" && sprintf("-$distribution"));
                if(! grep(/^$line$/, @added)) {
                    print $out ($line . " #Added by enableDisableDistribution\n");
                    push(@added, $line);
                }
            }
            close($out);
            printf("Added %s %s.\n", scalar(@added), @added == 1 ? sprintf("entry") : sprintf("entries"));
            update;
        }
        else {
            print("$distribution is enabled already. Aborting.\n");
            exit(1);
        }
    }
    else {
        if(@matchDistribution > 0) {
            open(my $out, ">", "/etc/apt/sources.list") || die("Couldn't open '/etc/apt/sources.list': $!");
            foreach my $line (@notMatchDistribution) {
                print $out ($line . "\n");
            }
            close($out);
            printf("Removed %s %s.\n", scalar(@matchDistribution), @matchDistribution == 1 ? sprintf("entry") : sprintf("entries"));
            update;
        }
        else {
            print("$distribution is disabled already. Aborting.\n");
            exit(1);
        }
    }
}

if($> != 0) {
    print("You must be root to run enableDisableDistribution.\n");
    exit(1);
}
if(@ARGV == 2 && $ARGV[0] =~ /^(enable|disable)$/ && $ARGV[1] =~ /^(default|security|updates|proposed|backports)$/) {
    $action = $ARGV[0];
    $distribution = $ARGV[1];
}
else {
    printUsage;
}

parse;
rewrite;

exit(0);

12

नवंबर 27, 2015 अपडेट :

स्क्रिप्ट के दूसरे संस्करण ने अभी भी मुझे स्रोत कोड की कुरूपता और इस तथ्य से असंतुष्ट छोड़ दिया कि मुझे कई अलग-अलग साधनों को नियोजित करना था। इसलिए मैंने केवल AWK में स्क्रिप्ट को फिर से लिखने का प्रयास किया।

नई स्क्रिप्ट शुद्ध AWK का उपयोग करती है, और आवश्यकताओं का बहुत बेहतर पालन करती है। अनिवार्य रूप से यह /etc/apt/sources.listहर बार चलने वाले समय को फिर से लिखता है ।

स्क्रिप्ट चलाने के बाद, अपडेट की आवश्यकता होती है, इसलिए sudo apt-get updateस्क्रिप्ट के सफलतापूर्वक बाहर निकलने के बाद चलाएं ।

फ़ाइल में निष्पादन योग्य अनुमतियाँ होनी चाहिए chmod +x add-update.awkऔर वे $PATHचर में निहित किसी भी निर्देशिका में सहेजी जा सकती हैं । विशेष रूप से यह स्क्रिप्ट को $HOME/binफ़ोल्डर में सहेजने के लिए सलाह दी जाती है (जिसे भी जोड़ा जाना चाहिए$PATH चर में )।

मूल /etc/apt/sources.listफ़ाइल का बैकअप आवश्यक नहीं है, लेकिन दृढ़ता से अनुशंसित है। फ़ाइल को बैकअप करने के लिए

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

उपयोग:

sudo ./add-update.awk -v ACTION=[enable|disable|help] -v SOURCE=[updates|backports|security|proposed]

गीथूब पर स्रोत

डेमो:

sergrep:$ cat /etc/apt/sources.list                                                                              
deb http://it.archive.ubuntu.com/ubuntu wily main universe
deb http://us.archive.ubuntu.com/ubuntu wily-backports main

deb-src http://it.archive.ubuntu.com/ubuntu wily main universe
deb-src http://us.archive.ubuntu.com/ubuntu wily-backports main
# removed

sergrep:$ sudo ./add-update.awk -v ACTION="enable" -v SOURCE="security"   
[sudo] password for xieerqi: 
/etc/apt/sources.list
<<< Script finished processing

sergrep:$ cat /etc/apt/sources.list                                                                              
deb http://it.archive.ubuntu.com/ubuntu wily main universe
deb http://it.archive.ubuntu.com/ubuntu wily-security  main universe
deb http://us.archive.ubuntu.com/ubuntu wily-backports main
deb http://us.archive.ubuntu.com/ubuntu wily-security  main
deb-src http://it.archive.ubuntu.com/ubuntu wily main universe
deb-src http://it.archive.ubuntu.com/ubuntu wily-security  main universe
deb-src http://us.archive.ubuntu.com/ubuntu wily-backports main
deb-src http://us.archive.ubuntu.com/ubuntu wily-security  main

सोर्स कोड

#!/usr/bin/awk -f
#
###########################################################
# Author: Serg Kolo
# Date: Nov 27,2015
# Purpose: A script that enables/disables 4 ubuntu sources
# (namely updates, backports, proposed, and security )
# much in a way like software-properties-gtk does
# Written for:  http://paste.ubuntu.com/13434218/
###########################################################
#
# Permission to use, copy, modify, and distribute this software is hereby granted
# without fee, provided that  the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.

function printUsage() {
    print "Usage: sudo ./add-update.awk -v ACTION=[enable|disable|help] -v SOURCE=[updates|backports|security|proposed]";
    exit
}

function checkSourceEnabled()
{
    if ( $3 ~ SOURCE) {
        print SOURCE" is enabled; exiting"
        VAL = 1
    }
    else {
        VAL = 0
    }
    return VAL
}

function disableSource()
{
    if ( $0 ~ SOURCE ) $0="# removed";
    j++;
    newLines[j]=$0;
}

function listStuff () {
    for(k=4; k<=NF; k++) if ( $k~/#/  ) {break} else {
            COMPONENTS=COMPONENTS" "$k
        };
    gsub(/\-.*/,"",$3);
    STRING=$1" "$2" "$3APPEND" "COMPONENTS;
    COMPONENTS=""
               return STRING;
}

function replaceFile()
{
    command="mv  /tmp/sources.list "ARGV[1]
            system(command);
}

############
#  MAIN
#############
BEGIN {

# argument checking sequence
# must remain written in if-else
# structure rather than case,
# to consider users who may not be able
# to install gawk due to broken sources.list
# which is what this script should be aimed at

# actions checked first so that 
# help message can be printed 
 if ( ACTION ==  "enable" ||
      ACTION == "disable" ||
      ACTION == "default"  ) {

    print "<<< ACTION ARG OK" 
  }
  else if (ACTION == "help" ){
    printUsage()
    exit
  }


  if ( SOURCE == "update" || 
       SOURCE == "security" || 
       SOURCE == "backports" || 
       SOURCE == "proposed" ) { 
       print "<<< SOURCE ARG OK"

  }

   else if ( ACTION != "default"  || ACTION != "help" ) {  
        print "<<< E: SOURCE ARG INCORRECT"; 
        printUsage(); 
        exit 1   }

    # static filename to operate on
    ARGV[ARGC++]="/etc/apt/sources.list";

    if (ACTION == "enable" ) {
        APPEND="-"SOURCE;
    } else{
        APPEND="";
    }

} # END OF BEGIN

$0~/^deb*/ && $0!~/partner/ && $0!~/extra/ {

    if ( ACTION == "enable" ) {
        j++;
        ARRAY[j]=$0
        ENABLED=checkSourceEnabled();

        if ( ENABLED ) {
            exit 1
        }
        else {
            j++;
            ARRAY[j]=listStuff();
        }

    }
    else if ( ACTION == "disable" ){
        disableSource() ;
    }
    else if ( ACTION == "default" && SOURCE == "default" ) {
        j++;
        defaultsArray[j]=$0;
        j++;
        defaultsArray[j]=listStuff();
    }
}

END {
    print "<<< Script finished processing" ;
    if ( ACTION =="enable" && ENABLED == 0 ){
     for(i=1;i<=j;i++)
        print ARRAY[i] |  "sort -u > /tmp/sources.list ";
     replaceFile();
     }
     else if ( ACTION == "disable" ) {
       for ( i=1;i<=j;i++  ) print newLines[i] | "sort -u > /tmp/sources.list"
       replaceFile();
     }
     else if (ACTION == "default" ){
        for ( i=1;i<=j;i++  ) print defaultsArray[i] | "sort -i -u > /tmp/sources.list"
        replaceFile();
     }
}

# END OF MAIN

-

पिछला संस्करण

वर्थ # 1 गीथुब पर (AWK और SED के साथ स्क्रिप्ट को बैश करें)

संस्करण # 2 गितुब पर (स्क्रिप्ट को भी काटें)


12

मैंने उबंटू सॉफ्टवेयर सेंटर के स्रोत का विश्लेषण किया जिसमें लिखा था python

बाद में, मैंने निम्नलिखित कोड अच्छे से लिखे। aptsourcesएक पायथन मॉड्यूल है जिसे उबंटू सॉफ्टवेयर सेंटर द्वारा प्रबंधित /etc/apt/sources.listऔर उपयोग किया जाता है /etc/apt/sources.list.d

#!/usr/bin/python

import aptsources.sourceslist
from subprocess import Popen, PIPE
import errno

import os

def _lsb_release():
    """Call lsb_release --idrc and return a mapping."""
    result = {'Codename': 'sid', 'Distributor ID': 'Debian',
              'Description': 'Debian GNU/Linux unstable (sid)',
              'Release': 'unstable'}
    try:
        out = Popen(['lsb_release', '-idrc'], stdout=PIPE).communicate()[0]
        # Convert to unicode string, needed for Python 3.1
        out = out.decode("utf-8")
        result.update(l.split(":\t") for l in out.split("\n") if ':\t' in l)
    except OSError as exc:
        if exc.errno != errno.ENOENT:
            logging.warning('lsb_release failed, using defaults:' % exc)
    return result


if __name__ == "__main__":
    if len(os.sys.argv) != 3 or \
        os.sys.argv[1] not in ['enable', 'disable'] or \
        os.sys.argv[2] not in ['updates', 'security', 'proposed', 'backports', 'default']:
        print "Usage: apt-add-update <enable|disable> <default|updates|security|proposed|backports>"
        os.sys.exit(0)

    release = _lsb_release()
    codename = release['Codename']

    sourcelist = aptsources.sourceslist.SourcesList()

    template = None

    main_uri = ""
    main_comps = []
    main_types = []
    child_comps = []
    child_types = []

    for tmpl in sourcelist.matcher.templates:
        if tmpl.name == codename and tmpl.distribution == "Ubuntu":
            template = tmpl
            break

    updated = False

    for source in sourcelist.list:
        if source.invalid:
            continue
        for comp in source.comps:
            if comp not in child_comps:
                child_comps.append(comp)

        if source.template and source.template.official and source.dist == codename and source.template.name == codename:
            main_uri = source.uri

            for comp in source.comps:
                if comp not in main_comps:
                    main_comps.append(comp)

            main_types.append(source.type)
        else:
            child_types.append(source.type)

        if source.dist == codename + "-" + os.sys.argv[2]:
            if os.sys.argv[1] == 'enable' and source.type in main_types:
                source.set_enabled(True)
            if os.sys.argv[1] == 'disable':
                source.set_enabled(False)
            updated = True

        if source.dist == codename and os.sys.argv[2] == "default":
            if os.sys.argv[1] == 'enable' and source.type in child_types:
                source.set_enabled(True)
            if os.sys.argv[1] == 'disable':
                source.set_enabled(False)
            updated = True

    if not main_uri:
        main_uri = "http://archive.ubuntu.com/ubuntu"

    if os.sys.argv[2] == "default" and not main_comps:
        main_comps = child_comps

    if not main_comps:
        main_comps = ['main', 'restricted', 'universe', 'multiverse']

    if not updated and os.sys.argv[1] != 'disable':

        if os.sys.argv[2] == "default":
            uri = main_uri
            if tmpl.base_uri:
                uri = tmpl.base_uri

            tmpl = template
            line = tmpl.type + " " + uri + " " + tmpl.name + " " + " ".join(main_comps)

            sourceentry = aptsources.sourceslist.SourceEntry(line)
            sourcelist.list.append(sourceentry)


        for tmpl in template.children:
            if tmpl.name != codename + "-" + os.sys.argv[2] and \
                not (os.sys.argv[2] == "default" and tmpl.name == codename):
                continue

            if os.sys.argv[2] == "default" and tmpl.type not in child_types:
                continue

            if os.sys.argv[2] != "default" and tmpl.type not in main_types:
                continue

            uri = main_uri
            if tmpl.base_uri:
                uri = tmpl.base_uri
            if not uri:
                continue

            line = tmpl.type + " " + uri + " " + tmpl.name + " " + " ".join(main_comps)

            sourceentry = aptsources.sourceslist.SourceEntry(line)
            sourcelist.list.append(sourceentry)

    sourcelist.save()

इस कोड को फ़ाइल नाम के साथ सहेजें, /usr/local/bin/apt-add-update। और फिर निम्नलिखित के रूप में चलाएं।

$ sudo apt-add-update <enable|disable> <default|updates|security|proposed|backports>

मैंने इसे मल्टी डिस्ट्रो सपोर्ट के लिए अपडेट किया , उदाहरण के लिएtrusty और केwily

#!/usr/bin/python

import aptsources.sourceslist
import os

subdistnames = ['updates', 'security', 'proposed', 'backports']

def get_subdistname(distname):
    rc = "default"
    try:
        rc = distname.split("-")[1]
    except:
        pass
    return rc

def get_distname(distname):
    rc = distname
    try:
        rc = distname.split("-")[0]
    except:
        pass
    return rc

def duplicate_check(entries):
    new_entries = []
    for source in entries:
        for newsource in new_entries:
            if source.type == newsource.type and source.uri == newsource.uri and source.dist == newsource.dist:
                for comp in newsource.comps:
                    if comp in source.comps:
                        source.comps.remove(comp)

        if len(source.comps) > 0:
            new_entries.append(source)
    return new_entries

if __name__ == "__main__":
    if len(os.sys.argv) != 3 or \
        os.sys.argv[1] not in ['enable', 'disable'] or \
        ( os.sys.argv[2] not in subdistnames and os.sys.argv[2] != 'default' ):
        print "Usage: apt-add-update <enable|disable> <default|updates|security|proposed|backports>"
        os.sys.exit(0)

    sourcelist = aptsources.sourceslist.SourcesList()
    sourcelist.list = []
    sourcelist.load('/etc/apt/sources.list')

    main_entries = []
    child_entries = []
    other_entries = []

    distro_names = []

    for tmpl in sourcelist.matcher.templates:
        if tmpl.name.find('-') > 0 or tmpl.distribution != "Ubuntu":
            continue
        distro_names.append(tmpl.name)

    for source in sourcelist.list:
        if source.invalid or source.disabled:
            continue
        subdistname = get_subdistname(source.dist)

        if source.dist in distro_names:
            main_entries.append(source)
        elif subdistname in subdistnames:
            child_entries.append(source)
        else:
            other_entries.append(source)

    if os.sys.argv[2] in subdistnames:
        modified = True
        while modified:
            modified = False
            for source in child_entries:
                if get_subdistname(source.dist) == os.sys.argv[2]:
                    child_entries.remove(source)
                    modified = True
                    continue

        if os.sys.argv[1] == "enable":
            for source in main_entries:
                uri = source.uri
                if os.sys.argv[2] == "security":
                    uri = "http://security.ubuntu.com/ubuntu"
                comps = []
                for i in source.comps:
                    if i in ['main', 'restricted', 'universe', 'multiverse']:
                        comps.append(i)
                line = source.type + " " + uri + " " + source.dist + "-" + os.sys.argv[2] + " " + " ".join(comps)
                sourceentry = aptsources.sourceslist.SourceEntry(line)
                child_entries.append(sourceentry)

    else:
        main_entries = []
        if os.sys.argv[1] == "enable":
            for source in child_entries:
                uri = source.uri
                if get_subdistname(source.dist) == "security":
                    uri = "http://archive.ubuntu.com/ubuntu"
                comps = []
                for i in source.comps:
                    if i in ['main', 'restricted', 'universe', 'multiverse']:
                        comps.append(i)
                line = source.type + " " + uri + " " + get_distname(source.dist) + " " + " ".join(comps)
                sourceentry = aptsources.sourceslist.SourceEntry(line)
                main_entries.append(sourceentry)

    main_entries = duplicate_check(main_entries)
    child_entries = duplicate_check(child_entries)
    other_entries = duplicate_check(other_entries)

    sourcelist.list = []
    sourcelist.list.extend(main_entries)
    sourcelist.list.extend(child_entries)
    sourcelist.list.extend(other_entries)

    sourcelist.save()

संदर्भ URL https://github.com/dupingping/apt-add-update/tree/master है


7

उपयोग:

## testing

apt-add-update  enable|disable  default|security|updates|proposed|backports  [file]


## real

sudo  apt-add-update  enable|disable  default|security|updates|proposed|backports

यहाँ मुख्य बातें हैं:

मैंने फ़ाइल को पार्स किया क्योंकि मैं खुद कुछ अन्य विकल्पों की तलाश कर रहा था।

  • जाँच करता है कि क्या कोई दर्पण है, या तो आधिकारिक (पुराने-रिलीज़, पोर्ट) या python-aptपैकेज से लोड किए गए समुदाय द्वारा प्रदान किए गए अन्य दर्पण (इसमें सभी दर्पणों के साथ एक फ़ाइल शामिल है)।

    /usr/share/python-apt/templates/Ubuntu.mirrors
  • फाइल में हमेशा आधिकारिक यूआरआई रखें। इसलिए सभी विकलांगों के साथ भी, यह दृढ़ता की स्थापना के लिए एक टिप्पणी लाइन रखेगा। यह अल्फ़ाबेटिक छँटाई प्रकार, url, dist, comp के साथ लाइनों को न्यूनतम तक हल करता है।

  • अगर यह 3 तर्क के रूप में इनपुट फ़ाइल प्राप्त करता है या लिखने की अनुमति नहीं है तो स्टडआउट को प्रिंट करता है /etc/apt/sources.list

  • की [ options ]तरह समर्थन नहीं करता है [ arch=amd64 ]
  • गिरा disable default जो मैं उपयोगकर्ता को अक्षम करने के लिए निर्दिष्ट करने के लिए उपकृत करता हूं।
  • मुझे अंतिम विकल्प (9) पसंद नहीं है, क्योंकि खुद रेपो के उद्देश्य को मिला रहा है। इसलिए उन्हें 3 पार्टी रिपोजिटरी के रूप में माना जाना चाहिए।

डाउनलोड: पूर्ण परीक्षण सेट के साथ।

https://github.com/sneetsher/au_700860_apt_channels

स्क्रिप्ट:

#!/usr/bin/python3

import sys,os
import re

## official repo's 

#http://ports.ubuntu.com/ubuntu-ports/
#http://old-releases.ubuntu.com/ubuntu/
#http://security.ubuntu.com/ubuntu/
#http://archive.ubuntu.com/ubuntu/

repo_official_uri_re = re.compile(r"\A(http|ftp)://(([a-zA-Z]*.)?archive|security|old-releases|ports).ubuntu.com/ubuntu(-ports)?[/]?\Z")

## load other mirrors

mirrors=[]

mir_re = re.compile(r"\A(http|ftp)://")

with open("/usr/share/python-apt/templates/Ubuntu.mirrors","r") as f:
    for l in f:
        if mir_re.match(l):
            mirrors.append(l.strip())
f.close()
#print(mirrors)

## system release

with open("/etc/lsb-release","r") as f:
    for l in f:
        k,v=l.split("=")
        if k=="DISTRIB_CODENAME":
            release = v.strip()
            break

#print(release)
f.close()

## load sources.list

##TODO: missing support deb line options like [ arch=whatever ] 
emp_re  = re.compile(r"\A\s*\Z")
repo_re = re.compile(r"\A#* *deb(-src)? *(http://|ftp://|file://|cdrom:)")
com_re  = re.compile(r"\A#")
repo_details_re = re.compile(r"\A(?P<active>#*) *(?P<type>deb(-src)?) *(?P<uri>(http://|ftp://|file://|cdrom:\[[a-zA-Z0-9 \-_().]*\])?\S*) (?P<dist>[a-zA-Z\-_]*) (?P<comp>[a-zA-Z ]*\Z)")


##example
sources={
  "http://archive.ubuntu.com/ubuntu/":{
    "active":True,
    "deb":{
      "wily":["universe","multiverse","restricted","main"],
      "wily-security":["main","restricted","universe","multiverse"]
      },
    "deb-src":{
      "wily":["universe","multiverse","restricted","main"]
      },
    "mirror":True    
    }
  }

sources={}

uri=""

##for testing
if len(sys.argv)>=4 and os.path.isfile(sys.argv[3]):
    ifile = sys.argv[3]
else:
    ifile = "/etc/apt/sources.list"

with open(ifile, "r") as f:
    for l in f:
        l=l.strip()

        r = emp_re.match(l)
        if r:
            continue
        else:
            #print("raw:",l)

            r = repo_re.match(l)
            if r:
                #print("repository:",l)
                r = repo_details_re.match(l)
                #print(r.groupdict())
                uri=r.group("uri")
                if uri[-1]!="/":
                    uri += "/"
                if (uri not in sources):
                    sources[uri] = {"active":False,"deb":{},"deb-src":{},"mirror":False}
                    m = repo_official_uri_re.match(uri)
                    if m or uri in mirrors:
                        sources[uri]["mirror"] = True
                    if r.group("active")=="":
                            sources[uri]["active"]=True
                    sources[uri][r.group("type")][r.group("dist")]=r.group("comp").split()
                else:
                    if r.group("active")=="" and sources[uri]["active"]==False:
                        sources[uri]["active"]=True
                        sources[uri]["deb"]={}
                        sources[uri]["deb-src"]={}
                        sources[uri][r.group("type")][r.group("dist")]=r.group("comp").split()
                    if (r.group("active")=="")==sources[uri]["active"]:
                        if r.group("dist") not in sources[uri][r.group("type")]:
                            sources[uri][r.group("type")][r.group("dist")]=r.group("comp").split()
                        else:
                            for c in r.group("comp").split():
                                if c not in sources[uri][r.group("type")][r.group("dist")]:
                                    sources[uri][r.group("type")][r.group("dist")].append(c)
            else:
                r = com_re.match(l)
                if r:
                    #print("comment",l)
                    continue
                else:
                    print("unknown",l)
    #print(sources)

f.close()

## process argumments

#fallback for default component to be copied from
comp=[release+"-security",release+"-update",release+"-proposed"]
found_other_comp=False 

if sys.argv[2]=="default" and sys.argv[1]=="enable":
    for u in sorted(sources.keys()):
        if sources[u]["mirror"]:
            if sources[u]["active"]:
                for t in ["deb","deb-src"]:
                    if release not in sources[u][t]:
                        for d in range(len(comp)):
                            if comp[d] in sources[u][t]:
                                other_comp_found=True
                                for i in range(d):
                                    sources[u][t][comp[i]]=sources[u][t][comp[d]]
                                sources[u][t][release]=sources[u][t][comp[d]]

                        ###don't activate any thing if commented like an empty file.
                        #if not found_other_comp and t=="deb":
                        #   sources[u][t][release]=["main"]
            #else:
            #   sources[u]["active"]=True
            #   sources[u]["deb"]={release:["main"]}
            #   sources[u]["deb-src"]={}

    ## carry on enable security
    sys.argv[2] = "security"

if sys.argv[2]=="security" or sys.argv[2]=="updates" or sys.argv[2]=="proposed" or sys.argv[2]=="backports":
    for u in sorted(sources.keys()):
        if sources[u]["mirror"] and sources[u]["active"]:
            if sys.argv[1]=="disable":
                if len(sources[u]["deb"])+len(sources[u]["deb-src"])>(release+"-"+sys.argv[2] in sources[u]["deb"])+(release+"-"+sys.argv[2] in sources[u]["deb-src"]):
                    if release+"-"+sys.argv[2] in sources[u]["deb"]:
                        del sources[u]["deb"][release+"-"+sys.argv[2]]
                    if release+"-"+sys.argv[2] in sources[u]["deb-src"]:
                        del sources[u]["deb-src"][release+"-"+sys.argv[2]]
                else:
                    sources[u]["active"] = False
            elif sys.argv[1]=="enable":
                for t in ["deb","deb-src"]:
                    if release in sources[u][t]:
                        if release+"-"+sys.argv[2] not in sources[u][t]:
                            sources[u][t][release+"-"+sys.argv[2]]=sources[u][t][release]
                        else:
                            for c in sources[u][t][release]:
                                if c not in sources[u][t][release+"-"+sys.argv[2]]:
                                    sources[u][t][release+"-"+sys.argv[2]].append(c)

## generate the new list
data_out=""
for u in sorted(sources.keys()):
    #print(u)
    for t in ["deb","deb-src"]:
        for d in sorted(sources[u][t].keys()):
            data_out += (not sources[u]["active"])*"#"+" ".join([t,u,d,""])+" ".join(sorted(sources[u][t][d]))+"\n"

if len(sys.argv)>=4 or not os.access("/etc/apt/sources.list", os.W_OK):
    print(data_out)
else:
    with open("/etc/apt/sources.list","w") as f:
        f.write(data_out)
    f.close()

sys.exit(0)

डिफ़ॉल्ट घटक के लिए #fallback COMP = [रिलीज़ + "- सिक्योरिटी", रिलीज़ + "- अपडेट", रिलीज़ + "- प्रस्तावित"] पाया गया है।
xiaodongjie

मुझे लगता है कि यदि आप उपयोग के लिए कुछ लाइनें जोड़ते हैं, तो यह बेहतर लगेगा।
xiaodongjie

1
मुझे लगता है कि यदि इफाइल मौजूद नहीं है, तो बस एक त्रुटि कोड और बाहर निकलें।
xiaodongjie

1
ओह, हाँ, सही है। प्रतिबंधित नहीं है, लेकिन "-बैकपोर्ट्स"
xiaodongjie

1
मेरा मानना ​​है कि, अलग-अलग रिपॉजिटरी के लिए अलग-अलग उबंटू रिलीज, प्रत्येक रिलीज का सम्मान =) लागू नहीं होता है
एबी

6

आप इसे बहुत ही सरल तरीके से उपयोग करके कर सकते हैं add-apt-repository

उदाहरण के लिए, आप proposedद्वारा जोड़ सकते हैं

sudo add-apt-repository "http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-proposed restricted universe multiverse main"

यह जोड़ने debऔर deb-srcलाइनों के लिए होगा /etc/apt/sources.list। लेकिन स्रोत लाइन पर टिप्पणी की जाएगी।

यदि आप पैरामीटर के add-apt-repositoryसाथ चलते हैं -s, तो यह टिप्पणी नहीं करेगा deb-src

आप securityद्वारा सक्षम कर सकते हैं

sudo add-apt-repository "http://security.ubuntu.com/ubuntu/ $(lsb_release -sc)-security restricted universe multiverse main"

हां, मैं इस तरह से कर सकता था। लेकिन मुझे रिपॉजिटरी और सर्वर की जरूरत होगी न कि केवल एक add securityया एक add proposed
एबी

2
@AB यह स्पष्ट नहीं है कि आप क्या चाहते हैं। आपको अधिक सरल कमांड की आवश्यकता है या क्या? यह कमांड बिल्कुल वही करती है जो आप GUI में करते हैं।
पायलट 6

1
जैसा कि प्रश्न में वर्णित है: "मैं एक आसान तरीका ढूंढ रहा हूं, जैसे कि टर्मिनल के भीतर से ऐसा करने के लिए कमांड का उपयोग कर रहा है जैसे ... शायद कुछ इस तरह: sudo apt-add-update security"
एबी

और इस आदेश में क्या गलत है? कि यह लंबा है? आप द्वारा अद्यतन कर सकते हैं sudo apt-get update। और कमांड को छोटा करना काफी आसान है।
19

1
हाँ sudo add-apt-repository "http://archive.ubuntu.com/ubuntu/ wily-proposed restricted universe multiverse main"अन्य लोगों के समर्थन के लिए बहुत लंबा है। मुझे पहले से मौजूद रिपॉजिटरी और उपयोग किए गए सर्वर को पुनः प्राप्त करना था।
एबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.