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
.