Document 5003008

advertisement

Все ли на 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


И, как говорится, тысячи их...
 (Графических оболочек и вариаций,
разумеется)
Download