如何在Arch Linux上安装RPM包

系统 Linux
有时候你可能会发现,想安装一个包,但是这个包只提供 RPM 安装文件,而 ArchLinux 并不支持安装 RPM 文件,这该怎么办呢?下面的方法也许可以帮到你。

[[237094]]

有时候你可能会发现,想安装一个包,但是这个包只提供 RPM 安装文件,而 ArchLinux 并不支持安装 RPM 文件,这该怎么办呢?

下面这个方法也许可以帮到你。 

1、 安装 rpmextract

rpmextract 是一个用来解压 RPM 的工具,它会将 RPM 包中的内容解压到当前目录下。

  1. sudo pacman -S rpmextract --noconfirm
  1. resolving dependencies...
  2. looking for conflicting packages...
  3.  
  4. Packages (1) rpmextract-1.0-8
  5.  
  6. Total Download Size: 0.00 MiB
  7. Total Installed Size: 0.00 MiB
  8.  
  9. :: Proceed with installation? [Y/n]
  10. :: Retrieving packages...
  11. rpmextract-1.0-8-any 0.0 B 0.00B/s 00:00 [----------------------] 0%
  12. rpmextract-1.0-8-any 2.5 KiB 0.00B/s 00:00 [######################] 100%
  13. (0/1) checking keys in keyring [----------------------] 0%
  14. (1/1) checking keys in keyring [######################] 100%
  15. (0/1) checking package integrity [----------------------] 0%
  16. (1/1) checking package integrity [######################] 100%
  17. (0/1) loading package files [----------------------] 0%
  18. (1/1) loading package files [######################] 100%
  19. (0/1) checking for file conflicts [----------------------] 0%
  20. (1/1) checking for file conflicts [######################] 100%
  21. (0/1) checking available disk space [----------------------] 0%
  22. (1/1) checking available disk space [######################] 100%
  23. :: Processing package changes...
  24. (1/1) installing rpmextract [----------------------] 0%
  25. (1/1) installing rpmextract [######################] 100%
  26. :: Running post-transaction hooks...
  27. (1/1) Arming ConditionNeedsUpdate...

2、 使用 rpmextract 解压 RPM 文件

由于 RPM 文件中打包的目录结构是以根目录为基准的,因此推荐直接在根目录下进行解压:

  1. cd /
  2. sudo rpmextract.sh ~lujun9972/android-x86-7.1-r2.x86_64.rpm 

3、 抽取出安装 RPM 时调用的脚本

光把RPM包中的文件解压出来还是不够的,RPM 文件在安装(或者卸载)前/后还会执行一个脚本。

这个脚本可以通过命令 rpm -qp --script file.rpm 来查看。

然而, ArchLinux 并没有 rpm 命令怎么办呢?我们可以可以在虚拟机上运行一个 CentOS 或者直接使用 docker 来模拟一个 CentOS 环境也可以:

  1. docker run --rm -v ~lujun9972/android-x86-7.1-r2.x86_64.rpm:/tmp/android.rpm centos rpm -qp --scripts /tmp/android.rpm
  1. postinstall scriptlet (using /bin/sh):
  2. . /etc/os-release
  3. mkdir -p /android-7.1-r2/data
  4. if [ "$ID" = "debian" -o "$ID_LIKE" = "debian" ]; then
  5. grubcfg=/boot/grub/custom.cfg
  6. elif mountpoint -q /boot/efi; then
  7. grubcfg=/boot/efi/EFI/$ID/custom.cfg && efi=efi
  8. else
  9. grubcfg=/boot/grub2/custom.cfg
  10. fi
  11. echo -e "menuentry \"Android-x86 7.1-r2\" {\n\tsearch --set=root --file /android-7.1-r2/kernel\n\tlinux$efi /android-7.1-r2/kernel quiet root=/dev/ram0 androidboot.selinux=permissive buildvariant=userdebug \n\tinitrd$efi /android-7.1-r2/initrd.img\n}" > $grubcfg
  12. echo -e "menuentry \"Android-x86 7.1-r2 (DEBUG mode)\" {\n\tsearch --set=root --file /android-7.1-r2/kernel\n\tlinux$efi /android-7.1-r2/kernel root=/dev/ram0 androidboot.selinux=permissive buildvariant=userdebug DEBUG=2\n\tinitrd$efi /android-7.1-r2/initrd.img\n}" >> $grubcfg
  13.  
  14. if [ "$ID" = "debian" -o "$ID_LIKE" = "debian" ]; then
  15. sed -i 's/^GRUB_HIDDEN_/#GRUB_HIDDEN_/' /etc/default/grub
  16. update-grub
  17. fi
  18. postuninstall scriptlet (using /bin/sh):
  19. . /etc/os-release
  20. if [ "$ID" = "debian" -o "$ID_LIKE" = "debian" ]; then
  21. grubcfg=/boot/grub/custom.cfg
  22. elif mountpoint -q /boot/efi; then
  23. grubcfg=/boot/efi/EFI/$ID/custom.cfg
  24. else
  25. grubcfg=/boot/grub2/custom.cfg
  26. fi
  27. if [ "$1" = "1" ]; then
  28. new_prefix=`dirname $(grep initrd $grubcfg | head -1 | awk '{print $2}')`
  29. if [ "$new_prefix" != "/android-7.1-r2" ]; then
  30. rmdir $new_prefix/data
  31. mv /android-7.1-r2/data $new_prefix
  32. rmdir /android-7.1-r2
  33. fi
  34. else
  35. rmdir /android-7.1-r2/data /android-7.1-r2
  36. rm -f $grubcfg
  37. fi

 

4、 调用安装脚本

运气好的话,你就能把 RPM 安装好了。 

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2018-10-23 09:45:05

Arch LinuxGRUB命令

2020-12-28 06:44:45

FedoraLinux RPM文件

2020-05-28 08:45:21

Arch LinuxLinuxKDE Plasma

2011-05-04 09:11:30

RPM包Linux

2018-06-11 08:50:46

LinuxArch Linux降级软件包

2023-02-21 11:30:38

2022-11-30 12:17:50

2023-02-14 13:32:55

2018-07-10 08:59:07

LinuxArch Linux软件包

2022-07-26 17:25:38

Linux

2017-04-08 19:45:27

Linux命令安装

2023-11-09 16:13:53

2023-10-17 11:27:42

2022-12-01 15:34:26

Arch LinuxOpenOffice

2022-07-20 21:08:35

Arch LinuxLinuxYay AUR

2019-11-26 09:20:47

LinuxJava

2020-04-21 14:21:31

LinuxPython

2021-10-12 08:43:19

LinuxSambaWindows

2016-01-04 11:04:21

UbuntuArch LinuxXombrero

2022-11-28 08:28:44

点赞
收藏

51CTO技术栈公众号