TL;DR: dấu cách và các siêu ký tự khác không được hỗ trợ cho các thư mục sẽ xuất hiện trong /usr/cục bộ
.
/usr/local/MegaRAID Trình quản lý lưu trữ
chứa khoảng trắng. Rõ ràng gói này không tuân theo các thông lệ tốt trong thế giới * nix (đổ lỗi cho LSI/Broadcom).
Thay vào đó, bạn có thể chuyển đổi người ngoài hành tinh thành tar hoặc giải nén trực tiếp bằng cách sử dụng rpm2cpio
, tìm hiểu cách sử dụng các tập lệnh cài đặt và phù hợp để xem cách sử dụng lại chúng, tùy ý xem liệu có thể đổi tên thư mục bằng dấu cách hay không nếu bất kỳ tham chiếu nào đến thư mục đó cũng có thể dễ dàng thay thế và xây dựng trực tiếp gói nhị phân bằng cách sử dụng dpkg-deb -b
sẽ không bị ảnh hưởng bởi sự cố như vậy, nhưng sẽ tạo ra một gói không tuân thủ chính sách của Debian.
giải thích dưới đây ...
Các chính sách Debian yêu cầu không có gì được cài đặt bởi một gói trong /usr/cục bộ
ngoại trừ một số thư mục bằng phương pháp gián tiếp:
9.1.2. Các chương trình dành riêng cho trang web
Theo ủy quyền của FHS, các gói không được đặt bất kỳ tệp nào trong
/usr/cục bộ
, bằng cách đặt chúng vào kho lưu trữ hệ thống tệp để trở thành
giải nén bởi đpkg
hoặc bằng cách thao tác chúng trong tập lệnh bảo trì của chúng.
Tuy nhiên, gói có thể tạo các thư mục trống bên dưới /usr/cục bộ
Vì thế
rằng quản trị viên hệ thống biết nơi đặt trang web cụ thể
các tập tin. Đây không phải là các thư mục trong /usr/cục bộ
, nhưng là con của
thư mục trong /usr/cục bộ
. Các thư mục này (/usr/local/*/dir/
)
nên được gỡ bỏ khi gỡ bỏ gói nếu chúng trống.
Lưu ý rằng điều này chỉ áp dụng cho các thư mục phía dưới /usr/cục bộ
, không phải
Trong /usr/cục bộ
.
[...]
Vì vậy, gói này dù sao cũng không thể tuân thủ, ví dụ như tệp /usr/local/Trình quản lý lưu trữ MegaRAID/startmonitorhelp.sh
không tuân thủ: đó là một tập tin đóng gói ở đâu đó trong /usr/cục bộ
.
người ngoài hành tinh
sử dụng dh_usrlocal
xây dựng trình trợ giúp để tự động chuyển đổi các thư mục (vẫn tuân thủ) để bổ sung vào các tập lệnh của trình bảo trì (tức là trên Debian preinst
, postinst
v.v. các tập lệnh được lưu trữ riêng trong .deb ar lưu trữ và sẽ được lưu trữ trong /var/lib/dpkg/thông tin/
sau) mà sau đó sẽ thực hiện một vài mkdir
các lệnh khi cài đặt:
dh_usrlocal
là một chương trình debhelper có thể được sử dụng để xây dựng
các gói sẽ cung cấp một thư mục con trong /usr/cục bộ khi nào
Cài đặt.
Nó tìm thấy các thư mục con của usr/địa phương trong thư mục xây dựng gói,
và loại bỏ chúng, thay thế chúng bằng đoạn mã bảo trì
(trừ khi -N
được sử dụng) để tạo các thư mục khi cài đặt và
loại bỏ chúng khi gói được gỡ bỏ, theo cách phù hợp với
Chính sách của Debian. Các đoạn mã này được chèn vào tập lệnh bảo trì
qua dh_installdeb
.
Nội dung của /usr/bin/dh_usrlocal
kịch bản perl bao gồm:
# Phát hiện một số trường hợp rõ ràng "điều này sẽ không kết thúc
# tốt". Chúng tôi dựa vào những gì "trong khi đọc dir ... ; làm"
# có thể xử lý cho đúng.
if ($fn =~ m{[\s!'"\$()*#;<>?@\[\]\`|]}) {
lỗi ("Không thể tạo tập lệnh shell chính xác cho $fn do siêu ký tự shell");
}
\S
điều đó có nghĩa là bất kỳ khoảng trống nào trong PCRE đều là một phần của siêu ký tự bị cấm và gây ra lỗi khi phân tích cú pháp /usr/local/MegaRAID Trình quản lý lưu trữ
.