Jak utworzyć pakiet GNU Hello World RPM w Fedorze
RPM (rekurencyjny akronim od RPM Package Manager) to darmowy system zarządzania pakietami o otwartym kodzie źródłowym dla systemu Linux. Chociaż pierwotnie został stworzony do użytku w Red Hat Linux, obecnie jest używany w wielu dystrybucjach Linuksa, takich jak CentOS, Fedora i OpenSuse. Co ważne, nazwa RPM odnosi się do programu zarządzającego pakietami, a .rpm
to format pliku.
W tym artykule wyjaśnimy, jak pisać pliki RPM, pokazując, jak łatwo utworzyć proste pakiety źródłowe i binarne oprogramowania, na przykład pakiet RPM GNU „Hello World” w Fedorze Linux dystrybucja. Zakładamy, że masz podstawową wiedzę na temat gotowych pakietów RPM i procesu tworzenia bezpłatnego oprogramowania Open Source.
Zainstaluj Narzędzia programistyczne w Fedorze
Zacznijmy od skonfigurowania środowiska programistycznego w Fedorze Linux, uruchamiając następujące polecenie, aby zainstalować niezbędne narzędzia do tworzenia RPM.
sudo dnf install fedora-packager @development-tools
Następnie dodaj swoje nieuprzywilejowane konto do grupy „próbne” w następujący sposób (zamień tecmint na swoją rzeczywistą nazwę użytkownika). Umożliwi to przetestowanie procedury kompilacji w czystym chroot.
sudo usermod -a -G mock tecmint
Teraz utwórz kompilację RPM w katalogu ~/rpmbuild
i zweryfikuj kompilację za pomocą następujących poleceń. Wyświetli listę podkatalogów, która zawiera kod źródłowy projektu, pliki konfiguracyjne RPM i pakiety binarne.
rpmdev-setuptree
tree ~/rpmbuild/
Oto do czego przeznaczony jest każdy katalog:
- BUILD – przechowuje różne katalogi %buildroot podczas budowania pakietów.
- RPMS – będzie zawierał binarne RPM w podkatalogach Architektury.
- ŹRÓDŁA – przechowuje skompresowane archiwa źródłowe i wszelkie łatki, tutaj będzie ich szukać polecenie rpmbuild.
- SPECS – przechowuje pliki SPEC.
- SRPMS – przechowuje źródłowy RPM zamiast binarnego RPM.
Budowanie RPM „Hello World”.
Na tym etapie musisz pobrać kod źródłowy (znany również jako źródło „upstream”) pakowanego przez nas projektu Hello World do pliku ~/rpmbuild/SOURCE katalog za pomocą następującego polecenia wget.
cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES
Następnie skonfigurujmy pakiet RPM przy użyciu pliku .spec
(nazwijmy go w tym przypadku hello.spec
) w pliku ~/rpmbuild/SPECS katalog, używając programu rpmdev-newspec.
cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls
Następnie otwórz plik hello.spec
za pomocą swojego ulubionego edytora.
vim hello.spec
Domyślny szablon powinien wyglądać tak:
Name: hello
Version:
Release: 1%{?dist}
Summary:
License:
URL:
Source0:
BuildRequires:
Requires:
%description
%prep
%autosetup
%build
%configure
%make_build
%install
rm -rf $RPM_BUILD_ROOT
%make_install
%files
%license add-license-file-here
%doc add-docs-here
%changelog
* Tue May 28 2019 Aaron Kili
Wyjaśnijmy krótko domyślne parametry w pliku .spec
:
- Nazwa – służy do ustawienia nazwy pakietu.
- Wersja – powinna odzwierciedlać poprzednią wersję.
- Wydanie – numery, nad którymi pracujesz w Fedorze.
- Podsumowanie – to krótki, jednowierszowy opis paczki, pierwsza litera powinna być duża, aby uniknąć reklamacji.
- Licencja – sprawdź stan licencji oprogramowania, sprawdzając pliki źródłowe i/lub pliki LICENCJI i/lub rozmawiając z autorami.
- URL – określa stronę główną pakietu oprogramowania.
- Źródło0 – określa pliki źródłowe. Może to być bezpośredni adres URL lub ścieżka skompresowanego kodu źródłowego oprogramowania.
- BuildRequires – określa zależności potrzebne do zbudowania oprogramowania.
- Wymaga – określa zależności potrzebne do uruchomienia oprogramowania.
- %prep – służy do stworzenia środowiska do budowy pakietu RPM.
- %build – służy do kompilacji i budowania kodów źródłowych.
- %install – służy do instalowania programów. Zawiera listę poleceń potrzebnych do skopiowania pliku wynikowego z procesu kompilacji do katalogu BUILDROOT.
- %files – ta sekcja zawiera listę plików dostarczonych przez pakiet, które zostaną zainstalowane w systemie.
- %changelog – powinien przechowywać pracę nad przygotowaniem RPM, zwłaszcza jeśli na wierzchu podstawowego źródła źródłowego znajdują się poprawki bezpieczeństwa i błędów. Jest generowany automatycznie podczas tworzenia pliku hello.spec. Dane dziennika zmian są zwykle wyświetlane przez
rpm --changelog -q
.
Teraz edytuj plik .spec
i wprowadź zmiany, jak pokazano.
Name: hello
Version: 2.10
Release: 1%{?dist}
Summary: The "Hello World" program from GNU
License: GPLv3+
URL: http://ftp.gnu.org/gnu/%{name}
Source0: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz
BuildRequires: gettext
Requires(post): info
Requires(preun): info
%description
The "Hello World" program package
%prep
%autosetup
%build
%configure
make %{make_build}
%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir
%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :
%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi
%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello
%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING
%changelog
* Tue May 28 2019 Aaron Kili
Zauważysz, że w powyższym pliku zastosowaliśmy kilka nowych parametrów, które nie zostały wyjaśnione. Są to tak zwane makra, używane do tworzenia wywołań systemowych zdefiniowanych przez RPM w celu ustawienia ścieżek instalacji pakietów. Dlatego zazwyczaj lepiej nie kodować tych ścieżek na stałe w plikach specyfikacji, ale używać tych samych makr dla zachowania spójności.
Poniżej znajdują się makra kompilacji i katalogu RPM wraz z ich definicjami i wartościami domyślnymi:
- %{make_build – jest używany w sekcji %build pliku specyfikacji, uruchamia polecenie make.
- %{name – definiuje nazwę pakietu lub katalogu.
- %{buildroot – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, to samo co $BUILDROOT
- %{_infodir – %{_datarootdir}/info, domyślnie: /usr/share/info
- %{_mandir – %{_datarootdir}/man, domyślnie: /usr/share/man
- %{_bindir – %{_exec_prefix}/bin, domyślnie: /usr/bin
Pamiętaj, że wartości tych makr można znaleźć w pliku /usr/lib/rpm/platform/*/macros lub zapoznać się z Wytycznymi dotyczącymi pakowania:Makra RPM.
Budowa pakietu RPM
Aby zbudować pakiety źródłowe, binarne i debugujące, uruchom następującą komendę obr./min.
rpmbuild -ba hello.spec
Po procesie kompilacji źródłowe RPM i binarne RPM zostaną utworzone odpowiednio w katalogach ../SRPMS/
i ../RPMS/
. Możesz użyć programu rpmlint, aby sprawdzić i upewnić się, że utworzony plik specyfikacji i pliki RPM są zgodne z zasadami projektowania RPM:
rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*
Jeśli występują jakieś błędy pokazane na powyższym zrzucie ekranu, napraw je, zanim będziesz mógł kontynuować.
Na koniec użyj programu próbnego, aby sprawdzić, czy kompilacja pakietu powiedzie się w ograniczonym środowisku kompilacji Fedory.
mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Fedory: Tworzenie pakietów RPM.
To wszystko! W tym artykule wyjaśniliśmy, jak ulepszyć system Fedora, aby utworzyć prosty pakiet źródłowy i binarny oprogramowania. Pokazaliśmy także, jak utworzyć pakiet RPM GUN Hello Word. Skorzystaj z poniższego formularza opinii, aby skontaktować się z nami w przypadku jakichkolwiek pytań lub komentarzy.