[Including libguestfs mailing list this time]
On Tue, May 27, 2014 at 06:05:15AM -0700, Colin Walters wrote:
 On Tue, May 27, 2014, at 02:04 AM, Richard W.M. Jones wrote:
 > 
 > I'm still anxious for Colin to tell us if this API is suitable for his
 > needs.
 
 I'd like an API that allows me to only relabel *unlabeled* files.
 The use case here is: I have an existing disk image with an OS,
 I want to inject e.g. a systemd service into it.  If I do this offline
 from libguestfs, the injected /usr/libexec/mydaemon and
 /usr/lib/systemd/system/mydaemon.service
 won't be labeled, but everything else will be.
 > I'm guessing that OStree does not have /etc/selinux/config,
 
 Right, it's in the "deployment root" of
 /ostree/deploy/$osname/deploy/$checksum/etc/selinux/config 
Got it:
<fs> ll
/ostree/deploy/project-atomic-controller/deploy/afc1794b4b42df77edf1988897b167573b99e299fa39a15b07b235a0e7387d02.0/etc/selinux/targeted/contexts/files/file_contexts
-rw-r--r--. 1 root root 352240 Apr 14 20:14
/sysroot/ostree/deploy/project-atomic-controller/deploy/afc1794b4b42df77edf1988897b167573b99e299fa39a15b07b235a0e7387d02.0/etc/selinux/targeted/contexts/files/file_contexts
 To figure that out you'd want to use the OSTree APIs; and then
it
 introduces
 further questions around *which* deployments you want to relabel.  All? 
 Only
 one (the default?).
 
 What I do currently in my scripts is only relabel the default, and that
 would
 be the best default for an API.
 
 But a totally valid thing to do with OSTree is - say you're running
 RHEL7,
 and you want to check whether the latest Fedora kernel fixes an issue
 you're seeing.   You can use ostree to dynamically parallel install
 Fedora content in a new deployment root, try it with near-total
 safety[1],
 and then if it doesn't work, just delete it and free up the space. 
So I think an API which looks like this ...
 required params:
   None
 optional params:
   path =>
     Either a directory to be relabelled recursively, or a single
     file (defaults to "/").
   root =>
     Inspection root of guest.  Optional, only makes sense when
     'contexts' param is *omitted*.
   contexts =>
     The `file_contexts' file.  Defaults to
     /etc/selinux/$selinux_type/contexts/files/file_contexts
     OSTree would probably want to pass:
    
/ostree/deploy/$osname/deploy/$checksum/etc/selinux/targeted/contexts/files/file_contexts
Inspection could be updated to parse /etc/selinux/config in order to
get the default SELinux policy and pass it back through an API such as
`inspect-get-selinux-type'.
If 'contexts' is omitted, 'root' must be supplied, and it causes an
internal call to guestfs_inspect_get_selinux_type (g, root) in order
to get the default policy.
What do you think?
Rich.
-- 
Richard Jones, Virtualization Group, Red Hat 
http://people.redhat.com/~rjones
Read my programming and virtualization blog: 
http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW