Все ли на 2м курсе знали, как под Linux устанавливать программы? А без GUI? А из исходников? А самому как написать установщик? База данных RPM RPM ведётся в каталоге /var/lib/rpm. Она состоит из одиночной базы данных (Packages), в которой хранится вся информация о пакетах, и множества маленьких баз (__db.001, __db.002 и т. д.), которые служат для индексации и содержат в себе сведения о том, какие файлы менялись и создавались при установке и удалении пакетов. Если база данных несколько испортится (что может произойти, если процесс установки или удаления был «убит» или закончилось место на разделе), то её можно восстановить, введя команду rpm -rebuilddb. Если база была уничтожена — рекомендуется достать копию из заранее сделанного бэкапа или восстановить при помощи rpm -ivh -justdb по списку пакетов, заранее полученному командой rpm -qa | sort. Возможны полуэвристические методы восстановления базы по списку файлов в пакетах репозитория, из которого была установлена система, но лучше до этого не доводить. dpkg - это пакетный менеджер для Debian систем. Он может устанавливать, удалять и создавать пакеты, но, в отличие от других систем управления пакетами, он не может автоматически загружать и устанавливать пакеты или их зависимости Для получения списка пакетов, установленных в системе: dpkg –l В зависимости от количества пакетов в вашей системе, эта команда может породить большой объем вывода. Пропустите выходной поток через grep чтобы увидеть установлен ли определенный пакет: dpkg -l | grep apache2 (Замените apache2 на любое имя пакета, часть имени или иное регулярное выражение.) Для получения списка файлов, установленных пакетом (в нашем случае ufw), введите: Если вы не уверены каким пакетом установлен файл, dpkg -S может подсказать вам. Например: dpkg -L ufw dpkg -S /etc/host.conf base-files: /etc/host.conf Вывод указывает, что /etc/host.conf принадлежит пакету base-files. Многие файлы автоматически создаются в процессе установки пакета, но несмотря на то, что они находятся на файловой системе, dpkg -S может не знать какому пакету они принадлежат. Вы можете установить локальный .deb файл, набрав: sudo dpkg -i zip_3.0-4_i386.deb Замените zip_3.0-4_i386.deb на реальное имя локального .deb файла, который вы собираетесь установить. Удаление пакета может быть выполнено так: sudo dpkg -r zip Удаление пакетов с использованием dpkg в большинстве случаев не рекомендуется. Лучше использовать менеджер пакетов, отслеживающий зависимости, чтобы гарантировать, что система находится в связанном состоянии. Например, использование dpkg -r zip удалит пакет zip, однако любые пакеты, зависящие от него, останутся установленными и более не смогут работать правильно. Для дополнительной информации смотрите станицу описания: man dpkg Для установки приложения: apt-get install имя_пакета Для удаления: apt-get remove имя_пакета Для обновления базы APT используется команда: apt-get update Для обновления устаревших пакетов (программ) в системе. Для обновления нужно сначала обновить список пакетов, а потом уже установить все обновления. apt-get update; apt-get upgrade apt (advanced packaging tool) — программа для установки, обновления и удаления программных пакетов в *NIX Используется в: Способна автоматически устанавливать и настраивать программы для UNIXподобных операционных систем как из Debian и основанных на них (Ubuntu, Mint и т. п.), (Опционально) Mandrake, например Mandriva, ALTLinux иPCLinuxOS. откомпилированных пакетов, так и из исходных кодов. APT хранит локальную базу данных со списком всех доступных для установки пакетов и ссылок где их брать. Пакеты берутся из интернет-репозиториев, либо их можно установить с имеющихся носителей. Список источников пакетов хранится в файле /etc/apt/sources.list и в каталоге /etc/apt/sources.list.d/. Графические оболочки для apt позволяют легко добавлять новые и удалять ненужные источники. apt (apt-get) значительно упрощает процесс установки программ в командном режиме. Для пользователей, предпочитающих графический интерфейс, более удобным может оказаться другие front-end'ы —Распространяется бесплатно, в соответствии с условиями пользовательского соглашения GNU General Public License. Загрузить и установить пакет из настроенного хранилища (репозитория): yum install имя_пакета Удалить программу также легко и просто: yum remove имя_пакета yum не сохраняет локальную базу данных списка пакетов, поэтому нет необходимости постоянно ее обновлять. Для установки всех доступных обновлений и патчей достаточно прописать команду: yum update yum update имя_пакета Yellow dog Updater, Modified (YUM) — открытый консольный менеджер RPM-пакетов. Позволяет облегчить каскадное обновление Linux систем с отслеживанием взаимосвязей RPMпакетов. Распространяется под лицензией GNU. Первоначально был разработан программистом Seth Vidal и группой волонтёров. Для работы с YUM используется интерфейс командной строки, однако существуют надстройки, предоставляющие графический интерфейс для функционала YUM. YUM не сохраняет локальную базу данных списка пакетов, поэтому нет необходимости постоянно ее обновлять. Системные администраторы могут автоматизировать обновление ПО используя ряд инструментов, таких как yumupdatesd, yum-updateonboot, yum-cron, PackageKit. Для установки программ необходимо ввести: urpmi имя_пакета Для удаления: urpme имя_пакета Для обновления локальной базы данных списка пакетов: urpmi.update –a Для установки обновлений: urpmi --auto-select urpmi — набор утилит Mandriva Linux и Mageia для установки, удаления и обновления и пакетов программ из локальных или сетевых источников. Изначально urpmi создавался в качестве менеджера пакетов RPM с автоматическим разрешением зависимостей. Он работает как с официальными источниками из Mandriva/Mageia, так и с неофициальными источниками, такими как «Penguin Liberation Front»/Российский репозитории Mageia. К счастью, есть средства для конвертирования пакетов из одного формата в другой (и даже обратно). Встречайте пакет для борьбы с «чужими» пакетами: alien. Устанавливаем: Ну, и всё: дальше можно пользоваться. Запуск команды с единственным параметром в виде имени rpm-пакета создаст в текущей директории его deb-клон. Примерно так: dpkg -i package-1.4-2.deb Не сложно отучить alien увеличивать версию, для этого имеется ключ -k (--keepversion). Команда alien -k package-1.4-1.rpm создаст, как и полагается, пакет package1.4-1.deb. Чтобы пакет был не только создан, но и сразу установлен в систему, есть также удобный ключик -i (--install), сразу запускающий установку (при этом вам не обязательно заботится об итерации версии): alien package-1.4-1.rpm После этого проверьте, что появилось в директории (командой ls например). Появиться там должен пакет package-1.4-2.deb. Что за дела, почему пакет изменил версию? Не беспокойтесь, это проделки alien — номер версии увеличивается утилитой дабы отразить новосозданность пакета. Установить пакет можно будет сразу же командой: sudo aptitude install alien alien -i package-1.4-1.rpm Если вдруг понадобиться из deb-пакета сделать rpm, то и тут поможет alien с ключом r: alien -r package-1.4-1.deb tarball: <computer science jargon> n.[very common; prob. based on the “tar baby” in the Uncle Remus folk tales] An archive, created with the Unix tar(1) utility, containing myriad related files. “Here, I'll just ftp you a tarball of the whole project.” Tarballs have been the standard way to ship around source-code distributions since the mid1980s; in retrospect it seems odd that this term did not enter common usage until the late 1990s. Дистрибутив с программой, представляет из себя архив с кучей файлов и обычно имеет расширение .tar , .tar.gz , .bz, .tgz ну или что то похожее. Для архивов сжатых с помощью GZIP (gz, gz2 и т.д.) выполняем: tar –xvzf имя_файла Для архивов сжатых с помощью BZIP (bz, bz2 и т.д.) выполняем: tar –xvjf имя_файла Команды Tar: • x – извлечь файлы из архива; • v – подробный вывод информации на экран; • f – Обязательная опция. Если не указать, Tar будет пытаться использовать магнитную ленту вместо файла; • z – обработать архив сжатый gzip’ом; • j – обработать архив сжатый bzip’ом. После выполнения, будет создана папка с именем, идентичным названию пакета. Далее необходимо открыть эту созданную папку Далее все зависит от того, как была собрана программа, в виде исполняемого файла, или в исходном коде, который сначала необходимо скомпилировать и лишь потом устанавливать. В любом случае для начала лучше прочитать инструкцию, которая должна присутствовать в распакованном архиве и, как правило, называется README, или что то похожее. Если программа собрана в виде исполняемого файла, то в папке будет находиться файл, с расширением .sh, обычно он так и называется install.sh. Это shell-скрипт. Очень важная штуковина – именно она и является программой, написанной на языке shell, (или вариантах bash, ksh, csh), которая последовательно разворачивает программу по нужным каталогам, может вносить записи в имена пользователей, в расписания, планировщики, в запуск демонов(фоновых, системных процессов), в конфигурационные файлы серверов, в настройки баз данных, в создание и конфигурирование практически любой программы или установку дополнительного пакета sh bash ksh csh $ $ $ % >| >| >! &> file или > file 2>&1 > file 2>&1 >& file Перенаправление стандартных потоков вывода и ошибок в file {} Расширить элементы в список Заменить вывод заключенной в обратные кавычки командой > file 2>&1 {} `command` $HOME var=value export var `command` или $(command) $(command) `command` $HOME ~ ~+, ~-, dirs var=value $HOME ~ ~+, ~var=value $home ~ =-, =N set var=value export VAR=value export VAR=value ${nnnn} ${nn} setenv var val Значение/Действие Приглашение к вводу по умолчанию Принудительное перенаправление Домашний каталог Символ домашнего каталога Стек доступа к каталогам Назначение переменной Установка переменной окружения Возможность ссылаться на более, чем 9 аргументов sh bash ksh csh Значение/Действие "$@" "$@" "$@" Все аргументы в виде отдельных слов $# $# $# $#argv Количество аргументов $? $? $? $status Код возврата от последней выполненной команды $! $! $! PID последнего фонового процесса $- $- $- Текущие опции . file source file or . file . file source file Читает команды в файле alias x='y' alias x=y alias x y Имя x устанавливается для команды y case case case switch or case Выбор альтернативы done done done end Конец заявленного цикла esac esac esac endsw Окончание case или switch exit n exit n exit n exit (expr) Выход со статусом for/do for/do for/do foreach Цикл по переменным sh bash ksh set -f , set -o nullglob|dotglob|nocaseglob|noglob csh Значение/Действие noglob Игнорировать замену символов при генерации имени файла hash hash alias -t hashstat Отображение хэшированных команд (для которых установлены псевдонимы) hash cmds hash cmds alias -t cmds rehash Вспомнить команды unhash Забыть команды hash -r hash -r history history history Список предыдущих команд ArrowUp+Enter or !! r !! Повторить предыдущую команду !str r str !str Повторить предыдущую команду, которая начинается со “str”. sh bash ksh csh Значение/Действие !cmd:s/x/y/ r x=y cmd !cmd:s/x/y/ Заменить “x” на “y” в самой недавней команде, которая начинается с “cmd”. if [ $i -eq 5 ] if [ $i -eq 5 ] if ((i==5)) if ((i==5)) Образец проверки условия fi fi fi endif Конец инструкции if ulimit ulimit ulimit limit Установка ограничений на ресурсы pwd pwd pwd dirs Вывод рабочей директории read read read $< Чтение с терминала trap 2 trap 2 trap 2 onintr Игнорировать прерывания unalias unalias unalias Удалить псевдонимы until until until while/do while/do while/do Начало цикла until while Начало цикла while Его достаточно просто запустить на исполнение: ./install.sh Если же программа представлено в исходном коде, выполняем следующие команды: ./configure make make install После установки делаем: make clean Все, как ведите ничего сложного в установке программ в Linux нет. А вот в сборке установщиков…. 0_О=0/)) А вот в сборке установщиков…. 0_О=0/)) Введение Несмотря на то что большинство пакетов создается с использованием debhelper, понимание того как устроен deb-пакет "изнутри" даст возможность разобраться зачем нужна та или иная утилита dh_ или что делать когда возникает задача создать "нестандартный" src-пакет итд. Лишние знания, как известно не отягощают голову, а, напротив, облегчают ей работу когда перед ней наконец появляется задача, требующая решения Что представляет собой deb-пакет? Deb-пакет это обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой. При помощи программы ar упаковано в один файл: Архив control.tar.gz, содержащий скрипты, написанные майнтенером пакета, использующиеся при установке/удалении пакета, а так же другие служебные файлы; Архив data.tar.gz, содержащий двоичные файлы программы, ради которой создан пакет; Файл debian-binary. Поскольку содержимое пакета может в будущем измениться (будет новый номер версии в debian-binary), то собирать debпакет при помощи программ tar, gzip, ar не рекомендуется и этот вариант в статье рассматриваться не будет. Собирается пакет программой dpkg из специально подготовленной структуры каталогов: DEBIAN/ ▪ .. path/to/dir/file1 ▪ .. path/to/dirX/fileX то есть: Файлы и каталоги, предназначенные для установки в систему. Их расположение в архиве соответствует положению их в файловой системе если считать от корня. Например файл usr/share/doc/package/copyright в deb-архиве после установки будет находиться в /usr/share/doc/package/copyright (все они будут упакованы в архив data.tar.gz); Каталог DEBIAN/, содержащий служебную информацию о пакете (о ней пойдет речь ниже). Содержимое этого каталога при сборке будет упаковано в архив control.tar.gz; Низкоуровневые функции работы с deb-пакетом Программа dpkg Представляет наиболее низкоуровневый интерфейс для создания/установки/распаковки пакетов. Основные команды, которые выполняет данная программа общеизвестны, нас же будет интересовать команда dpkg -build. Если Вы создали в некотором каталоге нужную для создания пакета иерархию файлов/каталогов, то превратить ее в deb-пакет можно дав команду: dpkg -build Directory package.deb при этом из каталог Directory будет упакован в пакет. То есть все что нам нужно чтобы создать пакет для Debian, это сложить файлы в нужные директории и упаковать. Фактически это почти тоже самое что и простой архив tgz дистрибутива slackware, только информационные файлы располагаются в каталоге с другим именем и видов этих файлов несколько больше. Ну а теперь, когда мы уяснили базовое устройство пакета, можем перейти к описанию того что должно или может находиться внутри каталога DEBIAN/. Обязательное содержимое DEBIAN/ Файл control Этот файл содержит всю описательную информацию на пакет, как то: Короткое описание пакета (одна строка); Полное описание пакета (один или несколько абзацев); Имя и координаты майнтенера, создавшего пакет; Номер версии программы (пакета); Имя раздела которому принадлежит пакет; Перечень пакетов от которых зависит пакет (несколько видов зависимостей: строгие, нестрогие, конфликты итп); Уровень важности пакета; Имя и версию src-пакета из которого собран данный deb-пакет (если есть таковой); Архитектуру для которой данный пакет собран; и некоторые другие параметры. Опциональное содержимое DEBIAN/ Файл md5sums Содержит md5 хеши для всех файлов кроме файлов находящихся в каталоге DEBIAN/. Данный файл необязателен для deb-пакета, однако программы верификации пакетов считают пакеты, несодержащие этот файл ошибочными. Может использоваться некоторыми программами администрирования системы для верификации изменений в файловой системе. Скрипты для установки/удаления пакета Пакет может содержать несколько скриптов (или программ), которые будут вызываться при установке/удалении пакета. Эти скрипты позволяют майнтенеру выполнять некоторые действия при установке/удалении. Например этими скриптами могут создаваться/удаляться каталоги в которых программа будет хранить свои временные данные, может производиться добавление/удаление программы в меню вашего оконного менеджера, первичное конфигурирование программы и так далее. preinst - скрипт, вызывающийся перед распаковкой пакета в файловую систему. Обычно при помощи этого скрипта пользователю задаются вопросы, позволяющие позже сконфигурировать программу. Так же возможно производится сбор информации, которая потребуется позже для конфигурирования программы. Если скрипт завершится с кодом ошибки, то пакет не будет установлен в систему; postinst - скрипт, вызывающийся после распаковки пакета. При помощи этого скрипта производится конфигурирование уже установленной программы. Конфигурирование происходит с использованием информации полученной на предыдущем этапе от пользователя. Задавать вопросы пользователю из скрипта postinst не принято.; prerm - скрипт, вызывающийся перед удалением пакета. Может задать пользователю некоторые вопросы, связанные с удалением. Например вопрос что делать с лог-файлами итп. Если скрипт завершится с кодом ошибки, пакет останется установленным в систему; postrm - скрипт, вызывающийся после удаления пакета; config - скрипт, вызывающийся на стадии конфигурирования и переконфигурирования пакета. Это дополнительный скрипт, который используется системой Debconf. Вызывается перед скриптом postinst, используется для того чтобы задать пользователю вопросы в системе диалогов debconf. В разных ситуациях эти скрипты вызываются с разными опциями. В общем виде пакет может: Устанавливаться в систему (первичная установка); Устанавливаться новая версия пакета (upgrade); Устанавливаться старая версия пакета (downgrade); Удаляться из системы. Соответственно порядок вызова скриптов и опции их вызова может быть разный. Скрипты могут вызываться со следующими параметрами (полный перечень можно найти в Debian-policy): * Необязательный параметр preinst install [Номер версии*] Вызывается перед распаковкой пакета. Номер версии указывает на пакет, который стоял ранее, но был удален без ключа --purge, то есть конфигурационные файлы сохранены. С данным параметром скрипт вызывается если в системе пакет не установлен. preinst upgrade [Номер версии] Вызывается перед распаковкой пакета. Номер версии указывает на пакет, который стоял ранее. Выполняется upgrade или downgrade для пакета. Зная текущую версию пакета и сравнив её с передаваемым здесь значением мы можем определить что происходит upgrade или downgrade preinst abort-upgrade [Номер версии] Вызывается если preinst upgrade вызванное для нового пакета завершилось неудачей. Номер версии соответствует номеру версии нового пакета, который пытались установить. Таким вызовом установленный пакет информируется о том что его попытались неудачно проапгрейдить. postinst configure [Номер версии*] Вызывается после распаковки пакета. Номер версии содержит версию пакета корректно сконфигурированного ранее. То есть того для которого данный вызов завершился без ошибки. По номеру версии скрипт конфигурации может принять решение о том каким образом необходимо производить апгрейд конфигурационных файлов программы postinst reconfigure [Номер версии] Вызывается системой Debconf после переконфигурации пакета. Выполняет все необходимые действия по переконфигурации. postinst abort-upgrade [Номер версии] Вызывается, если preinstall upgrade нового пакета завершился неудачей. Новый пакет не устанавливается, а старый при этом может провести собственную переконфигурацию для того чтобы сохранить работоспособность. prerm remove Вызывается перед удалением пакета. prerm upgrade [Номер версии] Вызывается перед удалением пакета при его апгрейде. Номер версии указывает на версию устанавливаемого пакета. prerm failed-upgrade [Номер версии] Вызывается для устанавливаемого пакета, если prerm upgrade удаляемого пакета завершился с кодом ошибки. Номер версии указывает на удаляемый пакет postrm remove Вызывается после удаления пакета postrm purge Вызывается после удаления пакета. Если вызван dpkg --purge postrm upgrade [Номер версии] Вызывается после удаления пакета при его апгрейде. Номер версии указывает на новый пакет. postrm failed-upgrade [Номер версии] Вызывается после удаления пакета при его апгрейде. Вызывается в случае если postrm upgrade вернул код ошибки. Номер версии указывает на удаляемый пакет. Вызов скрипта происходит во вновь устанавливаемом пакете. postrm abort-install [Номер версии*] Вызывается если preinst install вернул код ошибки. Номер версии соответствует номеру версии передаваемому preinst install config configure [Номер версии] Вызывается во время предварительной настройки пакета из dpkg-preconfigure. Этот вызов проходит во время установки/апгрейда пакета. Номер версии указывает на версию установленного на данный момент пакета. config reconfigure [Номер версии] Вызывается при повторной настройке пакета. Номер версии - номер установленной версии пакета. Инициировать вызов можно дав команду dpkgreconfigure package из командной строки. После этого вызова системой Debconf будет вызван сценарий postinst reconfigure Файл templates Если используется возможность конфигурации/реконфигурации пакета в системе Debconf (скрипт config), то этот файл содержит шаблоны диалогов с пользователем. Файл conffiles Содержит перечень файлов пакета, которые являются конфигурационными. По одному файлу на одну строку. Эти файлы при апгрейдах пакета заменяться не будут (или же будут задаваться вопросы с предложением о замене). Подробнее о содержимом см. man debconf-devel Утилита dpkg-gencontrol Осуществляет генерацию файла control на базе шаблона этого файла, составляемого майнтенером, а так же дополнительных параметров, передаваемых из командной строки. В частности, устанавливает номер версии пакета, архитектуру итп. Номер версии обычно берется из файла changelog, однако иногда бывает необходимо из одного src-пакета собрать несколько deb-пакетов с разными номерами версий. Опция -v поможет Вам в этом. Утилита dpkg-shlibdeps Вычисляет зависимости для исполняемых файлов и библиотек. Майнтенер обычно указывает Build-зависимости (зависимости сборки), а Depend-зависимости (зависимости необходимые для работы) вычисляются с помощью этой (или подобных) утилит. Такой подход дает возможность не привлекать майнтенера при смене имен библиотек от которых зависит пакет. Утилита dpkg-parsechangelog Позволяет извлекать из changelog-файла некоторые параметры, вроде номера версии, координат и имени майнтенера итп. Результаты работы этой утилиты могут использоваться как входные параметры для утилит вроде dpkg-gencontrol. Утилита dpkg-architecture Позволяет извлекать информацию (манипулировать ей) об архитектуре системы для которой собирается пакет или на которой собирается пакет. Выходные данные так же могут использоваться для использования в других утилитах. Например при генерации файла control утилитой dpkg-gencontrol. После того как пакет создан, можно получить информацию о его содержимом с помощью вышеупомянутой утилиты dpkg. dpkg -I package.deb - выведет общую информацию о пакете, включая содержимое control-файла; dpkg -c package.deb - выведет полный перечень файлов пакета. После этих двух проверок (все файлы на месте, информация в финальном control корректна), можно запустить одну из двух проверки пакета на соответствие текущему полиси. Такие проверки осуществляются при помощи программы lintian. Проверяются такие параметры, как правильность расположения двоичных файлов, наличие man-страниц, проверяется на наличие ошибок описание пакета в control-файле, просматривается файл copyright и так далее. Идеальный вариант - добиться от создаваемого пакета такого состояния, что lintian не выводит предупреждений/сообщений об ошибках. lintian -is package.deb покажет подробную информацию о проблемах в пакете. Для UBUNTU\Debian и APT – соответственно существуют графические оболочки Synaptic и Adept. Существует текстово‐графический интерактивный пакет (использующий ncurses) — aptitude. Yumex – для Yum Для urpmi – множество доделок, поделок и самоделок, а так же коммерческих графических надстроек, например gurpmi И, как говорится, тысячи их... (Графических оболочек и вариаций, разумеется)