Na poziomie technicznym, ponieważ ktoś, kto musiał poradzić sobie z tymi zmianami w kilku dużych i popularnych narzędziach do informacji o systemie, w zasadzie sprowadza się do tego:
Dla sources.list.d /
# to add
if [[ ! -e /etc/apt/sources.list.d/some_repo.list ]];then
echo 'some repo line for apt' > /etc/apt/sources.list.d/some_repo.list
fi
# to delete
if [[ -e /etc/apt/sources.list.d/some_repo.list ]];then
rm -f /etc/apt/sources.list.d/some_repo.list
fi
Zauważ, że jeśli nie wykonują oni tej samej kontroli, co poniżej, jeśli skomentowałeś linię repo, testy te byłyby błędne. Jeśli przeprowadzają tę samą kontrolę, co poniżej, to jest dokładnie taka sama złożoność, z wyjątkiem wielu plików, a nie jednego. Ponadto, chyba że sprawdzą WSZYSTKIE możliwe pliki, mogą i często dodają zduplikowany element, co powoduje, że apt narzeka, dopóki nie usuniesz jednego z nich.
Dla źródeł.list
# to add. Respect commented out lines. Bonus points for uncommenting
# line instead of adding a new line
if [[ -z $( grep -E '\s*[^#]\s*some repo line for apt' /etc/apt/sources.list ) ]];then
echo 'some repo line for apt' >> /etc/apt/sources.list
fi
# to delete. Delete whether commented out or not. Bonus for not
# deleting if commented out, thus respecting the user's wishes
sed -i '/.*some repo line for apt.*/d' /etc/apt/sources.list
Twórcy Google Chrome nie sprawdzali obecności źródeł Google Chrome, opierając się na dokładnej nazwie pliku, który utworzyłby ich pakiet Chrome. We wszystkich innych przypadkach utworzyliby nowy plik w sources.list.d o nazwie dokładnie tak, jak chcieli.
Aby zobaczyć, jakie masz źródła, nie jest to oczywiście tak ładne, ponieważ nie możesz być łatwiejszy do odczytania i utrzymania niż:
cat /etc/sources.list
Tak więc zostało to zasadniczo zrobione w celu zautomatyzowanych aktualizacji i zapewnienia łatwych pojedynczych poleceń, które można wydawać użytkownikom, o ile wiem. Dla użytkowników oznacza to, że muszą odczytać wiele plików zamiast 1 pliku, aby sprawdzić, czy mają dodane repozytorium, a dla apt oznacza, że musi również odczytać wiele plików zamiast jednego pliku.
Ponieważ w prawdziwym świecie, jeśli zamierzasz to zrobić dobrze, musisz obsługiwać kontrole wszystkich plików, niezależnie od ich nazwy, a następnie przetestować, czy działanie, które ma zostać wykonane, jest wymagane, czy nie.
Jeśli jednak nie zamierzałeś tego zrobić dobrze, po prostu zignoruj kontrole, aby sprawdzić, czy element znajduje się gdzieś w źródłach, i po prostu sprawdź nazwę pliku. Sądzę, że to właśnie robi większość zautomatyzowanych rzeczy, ale ponieważ w końcu musiałem po prostu sprawdzić wszystko, aby móc je wypisać i działać na podstawie dopasowania jednego z tych plików, jedynym prawdziwym rezultatem było uczynienie go o wiele bardziej skomplikowanym.
Edycje zbiorcze
Biorąc pod uwagę uruchamianie wielu serwerów, kusiłoby mnie, aby po prostu napisać nocne zadanie, które przechodzi przez /etc/apt/sources.list.d/ i sprawdza najpierw, czy element nie znajduje się już w source.list, a jeśli jest nie, dodaj ten element do sources.list, usuń plik sources.list.d, a jeśli już znajduje się w sources.list, po prostu usuń plik sources.list.d
Ponieważ nie ma negatywnego wpływu na używanie tylko źródeł. Lista poza prostotą i łatwością konserwacji, dodanie czegoś takiego może nie być złym pomysłem, szczególnie biorąc pod uwagę kreatywne losowe działania administratorów sys.
Jak zauważono w powyższym komentarzu, inxi -r starannie wydrukuje dla każdego pliku aktywne repozytorium, ale nie będzie ich oczywiście edytować ani modyfikować, więc byłoby to tylko połowa rozwiązania. Jeśli jest wiele dystrybucji, to z pewnością uczenie się, jak to robi, z pewnością jest przypadkiem, a przypadkowość z pewnością jest raczej regułą niż wyjątkiem.