Управление программным обеспечением в Linux

Сентябрь 26th, 2010 Рубрики: Linux, основы Linux

Установка пакетов linuxДоброго времени, уважаемые гости моего блога www.k-max.name!

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

1. Управление программным обеспечением поставляемым в исходных кодах.

2. Управление программным обеспечением поставляемым в бинарном виде (читай: в готовых пакетах)

Ну что ж, начнем повествование:Если провести аналогию с проприетарной ОС от мелкомягких, то в Линукс есть аналог такого компонента операционной системы, как "Установка/удаление программ", только называется он - пакетный менеджер. Пакетный менеджер представляет собой набор инструментов, выполняющих функции, схожие с аналогом от Windows. Но есть у пакетных менеджеров кардинальные отличия!

Во-первых, в Windows при установке программы, ее (программу) нужно еще найти, а то и приобрести. В Linux все ПО собрано в одном месте, которое называется репозиторий (он же репа, репАзитАрий и др). Репозиторий представляет собой сетевое хранилище всего ПО, предоставляемое данным дистрибутивом Linux/UNIX.

Во-вторых, предположим, Вам нужно установить игрушку на ОС Windows, которая требует для своей работы такой компонент как DirectX. В данном случае может быть 2 выхода: 1. DirectX уже содержится в дистрибутиве установщика, 2. Вам необходимо будет самому найти данный компонент и установить. При обоих вариантах возникает некоторые НО... При первом варианте, возможно, что у вас уже есть установленный DirectX, причем более новой версии, чем идет с игрой. В таком случае может возникнуть конфликт, допустим, если более новый компонент требуется для другой игры. В результате, установка DX старой версии может привести к некорректной работе игры требующей более новую версию DX. (на данный момент это НО не очень актуально, т.к. последние версии установщиков DX корректно обрабатывают свою "версионность", спасибо комментатору Новичок). Другой момент "НО" заключается в том, что необходимо прикладывать усилия для поиска данного компонента.

Вышеописанный пример я привел для того, чтобы подвести Вас к выводу, что пакетный менеджер в Linux лишен данных недостатков. Любое устанавливаемое ПО через систему управления пакетами устанавливается вместе с остальным ПО, необходимым для работы устанавливаемого. Это в Линукс называется зависимостями. И чем совершенней пакетный менеджер, тем грамотней и правильней он отслеживает зависимости.

В репозиториях в большинстве своем храниться только проверенное ПО. То есть ПО, протестированное на конкретном дистрибутиве. Так же необходимо отметить, что у каждого дистрибутива Linux есть свой репозиторий со своей структурой, со своим проверенным ПО. Более подробно о структуре репозиториев можно почитать в документации к дистрибутиву.

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

Но вернемся к нашим носорогам... И зададим себе несколько вопросов. Почему бы не поставлять ВСЕ программы в пакетах (ведь ими так просто управлять)? Почему некоторое ПО предоставляется в исходных кодах, а некоторое поставляется в готовых пакетах? Ответы на данные вопросы - ниже.

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

  1. Вам требуется программа, не входящая в ваш дистрибутив (точнее в репозиторий Вашего дистрибутива).
  2. Вам нужна программа, которая доступна только в виде исходных текстов.
  3. Вам нужна некая функция программы, которая может быть включена только после перекомпиляции программы из исходных текстов.
  4. Вы хотите узнать о том как программа работает или принять участие в ее разработке.
  5. Возможны, конечно, и другие причины :)

1. Управление программным обеспечением поставляемым в исходных кодах.

  •  Установка программ

Управление программным обеспечением в виде исходных кодов на всех дистрибутивах практически не отличается и это управление можно привести к следующей последовательности действий:

  1. Вы скачиваете пакет с исходными текстами/кодами. Скорее всего это будет пакет в виде архива (*.tar.gz или *.tar.bz2 или др.). Скачивание архива будет происходить, скорее всего, командой wget http://адрес.ру/путь/к/архиву.tar.gz.
  2. Скачанный архив необходимо распаковать, как и любой архив, скорее всего, командой tar -xvzf архив.tar.gz. Архив распакуется в подкаталог с именем архив (без .tar.gz). В данную подпапку можно перейти командой cd архивРаспакованные исходники рекомендуется хранить в каталоге /usr/src/.
  3. Далее необходимо установить скачанное программное обеспечение. Тут есть 2 пути:
    1. Если вы знаете, что устанавливаете и как оно устанавливается, то производите установку.
    2. Если Вы первый раз скачали пакет с сорцами (исходниками), то необходимо прочитать документацию об устанавливаемом программном обеспечении. С предоставляемым пакетом всегда идут файлы README, INSTALL или аналогичные, в которых описан порядок установки данного пакета. В общем случае, установка программ из исходников сводится к вводу следующих команд:
         ./configure
         make
         make install

Команда ./configure может выполняться с различными параметрами, в зависимости от устанавливаемого ПО. При выполнении команды с параметрами могут задаваться какие-либо характеристики и особенности компилируемого кода. Весь список параметров в с описанием можно найти, как уже выше говорилось, в файлах README, INSTALL или аналогичных, а так же, выполнив команду с параметром --help. После запуска configure обычно вы видите сообщения, рассказывающие о типе используемой вами системы и о том, какие необходимые инструменты установлены, а какие нет.

По завершении выполнения скрипта configure, он сохраняет информацию о конфигурации в файле с названием config.cache, расположенном в том же каталоге, что и сам скрипт configure.

Если вам необходимо запустить ./configure вновь, то убедитесь, что прежде вы удалили файл config.cache, поскольку configure будет использовать настройки из config.cache, если он существует, не производя повторной проверки вашей системы.

Если все идет хорошо, то к концу процесса конфигурирования вы должны получить созданный Makefile. Он называется сборочный файл проекта, программа с именем make используется для его обработки и сборки программы. Make-файл содержит правила, являющиеся инструкциями, которые сообщают программе make как собирать различные компоненты приложения.

make install устанавливает скомпилированную программу. Фактически, производится копирование необходимых файлов в нужные каталоги. Если вы производите установку в /usr/local, то вам могут потребоваться права суперпользователя (root).

Примечание
Для запуска make и make install необходим установленный компилятор. (пакет gcc)
В Debian вместе с gcc необходимо установить еще некоторые пакеты. Чтобы не запоминать их все, можно установить просто пакет build-essential

Существуют две разновидности программ, собираемых из исходников: использующих статическую компоновку и использующие динамическую компоновку. Статическая компоновка отличается от динамической тем, что при сборке программы со динамической компоновкой используются функции разделяемых библиотек, а при статической компоновке используется собственный экземпляр библиотек. Просмотреть список разделяемых библиотек, от которых зависит исполняемый файл можно командой ldd. При сборке программ использующих библиотеки совместного доступа, к ней добавляется участок кода, вызывающий при запуске программы динамический компоновщик ld.so (/usr/bin/ld), который ищет необходимые библиотеки и подставляет функции библиотек к программе (каталоги поиска библиотек заданы конфигурационным файлом /etc/ld.so.conf).

  • Удаление программ

Для корректного удаления программ, установленных из исходных текстов, есть несколько способов:

  1. ручное удаление всего, что установила программа make install
  2. выполнение команды make uninstall в каталоге с исходниками программы. Тут есть нюанс - не всегда разработчики подразумевают параметр uninstall для команды make, поэтому возвращаемся к первому пункту.

В целом, чтобы не было проблем с удалением программы, ее рекомендуют конфигурировать с ключом  --prefix=/путь/установки, например ./configure --prefix=/usr/local/apache. Если, конечно, скрипт configure поддерживает данный ключ.

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

2. Управление программным обеспечением поставляемым в бинарном виде (читай: в готовых пакетах)

В Linux существует несколько разновидностей систем управления пакетов. Основные из них именуются как RPM, dpkg и Portage. Существуют и другие разновидности пакетных менеджеров, но по моему мнению, они не имеют большого распространения. Как уже выше говорилось, назначение пакетного менеджера (системы управления пакетами), это: управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения.

Итак, расскажу подробней о каждой разновидности. RPM разработана компанией Red Hat, применяется в большей части в дистрибутивах, образованных от Red Hat Linux и используется для управления пакетами *.rpm. Система управления пакетов dpkg (Debian Package) разработана основателем дистрибутива Debian - Яном Мердоком, применяется в дистрибутиве Debian и других, производных от Debian, dpkg управляет пакетами в формате *.deb. Система Portage используется в дистрибутивах Gentoo. Программное обеспечение в Gentoo поставляется в виде нескольких файлов...

Пакетные менеджеры не умеют автоматически разрешать зависимости в устанавливаемых пакетах. Системы пакетных менеджеров лишь отслеживают зависимости. Слово "разрешать" думаю, хорошо будет понятно на примере. Например, при установке какого-либо пакета rpm, зависящего от другого пакета, пакетный менеджер лишь сообщит, что для текущего пакета необходим еще другой, но не предложит автоматически его установить. Для автоматического разрешения зависимостей существуют, так скажем, "надстройки" для пакетных менеджеров, которые автоматизируют отслеживание версий ПО, отслеживание и разрешение зависимостей между пакетами (то есть на примере выше, данная надстройка предложит автоматически установить недостающие пакеты).

Для rpm существуют следующие утилиты:

  • apt-rpm, порт APT, изначально выполненный Conectiva, затем существенно доработанный ALT Linux Team и продолжающий развиваться
  • apt4rpm, порт APT Debian. Рекомендуется для использовании с некоторыми репозиториями Fedora Core. Почти не разрабатывается, но расходует меньше ресурсов процессора, чем те средства, которые перечислены выше. Более поздний проект, нежели apt-rpm.
  • smart, доступен для многих дистрибутивов
  • urpmi, используется в Mandriva Linux
  • YaST, используется в SuSE
  • yum, разработан в Yellow Dog Linux, также используется в Fedora Core и ASP Linux

Для dpkg, преимущественно:

  • apt
  • aptitude
  • dselect

3. Особенности и отличия использования RPM, dpkg и исходных текстов

Как и RPM, так и dpkg возможно установить и на RedHat и на Deb - дистрибутивы, но по моему мнению, это равносильно принципу круглое - носим, квадратное - катаем. И dpkg и RPM очень похожи по своему принципу работы, но все  же в них есть кое какие отличия, например: при установке пакета rpm не устанавливает пакет, пока не будут разрешены все зависимости, deb - устанавливает, но говорит, что пакет установлен, но работать не будет, пока не будут установлены все зависимости.

Любой пакетный менеджер хранит информацию о зависимостях пакетов в своей базе (например RPM - в /var/lib/rpm), соответственно, если какое-то ПО было установлено НЕ из пакетного менеджера, то информации о нем нет в базе данных, соответственно, при установке пакета, который (пакет) зависит от ПО установленного, например, из исходных кодов, будет выдана ошибка об отсутствии зависимого пакета (хотя он установлен). Для решения данной проблемы необходимо использовать ключ --nodeps, который отключает отслеживание зависимостей (актуально для RPM).

В общем случае я бы посоветовал пользоваться ИЛИ пакетным менеджером и соответствующими инструментами ИЛИ собирать все ПО из исходников. Но второй вариант, по моему мнению, разумен только при использовании строго ограниченного набора программ на сервере, иначе, обновление из исходников станет основным развлечением для системного администратора, потому что на остальные задачи просто не останется времени.

4. Основные команды управления программами

Команды управления программным обеспечением приведены в статье основные команды Linux.

Теперь опишу краткий список команд по работе с пакетными менеджерами:

dpkg rpm
Установка пакета
dpkg -i Имя_deb_Пакета
или
apt-get install Имя_deb_Пакета
-s
- симуляция установки
rpm -ivh путь.к.пакету
-v - отображение сообщений при установке
-e - переустановка (удаление перед установкой)
--force - принудительная установка (без разрешения зависимостей)
--nodeps - Не выполнять проверку зависимостей перед установкой или обновлением пакета.
Обновление RPM пакетов
rpm -Uvh имя_пакета
Удаление пакета
dpkg -r имя_пакета
или
apt-get remove имя_пакета
rpm -e имя_пакета
Информация о пакете
dpkg -s имя_пакета rpm -q имя_пакета - краткая информация о пакете имя_пакета
-qi - полное инфо о пакете имя_пакета
Список файлов в пакете
dpkg -L имя_пакета rpm -ql имя_пакета
Какой пакет содержит файл
dpkg -S /путь/к/файлу
Список установленных пакетов
dpkg -l [маска] rpm -qa
Поиск пакетов
apt-cache search имя
Требования к устанавливаемому пакету
rpm -qR имя_пакета
Целостность пакетов
rpm --checksig имя_пакета
rpm -V имя_пакета - целостность установленного пакета

На сегодня все, более полный список команд тут. До новых встреч!

upd 2011.02.03: переработка статьи, дополнение 3 и 4 раздела
upd 2012.06.08: дополнение 1 раздела (информация об удалении ПО)

С Уважением, Mc.Sim!




Теги: , , , , , , , , ,

15 комментариев к “Управление программным обеспечением в Linux”

  1. Clem
    Январь 13th, 2011 at 17:46
    1

    Помог, спасибо))

    • Январь 13th, 2011 at 17:55
      2

      На здоровье! Приходи еще! :)

  2. Июнь 21st, 2011 at 20:56
    3

    Хотелось бы увидеть из такого авторитетного источника, как Ваш сайт статейку, о сборке deb пакетов из исходников. Только не как maintainer, а для себя. В частности сборке пакетов на машине с amd64 для i386 (сборка ядра, например на десктопе для нетбука).

    • Июнь 22nd, 2011 at 12:56
      4

      Спасибо за комментарий и за

      авторитетного источника, как Ваш сайт

      :) По поводу сборки пакетов из исходников — отмечено. Опять же, при наличии свободного времени :)

  3. apelmon
    Октябрь 18th, 2012 at 19:51
    5

    Спасибо Вам! Вот взял и тупо прочитал весь Ваш блог — настолько Вы круты!
    Грамматическую ошибочку нашел: «координальный» — нет такого слова. Правильно:кардинальный

    • Октябрь 19th, 2012 at 10:37
      6

      Спасибо за отзыв и за замечания.

  4. Новичок
    Январь 11th, 2013 at 19:19
    7

    нормально написал

  5. Новичок
    Январь 11th, 2013 at 19:21
    8

    Но этот часть текста, неправильна.
    Старый DX поверх нового не устанавливается, пишется сообщение «обновление не требуется».
    ===
    При первом варианте, возможно, что у вас уже есть установленный DirectX, причем более новой версии, чем идет с игрой. В таком случае может возникнуть конфликт, допустим, если более новый компонент требуется для другой игры. В результате, установка DX старой версии может привести к некорректной работе игры требующей более новую версию DX.
    ===

    • Январь 22nd, 2013 at 19:31
      9

      Да, на данный момент эта фраза уже не очень актуальна. Но пару лет назад смело можно было наблюдать такую ситуацию )

    • Январь 22nd, 2013 at 19:35
      10

      подправил текст )

  6. Май 5th, 2014 at 20:43
    11

    очень отличная статья, очень развернутая, давно не встречал такой полноты вопроса, но все же… даже этого как оказалось не достаточно. я как опытный пользователь (извините за нескромность) старой доброй винды, решил вот перейти на линуху. и для начала выбрал убунту 13.10. почему её, не знаю, вообще ничё не знаю про линукс, вот и выбрал что выбрал. установил, вроде как все клёво, попробовал, круть, все такое новенькое, отошел от ейфории, надо устанавливать по. первое хром, заинсталился сам, через какуюто панель, по ходу этот пакетный менеджер, вторым инстальнул какой-то эквалайзер вроде, или микшер, нашел его на каком то сайте где все четко описано что делать, там узнал что консоль запускать комбинацией Alt+Ctrl+T, и там же три строчки с командами для установки:
    sudo add-apt-repository ppa:nilarimogard/wbupd8
    sudo apt-get update
    sudo apt-get install
    ничего ни от куда не качал, эти три строчки сделали все сами. потом столкнулся что не читает виде о и аудио, надо инсталить плееры, нашел, там пишут скачать файл, и ввести те же три строчки. скачал, файл с расширением .deb, опять те же три строчки, пишет ошибку что пакет не найден, и пишет что на диске Е: не найден, ну понятно, там нет этого файла я его скачал на диск Д:, но вот беда, на диске Е: установлена убунту, и его одного она как раз и не видит. логика винды подсказивает мне что нужно писать полный путь к файлу, но вот незадача, система команд тут отличная от системы команд дос, соответственно система указания путей может быть так же отличной от дос. обрыл интернет, нет толкового описания команд, и как ими пользоватся правильно и какие параметры у них, только все в кратце. методом научного тыка пробовать как будет убунту реагировать на мои глупые попытки ей что то обяснить, лень, нет времени и вообще не хочу смахивать на лоха даже в собственных глазах. вот такая вот исповедь :( может автор подскажет где можно нарыть нужную инфу. толко литература из серии «для чайников», с нудным разжовыванием половины того что я и так знаю, меня не интересует, мне бы что то вроде глоссария с расширенным толкованием. вот как то так %)

    • Июнь 24th, 2014 at 20:12
      12

      Могу порекомендовать для начала курсы Евгения Коноплева — fasttech.ru. Очень доходчиво для начинающего. Статьи на моем блоге, наверно, стоит читать после ознакомления с его курсами.

  7. Сергей
    Январь 30th, 2016 at 20:43
    13

    У меня установлена программа Crossover я хочу ее удалить так вот я не понял из вашей статьи как мне это сделать. Слишком много написано. В Винде я за 10 минут удалю любую программу и следа не оставлю. И почищу все. Линукс без интернета ни кому не нужен, даже с русским языком проблемы. Я даже не знаю что скачать чтоб у бабули в деревне комп переделать. Какие программки на флешку сбросить.

    Основные команды управления программами — это совсем задница зачем они нужны. Нельзя управлять программами с помощью мышки?

    1. Управление программным обеспечением поставляемым в исходных кодах.

    2. Управление программным обеспечением поставляемым в бинарном виде

    что это такое и кому это нужно. Здесь все так не просто. Еще этих линуксов миллиард и линуксойды срутся между собой чей лучше.

    • Август 3rd, 2016 at 23:02
      14

      Я вообще не сторонник ставить линукс на десктоп )

  8. Сергей
    Январь 30th, 2016 at 20:46
    15

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

    *HELP* *HELP* *HELP* *HELP*

Написать комментарий