Điểm:1

Chuyển đổi các gói RPM cho debian không thành công "do siêu ký tự shell"

lá cờ in

Tôi đang cố gắng chuyển đổi các gói RPM "MegaRAID Storage Manager" thành các gói debian dep. Tôi đang sử dụng gói người ngoài hành tinh như được giải thích ở đây:

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

Đây là gói tôi cố gắng chuyển đổi: https://docs.broadcom.com/docs-and-downloads/17.05.06.00_MSM_Linux-x64.zip

Gói "lib-utils2_1.00-12_all" chuyển đổi tốt thành .deb nhưng "MegaRAID_Storage_Manager-17.05.06-00.noarch.rpm" thì không:

# người ngoài hành tinh --scripts *.rpm
lib-utils2_1.00-12_all.deb được tạo

Xây dựng gói không thành công. Đây là nhật ký:
dh nhị phân
   dh_update_autotools_config
   dh_autoreconf
   tạo-đóng dấu debian/debhelper-build-stamp
   dh_testroot
   dh_prep
   debian/quy tắc override_dh_auto_install
make[1]: Đang vào thư mục '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
mkdir -p debian/megaraid-storage-manager
# Sao chép các tệp của gói.
tìm thấy . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \
        sed -e s#'./'##g | \
        xargs -0 -r -i cp -a ./{} debian/megaraid-storage-manager/{}
make[1]: Rời khỏi thư mục '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_usrlocal
dh_usrlocal: lỗi: Không thể tạo tập lệnh shell chính xác cho /usr/local/MegaRAID Trình quản lý lưu trữ do siêu ký tự shell
thực hiện: *** [debian/rules:7: binary] Lỗi 25

Tôi không biết cách sửa lỗi "Không thể tạo tập lệnh shell chính xác cho /usr/local/MegaRAID Trình quản lý lưu trữ do siêu ký tự shell" và sẽ được đánh giá cao cho bất kỳ sự giúp đỡ.

Các máy chủ tôi đã thử là Debian 10 và Debian 11, tất cả đều là amd64 arch và chạy shell "bash". Tôi cũng đã thử vỏ "sh".

Điểm:2
lá cờ cl
A.B

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ữ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.