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

С Новым Годом!

30 минут и настанет 2010. Чем запомнился Linux и свободный софт в году уходящем?

В университете для преподавания рекурсивно-логического программирования со студентами я теперь использую свободный SWI-Prolog вместо "классического" закрытого Turbo Prolog, некоторые парни сдают задачи в emacs :) Свой курс по веб-программированию в этом году расширил занятием по администрированию LAMP, устанавливал все это дело со студентами в Debian под Virtual Box.

Linux плотно пророс в мозгах и на десктопах сотрудников у меня на работе в Initlab. Были интересные проекты: факс-сервер на базе Debian и открытого софта, использование виртуализации XEN в продакшене, соединение офисов в сеть через OpenVPN.

Стали появляться знакомые пользователи которым на работе поставили линукс и теперь они заваливают вопросами. Специально для них решил завести раздел с вопросами-ответами про Linux на десктопах и рейтингом популярности вопросов, который планирую полезно наполнить в новом году не без помощи читателей блога и посетителей сайта :)

Всех поздравляю! Ушел праздновать :)

Блог: RU Linux

Bye Bye GIMP!

Начиная с Ubuntu 10.04 мы можем больше не увидеть дефолтно установленного Gimp.На собрании Ubuntu Lucid Developer Summit обсуждался вопрос об исключении редактора из списка предустановленных программ. Разработчики считают, что Gimp превратился в слишком мощный инструмент, который не нужен большинству пользователей, а те, кто им пользуется, не переломятся его установить. Сейчас еще не принято окончательное решение и вопрос все еще обсуждается, но, кажется, большинство отписавшихся согласны с тем, что можно заменить Gimp на что-нибудь проще.

Блог: Urza's blog

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
RSS-материал