Сергей Акимович Яремчук
200 лучших программ для Linux

dgurski@minsk.piter.com (издательство «Питер», компьютерная редакция).
   Мы будем рады узнать ваше мнение!
   На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

http://www.gnu.org/home.ru.html) дано пояснение английского слова free. По их мнению, программное обеспечение – это предмет свободы, а не цены, и, чтобы понять идею, свободное программное обеспечение не нужно ассоциировать с бесплатным мороженым, то есть свободное не обязательно должно быть бесплатным. Свободное программное обеспечение позволяет пользователям свободно запускать, копировать, распространять, изучать, изменять и улучшать программное обеспечение. Более точно это раскрыто в четырех типах свободы для пользователей программного обеспечения:
   • свободно запускать программы для любых целей (свобода 0);
   • свободно изучать, как работает программа, и иметь возможность свободно адаптировать ее под свои нужды (свобода 1); доступ к исходным кодам является непременным условием;
   • свободно распространять копии, чтобы помочь тем, кто интересуется свободным программным обеспечением (свобода 2);
   • свободно улучшать программы и делать улучшения доступными для других; из этого извлекает пользу все сообщество (свобода 3); доступ к исходным кодам является непременным условием.
   Такой подход дает программисту простоту и быстроту разработки. Он использует уже готовые компоненты, не вникая в суть их работы, и создает новый продукт.
   Каждый улучшает только свою часть продукта. Так, в Linux очень много консольных утилит. Начинающему пользователю непросто освоить все параметры командной строки, ему удобнее, чтобы программа имела понятный и легкий в освоении графический интерфейс. Программист же не создает новый продукт, он берет все консольные утилиты и пишет к ним графическую надстройку – фронт-энд (front-end), который скрывает от пользователя особенности работы консольных программ, часто добавляя новую функциональность. Например, популярный консольный видеопроигрыватель MPlayer имеет несколько таких надстроек – Kplayer, KMplayer, smplayer, Freevo и другие.
   Однако чтобы такая программа заработала, необходимо установить все остальные компоненты и библиотеки, которые она использует. Например, для популярной утилиты записи дисков K3B потребуется установить 48 библиотек и программ (рис. 1.1).
   Рис. 1.1. Список зависимостей пакета K3B
 
   Такие пакеты называются зависимостями. Большинство из них, вероятно, уже есть в системе, но если не будет хотя бы одного, то установить программу будет проблематично либо после установки она не будет иметь полную функциональность.
   Зависимости бывают двух видов:
   • жесткая (hard): обязательная, без нее программа, скорее всего, не будет работать;
   • мягкая (soft): рекомендуемая, без нее программа работать будет, но, установив такой пакет, можно добавить приложению функциональность (например, работу с некоторым форматом файлов).
   Именно поэтому, скачав всего один пакет, установить программу часто не получается.
   Есть еще одна проблема, о которой необходимо знать. В отличие от Windows, релизов которой не так много, дистрибутивов Linux огромное количество. Они отличаются не только названием, так как Linux – это только ядро, разрабатываемое под руководством Линуса Торвальдса, а все остальное – это что-то вроде набора «Сделай сам». Эти наборы хороши, но часто не только не совместимы между собой, но и для каждой новой версии одного и того же дистрибутива потребуется специально собранный пакет. Не будем вдаваться в подробности, тем более что не все так плохо, так как в популярных решениях используются пакетные системы, скрывающие такие особенности, но об этом просто нужно знать.

http://www.gentoo.org/), в котором применена аналогичная система портежей (portage).
   Примечание
   Дистрибутив Gentoo (произносится как «дженту») был назван в честь пингвина Pygoscelis papua, которому принадлежит рекорд скорости плавания (27 километров в час), что выражает основные свойства дистрибутива.
   Дистрибутив Gentoo можно полностью собрать самостоятельно либо использовать минимальную систему, в которую затем добавлять программы. Для установки приложений с помощью портежей вначале необходимо скачать и распаковать в каталог /usr снимок дерева портежей.
   $ wget –c http://adelie.polymtl.ca/snapshots/portagelatest.tar.bz2
   $ tar -xvjf portage-latest.tar.bz2 -C /usr
   В дальнейшем следует периодически (не чаще раза в сутки) обновлять дерево портежей командой:
   # emerge –sync
   Пользоваться портежами просто. Например, чтобы найти пакет, в котором содержится слово pdf, выполняется такая команда:
   $ emerge –search pdf
   Выбираете по описанию то, что нужно, и устанавливаете, используя имя пакета:
   # emerge gnumeric
   Для загрузки только исходного кода без установки пакета выполняется:
   # emerge –fetchonly gnumeric
   Удаляется пакет также просто:
   # emerge –unmerge gnumeric
   Настройка оптимизации Gentoo производится в переменных (CHOST, CFLAGS, CXXFLAGS и USE) в файле /etc/make.conf. Для более детальной настройки необходимо посмотреть некоторые значения в файлах /etc/make.globals, /etc/make.profile/make.defaults и переопределить их в /etc/make.conf.
   В первую очередь это переменная USE. Смысл ее заключается во включении и выключении различных параметров, которые обычно используются при конфигурировании командой ./configure при обычной компиляции программы из исходных текстов, то есть –enable/disable или –with/without. Например, закомментированная переменная USE такого содержания
   USE="X gtk gnome -alsa"
   соответствует
   ./configure –with-x –with-gtk –with-gnome –without-alsa.
   Строка CHOST='i686-pc-linux-gnu' указывает на используемую архитектуру. Все современные процессоры соответствуют данному описанию; если у вас более ранняя модель вроде Pentium Pro, измените ее на меньшую (i586, i486 или i386). С помощью CFLAGS компилятору сообщается, какой процессор используется и какой требуется уровень оптимизации, после чего компилятор в соответствии с установленной моделью собирает пакеты под указанную модель процессора:
   CFLAGS="-march=pentium4 -O3 -pipe "
   Примечание
   Для получения информации о процессоре введите cat /proc/cpuinfo.
   Можно использовать флаг -mcpu=, который оптимизирует программу под указанный процессор без потери совместимости с другими процессорами. Флаг -march= требует более осторожного обращения, так как оптимизированная с ним программа будет работать только на указаном процессоре без совместимости с более старыми типами, однако при этом будет достигнута максимальная производительность.
   Более подробно о параметрах make.conf можно почитать в документации Gentoo (http://www.gentoo.org/doc/en/handbook/handbook-x86.xml, русский перевод – http://www.gentoo.org/doc/ru/handbook/).
   В Gentoo есть и прекомпилированные пакеты – пакаджи (англ. package – «пакет»), которые пользователь может собрать самостоятельно, используя ключи –buildpkg или –buildpkgonly при выполнении команды emerge. После этого собранный пакет устанавливается командой:
   # emerge –usepkg –getbinpkg gnumeric
   Пакаджи официально не поддерживаются, но их удобно использовать в случае, когда необходимо установить программу, которая долго компилируется на несколько компьютеров.
   Gentoo – это не единственная подобная система. Система портов используется в дистрибутивах CRUX, Archlinux, Sorcerer и SourceMage, в которых она сосуществует с развитыми средствами пакетного менеджмента.

Пакетные системы

   Рассказ о системах управления пакетов может занять продолжительное время – на сегодня существует около 20 различных систем с вариантами. Практически каждый дистрибутив имеет свои особенности, исключений здесь больше, чем правил. Это вносит путаницу и не способствует большей популярности Linux, но обычно достаточно выбрать свой дистрибутив и освоить принятую в нем систему установки. Средства управления пакетами можно разделить на две категории:
   • менеджеры пакетов, предназначенные непосредственно для управления прекомпилированными программами;
   • системы управления репозитариями пакетов, являющиеся надстройкой над пакетными менеджерами, позволяющие автоматизировать установку, обновление, удаление программ и сборку пакетов.
   Менеджеры пакетов, в первую очередь, отличаются форматами пакетов. Ранее в Linux существовало три основных формата пакетов:
   • rpm – формат, изначально принятый в дистрибутиве RedHat, сегодня применяется в его многочисленных потомках и других дистрибутивах (Fedora, Mandriva, ALTLinux и других);
   • deb – формат пакетов, появившийся в дистрибутиве Debian и производных, самым известным из которых является Ubuntu;
   • tar.gz – формат пакетов, появившийся в дистрибутиве Slackware.
   Сегодня этот список значительно шире. Первые два типа содержат информацию, в которой указаны зависимости этого пакета. Пакеты tar.gz (по сути, это обычные архивы) таких данных не содержат, поэтому пользователи Slackware вынуждены самостоятельно заботиться о зависимостях. Хотя отсутствие информации о зависимостях абсолютно не препятствует контролю над ними. Это можно возложить на внешние программы, а управление такими пакетами часто оказывается даже более гибким, чем теми, в которых такая информация имеется.
   Для управления каждым типом пакетов используется своя программа. При установке с их помощью приложение создаст необходимые каталоги, распределит по ним файлы и поставит нужные ссылки. Программы используются не только для установки нового пакета, но и для обновления, получения списка установленных пакетов и информации о них, а также для деинсталляции пакетов, если в них отпала необходимость.
Установка пакетов
   Для установки rpm-пакетов используется одноименная консольная утилита. Сам пакет имеет такой формат: – smplayer-0.5.29-alt1.i586.rpm, где:
   • smplayer – название программы;
   • 0.5.29 – версия программы;
   • alt1 – необязательное поле, показывающее дистрибутив, для которого собран этот пакет (это очень важный параметр, так как пакет, собранный для другого дистрибутива или другого релиза одного и того же дистрибутива, может не работать в вашем; в данном примере это AltLinux, для Fedora 7 здесь будет указано fc7, для Mandriva 2008.0 – mdv2008.0; если этого поля нет, возможно, пакет универсален и подходит для всех дистрибутивов, использующих RPM);
   • i586 – показывает, под какой тип процессора собран этот пакет: для 64-битных систем будет указано x86_64, а если в пакете находятся исходные тексты, которые затем нужно будет компилировать, то src.
   Частично такой подход используется и в других пакетных форматах, поэтому далее рассматриваться не будет.
   Синтаксис использования rpm при работе из командной строки следующий:
   rpm [параметры] название_пакета(ов)
   В качестве параметров здесь используется один или несколько флагов, указывающих, что нужно сделать с пакетом. С флагами разберемся по порядку. При необходимости установить пакет выполните следующую команду:
   # rpm -i package_name
   Примечание
   Не забывайте про автодополнение имен файлов и команд, работающее при нажатии клавиши Тав, – это уменьшает количество ошибок и ускоряет ввод длинных имен файлов.
   В случае если пакетов в каталоге много, проще воспользоваться маской. Например, набрав rpm -i perl*, вы установите все программы, чье название начинается с perl. Флаг -i не дает отображения информации о ходе установки. Флаги -v и -h служат для индикатора процесса выполнения. Теперь команда для установки выглядит так:
   rpm -ivh package_name
   В случае если такой пакет уже установлен, вы получите сообщение об этом и установка прервется – тогда нужно использовать ключ -U (–upgrade).
   # rpm -Uvh package_name
   Примечание
   Для получения информации обо всех параметрах любой консольной команды Linux используйте ключ –help.
   Бывают ситуации, когда пакет не устанавливается. Причины могут быть разные; если при переинсталляции пакета система не хочет устанавливать его заново или не хватает библиотек, воспользуйтесь параметром –force. Правда, его использование может привести к тому, что данная программа не будет работать или могут повредиться важные файлы, поэтому рекомендуется сначала разобраться, а потом устанавливать пакет таким способом. Для удаления пакета воспользуйтесь командой rpm -e package_name (при этом достаточно указать только имя (например, xmms), и он будет удален). Как и при установке, параметр -v (а лучше -vv) покажет процесс удаления пакета, а если есть необходимость в безоговорочной деинсталляции, то есть несмотря на наличие в системе пакетов, зависящих от данного, воспользуйтесь дополнительно параметром -nodeps. Для получения информации обо всех установленных в системе пакетах наберите rpm -qa, а об отдельном пакете – rpm -q package_name. Наиболее полную информацию вы сможете получить, набрав rpm -qpi, а список файлов, которые установит пакет, можно посмотреть при помощи команды rpm –qpl.
   Примечание
   Многие операции можно проделать с помощью файлового менеджера Midnight Commander: установив курсор на файл и нажав F3 (просмотр), вы увидите информацию о пакете; зайдя в пакет, нажав клавишу Enter и выбрав файл INSTALL, можно установить выбранный пакет.
   Последний рассматриваемый режим работы программы rpm – проверка целостности пакета. Для этого нужно ввести rpm -V package_name, а для проверки всех пакетов в системе – добавить -a.
   Для установки пакета не обязательно работать в командной строке: в сегодняшних дистрибутивах система установки интегрирована в графические среды, и, чтобы установить скачанный пакет, достаточно выбрать в контекстном меню пункт вроде Открыть в Software Installer (так он называется в Mandriva Linux).
   Все программы управления пакетами Slackware находятся в пакете pkgtools. Для его установки выполняется такая команда:
   # installpkg package_name.tgz
   Обратите внимание, что пакеты для Slackware имеют расширение архива, созданного утилитой tar и сжатой bzip, и, по сути, им и являются. При этом пакет устроен таким образом, что может быть развернут в корневом каталоге файловой системы.
   Для модернизации и удаления пакетов применяется соответственно upgradepkg или removepkg. При вводе pkgtool вы получите графический интерфейс к этим утилитам (рис. 1.2).