Chcę skonfigurować skrypt, który automatycznie zmienia strefę czasową na komputerze (z systemem Ubuntu 11.10), a także ustawia odpowiednie wartości dla debconf
bazy danych. Próbowałem następujących rzeczy, ale to nie działa (na koniec bieżąca strefa czasowa pozostaje niezmieniona, a jeśli uruchomię dpkg-reconfigure tzdata
polecenie ręcznie , wybrane wartości są rzeczywiście stare):
#!/bin/sh -e
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Madrid" | debconf-set-selections
echo "tzdata tzdata/Zones/America select " | debconf-set-selections
dpkg-reconfigure -f noninteractive tzdata
Do tej pory robię to z bałaganem plików /etc/localtime
i /etc/timezone
bezpośrednio, ale wolałbym sposób dpkg-reconfigure
i debconf
sposób.
Właśnie odkryłem, że w Debian Stretch (9) musisz także zmienić / etc / localtime, a więc coś w stylu:
jest potrzebne. Aby zmienić odpowiedź andrekellera , potrzebujesz:
źródło
ln -fs ....
linię prostąrm -f /etc/localtime
i nadal będzie działać (i debconf odtworzy/etc/localtime
z poprawnymi wartościami); szczegóły znajdziesz w mojej odpowiedzi.Aby użyć debconf, przed wywołaniem dpkg-reconfigure, musisz również usunąć
/etc/localtime
i/etc/timezone
. Uważaj również na możliwą dodatkową przestrzeń (jak w twoim pytaniu!), Która nie jest łagodna.Tak więc „sposobem debconf”, który działa (w Debian Stretch), byłoby:
Powodem jest to, że skrypt konfiguracyjny tzdata próbuje być inteligentny i jeśli kiedykolwiek był wcześniej skonfigurowany lub użytkownik ręcznie wtrącał się do stref czasowych, będzie zachowywać się inaczej.
DODATKOWY
Aby samodzielnie debugować podobny problem, najpierw wykonaj następujące czynności:
które zapewniłyby następujące informacje:
co pokazałoby, że wymusza ustawianie wartości, zanim poprosi o nie użytkownika (w ten sposób nadpisując wartości, które ustawiłeś
debconf-set-selections
).Następnie zmieniłbyś shebang
/var/lib/dpkg/info/tzdata.config
z#!/bin/sh
na#!/bin/sh -x
i śledził przebieg programu, gdzie zobaczysz, że to robi:patrząc na
/var/lib/dpkg/info/tzdata.config
to znajdziesz:co wyjaśnia, dlaczego działa odpowiedź @ fiction. Przyglądając się bardziej w skrypcie, okazałoby się, że odpowiedź @andrekeller działa również w nowszych wersjach Debiana, jeśli usuniesz „/ etc / localtime”.
Mam nadzieję, że ta pomoc w debugowaniu pomoże ci, gdy następna wersja Debiana sprawi, że skrypt będzie jeszcze mądrzejszy, a istniejące odpowiedzi również staną się nieprawidłowe. Więcej informacji na temat debugowania debconf można znaleźć w debconf-devel (7)
źródło