Jak dołączyć %changelog, %post_install i %post_uninstall do pliku spec używając distutils i setup.py

Ostatnimi czasy moją głowę zaprzątał problem stworzenia paczki rpm dla mojego programu SynapticsConfig. Długo walczyłem z jednego powodu, chciałem użyć distutils a nie ręcznie tworzyć plik spec. Poniżej przytoczę problemy z którymi się borykałem oraz rozwiązania tych problemów. Wg. mnie dokumentacja distutils i pythona dotycząca zagadnień które poruszam jest dosyć skromna i wszelkie próby znalezienia rozwiązania dawały mierne wyniki. Całe szczęście mamy listy dyskusyjne oraz od źródłowy (fuck you propietary software!).

  1. Dołączanie %changelog
  2. Część pliku spec odpowiedzialna za changelog jest wymagana, tak przynajmniej uważa rpmlint oraz tak stoi w dokumentacji Fedory. W dokumentacji distutils nie ma zbyt wielu informacji na ten temat. Jednak naprowadziła mnie ona na proste rozwiązanie a mianowicie

    python setup.py bdist_rpm --help

    Komenda wyświetla dokładnie to czego potrzeba czyli

    --changelog          RPM changelog

    To mogłoby załatwić sprawę gdyby nie brak informacji w jakiej postaci ma być changelog. Wszystko wskazuje, że to powinien być plik jednak domyślne formatowanie nie spełniało wymagań i ładnie wypluwało komunikat, że wiersz musi zaczynać się od „*”. Postanowiłem zerknąć do pliku odpowiedzialnego za generowanie paczek rpm /usr/lib64/python2.6/distutils/command/bdist_rpm.py. Na początku pliku wśród listy opcji pojawia się taki tekst

    # More meta-data: too RPM-specific to put in the setup script,
    # but needs to go in the .spec file — so we make these options
    # to „bdist_rpm”.  The idea is that packagers would put this
    # info in setup.cfg, although they are of course free to
    # supply it on the command line.

    No ładnie ale ja z lini poleceń nie mogłem dołączyć changelog więc z pomocą przyszedł plik setup.cfg. Do pustego pliku dodałem linijkę

    [bdist_rpm]
    changelog = #tutaj tekst changelog oczywiście zaczynający się od *

    Należy pamiętać o gwiazdce ropoczynającej każdą wersję oraz o poprawnym formacie daty. Rpm jest bardzo wymagający w tym temacie. Tak przygotowany changelog powinen przejść proces budowania paczki.

  3. Dodawanie %post_install i %post_uninstall
  4. Kolejne rzeczy, które musiałem skonfigurować to sekcje kodu uruchamiane po zainstalowaniu paczki i jej odinstalowaniu. Wspomniany wcześniej bdist_rpm –help tak opisuje to

    –post-install       Specify a script for the post-INSTALL phase of RPM
    building
    –post-uninstall     Specify a script for the post-UNINSTALL phase of RPM
    building

    W tym wypadku jednak nie używałem linii poleceń ani pliku setup.cfg. Te dwie opcje pozwoliły sie zgrabnie dołączyć do pliku setup.py jako argument funkcji setup

    options={'bdist_rpm' : {'post_install'  : 'ścieżka_do_pliku', 'post_uninstall'  : 'ścieżka_do_pliku'}}

    Bardzo możliwe, że zamiast podawania ścieżek do istniejących plików można wsadzić komendy. W wypadku skryptów mających parę linijek może pojawić się problem, ale nie testowałem.

Mam nadzieję, że przybliżyło to co niektórych do stworzenia własnej paczki rpm przy użyciu distutils. To dlaczego wybrałem %post_install i %post_uninstall zostało podyktowane sposobem uruchamiania mojego programu i niemożliwością (spodowoaną może brakiem wystarczającej wiedzy) dodania linka do pliku w paczce rpm. Z wielką chęcią przyjmę wszelkie uwagi lub sugestie.

0 Responses to “Jak dołączyć %changelog, %post_install i %post_uninstall do pliku spec używając distutils i setup.py”


  • No Comments

Leave a Reply

CommentLuv badge