Wyszukiwanie w witrynie

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:

  1. BUILD – przechowuje różne katalogi %buildroot podczas budowania pakietów.
  2. RPMS – będzie zawierał binarne RPM w podkatalogach Architektury.
  3. ŹRÓDŁA – przechowuje skompresowane archiwa źródłowe i wszelkie łatki, tutaj będzie ich szukać polecenie rpmbuild.
  4. SPECS – przechowuje pliki SPEC.
  5. 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.