/* Try mounting the device. As above, ignore errors. */
g->error_cb = NULL;
- int r = guestfs_mount_ro (g, device, "/");
- if (r == -1 && vfs_type && STREQ (vfs_type, "ufs")) /* Hack for the *BSDs. */
+ int r;
+ if (vfs_type && STREQ (vfs_type, "ufs")) { /* Hack for the *BSDs. */
+ /* FreeBSD fs is a variant of ufs called ufs2 ... */
r = guestfs_mount_vfs (g, "ro,ufstype=ufs2", "ufs", device, "/");
+ if (r == -1)
+ /* while NetBSD and OpenBSD use another variant labeled 44bsd */
+ r = guestfs_mount_vfs (g, "ro,ufstype=44bsd", "ufs", device, "/");
+ } else {
+ r = guestfs_mount_ro (g, device, "/");
+ }
free (vfs_type);
g->error_cb = old_error_cb;
if (r == -1)
if (guestfs___check_freebsd_root (g, fs) == -1)
return -1;
}
+ else if (is_dir_etc &&
+ is_dir_bin &&
+ guestfs_is_file (g, "/etc/fstab") > 0 &&
+ guestfs_is_file (g, "/etc/release") > 0) {
+ /* Ignore /dev/sda1 which is a shadow of the real root filesystem
+ * that is probably /dev/sda5 (see:
+ * http://www.freebsd.org/doc/handbook/disk-organization.html)
+ */
+ if (match (g, device, re_first_partition))
+ return 0;
+
+ fs->is_root = 1;
+ fs->content = FS_CONTENT_NETBSD_ROOT;
+ fs->format = OS_FORMAT_INSTALLED;
+ if (guestfs___check_netbsd_root (g, fs) == -1)
+ return -1;
+ }
/* Linux root? */
else if (is_dir_etc &&
is_dir_bin &&
case OS_DISTRO_RHEL:
case OS_DISTRO_MAGEIA:
case OS_DISTRO_MANDRIVA:
+ case OS_DISTRO_OPENSUSE:
case OS_DISTRO_CENTOS:
case OS_DISTRO_SCIENTIFIC_LINUX:
fs->package_format = OS_PACKAGE_FORMAT_RPM;
fs->package_management = OS_PACKAGE_MANAGEMENT_URPMI;
break;
+ case OS_DISTRO_OPENSUSE:
+ fs->package_management = OS_PACKAGE_MANAGEMENT_ZYPPER;
+ break;
+
case OS_DISTRO_SLACKWARE:
case OS_DISTRO_TTYLINUX:
case OS_DISTRO_WINDOWS: