我正在尝试将“MegaRAID Storage Manager”RPM 包转换为 debian dep 包。为此,我使用了 alien 包,如下所述:
https://hosting-tutorials.co.uk/tutorials/linux/installing-megaraid-storage-manager-on-debian
这是我尝试转换的包: https://docs.broadcom.com/docs-and-downloads/17.05.06.00_MSM_Linux-x64.zip
软件包“lib-utils2_1.00-12_all”可以顺利转换为.deb,但“MegaRAID_Storage_Manager-17.05.06-00.noarch.rpm”却不行:
# alien --scripts *.rpm
lib-utils2_1.00-12_all.deb generated
Package build failed. Here's the log:
dh binary
dh_update_autotools_config
dh_autoreconf
create-stamp debian/debhelper-build-stamp
dh_testroot
dh_prep
debian/rules override_dh_auto_install
make[1]: Entering directory '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
mkdir -p debian/megaraid-storage-manager
# Copy the packages's files.
find . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \
sed -e s#'./'##g | \
xargs -0 -r -i cp -a ./{} debian/megaraid-storage-manager/{}
make[1]: Leaving directory '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
dh_installdocs
dh_installchangelogs
dh_perl
dh_usrlocal
dh_usrlocal: error: Cannot generate a correct shell script for /usr/local/MegaRAID Storage Manager due to shell metacharacters
make: *** [debian/rules:7: binary] Error 25
我不知道如何修复错误“由于 shell 元字符,无法为 /usr/local/MegaRAID Storage Manager 生成正确的 shell 脚本”并将非常感谢您的帮助。
我尝试的主机是 Debian 10 和 Debian 11,都是 amd64 架构,运行“bash”shell。我还尝试了“sh”shell。
答案1
总结: 中的目录不支持空格和其他元字符/usr/local
。
/usr/local/MegaRAID Storage Manager
包含空格。显然,这个包没有遵循 *nix 世界中的良好实践(责怪 LSI/Broadcom)。
您可以改为直接使用 alien-convert 转换为 tar 或提取rpm2cpio
,弄清楚安装脚本的使用方式并了解如何重用它们,还可以选择查看是否可以使用空格重命名目录(如果对它的任何引用也可以轻松替换),并直接使用它构建二进制包dpkg-deb -b
不会受到此类问题的影响,但会创建一个不符合 Debian 政策的包。
下面的解释...
这Debian 政策/usr/local
规定除了通过间接方法安装某些目录外,包中不应安装任何内容:
9.1.2. 针对特定地点的计划
根据 FHS 的规定,软件包不得将任何文件放置在
/usr/local
,要么将它们放入文件系统档案中以便解压,dpkg
要么通过在其维护脚本中对它们进行操作。然而,该软件包可能会在下面创建空目录
/usr/local
这样系统管理员就知道将站点特定文件放在哪里。这些不是 中的目录/usr/local
,而是 中的目录的子目录/usr/local
。如果这些目录 (/usr/local/*/dir/
) 为空,则应在删除软件包时将其删除。请注意,这仅适用于目录以下
/usr/local
, 不是 在/usr/local
。[...]
因此,这个包无论如何都不能兼容,例如文件/usr/local/MegaRAID Storage Manager/startmonitorhelp.sh
不兼容:它是一个文件打包在某处/usr/local
。
alien
使用dh_usrlocal
构建助手来自动转换(仍然兼容)目录,以便在维护者脚本中添加(例如在 Debian等中preinst
,postinst
这些脚本在 .deb 中单独存档应收账存档并将存储在/var/lib/dpkg/info/
稍后),然后mkdir
在安装时执行一些命令:
dh_usrlocal
是一个 debhelper 程序,可用于构建软件包,它将在/usr/本地安装时。它找到以下子目录usr/本地在软件包构建目录中,并删除它们,用维护者脚本片段替换它们(除非
-n
使用)以在安装时创建目录,并在软件包被删除时删除它们,以符合 Debian 政策的方式。这些片段由插入到维护者脚本中dh_installdeb
。
perl脚本的内容/usr/bin/dh_usrlocal
包括:
# Detect some obvious cases of "this will not end # well". We rely on what "while read dir ... ; do" # can handle for correctness. if ($fn =~ m{[\s!'"\$()*#;<>?@\[\]\\`|]}) { error("Cannot generate a correct shell script for $fn due to shell metacharacters"); }
\s
这意味着 PCRE 中的任何空格都属于禁用元字符的一部分,并会在解析时触发错误/usr/local/MegaRAID Storage Manager
。
答案2
您找到解决方案或解决方法了吗?我已经与 MSM 斗争了好几天,却没有机会在 Debian11 中启用远程配置。
答案3
在花了太多时间尝试解决上述问题之后,意识到有一个
rpm
可以安装的包
然后就跑了:
rpm -i MegaRAID_Storage_Manager-17.05.06-00.noarch.rpm --nodeps
/etc/init.d/vivaldiframeworkd start
它似乎正在起作用,我在系统日志中至少收到了两条消息:
Jan 10 21:03:21 Xba MR_MONITOR[214454]: <MRMON044> Controller ID: 0 Time established since power on: Time 2023-01-08, 05:11:32 33 Seconds
Jan 10 21:03:51 Xba MR_MONITOR[214454]: <MRMON044> Controller ID: 0 Time established since power on: Time 2023-01-10, 21:03:51 255169 Seconds
现在需要安装 xterm 和 xpra 以便我可以尝试运行su -c /usr/local/MegaRAID Storage Manager/startupui.sh
...你们也都是这样做的吗?
好吧,我无法使用安装的最新 Java 17 来启动它,因此我安装了 Java 11 并取得了一些成功......您需要将以下内容添加到/etc/init.d/msm_profile
:
JRE_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
export JRE_HOME
MSM 窗口会打开,但当我登录后,X 会话会立即终止……这可能是我的 GTK 库或其他方面的问题。我会尝试稍后获取更多日志。我也尝试给它提供来自 Adoptium 的旧版 Java 8。在这种情况下,我使用了:
JRE_HOME="/usr/lib/jvm/jdk8u352-b08-jre"
export JRE_HOME
但这没用。现在运行时startupui.sh
我只看到一个黑色窗口,也尝试过重新启动 vivaldi 框架(实际上每次更改 java 版本时都需要重新启动,因为它用于/etc/init.d/msm_profile
启动)。
希望你比我幸运,让我们知道进展如何!