Лабораторная работа "Управление пакетами" - efanov/mephi GitHub Wiki

Подготовка

Лекция управление ПО GNU/Linux

Описание

В данной работе изучаются:

  • работа с утилитами управления пакетами и репозиториями rpm и yum
  • работа с утилитами создания новых пакетов rpmbuild и репозиториев createrepo
  • работа с утилитами для цифровой подписи пакетов

Для выполнения индивидуальных заданий используйте уникальный номер, как комбинацию k01-<номер_группы>-<номер_студента>. Например: студент №1 - k01-361-01 или k01-362-01.

Работа с настроенными rpm-репозиториями

  1. Выведите список доступных репозиториев и групп (коллекций) пакетов. Определите количество пакетов в каждом из них.
    yum repolist
    yum grouplist
  2. Выведите список установленных пакетов и подсчитайте их количество.
    rpm -qa | less
    rpm -qa | wc -l
    yum list installed | less
  3. Определите установлен ли в системе пакет построения графиков функций gnuplot.
    rpm -qa | grep gnuplot
  4. Найдите пакет gnuplot в доступных репозиториях.
    yum search gnuplot
  5. Выведите информацию о пакете gnuplot.
    yum info gnuplot
  6. Установите пакет gnuplot.
    sudo yum install gnuplot
    Какие еще пакеты были установлены для удовлетворения зависимостей?
  7. Выведите информацию об установленном пакете.
    rpm -qi gnuplot
    yum list installed gnuplot
  8. Выведите список установленных файлов из пакета gnuplot.
    rpm -ql gnuplot
  9. Определите, к какому пакету относится файл /usr/bin/gnuplot-wx.
    rpm -qf /usr/bin/gnuplot-wx
  10. Определите зависимости для пакета gnuplot.
    yum deplist gnuplot
  11. Попробуйте удалить пакет gnuplot-common с помощью утилиты rpm.
    sudo rpm -e gnuplot-common
  12. Удалите пакет gnuplot и его зависимости. Сравните работу утилит rpm и yum.
    sudo yum remove gnuplot-common

Подключение существующих репозиториев

  1. Подключите новый репозиторий yandex.

    Создайте файл /etc/yum.repos.d/yandex.repo со следующим содержимым:

    [yandex]
    name=yandex-epel
    baseurl=http://mirror.yandex.ru/epel/7/x86_64/
    enabled=1
  2. Убедитесь, что подключенный репозиторий доступен.

    sudo yum clean all
    sudo yum repolist yandex

Создание rpm-пакета из сценария на языке Bash

  1. Создайте новый пакет. Используйте утилиту rpmbuild. Установите группу средств разработки.
    sudo yum install rpmdev* rpm-sign
  2. Подготовьте каталоги для сборки пакета (SOURCES, SPECS, BUILD, RPMS, SRPMS):
    cd
    rpmdev-setuptree
  3. Перейдите в каталог 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 №группы-№студента
  4. Создайте архив №группы-№студента-1.0
    cd ~/rpmbuild/SOURCES/
    tar -cvzf №группы-№студента-1.0.tar.gz №группы-№студента-1.0
  5. Перейдите в каталог 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}/№группы-№студента
  6. Выполните сборку пакета.
    rpmbuild -ba №группы-№студента.spec
    Если скрипт и spec файлы не содержат ошибок, то в результате в каталоге RPMS/noarch, будет создан бинарный пакет №группы-№студента-1.0-1.el7.noarch.rpm, а в каталоге SRPMS будет создан исходный пакет №группы-№студента-1.0-1.el7.src.rpm.

Самостоятельно

Переделайте данный пакет таким образом, чтобы при установке он также устанавливал пакет gnuplot.

Создание rpm-пакета из программы на языке C

  1. Перейдите в каталог SOURCES. Создайте каталог c-№группы-№студента-1.0. Например: c-k01-361-01-1.0.
    cd ~/rpmbuild/SOURCES
    mkdir c-№группы-№студента-1.0
    В качестве содержимого пакета самостоятельно создайте программу, разработанную на языке C и выводящую на экран текст Hello, world, from C!.
    cd c-№группы-№студента-1.0
    vi c-№группы-№студента.c
  2. Создайте архив c-№группы-№студента-1.0
    cd ~/rpmbuild/SOURCES
    tar cvfz c-№группы-№студента-1.0.tar.gz c-№группы-№студента-1.0
  3. Перейдите в каталог 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-№группы-№студента
  4. Выполните сборку пакета.
    rpmbuild -ba c-№группы-№студента.spec
    Если скрипт и spec файлы не содержат ошибок, то в результате в каталоге RPMS/x86_64, будет создан бинарный пакет c-№группы-№студента-1.0-1.el7.x86_64.rpm, а в каталоге SRPMS будет создан исходный пакет c-№группы-№студента-1.0-1.el7.src.rpm.

Самостоятельно

Переделайте данный пакет таким образом, чтобы при установке он также устанавливал пакет №группы-№студента, разработанный на предыдущем шаге.

Электронная цифровая подпись RPM-пакетов

  1. Сгенерируйте ключ со своим именем и фамилией (например, Ivanov Ivan).
    gpg2 --gen-key
  2. Установите пакет haveged и запустите службу haveged.
    sudo yum install haveged
    sudo systemctl enable haveged
    sudo systemctl start haveged
  3. Сгенерируйте ещё один ключ (для другого e-mail) и сравните скорость создания ключа.
  4. Выполните экспорт публичной части ключа:
    gpg2 --export -a 'Ivanov Ivan' > ~/rpmbuild/RPM-GPG-KEY-Ivanov-Ivan
  5. Создайте RPM-макрос ~/.rpmmacros с помощью редактора vi.
    %_gpg_name Ivanov Ivan
  6. Подпишите все пакеты:
    rpm --addsign ~/rpmbuild/RPMS/*/*.rpm

Создание нового rpm-репозитория

  1. Создайте новый репозиторий. Используйте утилиту 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
  2. Подключите созданный репозиторий к системе.

    Создайте файл /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.

  3. Проверьте работу установленных пакетов.

Прием результатов

Для защиты работы необходимо продемонстрировать установку пакета из собственного репозитория и ответить на вопросы по теме работы.

⚠️ **GitHub.com Fallback** ⚠️