Менеджеры пакетов в системах linux. Установка программных пакетов в Linux для начинающих

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

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

Для получения такой информации в Ubuntu есть несколько способов. Это стандартная утилита dpkg, которая работает только с существующими файлами, а также инструмент apt-file, позволяющий получить название программы зная имя исполняемого файла. Подобные инструменты есть и для других дистрибутивов.

Узнаем какому пакету принадлежит файл в dpkg

Для того чтобы узнать какому пакету принадлежит файл dpkg имеет опцию -S, правда, выведено будет только имя пакета и адрес файла, например:

dpkg -S /usr/bin/cloud

mail.ru-cloud: /usr/bin/cloud

Теперь если хотим получить информацию о пакете, используем опцию -s:

dpkg -s mail.ru-cloud

Или объедением эти команды:

dpkg -S /usr/bin/cloud | awk -F: "{print $1}" | xargs dpkg -s

Package: mail.ru-cloud
Status: install ok installed
Priority: extra
Section: net
Installed-Size: 70000
Maintainer: Mail.Ru Group
Architecture: amd64
Version: 15.05.0235-appind
...

Как узнать имя пакета по файлу в apt-file

Утилита apt-file не является стандартной для системы Ubuntu, поэтому сначала ее нужно установить:

sudo apt-get install apt-file

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

sudo apt-file update

Теперь можно использовать:

apt-file search /usr/bin/sshd

Узнаем какому пакету принадлежит файл в rpm

В системах на базе Red Hat Linux тоже можно выполнить аналогичное действие. Здесь вместо dpkg используется консольная утилита rpm. Для получения информации о пакетах используется опция -q, если комбинировать ее с опцией -f и передать адрес файла, мы сможем узнать какому пакету принадлежит файл:

coreutils-8.22-4.1.x86_64

Хотите более подробной информации о пакете, добавьте опцию -i:

rpm -qif /bin/ls

Name: coreutils
Version: 8.22
Release: 4.1
Architecture: x86_64
Install Date: Чт 29 окт 2015 22:25:10
Vendor: openSUSE
URL: http://www.gnu.org/software/coreutils/
Summary: GNU Core Utilities

Пакетный менеджер yum, используемый в системах, основанных на Red Hat, тоже умеет искать пакеты по файлу, для этого есть команда whatpovides:

yum whatprovides /bin/ls

Какому пакету принадлежит файл в ArchLinux

ArchLinux использует собственный менеджер пакетов, очень сильно отличающийся от описанных выше. Но здесь тоже можно сделать то, что нам нужно. Для этого есть опция -Qo:

pacman -Qo /usr/bin/pkgfile

/usr/bin/pkgfile is owned by pkgtools 18-1

Но этот способ работает только для установленных пакетов, если пакет не установлен, можно использовать утилиту pkgfile. Она не поставляется по умолчанию, но ее можно установить:

sudo pacman -S pkgtools

Теперь посмотрим какому пакету принадлежит /bin/evince:

Теперь вы можете узнать из какого пакета можно получить нужную вам программу.

Поиск пакета по файлу в Gentoo

Еще один интересный дистрибутив со своеобразной системой работы с пакетами. Здесь пакеты поставляются в виде исходных кодов и скриптов для сборки. Найти пакет по файлу вы можете с помощью утилиты equery, передав ей параметр b. Например:

equery b /usr/bin/qtconfig

x11-libs/qt-qt3support-4.6.2 (/usr/bin/qtconfig)

Такой способ работает только для установленных пакетов. Из-за специфики дистрибутива для не установленных пакетов способа поиска не существует.

Выводы

Теперь вы знаете как понять какому пакету принадлежит файл в любом из самых популярных дистрибутивов Linux. Во всех дистрибутивах, основанных на Ubuntu и Debian, работает dpkg, для RPM-based дистрибутивов подходит утилита rpm. А два остальных менее популярных, но очень интересных мы рассмотрели отдельно. Если у вас остались вопросы, спрашивайте в комментариях!

В данной статье я бы хотел рассмотреть список различных перспективных и интересных дистрибутивов GNU/Linux на 2018 год. Список составлен на основе МОИХ взглядов и предпочтений, которые могут отличаться от ваших. Данная статья составлена на основе актуальных и востребованных тем.

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

Десктопные

Десктопные дистрибутивы GNU/Linux предназначены для использования как на домашних ПК, так и на ноутбуках, и на офисных компьютерах. Основным отличием десктопа от сервера является наличие DE(Desktop Environment) – окружения рабочего стола. Я постарался подобрать самые удобные и интересные, на мой взгляд, дистрибутивы:

Q4OS

Q4OS – Дистрибутив Linux, использующий окружение рабочего стола TDE(Trinity Desktop Environment), которое в свою очередь является форком KDE 3. Данный дистрибутив основан на Debian. Он имеет как и x86_64 редакцию, так и i386. Основной задачей проекта является обеспечение внешнего вида системы похожим на интерфейс Windows xp. У данной системы довольно низкие системные требования, а именно: Pentium 300MHz CPU / 128MB RAM / 3GB disk. Так же имеются специальные редакции для микрокомпьютера Raspberry Pi, Pine64 и Pinebook.

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

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

Скачать данную систему вы можете с .

Linux Mint

Linux MInt – дистрибутив, основанный на Ubuntu, которая в свою очередь основана на Debian. Забавно выходит(Существует так же ). Данная система поддерживает как x86_64, так и i386 архитектуры. Официально поддерживаются следующие окружения: Cinnamon(Изначально разрабатывался командой программистов Linux Mint), MATE, Xfce, KDE. Более легковесными являются редакции на MATE и Xfce.

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

Antergos

Antergos – дистрибутив GNU/Linux, построенный на базе ArchLinux. Он отлично подойдёт людям, которые хотят попробовать Arch, но боятся ковыряться в терминале. Для установки предлагается на выбор одна из следующих оболочек: Base(просто терминал), Cinnamon, Deepin, GNOME, KDE, MATE, Openbox и Xfce. Выбор довольно велик, учитывая что вы можете поставить чистый терминал и установить оболочку, которой нет в списке, руками. Так что системные требования тоже довольно сильно варьируются.

В комплекте с дистрибутивом сразу идёт пакет иконок Numix. Так же при установке системы вы можете выбрать, какие компоненты будут дополнительно установлены(Браузеры, AUR, ядро LTS, драйвера на Bluethooth и принтеры).

openSUSE

openSUSE – так же довольно старый дистрибутив. На данный момент его владельцем является корпорация Novell inc. Дистрибутив активно используется во всём мире. Старые версии (S.u.S.E Linux) были основаны на Slackware, однако сейчас это обособленный дистрибутив. Новая версия дистрибутива выходит каждые 12 месяцев.

В качестве пакетного менеджера выступает Zypper, формат пакетов, соответственно, *.rpm.

Официально

Скачать дистрибутив вы можете на . (Так же имеется редакция для Raspberry Pi & & ).

Для пентеста

Тест на проникновение – метод оценки безопасности отдельных компьютеров или целых сетей. Я не включил в данный топ Kali Linux, так как считаю его слишком захламлённым. На мой взгляд, приведённые ниже дистрибутивы являются одними из самых перспективных в этом направлении.

BlackArch Linux

BlackArch – Дистрибутив GNU/Linux, предназначенный для тестирования безопасности. Он построен на базе Arch Linux, что понятно из названия. При установке на выбор можно поставить один из предлагаемых оконных менеджеров, либо оставить чистый терминал.Его можно использовать как live систему, в виртуальной машине, установить на компьютер, или же имеется возможность уже установленный Arch превратить в BlackArch(подробнее на оф. сайте *eng). BlackArch имеет в запасе огромнейшее количество утилит для пентеста.

В качестве пакетного менеджера выступает pacman.

Скачать готовый дистрибутив можно с .

Parrot Security OS

Parrot Security OS – дистрибутив, сделанный на базе Debian. Поставляется с окружением рабочего стола MATE. Данная ОС имеет в своём наборе довольно большое количество для тестирования системы на проникновение. Он разрабатывается командой Frozenbox. Так же должное внимание было уделено внешнему виду дистрибутива.

Поддерживаемые архитектуры: i386, x86_64, ARM(Raspberry Pi, Orange Pi, Pine64).

Загрузить систему вы можете с .

Wifislax

WiFiSlax – это дистрибутив GNU/Linux на основе Slackware. Имеет возможность запуска в Live режиме. Он предназначен для аудита безопасности сетей. Wifislax включает в себя длинный список инструментов для пентеста. Дистрибутив поставляется с окружением рабочего стола Xfce.

Так как это Slackware, все дополнительные пакеты придётся собирать вручную.

Поддерживается только x86_64 архитектура.

Subgraph OS

Subgraph OS – дистрибутив Linux, основанный на Debian. Ключевая идея проекта – запуск пользовательских приложений в изолированных песочницах. Так же весь трафик приложений пропускается через Tor. В качестве DE опять выступает GNOME. Не смотря на все изменения внесённые в дистрибутив, работа с данной ОС практически ни чем не отличается от любого другого дистрибутива GNU/Linux.

В качестве пакетного менеджера выступает apt & apt-get, формат пакетов, соответственно, *.deb.

Поддерживается только x86_64 архитектура.

QUBES OS

QUBES OS – дистрибутив Linux, основной задачей которого является безопасность пользователя через изоляцию. Виртуализация осуществляется с помощью Xen. Графическая оболочка здесь – KDE. Так как многие дистрибутивы, цель которых безопасность пользователя, мало внимания уделяют внешнему виду, хотел бы обратить внимание, что QUBES OS довольно красив.

Приложения в QUBES OS устанавливаются и работают из шаблонов, поэтому привязки к пакетным менеджерам здесь нет(например для установки приложений из Fedora используется yum, а из WHOINIX – apt).

Поддерживается только x86_64 архитектура.

Легковесные

Данный раздел довольно акутален. Ведь я думаю у многих есть старый и слабый ноутбук или компьютер (у меня вообще IBM на Pentium II есть =)). А есть просто те, кто привыкли экономить каждый мегабайт). В общем, я постарался собрать в этом разделе самые интересные и перспективные в данном направлении дистрибутивы.

Puppy Linux

Puppy Linux – дистрибутив, который имеет редакции на Ubuntu и Slackware(есть неофициальные форки основанные на других дистрибутивах, например на Arch). Данная ОС пытается быть максимально компактной и не требовательной. Её разработал профессор Барри Каулер, который сейчас на пенсии. Дистрибутив назван в честь щенка профессора. В качестве графической среды используется оконный менеджер JWM. В основном данный дистрибутив расчитан на загрузку с флэшки в оперативную память, но так же есть возможность установить его и на жёсткий диск.

Для установки приложений здесь используется отдельная графическая утилита.

Поддерживаемые архитектуры: i386, ARM(Есть версия для Raspberry pi).

Загрузить образ системы вы можете на .

Tiny Core Linux

Tiny Core – минималистичный дистрибутив Linux, цель которого обеспечение полноценной ОС при минимальном размере и низких системных требований. Дистрибутив выделяется своим ну очень уж маленьким весом(Core – 11MB, TinyCore – 16 MB, CorePlus – 106 MB). Ведущий разработчик – Роберт Шингледекер. Для облегчения дистрибутива вместо полноценного X-сервера в нём используется облегчённая версия Xvesa.

Программное обеспечение можно устанавливать через менеджер пакетов AppBrowser.

Поддерживаемые архитектуры: i386, x86_64, ARM.

Скачать дистрибутив можно с .

ArchBang

ArchBang – дистрибутив, созданный на базе Arch Linux. Его основной задача – дать пользователям упрощённую в установке и готовую к работе версию, при этом соблюдая все основные принципы Arch. В качестве рабочего окружения здесь выступает оконный менеджер Openbox. Да, этот дистрибутив не такой легковесный как 2 предыдущих, но он имеет более широкую функциональность. На данный момент разработчиком является Стэн МакЛарен.

Для управления программным обеспечением используется пакетный менеджер pacman.

Поддерживается только x86_64 архитектура.

Загрузить образ вы можете с (Имеется 2 редакции. Первая на systemd, вторая на openrc).

Для гиков

Ну или как сказал мой знакомый: “Не для гиков, а для красноглазых, бородатых, пузатых пингвинов” =). Дистрибутивы, которые будут приведены ниже, являются одними из самых тяжёлых для новичков.

Arch Linux

Arch Linux – независимый GNU/Linux дистрибутив общего назначения. Оптимизирован для платформы i386. Поставляется без какого либо WM, а уж тем более DE. Установка производится “руками” из терминала. Кто-то скажет, что это не самый сложный дистрибутив, но всё таки для большинства новичков он тяжёл в освоении. Как вы могли заметить, я не раз в статье упомянул ОС на базе Arch, так как он является моим любимым дистрибутивом.

В качестве пакетного менеджера выступает pacman. Но в нём содержится довольно маленькое количество программ. Чтобы это исправить, вы можете добавить AUR(Arch User Repository), которым можно управлять через yaourt, например.

Скачать последнюю версию можно с .

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

Так же имеется не официальный порт .

Gentoo Linux

Gentoo – дистрибутив GNU/Linux отличительной особенностью которого является оптимизация под конкретное оборудование. Считается наиболее сложным, так как большинство компонентов системы пользователю необходимо собирать самому. Частота обновления релизов ~ раз в неделю. За счёт гибкости системы вы можете настроить её хоть как сервер, хоть как рабочую станцию. В общем, вы можете сделать с этим дистрибутивом довольно многое, главное иметь терпение и опыт =).

Менеджеры пакетов: portage & pkgcore & paludis.

Поддерживаемые архитектуры: x86_64, i386, alpha, ARM, hppa, ia64, ppc, sparc(И эксперементально s390, sh).

Скачать Gentoo Linux нужной версии вы можете с .

LFS

Linux From Scratch – книга описывающая процесс сборки своего дистрибутива операционной системы на базе Linux из исходных кодов. Да-да, это книга, или как его ещё называют “бумажный дистрибутив”. Вы можете делать вообще всё что вам вздумается, если сможете… Какие пакеты будут включены в вашу систему решаете только вы. Главным автором является Герард Бикманс. Рекомендуется для ознакомления всем, от новичков до заядлых Linux-оидов. Хотя и не многие смогут собрать свой дистрибутив, но для общего развития стоит прочитать.

По поводу управления пакетов. Вы всё собираете “руками”. Есть даже инструкция как apt приделать.

Архитектура? Под какую будете собирать, на той и заработает(инструкция идёт под i386, но если сможете, можете хоть по ARM).

Скачать книгу LFS и другие, связанные с ней, можете на .

Выводы

В данной статье мы рассмотрели самые перспективные и актуальные, на мой взгляд, дистрибутивы на 2018 год. В конце хотел бы выделить, каким дистрибутивам и из какой категории я бы отдал предпочтение: Десктоп – Q4OS, Сервер – CentOS, Для пентеста – BlackArch Linux, Для обеспечения безопасности – Subgraph OS, Легковесные – Puppy Linux, “Для гиков” – Arch (для личного использования) и LFS (для изучения).

Ещё на сайте:

Лучшие дистрибутивы Linux 2018: десктопные, серверные, для пентеста, для безопасности, легковесные, для гиков. обновлено: Март 12, 2018 автором: linok9757

Пригодная для работы пользователя система состоит из множества (сотен и тысяч) программ и утилит. В Linux каждый компонент системы представлен в виде пакета . Все операции, связанные с изменением состава системы: установка, удаление, проверка, обновление компонентов, - производятся над пакетами. В целом, пакет - это средство сделать так, чтобы пользователь-администратор, изменяя или обновляя программное наполнение системы, работал не с файлами (имена которых ему подчас неизвестны), а с определёнными функциональностями самой системы: например, добавлял в неё не «500 файлов», а «WWW-сервер apache ».

Архив файлов

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

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

Файловый архив Дерево каталогов, представленное в виде единого файла, состоящего из содержимого всех файлов в этом дереве и информации об имени и атрибутах каждого файла.

Нет жёсткого требования, чтобы один пакет содержал только одну программу. В пакет естественно объединять такие ресурсы, с которыми удобно работать как с одним целым. Это может быть отдельная программа или набор утилит (например, coreutils , основные утилиты, унаследованные Linux от UNIX) или модуль с дополнительными возможностями программы, или общие для нескольких программ ресурсы. В процессе развития и/или устаревания программного обеспечения выделение некоторых задач в отдельный пакет может приобретать или терять смысл, поэтому способ объединения ресурсов в пакеты - это не что-то раз и навсегда выбранное: пакеты могут разделяться и сливаться.

Самый простой и традиционный для Linux способ объединить несколько файлов в один - использовать утилиту tar .

tar появился намного раньше Linux и изначально служил для создания файловых архивов на магнитной ленте. Отсюда и его название - t ape ar chiver, «архиватор для (магнитных) лент». В настоящее время tar присутствует в любой UNIX-подобной системе и позволяет работать с файловыми архивами на любых носителях.

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

Methody@localhost:~ $ tar -cf methody.progs.tar bin/ methody@localhost:~ $ tar -tf methody.progs.tar bin/ bin/loop bin/script bin/to.sort bin/two

Пример 1 . Создание файлового архива при помощи tar

Первый параметр tar состоит из двух частей: операция, которую следует произвести над архивом, в данном случае « c » (c reate, создать), и ключ « f », который указывает, что архив следует создать в файле, имя файла архива - следующий параметр. Имя архива может быть любым, но Гуревич посоветовал снабдить его расширением « .tar », чтобы потом не путаться. После имени архива следуют имена файлов и каталогов, которые следует запаковать.

С каждым указанным каталогом tar работает рекурсивно, т. е. запаковывает все содержащиеся в нём файлы и подкаталоги.

Чтобы проверить, какие файлы попали в архив, Мефодий просмотрел содержимое получившегося архива командой « tar -tf имя_архива » (« t » - просмотреть, « f » использовать файл, указанный следующим параметром). Тут Мефодий обратил тут внимание на два обстоятельства. Во-первых, в архиве имена файлов сохранились вместе с путём. Во-вторых, все пути, сохранённые в архиве - относительные.

При распаковке архива tar файлы извлекаются вместе с путём, недостающие подкаталоги создаются по мере необходимости. Все пути tar считает относительными от своего рабочего каталога. Если теперь Мефодий распакует свой архив (командой « tar xf имя_архива »), то в рабочем каталоге будет создан подкаталог « bin/ » и в него будут записаны все файлы из архива.

Methody@localhost:~ $ tar -xvf methody.progs.tar bin/ bin/loop bin/script bin/to.sort bin/two

Пример 2 . Распаковка архива

Ключ « v » велит tar быть «разговорчивым» (verbose), т. е. выводить больше диагностичских сообщений, блаодаря этому tar при распаковке выводит имена (с путём) всех записываемых файлов. Если в рабочем каталоге уже есть файл, который tar собирается создать при распаковке, то этот файл будет попросту заменён файлом из архива. Так, когда Мефодий распаковал свой архив, подкаталог « bin/ » со всем его содержимым заменился на подкаталог из архива. В данной ситуации это не страшно, поскольку в архиве файлы такие же, но вот если бы Мефодий перед распаковкой изменил какие-то из своих файлов в « bin/ », он лишился бы всех изменений.

Формат пакета

Помимо хранения архива файлов у пакета есть и другие задачи (они обсуждаются в двух следующих разделах), поэтому для пакета в Linux не очень подходит обычный файловый архив, наподобие.tar , а нужен специальный формат. Таких форматов в Linux бывает несколько (краткое перечисление и характеристика - в разделе Package.Установщики пакетов), в системе Мефодия используется один из наиболее распространённых - rpm , поэтому все примеры в данной лекции будут с его участием. Для работы с пакетами в специальном формате нужна специальная программа-установщик, которая так же и называется - rpm: она занимается установкой, удалением, обновлением и проверкой пакетов.

Пакет в формате rpm - это единый файл со всеми необходимыми данными. Существуют определённые (хотя и не очень жёсткие и последовательные) соглашения относительно названий файлов-пакетов. Например, rpm -файл, содержащий комплект стандартных утилит coreutils , в системе Мефодия называется coreutils-5.2.1-some5.rpm: сначала - имя пакета , затем через дефис - служебная информация о номерах версий программного обеспчения и самого пакета.

Регистрация в системе

Итак, пакет с компонентом системы - это в первую очередь файловый архив , в котором хранятся все необходимые файлы вместе с путями к ним (т. е. каталогами). Когда компонентов много, нужно обеспечить, чтобы в разных пакетах не оказалось файлов с одинаковым именем и путём, чтобы файл, принадлежащий одному пакету, не мог быть заменён файлом другого пакета при установке. Отслеживать такого рода конфликты пакетов - вторая задача пакетирования .

Чтобы предупреждать конфликты, в системе должна храниться информация обо всех уже установленных пакетах и принадлежащих им файлах. Когда точно известно, какие файлы принадлежат пакету, можно полностью удалить пакет, не оставив и не удалив при этом ничего лишнего. Такой подход препятствует образованию в системе «мусора» - бесполезных файлов, оставшихся от удалённых программ - и делает операцию установки/удаления пакета полностью обратимой.

Rpm хранит информацию обо всех установленных в системе пакетах и принадлежащих им файлах и может выдать эту информацию по запросу пользователя. Почитав руководство по rpm , Мефодий выяснил, что список всех установленных в системе пакетов (скорее всего, очень длинный, в несколько тысяч строк) можно получить командой « rpm -qa », список всех файлов, принадлежащих пакету, командой « rpm -ql имя_пакета ». Он решил проверить, есть ли в его системе уже известный ему по предыдущим лекциям пакет coreutils и узнать, какие утилиты ему принадлежат:

Methody@localhost:~ $ rpm -qa | grep coreutils coreutils-5.2.1-some5 methody@localhost:~ $ rpm -ql coreutils | grep bin /bin/basename /bin/cat /bin/chgrp /bin/chmod

Пример 3 . Какие файлы принадлежат пакету?

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

Можно выполнить и обратную процедуру - выяснить про любой файл, какому пакету он принадлежит:

Methody@localhost:~ $ rpm -qf /etc/passwd setup-2.2.5-some1

Пример 4 . Какому пакету принадлежит файл?

Файлы, принадлежащие пакету, могут быть не только удалены, но и изменены. Это может быть сделано сознательно (например, отредактирован конфигурационный файл), в таком случае при обновлении или удалении пакета изменённый файл нужно сохранить, потому что в нём содержится результат работы, проделанной администратором. Для этого система должна уметь определять, что принадлежащий пакету файл изменился. Для этого в пакете должна храниться информация обо всех файлах архива: размер, атрибуты, контрольная сумма - в этом случае процедура проверки сможет проверить соответствие атрибутов файла в пакете атрибутам установленного в системе файла. Мефодий может проверить, что изменилось в пакете командой « rpm -V имя_пакета ».

Methody@localhost:~ $ rpm -V setup S.5....T c /etc/X11/fs/config S.5....T c /etc/exports S.5....T c /etc/fstab S.5....T c /etc/printcap ..?..... c /etc/securetty

Пример 5 . Что изменилось в пакете?

Мефодий получил список изменившихся с момента установки пакета файлов. Видимо, всё это - конфигурационные файлы, отредактированные администратором системы. Мефодий догадался, что комбинация цифр, букв и точек - это список атрибутов, по которым rpm сравнивал установленные файлы с данными пакета, однако чтобы разобраться, что именно означает каждая буква, ему придётся внимательнее читать руководство.

Система Linux раскладывается на компоненты без остатка: каждый файл в Linux принадлежит какому-нибудь (и только одному!) пакету.

Естественно, кроме тех файлов, которые созданы пользователями.

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

Изменение настроек системы

Для полноценной регистрации пакета в системе обычно недостаточно, чтобы система хранила список файлов, принадлежащих пакету. При установке, удалении или обновлении пакета часто требуется выполнить ряд операций, чтобы обновить сведения о пакете, адаптировать настройки - как самого пакета к уже имеющимися в системе, так и наоборот. К тому же, некоторые изменения в системе, например, добавление и удаление псевдопользователя , не сводятся к добавлению и удалению файлов, и вдобавок зависят от текущего состояния системы. Получается, что регистрация в системе - дело не только системы, но и самого пакета. Поэтому в каждом пакете должны храниться сведения о том, какие действия следует выполнить в момент различных операций с ним - в этом состоит третья задача пакетирования .

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

  • выполнение предшествующих установке/удалению сценариев;
  • копирование файлов из архива в систему или удаление файлов из системы
  • выполнение следующих за установкой/удалением сценариев.

Methody@localhost:~ $ rpm -q --scripts coreutils preinstall scriptlet (through /bin/sh): # Remove info pages from fileutils, textutils and sh-utils. for f in /usr/share/info/{fileutils,textutils,sh-utils}.info*; do [ -f "$f" ] || continue RPM_INSTALL_ARG1=0 /usr/sbin/uninstall_info "$f" ||: done postinstall scriptlet (through /bin/sh): /usr/sbin/install_info coreutils.info preuninstall scriptlet (through /bin/sh): /usr/sbin/uninstall_info coreutils.info

Пример 6 . Просмотр сценариев в пакете

Мефодий выяснил, что сценарии в пакете coreutils запускаются перед началом установки (preinstall), после установки (postinstall) и перед удалением (preuninstall), они выполняются стандартным командным интерпретатором (/bin/sh). Все эти сценарии нужны для того, чтобы зарегистрировать в системе info установленную пакетом документацию или удалить эту документацию из системы (командами /usr/sbin/install_info и /usr/sbin/uninstall_info соответственно). Поскольку info строит общее оглавление всей имеющейся в системе документации, простого копирования файлов было бы недостаточно.

В результате подобных операций по интеграции пакета в систему могут быть изменены или удалены файлы, не принадлежащие данному пакету, созданы новые файлы. Если программа, содержащаяся в пакете, пользуется услугами какой-нибудь уже установленной службы (например, syslogd), может понадобиться регистрация этой программы в конфигурационных файлах службы. Конечно, изменение «чужих» файлов в процессе установки пакета нежелательно: впоследствии, удаляя пакет, потребуется вернуть файл в исходное состояние, что не всегда возможно (например, после вдумчивого редактирования администратором). Избежать редактирования конфигурационных файлов позволяет схема «. d», описанная в лекции Этапы загрузки системы .

Цена удобства

Удобство, которое получает пользователь при работе с пакетами достигается не само собой, а человеческим трудом: пакеты должен создавать человек, его работа называется «сопровождающий» («package maintainer» или «packager»). В обязанности сопровождающего пакет входит подготовка файлового архива, необходимых для установки и удаления сценариев и прочей информации о пакете и его содержимом, и объединение их в одном файле-пакете.

Функции по созданию пакета в формате rpm также выполняет программа rpm .

Узнать, кто и когда создал пакет, получить краткую справку о программном обеспечении, которое в нём содержится, можно командой « rpm -qi имя_пакета ».

Methody@localhost:~ $ rpm -qi setup Name: setup Relocations: (not relocateable) Version: 2.2.5 Vendor: Some Linux Team Release: some1 Build Date: Чтв 29 Янв 2004 18:08:05 Install date: Пнд 23 Авг 2004 15:08:45 Build Host: shogun.somelinux.org Group: Система/Настройка/Прочее Source RPM: setup-2.2.5-some1.src.rpm Size: 39969 License: GPL Packager: Leon B. Gourievitch Summary: Initial set of configuration files Description: Initial set of configuration files to be placed into /etc.

Пример 7 . Описание пакета

Нужно принимать во внимание, что любой пакет, содержащий программное обеспечение для Linux, не является универсальным. Если у вас есть такой пакет, это ещё не означает, что его можно установить в вашей системе. Дело в том, что разные дистрибутивы Linux различаются именно тем, каким образом программное обеспечение организовано в систему (о дистрибутивах речь пойдёт в лекции ). Дистрибутивы могут различаться размещением файлов и процедурами, предусмотренными для интеграции в систему программного обеспечения, не говоря уже о том, что в разных дистрибутивах используется разный формат пакетов. Это значит, что пакет, подготовленный с ориентацией на один дистрибутив, может оказаться несовместимым с другим. Чтобы в вашем дистрибутиве появилась некоторая программа, кто-то должен подготовить и сделать доступным соответствующий пакет.

Пакет Ресурсы, необходимые для установки и интеграции в систему некоторого компонента (архив файлов, до- и послеустановочные сценарии, информация о пакете и его сопровождающем), объединённые в одном файле.

Несмотря на частные различия, дистрибутивы Linux представляют собой варианты одной и той же системы, поэтому в конечном итоге любую программу, работающую в одном дистрибутиве, можно «приспособить» к любому другому. Только для этого нужно располагать исходными текстами соответствующей программы. До сих пор речь шла только о так называемых двоичных пакетах , в которых программы содержатся в виде уже скомпилированных двоичных (исполняемых) файлов, в таком виде программа может зависеть от некоторых свойств системы и работать не везде. Чтобы получить работающую программу в системе, нужно установить именно двоичный пакет. Однако пакет может содержать и исходные тексты программ, такие пакеты называются исходными . Доступность исходных кодов - обязательное условие распространения большей части программного обеспечения для Linux, см. лекцию Политика свободного лицензирования. История Linux: от ядра к дистрибутивам . Если получилось так, что никто не подготовил пакет с нужной вам программой для вашего дистрибутива, у вас есть возможность установить исходный пакет и скомпилировать программу самостоятельно.

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

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


Автор: David M Williams
Дата: 16 января 2008
Свободный перевод: Алексей Дмитриев
Дата перевода: 24 января 2008

Ищете приложения с открытым исходным кодом? Дистрибутивы Линукс имеют давнюю традицию упаковывать программы в легко устанавливаемые пакеты. Однако поиск самих этих пакетов отнюдь не всегда интуитивно понятен, да и находятся они не всегда в желаемом виде. Эта статья о том, как выжать максимум из Линукс пакетов.

Первое место, где надо искать - это ваш дистрибутивный набор CD или DVD. Все дистрибутивы Линукс, кроме "самых маленьких", содержат гораздо больше программ, чем обычно установлено. Когда вы устанавливаете дистрибутив, вы имеете выбор типа устанавливаемой системы, который зачастую сводится к выбору между рабочей станцией и сервером. В зависимости от выбора, устанавливаются соответствующие наборы пакетов.

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

И тут на помощь приходит Интернет. Зайдите на великие сайты открытых исходников, такие как FreshMeat или . Просмотрите их в поисках новых интересных приложений.

Не все всегда просто, даже если вы нашли нечто подходящее: возьмите хоть для примера. Это мощная система позволяет оперировать содержимым вэб-сайтов и интранет содержимым, посвященным открытым исходникам - звучит очень круто. Она создана, чтобы позволить технически неподготовленным пользователям создать и поддерживать их собственные он-лайн проекты безопасно, профессионально и недорого. Это ваше классическое LAMP приложение, написанное на PHP и использующее Apache и MySQL.

Между тем, MySource Classic доступен для скачивания в двух форматах: как.zip файл, или как.tar.gz файл. Оба формата являются архивными. Почти все знают, что такое zip файл, в то время как.tar.gz (также встречающийся как.tgz) - это чисто Linux/UNIX специфичный формат, известный под именем тарбалл.

Тарбалл - удобный формат для распространения исходного кода, он весьма универсален и легко переносим (слово tar происходит от Tape ARchive - из тех времен, когда применялись устройства архивации на магнитофонной пленке) Однако он сильно отличается от формата пакетов, в которых находятся приложения в вашем дистрибутиве. Пакеты содержат исполняемые двоичные файлы, плюс конфигурационные файлы, плюс некоторые необходимые файлы, и все это разложено в определенном порядке создателем пакета безо всякого утомительного участия с вашей стороны

Запустите терминал и, с помощью команды tar, просмотрите архив; как и везде в Линукс, тут существует несколько опций.

Вы можете разархивировать тарбалл при помощи команды gunzip:

gunzip mysource-2.16.2.tar.gz

Это создаст новый файл под названием mysource-2.16.2.tar, исследуйте его содержимое при помощи:

tar -tvf mysource-2.16.2.tar | more

Содержимое теперь стало видно. Есть другой способ просмотреть содержимое тарбалла, не разархивируя его, при помощи другого варианта той же команды tar:

tar -tzvf mysource-2.16.2.tar | more

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

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

Итак, распакуем его. Снова применим tar:

tar -xf mysource-2.16.2.tar

Или, как раньше, минуя стадию gunzip, добавим опцию -z:

tar -xzf mysource-2.16.2.tar.gz

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

Тарбаллы - наиболее распространенный формат архива, но не единственный; иногда вы можете встретить cpio архивы, которые заканчиваются расширением (суффиксом) .cpio. Такой формат обычно применяется внутри rpm пакетов, сам по себе почти не встречается. Но, коли вы встретитесь с таким форматом, то учтите, что, хотя команда cpio и имеет схожие опции с командой tar, cpio работает на входе и выходе потоков (конвейеров), а не файлов, так что, чтобы просмотреть архив смело пишите:

cpio -tv < examplefile.cpio

а чтобы распаковать содержимое архива:

cpio -i -d < examplefile.cpio

Когда тарбалл получен и распакован, ваша задача скомпилировать и установить программу. Этот формат наиболее универсален и не зависит от типа вашего дистрибутива. Есть хорошая вероятность, что приложение установится, при условии, что вы знаете, что делаете. К счастью "знаете что делаете" обычно сводится к серии из трех команд:

./configure
make
make install

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

Контрастируя с вышеописанным, менеджеры пакетов гораздо более умны и доброжелательны - но и гораздо менее универсальны в смысле применимости к разным дистрибутивам. Как бы то ни было, преимуществ у них очень много. Менеджер пакетов будет отслеживать, что и в какое место было установлено, и где находятся эти файлы. Менеджер пакетов без труда поможет вам найти новые доступные версии ваших приложений, и, что лучше всего, обеспечит удовлетворение зависимостей. Если вы попытаетесь установить пакет, которому для работы нужен некий компонент (например, библиотека), то менеджер пакетов проследит, чтобы правильная версия этого компонента (в нашем случае библиотеки) также была установлена.

Два наиболее обычных формата пакетов суть: Debian пакеты и RPM пакеты. Первый формат используют такие дистрибутивы как Debian, Ubuntu, Knoppix и некоторые другие; RPM формат применяется в Red Hat, Fedora, Suse и некоторых других.

Ели только вы не создаете собственный дистрибутив Линукс, выбор менеджера пакетов уже сделан за вас. Я всегда подчеркивал, что разница между дистрибутивами Линукс состоит, в основном, в том, какой менеджер пакетов используется, и какой набор пакетов устанавливается по умолчанию. В самом деле, все версии Линукса используют одинаковые ядра, практически одинаковые инструменты GNU tools - но главное различие дистрибутивов - менеджер пакетов.

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

На крайний случай, возможно извлечь все файлы из пакета, а затем вручную установить их. Как говорилось ранее, формат RPM пакетов использует внутри себя формат архива cpio. Простая команда rpm2cpio поможет разархивировать внутренний архив. Для того чтобы извлечь все файлы из пакета, не устанавливая его, применяйте команду:

rpm2cpio examplepackage.rpm | cpio -i

Подобным же образом, пакет в формате Debian содержит набор тарбаллов, заархивированных в формате, называемом ar; как можно догадаться, это родственник формата tar, только куда более фундаментальный. Одно то, что он не поддерживает каталоги, говорит о многом.

Извлекайте содержимое пакета Debian следующим образом:

ar -x examplepackage.deb

Это приведет к появлению двух тарбаллов: control.tar.gz и data.tar.gz, плюс одного текстового файла: debian-binary.

Файл debian-binary содержит одну строку - это просто название версии использованного при создании пакета упаковщика. Тарбалл control.tar.gz содержит инсталляционные скрипты и полезную информацию; тарбалл data.tar.gz содержит двоичные и конфигурационные файлы, все файлы, необходимые программе для работы. При острой необходимости вы можете открыть этот архив командой tar -xf, хотя, если приложение сложное, вы зададите большую работу инсталляционным скриптам.

Чуть выше, я уже говорил, что одно из замечательных свойств менеджера пакетов является его способность регулярно обновлять ваши приложения до новейших версий. Используемые для этого инструменты варьируют в зависимости от дистрибутива, но проверьте, нет ли у вас: Apt (Advanced Package Tool - Усовершенствованный Пакетный Инструмент), Yum (Yellowdog updater modified - модифицированный обновитель ЖелтаяСобака), Synaptic (графическое расширение Apt) и up2date.

Apt - это старая добрая программа, которая родом из Debian и родственных дистрибутивов, но теперь поддерживает и RPM. Это не столько единый инструмент, сколько набор утилит; чаще других используются apt-get, который скачивает пакеты с репозиториев, и apt-cache, который выясняет, что, собственно говоря, нужно скачать. Synaptic не предлагает новых функций, но объединяет все вместе в удобном графическом интерфейсе.

Подобно Apt"у, Yum - это утилита командной строки для RPM пакетов. Она может выяснить, что доступно, установить пакеты, и производить другие действия, типа листинга установленных пакетов и удаления старых версий пакетов.

Программа up2date также работает с RPM пакетами, но она обеспечивает доступ сразу и к Yum и Apt репозиториям, предоставляя тем самым больший выбор.

Так выходите он-лайн, устанавливайте свободный софт, используйте Свободные Операционные Системы.

Необходимость в установке новых программных пакетов под LINUX возникает в двух основных случаях:
- когда появляется новая версия одного из уже установленных пакетов;
- когда возникает необходимость использования какой-то пакета, еще не установленного в системе.

Во втором случае это может быть один из пакетов, имеющихся на Вашем установочном диске, но не установленный в процессе инсталляции. Однако чаще всего новое ПО Вы будете находить в , тем более, что значительная часть этого ПО бесплатное или условно бесплатное.
Существует две основных формы распространения ПО для LINUX: в исходных текстах и в виде исполняемых модулей. И в том и в другом случае пакет ПО может поставляться либо в виде tar-gz архива, либо в виде rpm-пакета.
Проще всего установить ПО, представленное в виде rpm-пакета, содержащего исполняемые файлы, этот способ и рассмотрим первым. Отметим только, что для инсталляции новых пакетов Вы должны войти в систему как пользователь root.

Программа rpm.
Название этой программы (или команды) является аббревиатурой от Redhat Package Manager. Программа rpm в некотором смысле аналогична программам типа setup wizard для MS Windows. Преимуществом использования этой программы по сравнению с установкой tar-gz архивов является то, что она автоматически проделает все необходимые действия по установке ПО: создаст необходимые каталоги, распределит по ним файлы, создаст ссылки. Кроме того, она может быть использована не только для установки нового пакета, но и для обновления версий ПО, получения перечней установленного ПО и проверки установки, а также для деинсталляции отдельных пакетов (например, если после периода пробной работы с программой Вы решили отказаться от ее дальнейшего использования). С помощью той же программы rpm можно самому создать пакет формата rpm, однако для начинающих лучше воспользоваться готовыми rpm-пакетами.
rpm-пакеты - это специальным образом подготовленные архивы, предназначенные для обработки программой rpm. Название rpm-пакетов оканчивается на суффикс.rpm, например, xzip-180-1.i386.rpm или xzip-180-1.src.rpm. Как видите, перед суффиксом.rpm стоит еще один суффикс. Если это.i386 или.i586, то в пакете находятся исполняемые файлы, а если этот суффикс.src, - то в пакете исходные тексты, которые после установки еще надо скомпилировать. Обычно и на установочных компакт-дисках и в Интернет-каталогах rpm-пакеты с исполняемыми файлами располагаются в каталогах с названием RPMS, а rpm-пакеты с исходными текстами - в подкаталогах SRPMS.
Вы нашли и скачали rpm-архив с исполняемой версией нужного Вам пакета. Если Вы ставите совершенно новый пакет (у Вас не было на компьютере предыдущих версий этого ПО), то для установки пакета из этого архива достаточно перейти в тот каталог, где находится архив, и дать команду
rpm -i имя_rpm-архива

Если у Вас была установлена предыдущая версия пакета, то в простейшем случае надо дать команду следующего формата:
rpm -U --force имя_rpm-архива

Здесь параметр -U говорит программе, что надо произвести обновление (upgrade) пакета, а опция --force требует безусловно (и без лишних вопросов) обновить все входящие в пакет файлы. Заметьте, что это очень сильное требование, и в некоторых случаях может быть лучше сохранить какие-то (например, конфигурационные) файлы от предыдущей версии. Если установка проходит нормально, и никаких дополнительных сообщений не появляется, то после завершения работы программы (после появления приглашения shell) Вы можете пользоваться вновь установленным пакетом.

Чтобы выяснить, какие файлы установит тот или иной пакет, надо дать команду

rpm -qpl имя_rpm-архива

А для получения информации о пакете - команду

rpm -qpi имя_rpm-архива

Всего rpm имеет 16 основных режимов работы, которые имеет смысл объединить в 6 групп (после двоеточия приводится формат команды для соответствующего режима):

Запросы:
Запрос: rpm [--query]
Показать метки запросов (Querytags) : rpm [--querytags]

Установка и поддержка установленных пакетов:
Установка: rpm [--install] +
Обновление: rpm [--freshen|-F]
+
Деинсталляция: rpm [--uninstall|-e]
+
Проверка: rpm [--verify|-V] +

Подписи (пакеты подписываются электронной цифровой подписью в формате
PGP, с целью обеспечения неизменяемости и сохранения авторства
пакетов):
Проверка подписи: rpm [--verify|-V] +
Переподписывание: rpm [--resign] +
Добавление подписи: rpm [--addsign] +

Работа с базой:
Инициализация базы: rpm -i [--initdb]
Rebuild Database: rpm -i [--rebuilddb]

Создание rpm-пакетов:
Создать пакет: rpm [-b|t] +
Перекомпилировать пакет: rpm [--rebuild] +
Build Package from Tarball: rpm [--tarbuild] +

Разное:
Показать конфигурацию программы rpm: rpm [--showrc]
Задать пользователей: rpm [--setperms] +
Задать группы: rpm [--setgids] +

Более подробное описание команды rpm Вы можете найти в RPM-HOWTO, страницах man и info.


Установка ПО из исходных текстов

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

1 разархивировать тарбол:

Создаем папку, куда будем разархивировать тарбол,

Mkdir <Имя_папки>

Копируем туда тарбол

Cp <исходный_файл> > <назначенная папка>

Непосредственно разархивируем в папку:

Tat xfzv <Имя_тарбола>

Разархивация архивов типа tar.gz и tgz

Tat xfjv <Имя_тарбола>

Разархивация архивов типа tar.bz и tbz

файлы разархивируются в текущую папку (для работы с архивами очень удобно использовать Midnight Commander - MC - свободный клон NC)

Переходим в папку с разархивированным тарболом

Cd _Имя_папки_

2 конфигурим пакет

./configure

(в тяжелых случаях нужно будет в параметрах указать пути для всех необходимых библиотек и header-файлов - но к счастью, обычно на близких системах они лежат одинакого и сам скрипт configure их находит, также параметы могут потребоваться, если пакет будет распологаться не в том месте, где предполагал разработчик программы, а в каком-либо другом)