Jak naprawić "W: Duplicate sources.list entry"?

188

Ciągle otrzymuję to ostrzeżenie za każdym razem, gdy próbuję uruchomić sudo apt-get update .

W: Duplicate sources.list entry http://archive.ubuntu.com/ubuntu/ precise-updates/main i386 Packages (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_precise-updates_main_binary-i386_Packages)
W: You may want to run apt-get update to correct these problems

Poniżej znajduje się wynik pliku /etc/apt/sources.list :

deb http://archive.ubuntu.com/ubuntu precise main restricted
deb-src http://archive.ubuntu.com/ubuntu precise main restricted

deb http://archive.ubuntu.com/ubuntu precise-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu precise-updates main restricted

deb http://archive.ubuntu.com/ubuntu precise universe
deb-src http://archive.ubuntu.com/ubuntu precise universe
deb http://archive.ubuntu.com/ubuntu precise-updates universe
deb-src http://archive.ubuntu.com/ubuntu precise-updates universe

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb-src http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb-src http://archive.ubuntu.com/ubuntu precise-updates multiverse

deb http://archive.ubuntu.com/ubuntu precise-security main restricted
deb-src http://archive.ubuntu.com/ubuntu precise-security main restricted
deb http://archive.ubuntu.com/ubuntu precise-security universe
deb-src http://archive.ubuntu.com/ubuntu precise-security universe
deb http://archive.ubuntu.com/ubuntu precise-security multiverse
deb-src http://archive.ubuntu.com/ubuntu precise-security multiverse

Jak to naprawić?

    
zadawane hsinxh 10.04.2012, 08:31
źródło

25 odpowiedzi

226

Twój plik sources.list naprawdę zawiera zduplikowane wpisy.

Pierwsza Sprawdźmy poprawną postać linii repozytorium lub linii źródłowej:

Poprawny format linii źródłowej repozytorium to

<type of repository>  <location>  <dist-name> <components> 

Na przykład linia repo może być taka jak ta

  deb http://archive.ubuntu.com/ubuntu precise main

Tutaj oznacza to, że repozytorium jest przeznaczone dla pakietów binarnych, które są hostowane w linku , a to repozytorium jest dla Ubuntu precise (12.04) i to repozytorium zawiera główne (oprogramowanie, które są oficjalnie obsługiwane przez Canonical) komponent.

  • Typ: Typ może wynosić deb i deb-src . deb oznacza binarne repozytorium, w którym deb-src oznacza repozytorium źródłowe

  • Lokalizacja: http://archive.ubuntu.com/ubuntu lokalizacja repozytorium.

  • Dist-name: nazwa dystrybucji wydania Ubuntu. Dla Ubuntu 12.04 jest to precise , dla 11.10 jest to oneiric .
    Możesz odwiedzić stronę Ubuntu Wiki, aby zobaczyć zaktualizowaną lista wydań Ubuntu i ich nazw kodowych .

  • Komponent: Może to być main , universe , multiverse i restricted . Te słowa wskazują poziom obsługi pakietów i status licencjonowania.

Aby uzyskać więcej informacji, zobacz tę stronę .

Zwróć uwagę, że możesz dodać jeden lub więcej komponentów do linii, więc "główny", "wszechświatowy", "ograniczony" i "wieloświatowy" mogą znajdować się w jednej linii. Należy również pamiętać, że chociaż dodaje się więcej niż jeden komponent w jednym wierszu, system APT traktuje je jako osobną linię zawierającą tylko jeden komponent.

Więc, jeśli twój sources.list ma taką linię

deb http://archive.ubuntu.com/ubuntu precise universe

Wtedy nie może mieć innej linii, jak poniżej (która posiada twoje pliki)

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

, który jest odpowiednikiem tych dwóch linii

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

Ponieważ dwa razy powtarzasz wszechświat , więc wystąpi błąd dla tego duplikatu. W przypadku każdego znalezionego duplikatu zostanie zgłoszony błąd.

Rozwiązanie:

Po przeanalizowaniu twojego pliku sources.list , stwierdziłem, że jest on podstawowy, domyślnie dostarczany przez Ubuntu. Możesz zbudować plik domyślny zgodnie z procedurą:

  1. Otwórz terminal i najpierw zmień nazwę istniejącego pliku sources.list na plik sources.list.bak . (możemy to bezpiecznie usunąć, ale ostrożność jest dobra).

     sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
    
  2. Następnie otwórz software-properties-gtk , aby utworzyć nowy. Wpisz poniższe polecenie w terminalu lub w wierszu polecenia, naciskając klawisze Alt + F2

    software-properties-gtk
    

    Uwaga: dla wersji Ubuntu 11.10 lub wcześniejszej musisz użyć gksu przed komendą software-properties-gtk

  3. Po otwarciu okna

    • Wybierz wszystkie cztery kategorie w Ubuntu Software tab
    • Wybierz kategorie exact-security , precise-updates i precise-backports w zakładce Aktualizacje .
    • Wybierz kategorię Partner kanoniczny i Niezależny na karcie Inne oprogramowanie .

To wszystko. Masz teraz domyślny plik sources.list bez błędu. Porównaj ten plik z poprzednim, jeśli chcesz.

Aktualizuj, aby zająć się plikami sources.list.d dir

Czasem zduplikowany wpis może znajdować się w pliku w katalogu /etc/apt/sources.list.d , który jest również używany przez APT. Tak więc powinieneś spojrzeć na ten katalog i sprawdzić, czy w tych plikach jest jakiś duplikat. Nie jest konieczne, aby duplikaty znajdowały się w tym samym pliku.

Przykładowy przypadek:

Użytkownik miał ten komunikat o błędzie podczas wykonywania sudo apt-get update .

W: Duplicate sources.list entry http://dl.google.com/linux/chrome/deb/ stable/main amd64 Packages (/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_main_binary-amd64_Packages)
W: Duplicate sources.list entry http://dl.google.com/linux/chrome/deb/ stable/main i386 Packages (/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_main_binary-i386_Packages)
W: You may want to run apt-get update to correct these problems

Ale nie było wpisu z http://dl.google.com w głównym pliku /etc/apt/sources.list . Patrząc na katalog /etc/apt/sources.list.d/ znaleźliśmy następujące pliki:

wynik ls /etc/apt/sources.list.d/ :

aims-sagemath-precise.list
aims-sagemath-precise.list.save
dropbox.list
dropbox.list.save
fossfreedom-packagefixes-precise.list
fossfreedom-packagefixes-precise.list.save
google-chrome.list
google-chrome.list.save
google.list
google.list.save
sagemath-monolithic-precise.list
sagemath-monolithic-precise.list.save

Pliki google-chrome.list i google.list były dobrymi kandydatami do przechowywania duplikatów. Dlatego konieczne było sprawdzenie zawartości obu plików.

Wynik cat /etc/apt/sources.list.d/google-chrome.list :

deb http://dl.google.com/linux/chrome/deb/ stable main  

i cat /etc/apt/sources.list.d/google.list

deb http://dl.google.com/linux/chrome/deb/ stable main

W źródłach Apt pojawiły się zduplikowane wpisy. Ponieważ google-chrome.list zawiera tylko jedną linię apt i jest również wymienione w pliku google.list możemy bezpiecznie usunąć ten plik za pomocą polecenia

sudo rm /etc/apt/sources.list.d/google-chrome.list

Następnie problem został rozwiązany.

    
odpowiedział Anwar 05.09.2012, 19:33
źródło
78

Dla Ubuntu 12.04

Graficznie:

Naciśnij Alt + F2 i wklej software-properties-gtk (lub otwórz "Centrum oprogramowania", a następnie przejdź do "Edycja" > "Źródła oprogramowania"). Przejdź do zakładki "Inne oprogramowanie", wybierz zduplikowany wpis i naciśnij przycisk "Usuń".

Jeśli potrzebujesz opcji wiersza poleceń, oto ona:

cat /etc/apt/sources.list | perl -ne '$H{$_}++ or print' > /tmp/sources.list && sudo mv /tmp/sources.list /etc/apt/sources.list  

Polecenie wykonuje to:

cat odczytuje plik i przekazuje zawartość do perl , co usuwa duplikaty wierszy. Wynik jest następnie zapisywany jako > w pliku tymczasowym, który jest następnie przenoszony w celu zastąpienia oryginalnego pliku /etc/apt/sources.list .

    
odpowiedział desgua 05.05.2012, 00:27
źródło
22

Jak złe są duplikaty wpisów w sources.list?

Nie wiem, jakie to złe, ale nie lubię sudo apt-get update pokazującego duplikaty wpisów.

Przy okazji nie jest tak źle, pokazuje tylko, że masz zduplikowane wpisy.

SourcesList

Plik sources.list jest kluczowym czynnikiem dodawania lub aktualizowania aplikacji do instalacji Ubuntu. Jest również używany przez system do aktualizacji systemu. Plik jest w zasadzie mapą drogową dla twojego systemu, aby wiedzieć, gdzie może pobierać programy do instalacji lub aktualizacji.

To tak jak aktualizacja systemu Windows

  

Możesz usunąć zduplikowane wpisy w kilku prostych krokach za pomocą Y PPA Manager

 sudo add-apt-repository ppa:webupd8team/y-ppa-manager -y
 sudo apt-get update
 sudo apt-get install y-ppa-manager -y

Otwórz menedżera y-ppa formularza Dash

  

Wprowadź hasło administratora

  

KliknijdwukrotnieZaawansowane

  

Skanuj & amp; Usuń zduplikowane PPA & amp; Kliknij OK

  

To zajmie trochę czasu (1 lub 2 mennice) To Scan & amp; Usuń zduplikowane PPA

    
odpowiedział Qasim 08.05.2013, 07:36
źródło
16

Repozytorium partnerów jest duplikowane w /etc/apt/sources.list i /etc/apt/sources.list.d/precise-partner.list .

Po prostu usuń te pliki "dokładnego partnera", ponieważ repozytorium partnerów jest już obecne w sources.list .

sudo rm /etc/apt/sources.list.d/precise-partner.*
    
odpowiedział Eric Carvalho 01.09.2012, 21:20
źródło
10

Utwórz kopię zapasową pliku sources.list:

sudo cp /etc/apt/sources.list{,.backup}

Teraz usuń oryginał i aktualizuj:

sudo rm /etc/apt/sources.list && sudo apt-get update
    
odpowiedział wojox 04.07.2012, 07:16
źródło
8

Miałem ten sam problem, otwarte źródła oprogramowania. niezaznaczone "Partnerzy kanoniczni". Konflikt między "Canonical Partners" i "Canonical partners Dodane przez Software Center"

    
odpowiedział Amjed 11.04.2012, 07:11
źródło
7

Jeśli nie możesz znaleźć tego w source.list , wykonaj to:

  1. Kliknij lewym przyciskiem ikonę ustawień (w skrajnym górnym rogu ekranu) i wybierz Ustawienia systemu.
  2. Kliknij Źródła oprogramowania i przejdź do Inne oprogramowanie.
  3. Odznacz jeden z programów "Canonical Partners (kod źródłowy)" skompilowany przez firmę Canonical do plików swoich partnerów i jeden z "Canonical Partners" -software spakowany przez Canonical dla plików swoich partnerów i kliknij Close, aby wyjść.
  4. Naciśnij jednocześnie klawisze CTRL + ALT + T , aby otworzyć terminal i wpisz sudo apt-get update .
odpowiedział all4naija 11.04.2012, 08:15
źródło
5

Dla Ubuntu 9.10 - 12.04

Istnieje aplikacja o nazwie Y-PPA-Manager, która może to zrobić i wiele więcej.

Możesz to tak zainstalować z Terminalu:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get upgrade
sudo apt-get install y-ppa-manager

Następnie uruchom aplikację i przejdź do menu Zaawansowane.

Następniewybierz"Skanuj i usuń zduplikowane PPA" i naciśnij OK.

    
odpowiedział rearlight 06.05.2012, 15:25
źródło
5

10.10 i starsze

Aplikacje > Centrum oprogramowania Ubuntu > Edytuj > Źródła oprogramowania > Inne oprogramowanie

LUB

System > Administracja > Synaptic Packet Manager > Ustawienia > Repozytoria

Wybierz i usuń zduplikowane wpisy.

    
odpowiedział Sid 18.11.2010, 16:43
źródło
4

Wygląda na to, że masz dwa identyczne wiersze w pliku /etc/apt/sources.list .

Przejdź do terminala i wprowadź sudo editor /etc/apt/sources.list , poszukaj identycznych linii w tym pliku, a jeśli je znajdziesz, usuń je. Po zakończeniu, zapisz i wyjdź, a następnie wykonaj sudo apt-get update , który powinien rozwiązać twój problem.

Jeśli to nie rozwiąże problemu, musisz zastosować metodę prób i błędów. Najpierw utwórz kopię zapasową pliku sources.list , następnie w rzeczywistym pliku przejrzyj i skomentuj lub usuń każdą linię, zapisując i apt-get update -ing po tym, jak każdy wiersz został skomentowany lub usunięty. Przechodzenie przez ten plik wiersz po linii, komentując różne linie, ostatecznie powie Ci, która linia jest zbędna. Nie zapomnij odkomentować linii, które skomentowałeś, jeśli apt-get update nadal wyświetla ten sam monit, w przeciwnym razie nie będziesz mieć żadnych źródeł w pliku sources.list .

    
odpowiedział Jeff Welling 10.04.2012, 17:01
źródło
4

Szukałem takiego narzędzia, ale nie znalazłem żadnego ...
Więc sam napisałem kod używając PHP .

Przepraszamy za brudny niezorganizowany kod źródłowy.

chkdup - Zrzut ekranu:

Autor

MubarakAlrashidi(DeaDSouL)

Wymagania:

  1. PHP.
  2. sudo.

Instalacja:

  1. Otwórzterminal.
  2. AbyzainstalowaćPHP,jeśligoniemasz,wpisz:sudoapt-getinstallphp5php5-cli.
  3. Pobierz chkdup .
  4. Rozpakuj plik w dowolnym miejscu.
  5. Typ: sudo sh install.sh .

Odinstaluj:

  1. Otwórz terminal.
  2. Przejdź do ścieżki, z której wyodrębniono narzędzie.
  3. Typ: sudo sh uninstall.sh .

Jak z niego korzystać:

Wystarczy otworzyć terminal i wpisać sudo chkdup .

Najczęściej zadawane pytania:

Co robi plik install.sh?

  • Instalator przeniesie chkdup.php do /opt/ , a następnie utworzy dowiązanie symboliczne w /usr/bin/ .

A co z uninstall.sh?

  • Deinstalator usunie następujące pliki:

    1. install.sh
    2. /opt/chkdup.php
    3. /usr/bin/chkdup
    4. sam uninstall.sh

Czy korzystanie z chkdup jest bezpieczne?

  • Tak, ponieważ robi kopię zapasową bieżącego sources.list przed próbą zrobienia czegokolwiek. Ale nie jestem odpowiedzialny, jeśli coś się stało. Pełna odpowiedzialność będzie należeć do ciebie.

Licencja

Powszechna Licencja Publiczna GNU

    
odpowiedział DeaDSouL 17.03.2011, 01:19
źródło
3

Czy sprawdziłeś ls /etc/apt/sources.list.d/ ? Może masz jakieś "dodatkowe" repozytoria?

    
odpowiedział koni_raid 11.04.2012, 13:41
źródło
2

Zainstaluj ubuntu-tweak i usuń z niego zduplikowane wpisy.

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

    
odpowiedział karthick87 18.11.2010, 16:43
źródło
1

Nie, nie ma pojedynczego wiersza polecenia, aby znaleźć i usunąć zduplikowane wpisy w pliku /etc/apt/sources.list .

To dlatego, że sugerowane linie poleceń, które jedynie powielają funkcję znacznie prostszego wbudowanego polecenia uniq , będą działać tylko na pliku SORTED i usuwają tylko linie ADJACENT. Ponadto te polecenia usuwają linie składające się z identycznego ciągu znaków .

Zduplikowane wpisy zgłoszone przez apt-get update będą składać się z duplikatów funkcji , takich jak repozytorium zawarte w jego wariancie i386 i amd64 . Łatwym i skutecznym sposobem ich usunięcia jest zanotowanie, które repozytoria zostały zgłoszone jako duplikaty przez apt-get update i usunąć je za pośrednictwem Centrum oprogramowania . Otwórz go i wybierz Edytuj - > Źródła oprogramowania - > Karta Inne oprogramowanie . Po prostu szukaj duplikatów i usuń ich zaznaczenie. (Jest to również okazja do usunięcia wszystkich% repozytoriów source-code , jeśli nie kompilujesz pakietów).

Należy jednak zauważyć, że apt-get update nie tylko znajduje duplikaty wpisów za pośrednictwem sources.list , ale zawiera pliki repozytoriów znajdujące się w /var/lib/apt/lists/ . Usunięcie z niego zduplikowanych wpisów spowoduje jedynie tymczasowe usunięcie komunikatów o błędach apt-get update , jeśli system Ubuntu uzna to za potrzebne, ponieważ pliki zostaną automatycznie ponownie zainstalowane. Fakt, że apt-get update zgłosi niektóre repozytoria jako duplikaty, a następnie zasugeruje, że sam uruchamiasz apt-get update w celu ich naprawy, jest wskazówką, że naprawdę nie musisz się martwić o ten komunikat o błędzie.

    
odpowiedział Smarteralec 08.05.2012, 00:00
źródło
1

W moim przypadku duplikaty znajdowały się w pliku prerequists-sources.list . Mogłem kontynuować aktualizację, uruchamiając następujące polecenia w Terminalu:

sudo mv /etc/apt/sources.list.d/prerequists-sources.list /tmp
sudo apt-get update

Następnie przejdź do Update Manager i zainstaluj aktualizacje.

    
odpowiedział Mathijs Sterk 15.06.2012, 10:18
źródło
1

Cóż, samodzielnie rozwiązałem problem z Duplikacją poprzez zmianę nazwy /etc/apt/sources.d (jako root) na coś innego i uruchomienie sudo apt-get update , aby ponownie ustanowić katalog i jego zawartość.

    
odpowiedział Seann 25.04.2013, 21:36
źródło
1

Poszedł przez /etc/apt/sources.list ręcznie sudo nano /etc/apt/sources.list i usunął duplikaty. Po apt-get update problem został rozwiązany.

    
odpowiedział Anderverhaal 03.09.2013, 14:01
źródło
1

W /etc/apt/sources.list musisz skomentować (dodać # na początku wiersza) zduplikowany wpis repozytorium i zapisać zmiany. Następnie powtórz sudo apt-get update .

    
odpowiedział Snorri 28.05.2013, 11:07
źródło
1

Użyj Generatora listy źródeł Ubuntu .

  • Uruchom sudo -H nautilus w terminalu
  • Znajdź /etc/apt/sources.list
  • Kliknij prawym przyciskiem myszy i otwórz plik za pomocą edytora tekstu (jeśli go klikniesz, otworzy się GUI źródeł oprogramowania)
  • Po prostu skopiuj i wklej do sources.list i zapisz.
  • Wyjdź z terminala i gotowe.

Wygląda na to, że Google ma problem, więc proponuję go odrzucić. Zrobiłem to na Ubuntu 12.10 (wersja Studio z dodanym pulpitem Ubuntu i Unity dla innego logowania na komputerze).

    
odpowiedział studiofreak 05.01.2013, 15:29
źródło
1

Po prostu edytuj plik /etc/apt/sources.list (na przykład użyj sudo -H gedit /etc/apt/sources.list ) i usuń zduplikowaną linię lub umieść # na początku linii.

    
odpowiedział Micha 14.12.2012, 19:41
źródło
1

Staram się wypełnić możliwości oferowane przez innych użytkowników korzystających z terminala, ponieważ o to właśnie prosiłeś, głównie:

zaloguj się, jeśli używasz instalacji tekstowej lub naciśnij Alt + F2 i wpisz gnome-terminal, jeśli używasz GUI

Następnie wpisz

sudo nano /etc/apt/sources.list

(Aby lepiej zrozumieć: w katalogu /etc możesz znaleźć (prawie) wszystkie pliki konfiguracyjne twojego komputera iw katalogu apt znajdziesz plik souces.list , który zawiera wszystkie repozytoria, których APT używa do aktualizacji lub instaluj i aktualizuj oprogramowanie)

Edytuj plik usuwając lub komentując z # na początku wiersza dowolnego zduplikowanego wiersza.

Naciśnij Ctrl + X , aby wyjść i naciśnij y , aby zapisać plik (lub n , aby zakończyć bez) zapisywanie).

Następnie zaktualizuj, aby sprawdzić, czy to naprawiłeś:

sudo apt-get update

Baw się dobrze!

    
odpowiedział Pitto 18.11.2010, 18:12
źródło
0
S="/etc/apt/sources.list" ;
S2="$S ${S}.d/*.list" ;
grep -b "^deb\'cat $S2 |
    grep -i "^deb[[:space:]]http" |
    sort |
    uniq -dc |
    sed -e 's;[[:space:]]\+[[:digit:]]\+[[:space:]]\+deb\(.\+$\);\1;g'\'$" $S2

* Wstawki linii zostały wstawione dla czytelności.

    
odpowiedział Tony Saratonev 04.07.2012, 01:59
źródło
0

Wykonaj następujące czynności, aby usunąć duplikaty

cat /etc/apt/sources.list | perl -ne '$H{$_}++ or print' > /tmp/sources.list && sudo mv /tmp/sources.list /etc/apt/sources.list  
    
odpowiedział Stormvirux 14.09.2013, 12:46
źródło
0

W przypadku W: Duplicate sources.list entry http://dl.google.com/linux/chrome/deb/ stable/main amd64 Packages (/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_main_binary-amd64_Packages)

Otwórz: sources.list.d

rm google.list

więc pozostaje tylko google-chrome.list

    
odpowiedział Stevie G 25.05.2015, 10:38
źródło
0

Jest to odpowiednie zadanie dla uniq , które pomija duplikaty linii i drukuje tylko unikalne wpisy, dzięki czemu możemy pobrać dane wyjściowe w uniq i zastąpić stary plik wynikiem uniq :

 sort /etc/apt/sources.list | uniq > /tmp/sources && sudo mv /tmp/sources  /etc/apt/sources.list
    
odpowiedział Sergiy Kolodyazhnyy 24.11.2015, 01:38
źródło

Przeczytaj inne pytania na temat tagów