Since libguestfs 1.18 guestmount has just been a slim wrapper around the libguestfs guestfs_mount_local API. You can replace guestmount with a small custom script if you want to do tricky/non-standard stuff like setting filesystem mount options, as in the example below.
$ ./mount-local.pl --ro -a /tmp/f17x64.img --mountopts=noatime /tmp/mount mounting disk on /tmp/mount to unmount: fusermount -u /tmp/mount
#!/usr/bin/perl -w use strict; use Getopt::Long; use Sys::Guestfs; my $readonly = 0; my @drives; my $mountopts; my $trace = 0; GetOptions ("ro|r" => \$readonly, "add|a=s" => \@drives, "mountopts=s" => \$mountopts, "trace|x" => \$trace) or die "$0 [--ro] [--add drive] [--mountopts mountopts] mountpoint\n"; die "$0: no drives (-a) were specified\n" unless @drives > 0; die "$0: no mountpoint was specified\n" unless @ARGV == 1; my $g = Sys::Guestfs->new (); $g->set_trace (1) if $trace; foreach (@drives) { $g->add_drive_opts ($_, readonly => $readonly) } $g->launch (); # Inspect the disk to find OSes. my @roots = $g->inspect_os (); unless (@roots == 1) { die "$0: no operating systems found\n"; } my $root = $roots[0]; # Mount up the disks like using the -i option. my %mps = $g->inspect_get_mountpoints ($root); my @mps = sort { length $a <=> length $b } (keys %mps); foreach (@mps) { my $options = $readonly ? "ro" : "rw"; $options .= "," . $mountopts if defined $mountopts; eval { $g->mount_options ($options, $mps{$_}, $_) }; if ($@) { print "$@ (ignored)\n" } } # Export the filesystem using FUSE. $g->mount_local ($ARGV[0]); print "mounting disk on $ARGV[0]\n"; print "to unmount: fusermount -u $ARGV[0]\n"; $g->mount_local_run (); # This returns when the filesystem is unmounted. $g->shutdown (); $g->close ();