Próbuję utworzyć skrypt, który wymaga ode mnie wypisania kryptonimu debian, aby móc powtórzyć go w pliku sources.list.
Próbuję sprawić, aby ten skrypt działał w dowolnej wersji Debiana, więc miałem nadzieję ustawić zmienną bash w nazwie kodowej wydania. Byłoby to łatwe do zrobienia (z lsb_release -c), jednak nasze obrazy wdrażania domyślnie nie zawierają lsb_release - a przy tym skrypcie wymaganym do naprawy pliku sources.list, instalacja lsb-release z apt-get nie byłaby opcją .
Znalazłem wiele sposobów na uzyskanie numeru wersji i innych informacji o systemie, ale nie mogę znaleźć wiarygodnego miejsca na uzyskanie nazwy kodowej.
Wszelkie pomysły będą mile widziane!
(System operacyjny, z którym testuję to Debian Squeeze)
lsb_release
, sprawdź jego kod źródłowy i sprawdzić, czy jesteś gotów na nowo wszystkoOdpowiedzi:
Możesz użyć
/etc/os-release
:źródło
squeeze nie jest wysyłany
/etc/os-release
, oto mój „hack”:źródło
Możesz wydrukować kod wraz z numerem wersji debian:
LUB możesz odsłonić swoją nazwę kodową od numeru i pranthese:
źródło
awk -F= '/VERSION=/ {gsub(/"/,""); print $2}' /etc/os-release
awk -F"[=\"]+" '/VERSION=/ {print $2}' /etc/os-release
awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release
Możesz uzyskać kryptonim dystrybucji Debiana
/etc/os-release
. Zamiast próbować parsować ten plik, możesz pobrać go do świeżego środowiska, aby nie wpływać na bieżące środowisko, i wykonaćecho
polecenie w tym nowym środowisku.Aby to rozbić:
env
: Uruchom polecenie w nowym środowisku.-i
: Nie dziedzicz zmiennych środowiskowych z istniejącego środowiska.bash
: Uruchom bash, aby uzyskać powłokę, w której można pobrać plik wydania systemu operacyjnego i uruchomić polecenie echo.-c
: Powiedz,bash
że chcemy wykonać polecenie, a nie uruchomić interaktywną powłokę.. /etc/os-release
: Źródło treścios-release
w naszym nowym środowisku.os-release
zawiera kilka wierszy ustawiających zmienne środowiskowe, a to ustawi te zmienne środowiskowe w naszym nowym środowisku.;
: Oddziel to polecenie i uruchom następne polecenie.echo $VERSION_CODENAME
: Wypisz nazwę kodową ustawioną przezos-release
plik.źródło
echo "$(. /etc/os-release && echo $VERSION_CODENAME"
, ale zauważyłem, że nie znajduje się$VERSION_CODENAME
wstretch
. Bardzo smutne wieści.echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"
co wydaje się odpowiednie dla mojego zadania, ale wygląda źleDla systemd:
wynik:
źródło
Inną heurystyką jest sprawdzenie, skąd pochodzą pakiety dla aktualnie działającego systemu operacyjnego.
Prosty (i prawdopodobnie podatny na błędy) wariant:
Bardziej niezawodnym sposobem jest parsowanie szczegółów z danych wyjściowych
apt-cache policy
(bez dalszych parametrów):apt-cache policy
wyświetla listę wszystkich repozytoriów APT używanych w systemie lokalnym. Odfiltrowujemy te, które pochodzą z Debiana, które są oznaczone tylkoDebian
(tzn. Nie są oznaczone np.Debian debug
), Następnie patrzymy tylko na archiwum główne (niecontrib
lubnon-free
), a następnie wybieramy odpowiednią wartość.Jeszcze bardziej stabilnym podejściem byłoby nie poleganie na kolejności elementów i znajdowanie
n=
wartości w pozostałym wierszu:Jeszcze inną możliwością byłoby samodzielne parsowanie
/var/lib/apt/lists/*Release
plików zamiast pozwalaniaapt-cache
na to:źródło
Potrzebowałem dodać adres URL w pliku sources.list. Aby móc dynamicznie wstawiać nazwę kodową wersji, używam tego fragmentu kodu (polegam na tym, że nazwa kodowa znajduje się między nawiasami): Zainspirowany odpowiedzią @PersianGulf .
grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g
źródło
Rozwijając odpowiedź @Costas , to polecenie nie działało dla 16.04, gdzie zwróciło pełną nazwę „Xerial Xerus”, ale chciałem tylko „Xerial”, ponieważ w ten sposób repo, z którego próbowałem pobrać, rozdzieliło różne wersje. To polecenie dodaje, że zwracane będzie tylko pierwsze słowo i wszystkie małe litery:
Działa to również w przypadku „jessie”
źródło
Używając tylko
grep
:Wypróbuj (dane wyjściowe w momencie pisania tego postu):
źródło
ten może (lub nie musi) być alternatywnym podejściem do tego, co napisał bcoca na temat ściśnięcia Debiana - przetestowałem to Ubuntu 18.04:
źródło