Пакети deb-src

Іноді буває так, що необхідно щось виправити в исходнике і пересобрать якусь програму. Причому, справа ускладнюється тим, що програма - частина якогось великого проекту, наприклад KDE4 або GNOME. Взяти окремо її вихідні коди і пересобрать програму за допомогою "configure; make; make install (checkinstall)" практично неможливо. Неможливо тому, що для компіляції напевно будуть потрібні вихідні або, як мінімум заголовки, загальних для всього проекту бібліотек. Причому вихідні бібліотек будуть потрібні саме тієї версії середовища, яка встановлена ​​в системі. Питається, де їх взяти, якщо в офіційному VCS навіть для вашої гілки проект "поїхав" вперед? Ужос і кошмар одним словом.

Дії будемо проводить на конкретному прикладі - нам треба підправити вихідні програми Konsole з середовища робочого столу KDE4. Програма Konsole вже встановлена ​​в систему, але нам щось не подобається в її роботі, наприклад форма курсора. Ми скачемо вихідні, внесемо зміни, скомпілюємо і встановимо в систему нашу новособранную програму. Тож почнемо.

Крок перший - підготовка

Спочатку треба переконатися, що в файлі /etc/sources.list є рядки, в яких прописані репозитарії початкових кодів. Наприклад, в Debian Squeeze повинні пристосовувати рядки:

Рядок, що починається з deb-src - це і є репозитарій початкових кодів.

Для подальшого розуміння потрібно пояснити пару речей, які в документації чомусь часто пропускають.

По перше. потрібно запам'ятати, що для кожного пакета з deb обов'язково існує його исходник в deb-src. Виняток становлять тільки мета-пакети, але вони нам нецікаві. Тобто, якщо ви в synaptic бачите пакет з ім'ям, наприклад, iptables, то в командах отримання початкових кодів потрібно використовувати цей же ім'я iptables.

По-друге потрібно знати, що після прописування рядків, що починаються з deb-src в /etc/sources.list. і після наступної команди "apt-get update", ви в synaptic або aptitude не побачите пакетів з кодами. Вони будуть підключені, система буде знати про пакетах-исходниках, але ви не побачите їх наявність.

Крок другий - отримання і розпакування исходников

У своїй робочій директорії потрібно створити який-небудь каталог, який буде використовуватися для складання. Треба зайти в нього, і наступні команди потрібно виконувати в цьому каталозі.

Від звичайного користувача (чи не від рута) даємо команду:

$ Apt-get source konsole

В результаті будуть завантажені файли початкових кодів та розміщені в поточному каталозі. Висновок буде приблизно ось такий:

Необхідно отримати 4 082 kб архівів вихідного коду.

Отримано 4 082 Кб за 44с (91,3 Кб / c)

dpkg-source: інфо: витяг kdebase в kdebase-4.4.5

dpkg-source: інфо: розпаковується kdebase_4.4.5.orig.tar.bz2

dpkg-source: інфо: розпаковується kdebase_4.4.5-2.debian.tar.gz

dpkg-source: інфо: накладається debian-T-addition.diff

Крок третій - установка залежних пакетів

Далі потрібно отримати залежні пакети, які можуть знадобитися для складання нашої програми. Від рута даємо команду:

# Apt-get build-dep konsole

В результаті чого будуть закачані і встановлені всі пакети, без яких не запрацює збірка нашої програми.

Крок четвертий - компіляція

Для компіляції ційний зробити не зовсім звичайну річ. У нашому поточному каталозі, в результаті наших дій, утворилися всякі нові файли і підкаталоги. Нам потрібно потрібно знайти файл з ім'ям "rules". Це виконуваний файл. У мене він виявився розташований так:

Після того, як його знайшли, потрібно відносно нього піднятися на каталог вище, і дати від звичайного користувача команду:

$ Fakeroot ./debian/rules binary

В результаті роботи цієї команди спочатку запуститься компіляція, а потім в поточному робочому каталозі повинен з'явитися * .deb-файл, всередині якого буде лежати тільки що скомпільована програма. Може виявитися так, що буде згенеровано не один * .deb, а кілька, соответсвущіх іншим програмам, що знаходяться в тому ж пакеті з кодами.

Наприклад, у мене були згенеровані наступні пакети:

Серед цих пакетів є і цікавий для нас konsole_4.4.5-2_i386.deb.

Крок п'ятий - установка

Щоб встановити новий пакет поверх наявного, потрібно від рута дати команду:

# Dpkg -i konsole_4.4.5-2_i386.deb

Хехе, швидше за все команду цю ви будете виконувати в Konsole? Це робити нетреба, а то установка вилетить на середині, коли будуть замінювати файли Konsole. Потрібно запустити xterm, перейти в наш робочий каталог, і там виконати від рута дану команду.

На кроках 1. 5 ми переконалися, що вихідні у нас є, і вони збираються без помилок. Тепер можна внести зміни в вихідні, і отримати виправлену нами програму.

Як було написано спочатку, нам не подобається форма курсора в Konsole. Багато олдфагов звикли до миготливому курсору у вигляді підкреслення. Така форма курсора є в терміналі Konsole середовища KDE4, але форма представлена ​​у вигляді тоненької рисочки висотою в 1 піксель. Такий курсор важко знаходити на екрані.

У той же час, якщо уважно розглянути курсор в Text Mode, можна переконатися, що він має висоту як мінімум 2 пікселя, і за рахунок такої жирності добре детектується на просторі екрану. При цьому курсор не є вирвіглазним блоком, котрий обіймав ціле знакоместо.

Зверніть увагу, що на всіх цих фотографіях висота курсора 2 пікселя, а не 1. Батьки-засновники знали що робили, на відміну від нинішніх кодеров-мавпочок.

Значить, нам потрібно змінити товщину курсора. Візуалізація курсора був знайдений у файлі:

У цьому файлі знаходимо метод drawCursor, і знаходимо місце, в якому отрісовивается курсор у вигляді підкреслення. Ось це місце:

else if (_cursorShape == UnderlineCursor)

Нам потрібно намалювати дві лінії, тому замінюємо даний код ось таким:

Схожі статті