ichthuss ([personal profile] ichthuss) wrote2011-03-21 02:16 am

(no subject)

Поки японці зайняті розущільненнями реакторів, а лівійці — розущільненням Каддафі, продовжимо наші гентушні дослідження.

Ми закінчили на тому, що зібрали потріні пакети вручну. Тепер робимо діффи з усіма нашими змінами, внесеними до пакетів, окремо на кожний пакет. Розпаковуємо пакети знову, щоб мати непропатчений варіант:

# $EBLT clean
# $EBLT unpack
# $EBRT clean
# $EBRT unpack

Переіменовуємо симлінки:

# mv libtorrent libtorrent-0.12.6
# mv rtorrent rtorrent-0.8.6

Розпаковуємо бекап:

# tar xvjf rtorr.tar.bz2

Будуємо та пакуємо діффи:

# diff -Naur libtorrent/ libtorrent-0.12.6/ > libtorrent-0.12.6-magnet.patch
# bzip2 libtorrent-0.12.6-magnet.patch
# diff -Naur rtorrent/ rtorrent-0.8.6/ > rtorrent-0.8.6-magnet.patch
# bzip2 rtorrent-0.8.6-magnet.patch

Складаємо їх до /usr/portage/distfiles.

Тепер робимо копії .ebuild-файлів /usr/portage/net-libs/libtorrent/libtorrent-0.12.6.ebuild та /usr/portage/net-p2p/rtorrent/rtorrent-0.8.6.ebuild до відповідних каталогів /usr/local/portage/net-*/*/, підвищуючи при цьому номер r (цей номер позначає різні правила збирання однієї версію ПЗ):

# mkdir -p /usr/local/portage/net-libs/libtorrent
# cp /usr/portage/net-libs/libtorrent/libtorrent-0.12.6.ebuild /usr/local/portage/net-libs/libtorrent/libtorrent-0.12.6-r1.ebuild
# mkdir -p /usr/local/portage/net-p2p/rtorrent
# cp /usr/portage/net-p2p/rtorrent/rtorrent-0.8.6.ebuild /usr/local/portage/net-p2p/rtorrent/rtorrent-0.8.6-r1.ebuild

...і вносимо необхідні виправлення: в файлі libtorrent-0.12.6.ebuild до строки

SRC_URI="http://libtorrent.rakshasa.no/downloads/${P}.tar.gz"

додаємо наш патч-файл:

SRC_URI="http://libtorrent.rakshasa.no/downloads/${P}.tar.gz http://localhost/portage/${P}-magnet.patch.bz2"

URI тут насправді неважливий, portage спочатку шукає файл в distfiles, а лише потім намагається завантажити,тому суттєвим є лише ім’я файла, оскільки він у нас вже лежить в distfiles.

Робимо, щоб наші зміни використовувалися лише при заданні USE-flag з назвою "magnet". Для цього спочатку оголосимо його:

IUSE="debug ipv6 ssl magnet"

(жирним — доданий текст). Далі нам потрібно накладати патч лише у випадку, коли він використовується. В функції src_prepare() дописуємо:

        if use "magnet"; then
                epatch "${DISTDIR}"/${P}-magnet.patch.bz2
        fi

Рівно те саме робимо з файлом rtorrent-0.8.6-r1.ebuild, але додатково вказуємо на нову залежність: для збирання rtorrent’а з флагом magnet libtorrent також має бути зібрана з ним. Тому в змінну COMMON_DEPEND дописуємо ще одну строку:

magnet? ( net-libs/libtorrent[magnet] )

Нарешті, щоб portage признавала наші новостворені файли за свої, потрібно створити маніфест з контрольними сумами всіх файлів, що беруть участь в процесі. Це робиться командою ebuild digest:

# $EBLT digest
# $EBRT digest

Все, можемо збирати наші торенти звичною командою

# USE=magnet emerge rtorrent

Ну, або прописати опцію в /etc/portage/package.use, на свій смак.

Все. Буде настрій, допишу третю частину.

ЗІ. Сподіваюсь, ніхто всерйоз не сприйняв перше речення. Звісно, я не маю наувазі, що те, що відбувається в Японії і Лівії — дрібниці і жарти. Просто маю дурну звичку жартувати з проблем, в першу чергу своїх, в другу — з чужих.


Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting