Лабораторная работа "Управление пакетами" - efanov/mephi GitHub Wiki
Лекция управление ПО GNU/Linux
В данной работе изучаются:
- работа с утилитами управления пакетами и репозиториями
rpm
иyum
- работа с утилитами создания новых пакетов
rpmbuild
и репозиториевcreaterepo
- работа с утилитами для цифровой подписи пакетов
Для выполнения индивидуальных заданий используйте уникальный номер, как комбинацию k01-<номер_группы>-<номер_студента>
. Например: студент №1 - k01-361-01
или k01-362-01
.
- Выведите список доступных репозиториев и групп (коллекций) пакетов. Определите количество пакетов в каждом из них.
yum repolist yum grouplist
- Выведите список установленных пакетов и подсчитайте их количество.
rpm -qa | less rpm -qa | wc -l yum list installed | less
- Определите установлен ли в системе пакет построения графиков функций
gnuplot
.rpm -qa | grep gnuplot
- Найдите пакет
gnuplot
в доступных репозиториях.yum search gnuplot
- Выведите информацию о пакете
gnuplot
.yum info gnuplot
- Установите пакет
gnuplot
.Какие еще пакеты были установлены для удовлетворения зависимостей?sudo yum install gnuplot
- Выведите информацию об установленном пакете.
rpm -qi gnuplot yum list installed gnuplot
- Выведите список установленных файлов из пакета
gnuplot
.rpm -ql gnuplot
- Определите, к какому пакету относится файл
/usr/bin/gnuplot-wx
.rpm -qf /usr/bin/gnuplot-wx
- Определите зависимости для пакета
gnuplot
.yum deplist gnuplot
- Попробуйте удалить пакет
gnuplot-common
с помощью утилитыrpm
.sudo rpm -e gnuplot-common
- Удалите пакет
gnuplot
и его зависимости. Сравните работу утилитrpm
иyum
.sudo yum remove gnuplot-common
-
Подключите новый репозиторий
yandex
.Создайте файл
/etc/yum.repos.d/yandex.repo
со следующим содержимым:[yandex] name=yandex-epel baseurl=http://mirror.yandex.ru/epel/7/x86_64/ enabled=1
-
Убедитесь, что подключенный репозиторий доступен.
sudo yum clean all sudo yum repolist yandex
- Создайте новый пакет. Используйте утилиту
rpmbuild
. Установите группу средств разработки.sudo yum install rpmdev* rpm-sign
- Подготовьте каталоги для сборки пакета (
SOURCES
,SPECS
,BUILD
,RPMS
,SRPMS
):cd rpmdev-setuptree
- Перейдите в каталог
SOURCES
и создайте каталог№группы-№студента-1.0
. Например:k01-361-01-1.0
илиk01-362-01-1.0
.В качестве содержимого пакета напишите самостоятельно сценарий, выполняющий командуcd ~/rpmbuild/SOURCES mkdir №группы-№студента-1.0
date
:cd №группы-№студента-1.0 vi №группы-№студента # введите код сценария chmod +x №группы-№студента
- Создайте архив
№группы-№студента-1.0
cd ~/rpmbuild/SOURCES/ tar -cvzf №группы-№студента-1.0.tar.gz №группы-№студента-1.0
- Перейдите в каталог
SPECS
.Создайте файлcd ../SPECS
№группы-№студента.spec
со следующим содержимым:Name: №группы-№студента Version: 1.0 Release: 1%{?dist} Summary: Программа студента ... группы ... Group: Testing License: GPL URL: https://github.com/ivanov/my-rpm-package # ссылка на ваш git Source0: %{name}-%{version}.tar.gz BuildRequires: /bin/rm, /bin/mkdir, /bin/cp Requires: /bin/bash, /usr/bin/date BuildArch: noarch %description A test package %prep %setup -q %install mkdir -p %{buildroot}%{_bindir} install -m 755 №группы-№студента %{buildroot}%{_bindir} %files %{_bindir}/№группы-№студента %changelog * Thu Oct 16 2012 <Фамилия> - Added %{_bindir}/№группы-№студента
- Выполните сборку пакета.
Если скрипт и
rpmbuild -ba №группы-№студента.spec
spec
файлы не содержат ошибок, то в результате в каталогеRPMS/noarch
, будет создан бинарный пакет№группы-№студента-1.0-1.el7.noarch.rpm
, а в каталогеSRPMS
будет создан исходный пакет№группы-№студента-1.0-1.el7.src.rpm
.
Переделайте данный пакет таким образом, чтобы при установке он также устанавливал пакет gnuplot
.
- Перейдите в каталог
SOURCES
. Создайте каталогc-№группы-№студента-1.0
. Например:c-k01-361-01-1.0
.В качестве содержимого пакета самостоятельно создайте программу, разработанную на языке C и выводящую на экран текстcd ~/rpmbuild/SOURCES mkdir c-№группы-№студента-1.0
Hello, world, from C!
.cd c-№группы-№студента-1.0 vi c-№группы-№студента.c
- Создайте архив
c-№группы-№студента-1.0
cd ~/rpmbuild/SOURCES tar cvfz c-№группы-№студента-1.0.tar.gz c-№группы-№студента-1.0
- Перейдите в каталог
SPECS
.Создайте файлcd ~/rpmbuild/SPECS
c-№группы-№студента.spec
со следующим содержимым:Name: c-№группы-№студента Version: 1.0 Release: 1%{?dist} Summary: Программа студента ... группы ... Group: Testing License: GPL URL: https://github.com/ivanov/my-c-rpm-package # ссылка на ваш git Source: %{name}-%{version}.tar.gz BuildRequires: gcc %description A test package %prep %setup -q %build gcc -g -O2 -o c-№группы-№студента c-№группы-№студента.c %install mkdir -p %{buildroot}%{_bindir} cp c-№группы-№студента %{buildroot}%{_bindir} %files %{_bindir}/c-№группы-№студента %changelog * Thu Oct 16 2012 <Фамилия> - Added %{_bindir}/c-№группы-№студента
- Выполните сборку пакета.
Если скрипт и spec файлы не содержат ошибок, то в результате в каталоге
rpmbuild -ba c-№группы-№студента.spec
RPMS/x86_64
, будет создан бинарный пакетc-№группы-№студента-1.0-1.el7.x86_64.rpm
, а в каталоге SRPMS будет создан исходный пакетc-№группы-№студента-1.0-1.el7.src.rpm
.
Переделайте данный пакет таким образом, чтобы при установке он также устанавливал пакет №группы-№студента
, разработанный на предыдущем шаге.
- Сгенерируйте ключ со своим именем и фамилией (например, Ivanov Ivan).
gpg2 --gen-key
- Установите пакет
haveged
и запустите службуhaveged
.sudo yum install haveged sudo systemctl enable haveged sudo systemctl start haveged
- Сгенерируйте ещё один ключ (для другого e-mail) и сравните скорость создания ключа.
- Выполните экспорт публичной части ключа:
gpg2 --export -a 'Ivanov Ivan' > ~/rpmbuild/RPM-GPG-KEY-Ivanov-Ivan
- Создайте RPM-макрос
~/.rpmmacros
с помощью редактораvi
.%_gpg_name Ivanov Ivan
- Подпишите все пакеты:
rpm --addsign ~/rpmbuild/RPMS/*/*.rpm
-
Создайте новый репозиторий. Используйте утилиту
createrepo
.sudo yum install createrepo sudo mkdir -p /var/www/html/myrepo sudo cp ~/rpmbuild/RPMS/*/*.rpm /var/www/html/myrepo sudo cp ~/rpmbuild/RPM-GPG-KEY-Ivanov-Ivan /var/www/html/myrepo sudo createrepo -v /var/www/html/myrepo
-
Подключите созданный репозиторий к системе.
Создайте файл
/etc/yum.repos.d/my.repo
со следующим содержимым:[myrepo] name=my-repo baseurl=http://localhost/myrepo enabled=1 gpgkey=http://localhost/myrepo/RPM-GPG-KEY-Ivanov-Ivan
Выполните команды:
sudo yum install -y httpd sudo systemctl enable httpd.service sudo systemctl start httpd.service yum repolist sudo yum install c-№гурппы-№студента №гурппы-№студента
При установке пакетов появится сообщение об импорте нового GPG ключа:
Importing GPG key 0x6C6B5407: Userid : "Ivanov Ivan <[email protected]>" Fingerprint: 163E D179 58AD 8F04 77B0 CDFA 8B41 A44E 6C6B 5407 From : http://localhost/myrepo/RPM-GPG-KEY-Ivanov-Ivan
Введите
y
иEnter
. -
Проверьте работу установленных пакетов.
Для защиты работы необходимо продемонстрировать установку пакета из собственного репозитория и ответить на вопросы по теме работы.