Дебіановодам та убунтуводам
Oct. 27th, 2011 03:30 pmУ звязку з викрутасами нашої улюбленої Верховної Ради я вирішив минулими вихідними розібратися з тим, як модифікувати та збирати пакунки в Debian на прикладі пакунку tzdata, що містить інформацію про часові пояси, переведення годинників і т.д. Все виявилося досить просто, тому поділюсь інформацією.
Для початку, знадобиться встановити деякі пакунки для наступних операцій. У мене всі необхідні пакунки стояли, вам, можливо, доведеться доставити такі пакунки, як dpkg-dev, debhelper. Точніше, нажаль, не скажу, але якщо ви забудете якийсь пакунок поставити, найімовірніше, повідомлення про помилку підкаже вам, якого пакунку бракує.
Всі наступні дії, окрім власне установки пакунку, можна виконувати з-під непривілейованого користувача. Отже.
1. Завантажуємо вихідні коди пакунку. Врахуйте, що вони будуть завантажені в поточний каталог, тому краще створіть для цього окремий і перейдіть до нього.
$ apt-get source tzdata
При цьому завантажаться три файли:
tzdata_2011k-0squeeze1.dsc tzdata_2011k.orig.tar.gz tzdata_2011k-0squeeze1.debian.tar.gz
Перший з них - опис пакунку, другий - вихідні коди від оригінального вендора, третій містить зміни та налаштування від debian. За замовчуванням команда apt-get source не лише завантажить, а і розпакує всі файли коректним чином. Якшо цього не трапилось (наприклад, ви забули поставити dpkg-dev), ви можете
2. ...зробити це вручну:
$ dpkg-source -x tzdata_2011k-0squeeze1.dsc
3. Перейдіть в каталог, в який пакет розпакувався, і відредагуйте файл europe
$ cd tzdata-2011k/ $ nano europe
Знайдіть там опис часових поясів для міста Kiev. Наприкінці того розділу є строчки:
2:00 EU EE%sT 2011 Mar lastSun 1:00u 3:00 - FER #Further-eastern European Time
Перша з них вказує, що варіант "Грінвіч 2 г. з переходом на літній час" діяв до останньої неділі березня 2011 року. Друга - це новий (відмінений) час Грінвіч 3 г. без переходів. Тому прибираємо останню строчку і виправляємо передостанню:
2:00 EU EE%sT
Те саме робимо для всіх інших розташувань (Запоріжжя та ін.)
Зберігаємо файл.
4. Будуємо пакет
$ dpkg-buildpackage
Може лаятись на нестачу залежностей, тоді доставляєте пакунки командою
$ apt-get install <імя пакунку>
Побудований пакунок (точніше, два пакунки, які будуються з цих вихідних кодів - tzdata та tzdata-java) зявляться у батьківському каталозі.
5. Інсталюємо свіжозбудований пакунок.
# dpkg -i ../tzdata-2011k-0squeeze1.deb
Перевірити результат можна командою
$ date -Rd "2011-10-31" Mon, 31 Oct 2011 00:00:00 0200
Останнє число вказує на відхилення від Грінвіча. Можливо, одразу після встановлення пакету це не спрацює, і його знадобиться переконфігурувати:
$ dpkg-reconfigure tzdata
Ось, власне, і все.
PS. На момент написання цього запису debian уже включив таке саме оновлення до squeeze-updates, тому можна обійтись і без танців. В ubuntu це оновлення поки що лежить в гілці unstable, але його можна встановити, підключивши репозиторій цієї гілки. Крім того, це оновлення містить помітку про критичну терміновість оновлення, тому, думаю, через день-два цей мій запис становитиме лише історичний та академічний інтерес. Головне не забудьте оновитися.
PPS. В кого стоять інші дистрибутиви, якщо в них раптом не вийде необхідне оновлення довідкова інформація: вручну перезібрати файл з інформацією про зони можна командою zic, розташувати його в /usr/share/zoneinfo, а також не забути оновити файл /etc/localtime / /usr/share/localtime.