tự động hóa dpkg-cấu hình lại tzdata


60

Tôi đang sử dụng con rối để quản trị một cụm máy chủ debian. Tôi cần thay đổi múi giờ của từng máy trên cụm. Cách debian thích hợp để làm điều này là sử dụng dpkg-reconfigure tzdata. Nhưng tôi chỉ có thể thay đổi nó nếu tôi sử dụng hộp thoại. Có cách nào để tự động hóa cái này từ shell để tôi có thể viết Exec để làm cho nó dễ dàng không?

Nếu không, tôi nghĩ cách tốt nhất tiếp theo có lẽ là phân phối rối /etc/timezone/etc/localtimevới dữ liệu chính xác trên toàn cụm.

Bất kỳ đầu vào đánh giá cao!


Lưu ý rằng câu trả lời hiện được chấp nhận đã sai từ năm 2017 . Câu trả lời đúng là cái này .
Dan Dascalescu

Câu trả lời:


92

Bạn cần chỉ định lối vào là 'không tương tác' và nó sẽ lưu các cài đặt hiện tại của bạn.

dpkg-cấu hình lại sẽ lấy các cài đặt hệ thống hiện tại làm phúc âm, vì vậy chỉ cần thay đổi múi giờ của bạn theo cách bạn thường làm và chạy nó với cờ không tương tác

ví dụ: để tôi đổi thành "Châu Âu / Dublin" nơi tôi đang ở:

# echo "Europe/Dublin" > /etc/timezone    
# dpkg-reconfigure -f noninteractive tzdata

Rõ ràng điều này cho phép bạn sử dụng con rối / cengine khi bạn muốn phân phối / etc / múi giờ.


5
thay thế cho việc thay đổi quyền, bạn có thể làm một cái gì đó như thế này. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
gorelative

3
Để hoàn thiện, một cách khác để lặp lại qua sudo làsudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver

6
Đứng lên! Các phiên bản Ubuntu / Debian mới hơn không hoạt động theo cách này nữa. Hành vi thay đổi. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk

21

câu trả lời được chấp nhận không còn hoạt động (Debian Jessie, tháng 4 năm 2017), một cách tiếp cận được sửa đổi từ liên kết nhận xét của @ gertvdijk dường như thực hiện công việc ngay bây giờ:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata

1
Đây nên là câu trả lời được chấp nhận ngày nay.
Dan Dascalescu

Tuyệt vời, điều này có tác dụng
infomaniac

5

Bạn sẽ có thể sử dụng các lựa chọn thiết lập debconf để đặt trước cấu hình. Cài đặt debconf-utils và chạy debconf-get-selections | grep tzdatatrên một hệ thống được cấu hình đúng để tìm ra cái gì sẽ thiết lập nó.


1
Đối với những thứ được dựa trên debconf, điều này sẽ hoạt động. Nhưng tzdata thích cấu hình từ / etc / timezone. Vì vậy, điều này không hoạt động trên một hệ thống đã được cài đặt (khò khè).
Elrond

3

Bạn cũng có thể sử dụng các công thức từ (nay không còn tồn tại) Múa rối wiki ( lưu trữ ) mà thay thế /etc/localtimebằng file zoneinfo thích hợp từ /usr/share/zoneinfo: -

class timezone {
    package { "tzdata":
        ensure => installed
    }
}

class timezone::central inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Central",
    }
}

class timezone::eastern inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Eastern"
    }
}

class timezone::pacific inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Pacific"
    }
}

class timezone::mountain inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source =>
             "file:///usr/share/zoneinfo/US/Mountain"
    }
}

Tôi không chắc chắn nếu dpkg-cấu hình lại làm bất cứ điều gì thêm, nhưng tôi đã sử dụng công thức trên và nó hoạt động hoàn hảo.


-3

Nó rất đơn giản và chỉ cần gõ một lệnh và trả lời các câu hỏi đơn giản.
sau đó chạy:

/usr/bin/tzselect

1
man tzselect: "Lưu ý rằng tzselect sẽ không thực sự thay đổi múi giờ cho bạn. Sử dụng 'dpkg-recfigure tzdata' để đạt được điều này."
spinkus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.