Блог об использовании Linux на десктопах и ноутбуках в России.

Etch-backports: cоздание бекпортов новых версий программ в Debian и Ubuntu на примере Etch и rtorrent 0.8.5

Порой в стабильной версии пакетного дистрибутива Linux нет новой версии какой-нибудь нужной программы. Что такое бекпорты и где их искать, думаю, понятно. Но что делать когда их там нет? Не менять же дистрибутив из за одного пакета. Очевидно — сделать бекпорт самому. Чем и займёмся на примере rtorrent 0.8.5 и Debian 4 Etch.

Deb-пакет представляет собой целую кучу файлов специального вида, поэтому подготовить их с нуля и собрать пакет имея только оригинальные исходники rtorrent — задача нетривиальная. Этим пусть майнтейнеры пакетов занимаются. Убедившись что пакет для rtorrent 0.8.5 есть в Debian Testing, упрощаем задачу до сборки под Debian 4 Etch пакета rtorrent от Debian Testing.

Пакеты в Debian и Ubuntu собираются из специальных пакетов-исходников, которые хранятся в репозитариях исходников. Добавляем нужные нам репозитарии исходников в /etc/apt/sources.list:

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main
deb http://www.backports.org/debian/ etch-backports main contrib non-free
deb-src http://www.backports.org/debian/ etch-backports main
deb http://ftp.us.debian.org/debian etch main contrib non-free
deb-src http://ftp.us.debian.org/debian etch main
deb-src http://ftp.us.debian.org/debian testing main

Т.е. одновременно подключены репозитарии стабильных пакетов и исходников нестабильных пакетов, из которых будем бекпортировать. Скачиваем списки пакетов как обычно:

aptitude update

Далее скачиваем в текущий каталог свеженький исходный пакет rtorrent:

mkdir src
cd src
apt-get source rtorrent

Глядим в файл rtorrent-0.8.5/debian/control и видим такое:

Build-Depends: debhelper (>= 5), cdbs, libtorrent-dev (>= 0.12.5),
               libsigc++-2.0-dev, libcurl4-openssl-dev, libncursesw5-dev,
               bc, libxmlrpc-c3-dev

Это список пакетов, которые надо поставить, чтобы собрать пакет rtorrent. Дальше, в общем случае, алгоритм действий не детерминирован. Надо исходя из соображений совместимости библиотек, их наличия в репозитариях и бекпортах, минимальных требований rtorrent и, наконец, проб и ошибок, удовлетворить все зависимости. С каждым пакетом варианта всего три: поставить из стабильного репозитария, возможно понизив требуемую версию, поставить из бекпортов, либо сделать бекпорт самому :) Пробив версии пакетов через packages.debian.org, в данном случае верным решением кажется сделать бекпорт libtorrent-dev, поставить libcurl3-openssl-dev вместо libcurl4-openssl-dev, а остальное поставить из стабильных репозитариев. Забегая вперед скажу, что если так сделать, rtorrent не соберется потому что в Debian 4 Etch слишком старая библиотека libxmlrpc-c3 и ее тоже придётся бекпортить, а уже при работе с rtorrent выяснится наличие бага в официальной сборке curl в Debian 4, из за которого некоторые торренты просто не качаются, решается бекпортом новой версии curl (см. ниже) Итого, ставим что есть:

aptitude install debhelper cdbs libsigc++-2.0-dev libncursesw5-dev bc

Дальше бекпортим libtorrent. Скачиваем исходный пакет:

apt-get source libtorrent11

Дальше дополняем лог изменений пакета, для чего есть специальная команда:

cd libtorrent-0.12.5
dch -i

В лог добавится фрагмент по шаблону и откроется редактор nano. К номеру версии пакета из Testing приписываем суффикс бекпорта ~bpo+1., гордо пишем свое имя и почту, сохраняем лог, запускаем сборку пакета:

debuild -us -uc

Ждем пока все скомпилируется. Если все ок, то в каталоге уровнем выше должны появиться deb-пакеты, ставим их:

cd ..
dpkg -i libtorrent11_0.12.5-2~bpo+1_i386.deb libtorrent-dev_0.12.5-2~bpo+1_i386.deb

Аналогично, бекпортим libxmlrpc-c3 и ставим полученные пакеты:

dpkg -i libxmlrpc-c3_1.06.27-1~bpo+1_i386.deb libxmlrpc-c3-dev_1.06.27-1~bpo+1_i386.deb

Теперь можно бекпортить и ставить rtorrent:

cd rtorrent-0.8.5
dch -i
debuild -us -uc
cd ..
dpkg -i rtorrent_0.8.5-2*.deb

Готово.

Отмечу возникшие при создании бекпорта проблемы. При неудачной сборке rtorrent в первый раз ошибку пришлось искать в логах configure и гуглить, чтобы додуматься libxmlrpc-c3 бекпортить тоже. Ещё после первой неудачной сборки rtorrent уже нельзя пересобрать так как остаются какие-то мешающие повторной сборке файлы. Приходится каталог rtorrent-0.8.5 удалять и делать заново apt-get source rtorrent. Отсутствие таких ошибок имеют ввиду, когда говорят о повышении качества пакетов и поддержке двойной компиляции, заявленной в целях релиза Debian 6.

UPD: Узнал как правильно именовать backport-пакеты. К имени оригинального пакета добавляется суффикс вида ~bpo<версия_debian>+<версия_бекпорта>, например ~bpo40+1. Указываем это в ченджлоге, а _i386 конце добавляется автоматически при сборке.


UPD: Сделал Etch backport для libxmlrpc-c3 1.16 из Debian Experimental и пересобрал с новой версией rtorrent так как с libxmlrpc-c3 1.06 некорректно работает веб-морда rutorrent. Новые файлы во вложении.


UPD: Столкнулся с проблемой в работе rtorrent под Debian, решаемой сборкой новой версии curl с поддержкой асинхронного разрешения DNS через ares.

Пакет для c-ares и dev можно взять тут: http://apt.byteme.org.uk/pool/main/c/c-ares/

Чтобы собрать пакет curl необходимо обновить debhelper и quilt из бекпортов, сделать и поставить бекпорт libssh2-1 и libssh2-1-dev, дальше так:

cd ~/src
apt-get source libcurl3
nano curl-7.19.5/debian/rules
# деалем --disable-ipv6 --enable-ares
dch -i
# пишем ченджлог
aptitude install autoconf libtool automake1.9 libgnutls-dev stunnel libldap2-dev libgcrypt11-dev
debuild -us -uc

Далее ставим полученные пакеты libcurl, libcurl-dev и пересобираем пакеты xmlrpc/libtorrent/rtorrent.

Ниже ссылки на deb-пакеты, необходимые для установки rtorrent 0.8.5 под Debian 4 Etch.

UPD: Кто-то закинул ссылку на этот пост на ЛОР. В комментариях говорят checkinstall надо использовать, а не бекпортить, так как это проще. Про checkinstall я не знал, надо будет попробовать, но думаю его лучше использовать когда нет нужного пакета в Testing, Unstable или Experimental для бекпорта. Во-первых, все сложные моменты с необходимостью обновления заранее неизвестно каких пакетов остаются, в данном случае xmlrpc и curl все равно нужно обновлять, иначе rtorrent соберется, но просто не будет работать как надо. Во-вторых, половину собранных пакетов в процессе накладывали на исходники какие-то дебиановские патчи, думаю они не просто так. В-третьих, непонятно как у пакета checkinstall с зависимостями, не выйдет ли это боком при обновлении системы если надо пересобрать пакет типа curl, от которого зависят другие пакеты Debian. В-четвертых, не создадутся dev-пакеты и сопутствующие пакеты, например при сборке единственного source-пакета libcurl3 создаются deb-пакеты libcurl3-gnutl, libcurl4-gnutls-dev, libcurl4-openssl-dev, curl, libcurl3 и libcurl3-dbg, я эти подробности опустил, но от этих пакетов зависят другие пакеты, checkinstall все эти имена знать не может заранее, как тут быть?

Блог: RU Linux

GIMP 2.8: однооконный интерфейс!

Не так давно Martin Nordholts в своем блоге опубликовал превосходную новость: в новом гимпе будет реализована опциональная возможность использования однооконного интерфейса! За это стоит выпить!

Блог: Urza's blog

Tor: анонимность в Сети, установка в Debian и Ubuntu Linux

Tor: Анонимность в Сети, установка в Debian Lenny

Tor — это сеть виртуальных туннелей и специальный софт, который используют для улучшения безопасности и приватности в Сети домашние и корпоративные пользователи, журналисты, правозащитники и работники общественных организаций, военные. Cтавится в Debian Lenny очень легко:

apt-get install tor tor-geoipdb

В других версиях Debian и Ubuntu устанавливать Tor по инструкции.

Локальный прокси Privoxy установится по зависимостям, в первой строке его файла конфигурации /etc/privoxy/config вставляем настройку для соединения с Tor:

forward-socks4a / 127.0.0.1:9050 .

и комментируем логирование #logfile logfile

Запускаем Privoxy:

/etc/init.d/privoxy start

В Firefox (Iceweasel) устанавливаем плагин Torbutton, включаем работу браузера через Tor кнопкой внизу справа и заходим на страницу для проверки Tor. Если видим зеленую луковицу, как на картинке, то все ок. Если нет, то можно рестартнуть Privoxy и Firefox и попробовать снова. Если опять лук не зеленеет, то читаем инструкцию.

Torbutton изолирует Cookies и опасные скрипты, отключает историю, отключает плагины для эффективного использования Tor в браузере:
Torbutton

Блог: RU Linux

Ускорение работы Firefox (Iceweasel)

После недавней установки Java и обновления нужных по работе плагинов мой Iceweasel 3.0.6 впал в кому. Он и так то работал раньше медленно, а теперь и вообще стал страшно тормозить другие программы. После проведения следующих манипуляций удалось значительно его ускорить.

Обновления пакетов

Обновил следующие пакеты в Linux: libmozjs1d xulrunner-1.9 libpango1.0-0 libpango1.0-common libssl0.9.8 openssl

Еще бы обязательно обновил все что связано с GTK и аккуратно обновил бы libc6. В моем случае уже стояли последние для Debian Lenny версии.

Тюнинг Firefox

Прознал что полезно отключить ipv6 и попутно нашел еще массу твиков. Нужно создать файл ~/.mozilla/firefox/xxxxxxxx.default/user.js и в него вписать такое:

user_pref("network.http.pipelining", true); 
user_pref("network.http.proxy.pipelining", true); 
user_pref("network.http.pipelining.maxrequests", 8); 
user_pref("content.notify.backoffcount", 5); 
user_pref("plugin.expose_full_path", true); 
user_pref("ui.submenuDelay", 0); 
user_pref("content.interrupt.parsing", true); 
user_pref("content.max.tokenizing.time", 2250000); 
user_pref("content.notify.interval", 750000); 
user_pref("content.notify.ontimer", true); 
user_pref("content.switch.threshold", 750000); 
user_pref("nglayout.initialpaint.delay", 0); 
user_pref("network.http.max-connections", 48); 
user_pref("network.http.max-connections-per-server", 16); 
user_pref("network.http.max-persistent-connections-per-proxy", 16); 
user_pref("network.http.max-persistent-connections-per-server", 8); 
user_pref("browser.cache.memory.capacity", 65536); 
user_pref("network.dns.disableIPv6", true); 

Перезапустить Firefox и проверить зайдя в нем на about:config применились ли параметры.

Очень помогло. Теперь в Firefox можно нормально работать, хотя панелька запоминания пароля так и выезжает с тормозами и табы переключаются позорно.

Установка официальной сборки

UPD: Firefox 3.5 c официального сайта работает значительно быстрее (загрузка, скролл, переключение табов, рендер, словом все!), чем Iceweasel 3.х в Debian Lenny и тем более Iceweasel 2.х в Debian Etch. Для последнего пришлось компилировать GTK 2.10 так как иначе новый Firefox не запускается.

Блог: RU Linux

Подробнее о группах слоев для Gimp

Разберем подробнее анонсированный ранее плагин LayerGroups, позволяющий организовать работу с группами слоев.

Плагин создавался для работы с проектами, содержащими сотни слоев, так что для небольших проектов он врядли найдет применение.

Работа с группами основывается на связанных(Linked) слоях и их названиях.

Для начала создадим три слоя layer1, layer2, layer3. Сделаем их linked и подействуем нашим плагином: LayerGroups/3-link/link(2): rename linked layers to group name.

В диалоговом окне зададим имя группы, например Group1, жмем OK,
LayerGroups/3-link/link(2): rename linked layers to group name
LayerGroups/3-link/link(2): rename linked layers to group name
Cлои останутся связанными, но имя у них будет вида {GroupName}.[LR].{OldLayerName}, в данном случае получим Group1.[LR].layer1 и Group1.[LR].layer2. [LR] — просто лейбл, который означает, что слои были переименованы в группу посредством (L)ayer(R)ename.

Из связанных слоев можно создать группу используя LayerGroups/3-link/link(3): duplicate linked layers to group name, в таком случае лейбл будет [LD] — (L)ayer(D)uplicate.

Если мы хотим добавить слои в группу, или сделать группу не используя плагин, то просто создаем слои с именем вида {GroupName}.{LayerName}.

Далее список всех функций, имеющихся в плагине:

View(0) List of all layer names — придумываем заголовок, указываем координаты начала и получаем такой текстовый слой:

View(1) show layer group — отображает слои в группе, имеет дополнительные опции: показать только связанные слои в определенной группе; фильтр (текст, который должен содержаться в имени каждого слоя)

View(2) hide layer group — скрывает слои в группе, имеет дополнительные опции: скрыть только связанные слои в определенной группе; фильтр (текст, который должен содержаться в имени каждого слоя)

View(3) show all layers — название говорит само за себя и никаких дополнительных опций тут нет

View(4) hide all layers — аналогично

View(5) show all layers but group — показывает все слои, кроме тех, названия которых начинаются с названия определенной группы

View(6) hide all layers but group — скрывает все слои, кроме тех, названия которых начинаются с названия определенной группы

View(7) show all linked layers — показывает все связанные слои

View(8) hide all linked layers — прячет все связанные слои

Edit(0) duplicate layer group — создать копию группы слоев

Edit(1) delete layer group — удалить группу слоев

Edit(2) rename layer group — переименовать группу слоев

Edit(3) rename some portions of layer names of a layer group — заменить часть имени слоев в конкретной группе. Опции: заменять только в связанных слоях; заменять только в слоях, содержащих конкретное слово; заменять все совпадения в имени слоя, а не только первое найденное

Edit(4) create individual image (on disk) from layers of a layer group — сохраняет на диск каждый слой группы как отдельный файл. Позволяет выбрать путь куда сохранять, префикс имени и расширение(jpeg, png, gif и все что умеет гимп) Опции: использовать только связанные слои; использоваться слои, содержащие в названии конкретный текст.

Link(1) link or unlink layer group — связывает (развязывает) слои в выбранной группе. Опции: связать/развязать только те слои, в названиях которых содержится конкретный текст.

Link(2) rename linked layers to group name — переименовывает связанные слои, добавляя в название имя группы.

Link(3) duplicate linked layers to new group — дублирует связанные слои, добавляя в названия копий имя группы. Опции: позволяет дублировать связанные слои в другой проект.

Link(4) delete all linked layers — без комментариев. Даже ничего не спрашивает.

Link(5) move all linked layers to the top — поместить все связанные слои вверх в списке слоев.

Link(6) move all linked layers to the bottom — поместить все связанные слои вниз в списке слоев.

Link(7) move linked layers above a specific reference layer — помещает все связанные слои над выбранным слоем.

Link(8) move linked layers below a specific reference layer — помещает все связанные слои под выбранным слоем.

Link(9) unlink all — развязывает все слои.

Move(1) move layer group above a specific reference layer помещает группу слоев над выбранным слоем. Опции: действовать только на связанные слои в группе; действовать на сли, содержащие в имени определенный текст.

Move(2) move layer group below a specific reference layer помещает группу слоев под выбранным слоем. Опции: действовать только на связанные слои в группе; действовать на сли, содержащие в имени определенный текст.

Move(3) move all linked layers to the top — поместить все связанные слои вверх в списке слоев.

Move(4) move all linked layers to the bottom — поместить все связанные слои вниз в списке слоев.

Move(5) move linked layers above a specific reference layer — помещает все связанные слои над выбранным слоем.

Move(6) move linked layers below a specific reference layer — помещает все связанные слои под выбранным слоем.

Save-Restore(1) visible layers save or restore visibility set on disc — сохраняет(или восстанавливает) текущий статус видимости слоев (видим/невидим) на диск, в папку, в которой лежит сам проект.

Save-Restore(2) linked layers save or restore from memory — позволяет записать в 1 из 26 слотов, или извлечь из них информацию о связях слоев.

Save-Restore(3) visible layers save or restore from memory — то же самое, только со статусом видимости слоев.

Effects(1) drop shadow on layer group — создает эффект тени вокруг слоев группы.

Effects(2) perspective shadow on layer group — создает эффект перспективной тени

Effects(3) translucend 3d effect on layer group — находится в стадии разработки, работает не корректно и через раз. Даже не знаю как описать то, что дает на выходе:

Блог: Urza's blog

Лог загрузки Debian и Ubuntu

Команда dmesg и содержимое файла /var/log/dmesg позволяют посмотреть сообщения ядра Linux при последней загрузке. При этом строки, которые видно на экране при загрузке Debian, заметно отличаются от этих самых сообщений ядра так как содержат вывод скриптов инициализации. Иногда получается что какое-нибудь сообщение об ошибке мелькает при загрузке, но потом в dmesg его невидно. Что делать? А варианты такие...

  1. Кнопками Shift+PgUp/Shift+PgDn можно листать не влезающие в экран сообщения.
  2. При загрузке нажатием Ctrl+S можно остановить вывод сообщений на экран, Ctrl+Q -- продолжить.
  3. В файле /etc/default/bootlogd поправить BOOTLOGD_ENABLE=No на BOOTLOGD_ENABLE=Yes и с комфортом смотреть лог загрузки в файле /var/log/boot

UPD. Последнее я пробовал только в Debian, очень полезная штука, а в Ubuntu, говорят, нормально не работает с тех пор как появилась прогрессивная система загрузки Upstart. Сейчас может и починили, может кто проверить?

Блог: RU Linux

Группы слоев для Gimp

LayerGroups является средством для работы с группами слоев в GIMP . Позволяет создавать группы и подгруппы слоев, основанные на имени слоя. Позволяет скрыть или показать несколько слоев одновременно, удалить их, переименовывать, перемещать группу вверх или вниз в стеке, генерировать внешние файлы (например, PNG, GIF, JPEG и др.) с каждого из слоев группы.

Выбор слоев для группы может быть осуществлен с помощью фильтров, это позволит выбрать слои, которые связаны друг с другом, или содержат конкретные ключевые слова в имени.

LayerGroups содержит встроенную справочную систему, которая работает двумя способами: при наведении курсором на один из пунктов меню вы получите несколько строк справки и инструкций по использованию конкретных функций, или в диалоговом окне, где есть меню с подсказками. Система подготовлена таким образом, чтобы ее можно было легко переводится на другие языки.

Система была тщательно протестирована в рамках проектов, содержащих сотни слоев, где большинство было задействовано большинство из упомянутых функций. Тесты проводились под Windows XP и Vista с Gimp 2.6.6 и в Ubuntu Linux Gimp версии 2.6.6. Чтобы установить скрипт, скопируйте файл mig-gimp-layer-groups.scm в папку со скриптами, затем в GIMP'е выполните Filters-> Script-Fu->Refresh scripts. В меню появится новый пункт "LayerGroups" между "Filters" и "Windows".

Источник: http://registry.gimp.org

Блог: Urza's blog
RSS-материал