Puncte:1

Convertirea pachetelor RPM pentru Debian eșuează „din cauza metacaracterelor shell”

drapel in

Încerc să convertesc pachetele RPM „MegaRAID Storage Manager” în pachete Debian dep. Folosesc pachetul extraterestru pentru asta, așa cum este explicat aici:

https://hosting-tutorials.co.uk/tutorials/linux/installing-megaraid-storage-manager-on-debian

Acesta este pachetul pe care încerc să-l convertesc: https://docs.broadcom.com/docs-and-downloads/17.05.06.00_MSM_Linux-x64.zip

Pachetul „lib-utils2_1.00-12_all” convertește bine în .deb, dar „MegaRAID_Storage_Manager-17.05.06-00.noarch.rpm” nu:

# alien --scripts *.rpm
lib-utils2_1.00-12_all.deb generat

Construirea pachetului a eșuat. Iată jurnalul:
dh binar
   dh_update_autotools_config
   dh_autoreconf
   create-stamp debian/debhelper-build-stamp
   dh_testroot
   dh_prep
   debian/rules override_dh_auto_install
make[1]: se introduce în directorul „/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06”
mkdir -p debian/megaraid-storage-manager
# Copiați fișierele pachetelor.
găsi . -maxdepth 1 -mindepth 1 -nu -nume debian -print0 | \
        sed -e s#'./'##g | \
        xargs -0 -r -i cp -a ./{} debian/megaraid-storage-manager/{}
make[1]: se părăsește directorul „/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06”
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_usrlocal
dh_usrlocal: eroare: nu se poate genera un script shell corect pentru /usr/local/MegaRAID Storage Manager din cauza metacaracterelor shell
make: *** [debian/rules:7: binary] Eroare 25

Nu stiu cum sa repar eroarea „Nu se poate genera un script shell corect pentru /usr/local/MegaRAID Storage Manager din cauza metacaracterelor shell” și va fi apreciat pentru orice ajutor.

Gazdele pe care le-am încercat sunt Debian 10 și Debian 11, toate amd64 arch și rulează shell-ul „bash”. Am încercat și coaja „sh”.

Puncte:2
drapel cl
A.B

TL;DR: spațiile și alte metacaractere nu sunt acceptate pentru directoarele care vor ateriza /usr/local.

/usr/local/MegaRAID Storage Manager conţine spaţii. Evident, acest pachet nu respectă bunele practici din lumea *nix (da vina pe LSI/Broadcom).

În schimb, puteți converti extraterestru într-un gudron sau extrageți direct folosind rpm2cpio, aflați cum sunt utilizate scripturile de instalare și puteți vedea cum să le reutilizați, opțional vedeți dacă este posibil să redenumiți directorul cu spații dacă orice referință la acesta poate fi înlocuită cu ușurință și construiți direct un pachet binar folosind dpkg-deb -b care nu va fi afectat de o astfel de problemă, dar va fi creat un pachet care nu respectă politica Debian.

explicatii mai jos...


The Politica Debian impune ca nimic să nu fie instalat de un pachet în /usr/local cu excepția unor directoare printr-o metodă indirectă:

9.1.2. Programe specifice site-ului

Conform mandatului FHS, pachetele nu trebuie să plaseze niciun fișier în /usr/local, fie punându-le în arhiva sistemului de fișiere să fie despachetat de dpkg sau manipulându-le în scripturile lor de întreținere.

In orice caz, pachetul poate crea directoare goale mai jos /usr/local asa de că administratorul de sistem știe unde să plaseze specific site-ului fișiere. Acestea nu sunt directoare în /usr/local, dar sunt copii ai directoare în /usr/local. Aceste directoare (/usr/local/*/dir/) ar trebui eliminate la scoaterea pachetului dacă sunt goale.

Rețineți că acest lucru se aplică numai directoarelor de mai jos /usr/local, nu în /usr/local.

[...]

Deci acest pachet nu poate fi compatibil oricum, de exemplu fișierul /usr/local/MegaRAID Storage Manager/startmonitorhelp.sh nu este conform: este a fişier ambalat undeva în /usr/local.

străin folosește dh_usrlocal build helper pentru a converti automat directoarele (încă compatibile) pentru a fi adăugate în scripturile de întreținere (adică pe Debian preinst, postinst etc. scripturi care sunt arhivate separat în .deb ar arhivați și va fi stocat în /var/lib/dpkg/info/ mai târziu) care va executa apoi câteva mkdir comenzi la instalare:

dh_usrlocal este un program debhelper care poate fi folosit pentru construirea pachete care vor furniza un subdirector în /usr/local când instalat.

Găsește subdirectoare ale usr/local în directorul de compilare a pachetului, și le elimină, înlocuindu-le cu fragmente de script de întreținere (dacă nu -n este folosit) pentru a crea directoare în momentul instalării și scoateți-le atunci când pachetul este scos, într-o manieră conformă cu Politica Debian. Aceste fragmente sunt inserate în scripturile de întreținere de dh_installdeb.

Conținutul /usr/bin/dh_usrlocal scriptul perl include:

          # Detectați unele cazuri evidente de „aceasta nu se va termina
          # bine". Ne bazăm pe ceea ce "în timp ce citim dir ... ; do"
          # se poate descurca pentru corectitudine.
          dacă ($fn =~ m{[\s!'"\$()*#;<>?@\[\]\`|]}) {
                  error("Nu se poate genera un script shell corect pentru $fn din cauza metacaracterelor shell");
          }

\s ceea ce înseamnă că orice spațiu din PCRE face parte din metacaracterele interzise și declanșează eroarea la parsare /usr/local/MegaRAID Storage Manager.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.