(no subject)
Mar. 21st, 2011 02:16 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Поки японці зайняті розущільненнями реакторів, а лівійці розущільненням Каддафі, продовжимо наші гентушні дослідження.
Ми закінчили на тому, що зібрали потріні пакети вручну. Тепер робимо діффи з усіма нашими змінами, внесеними до пакетів, окремо на кожний пакет. Розпаковуємо пакети знову, щоб мати непропатчений варіант:
# $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, на свій смак.
Все. Буде настрій, допишу третю частину.
ЗІ. Сподіваюсь, ніхто всерйоз не сприйняв перше речення. Звісно, я не маю наувазі, що те, що відбувається в Японії і Лівії дрібниці і жарти. Просто маю дурну звичку жартувати з проблем, в першу чергу своїх, в другу з чужих.