Лабораторная работа "Управление пакетами" - 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.0cd ~/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.0cd ~/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. -
Проверьте работу установленных пакетов.
Для защиты работы необходимо продемонстрировать установку пакета из собственного репозитория и ответить на вопросы по теме работы.