[Libguestfs] [PATCH 2/2] Use os-release to detect the distro

Pino Toscano ptoscano at redhat.com
Wed Aug 31 13:05:36 UTC 2016


Check the ID field in /etc/os-release on the current system, before
checking for the other old-style release-/version-like files in /etc.
Some distributions (openSUSE Thumbleweed) are starting to remove them,
breaking the supermin detection.
---
 src/dpkg.ml   |  3 ++-
 src/pacman.ml |  5 +++--
 src/rpm.ml    | 15 +++++++++------
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/dpkg.ml b/src/dpkg.ml
index 70acfa2..1e785de 100644
--- a/src/dpkg.ml
+++ b/src/dpkg.ml
@@ -28,7 +28,8 @@ let dpkg_detect () =
     Config.dpkg_query <> "no" &&
     Config.dpkg_divert <> "no" &&
     Config.apt_get <> "no" &&
-    try (stat "/etc/debian_version").st_kind = S_REG with Unix_error _ -> false
+    (List.mem (Os_release.get_id ()) [ "debian"; "ubuntu" ] ||
+     try (stat "/etc/debian_version").st_kind = S_REG with Unix_error _ -> false)
 
 let dpkg_primary_arch = ref ""
 let settings = ref no_settings
diff --git a/src/pacman.ml b/src/pacman.ml
index 3340fa6..c35668a 100644
--- a/src/pacman.ml
+++ b/src/pacman.ml
@@ -24,8 +24,9 @@ open Package_handler
 
 let pacman_detect () =
   Config.pacman <> "no" && Config.fakeroot <> "no" &&
-    (stat "/etc/arch-release").st_kind = S_REG &&
-    Config.pacman_g2 = "no" (* not Frugalware with pacman-g2 *)
+    (Os_release.get_id () = "arch" ||
+     ((stat "/etc/arch-release").st_kind = S_REG &&
+      Config.pacman_g2 = "no")) (* not Frugalware with pacman-g2 *)
 
 let settings = ref no_settings
 
diff --git a/src/rpm.ml b/src/rpm.ml
index a5dc67a..e409e37 100644
--- a/src/rpm.ml
+++ b/src/rpm.ml
@@ -31,21 +31,24 @@ let stringset_of_list pkgs =
 let fedora_detect () =
   Config.rpm <> "no" && Config.rpm2cpio <> "no" && rpm_is_available () &&
     (Config.yumdownloader <> "no" || Config.dnf <> "no") &&
-    try
-      (stat "/etc/redhat-release").st_kind = S_REG ||
-      (stat "/etc/fedora-release").st_kind = S_REG
-    with Unix_error _ -> false
+    (List.mem (Os_release.get_id ()) [ "fedora"; "rhel"; "centos" ] ||
+     try
+       (stat "/etc/redhat-release").st_kind = S_REG ||
+       (stat "/etc/fedora-release").st_kind = S_REG
+     with Unix_error _ -> false)
 
 let opensuse_detect () =
   Config.rpm <> "no" && Config.rpm2cpio <> "no" && rpm_is_available () &&
     Config.zypper <> "no" &&
-    try (stat "/etc/SuSE-release").st_kind = S_REG with Unix_error _ -> false
+    (List.mem (Os_release.get_id ()) [ "opensuse"; "sled"; "sles" ] ||
+     try (stat "/etc/SuSE-release").st_kind = S_REG with Unix_error _ -> false)
 
 let mageia_detect () =
   Config.rpm <> "no" && Config.rpm2cpio <> "no" && rpm_is_available () &&
     Config.urpmi <> "no" &&
     Config.fakeroot <> "no" &&
-    try (stat "/etc/mageia-release").st_kind = S_REG with Unix_error _ -> false
+    (Os_release.get_id () = "mageia" ||
+     try (stat "/etc/mageia-release").st_kind = S_REG with Unix_error _ -> false)
 
 let ibm_powerkvm_detect () =
   Config.rpm <> "no" && Config.rpm2cpio <> "no" && rpm_is_available () &&
-- 
2.7.4




More information about the Libguestfs mailing list