# Домашнее задание 7 ## Сборка RPM-пакета и создание репозитория Для выполнение задания используется Fedora Linux 43 (Server Edition) ### Устанавливаем дополнительные пакеты Для работы с собственным репозиторием устанавливаем дополнительные пакеты ```bash [root@fedora2 ~]# yum install -y wget rpmdevtools rpm-build createrepo yum-utils cmake gcc git Updating and loading repositories: Fedora 43 openh264 (From Cisco) - x86_ 100% | 3.7 KiB/s | 5.8 KiB | 00m02s Fedora 43 - x86_64 100% | 6.9 MiB/s | 35.7 MiB | 00m05s Fedora 43 - x86_64 - Updates 100% | 710.5 KiB/s | 5.7 MiB | 00m08s Repositories loaded. Package "wget2-wget-2.2.0-6.fc43.x86_64" is already installed. ... ... [76/78] Removing libxcrypt-0:4.4.38-8.fc43.x86_64 100% | 1.2 KiB/s | 18.0 B | 00m00s [77/78] Removing libgomp-0:15.2.1-2.fc43.x86_64 100% | 2.2 KiB/s | 9.0 B | 00m00s [78/78] Removing libgcc-0:15.2.1-2.fc43.x86_64 100% | 3.0 B/s | 11.0 B | 00m03s Complete! ``` ### Загрузка SRPM пакета apache Создаем папку куда будем загружать, и скачиваем apache ```bash [root@fedora2 ~]# mkdir /var/rpm [root@fedora2 ~]# cd /var/rpm/ [root@fedora2 rpm]# yumdownloader --source httpd enabling fedora-source repository enabling fedora-cisco-openh264-source repository enabling updates-source repository Fedora 43 - x86_64 8.5 MB/s | 35 MB 00:04 Fedora 43 - Source 6.3 MB/s | 5.9 MB 00:00 Fedora 43 openh264 (From Cisco) - x86_64 1.8 kB/s | 1.8 kB 00:01 Fedora 43 openh264 (From Cisco) - x86_64 - Source 1.1 kB/s | 770 B 00:00 Fedora 43 - x86_64 - Updates 4.2 MB/s | 4.7 MB 00:01 Fedora 43 - Updates Source 901 kB/s | 769 kB 00:00 httpd-2.4.65-3.fc43.src.rpm 183 kB/s | 7.7 MB 00:43 ``` Установка пакета и зависимостей ```bash [root@fedora2 rpm]# rpm -Uvh httpd-2.4.65-3.fc43.src.rpm Updating / installing... 1:httpd-2.4.65-3.fc43 ################################# [100%] [root@fedora2 rpm]# yum-builddep httpd -y enabling fedora-source repository enabling fedora-cisco-openh264-source repository enabling updates-source repository Last metadata expiration check: 0:06:21 ago on Thu 27 Nov 2025 12:00:11 PM MSK. Package make-1:4.4.1-11.fc43.x86_64 is already installed. Package gcc-15.2.1-4.fc43.x86_64 is already installed. Package systemd-rpm-macros-258-1.fc43.noarch is already installed. Package gnupg2-2.4.8-4.fc43.x86_64 is already installed. Package perl-interpreter-4:5.42.0-520.fc43.x86_64 is already installed. Package pkgconf-pkg-config-2.3.0-3.fc43.x86_64 is already installed. Package findutils-1:4.10.0-6.fc43.x86_64 is already installed. Package libxcrypt-devel-4.5.2-1.fc43.x86_64 is already installed. Dependencies resolved. ============================================================================================================================================================================================================================================================================================================================= Package Architecture Version Repository Size ============================================================================================================================================================================================================================================================================================================================= Installing: apr-devel x86_64 1.7.6-3.fc43 fedora 235 k apr-util-devel x86_64 1.6.3-25.fc43 updates 78 k ... ... Complete! ``` ### Изменение и сборка пакета Далее я хочу изменить установку apache так, что бы после установки он работал на 81 порту а не не на 80. Для этого редактируем httpd.spec ```bash [root@fedora2 rpm]# cd ~/rpmbuild/SPECS/ [root@fedora2 SPECS]# vi httpd.spec ``` Найдем сценарий %post (в данном сценарии выполняются действия после установки пакета), и вставим небольшой скрипт, который заменит порт в стандартной конфигурации apache ```bash sed -i 's/^Listen 80/Listen 81/g' /etc/httpd/conf/httpd.conf ``` Собираем RPM пакет ```bash [root@fedora2 SPECS]# rpmbuild -ba httpd.spec -D 'debug_package %{nil}' setting SOURCE_DATE_EPOCH=1762905600 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.2KbsA2 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.Mrff9G + umask 022 + cd /root/rpmbuild/BUILD/httpd-2.4.65-build + /usr/libexec/gpgverify --keyring=/root/rpmbuild/SOURCES/KEYS --signature=/root/rpmbuild/SOURCES/httpd-2.4.65.tar.bz2.asc --data=/root/rpmbuild/SOURCES/httpd-2.4.65.tar.bz2 gpgv: Signature made Mon Jul 21 15:10:24 2025 MSK gpgv: using RSA key 65B2D44FE74BD5E3DE3AC3F082781DE46D5954FA ... ``` Копируем пакеты в общий каталог ```bash [root@fedora2 SPECS]# cp ~/rpmbuild/RPMS/noarch/* ~/rpmbuild/RPMS/x86_64/ ``` Пробуем установить apache ```bash [root@fedora2 SPECS]# cd ~/rpmbuild/RPMS/x86_64 [root@fedora2 x86_64]# dnf install ./httpd-2.4.65-3.fc43.x86_64.rpm [root@fedora2 x86_64]# dnf install ./httpd-2.4.65-3.fc43.x86_64.rpm Updating and loading repositories: Repositories loaded. Package Arch Version Repository Size Installing: httpd x86_64 2.4.65-3.fc43 @commandline 61.5 KiB Installing dependencies: fedora-logos-httpd noarch 42.0.1-2.fc43 fedora 12.1 KiB httpd-core x86_64 2.4.65-3.fc43 updates 4.5 MiB httpd-filesystem noarch 2.4.65-3.fc43 .... .... [10/10] Installing julietaula-montserrat-fonts-1:9.000-3.fc43.noarch 100% | 6.5 MiB/s | 5.6 MiB | 00m01s Warning: skipped OpenPGP checks for 1 package from repository: @commandline Complete! ``` Apache успешно установился, запускаем его и смотрим, какие порты он слушает. ```bash [root@fedora2 x86_64]# systemctl start httpd ``` ```bash [root@fedora2 x86_64]# ss -tulpn | grep httpd tcp LISTEN 0 511 *:81 *:* users:(("httpd",pid=134653,fd=4),("httpd",pid=134652,fd=4),("httpd",pid=134651,fd=4),("httpd",pid=134649,fd=4) ``` Мы видим, что он слушает 81 порт, как мы и хотели. ### Создание своего репозитория Создадим каталог ```bash [root@fedora2 x86_64]# mkdir /var/www/html/repo ``` Скопируем туда ранее созданные RMP пакеты ```bash [root@fedora2 x86_64]# cp ~/rpmbuild/RPMS/x86_64/*.rpm /var/www/html/repo/ ``` Создаем репозиторий ```bash [root@fedora2 x86_64]# createrepo /var/www/html/repo/ Directory walk started Directory walk done - 11 packages Temporary output repo path: /var/www/html/repo/.repodata/ Pool started (with 5 workers) Pool finished ``` С помощью curl проверим, что нам отдает apache ```bash [root@fedora2 x86_64]# curl -a http://localhost:81/repo/ Index of /repo

Index of /repo

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory   -  
[   ]httpd-2.4.65-3.fc43...>2025-11-27 15:47 45K 
[   ]httpd-core-2.4.65-3...>2025-11-27 15:47 1.3M 
[   ]httpd-devel-2.4.65-3..>2025-11-27 15:47 194K 
[   ]httpd-filesystem-2.4..>2025-11-27 15:47 12K 
[   ]httpd-manual-2.4.65-..>2025-11-27 15:47 2.2M 
[   ]httpd-tools-2.4.65-3..>2025-11-27 15:47 77K 
[   ]mod_ldap-2.4.65-3.fc..>2025-11-27 15:47 58K 
[   ]mod_lua-2.4.65-3.fc4..>2025-11-27 15:47 58K 
[   ]mod_proxy_html-2.4.6..>2025-11-27 15:47 34K 
[   ]mod_session-2.4.65-3..>2025-11-27 15:47 42K 
[   ]mod_ssl-2.4.65-3.fc4..>2025-11-27 15:47 109K 
[DIR]repodata/ 2025-11-27 15:47 -  

``` Подключаем созданный репозиторий в систему ```bash [root@fedora2 x86_64]# cat >> /etc/yum.repos.d/home.repo<< EOF [home] name=home-linux baseurl=http://localhost:81/repo gpgcheck=0 enabled=1 EOF ``` Для проверки добавим еще паке в наш репозиторий ```bash [root@fedora2 x86_64]# cd /var/www/html/repo/ [root@fedora2 repo]# wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm Saving 'percona-release-latest.noarch.rpm' HTTP response 200 [https://repo.percona.com/yum/percona-release-latest.noarch.rpm] percona-release-late 100% [=====================================================================================================================================================================================================>] 27.86K --.-KB/s [Files: 1 Bytes: 27.86K [89.30KB/s] Redirects: 0 Todo: 0 Errors: 0 ] ``` Обновим список пакетов ```bash [root@fedora2 repo]# createrepo /var/www/html/repo/ Directory walk started Directory walk done - 13 packages Temporary output repo path: /var/www/html/repo/.repodata/ Pool started (with 5 workers) Pool finished [root@fedora2 repo]# yum makecache Updating and loading repositories: home-linux 100% | 1.1 MiB/s | 6.8 KiB | 00m00s Repositories loaded. Metadata cache created. ``` Посмотрим, какие пакеты данный момент есть в репозитории ```bash [root@fedora2 repo]# yum list | grep home Updating and loading repositories: Repositories loaded. httpd-devel.x86_64 2.4.65-3.fc43 home httpd-manual.noarch 2.4.65-3.fc43 home mod_ldap.x86_64 2.4.65-3.fc43 home mod_proxy_html.x86_64 1:2.4.65-3.fc43 home mod_session.x86_64 2.4.65-3.fc43 home mod_ssl.x86_64 1:2.4.65-3.fc43 home percona-release.noarch 1.0-32 home ``` Пробуем установить ```bash [root@fedora2 repo]# yum install -y percona-release.noarch Updating and loading repositories: Repositories loaded. Package Arch Version Repository Size Installing: percona-release noarch 1.0-32 home 50.3 KiB ... ... Complete! ``` Готово, наш репозиторий в рабочем состоянии!