[virt-tools-list] [PATCH RFC virtio-win-pkg-scripts v2 0/2] helpers to standardize driver directory layout

Cole Robinson crobinso at redhat.com
Fri Jan 22 20:30:04 UTC 2016


On 01/22/2016 01:27 PM, Roman Kagan wrote:
> On Fri, Jan 22, 2016 at 06:05:01PM +0300, Roman Kagan wrote:
>> The scripts are based on the idea that the most actual information about
>> the suitability of a driver for a particular flavor / architecture is
>> contained in the driver's catalog file (in particular, the process of
>> ISV or WHQL siging may affect it).
>>
>> Since the catalog files are DER-encoded ASN.1 structures the first patch
>> introduces a module to extract relevant information from a .cat file
>> using PyASN1 library.
>>
>> The second patch introduces a script that lays out the drivers by
>> arch/flavor.
>> It assumes that
>>
>> - every driver for a particular arch/flavor is contained in a separate
>>   directory
>>
>> - the directory contains a single .inf file; the basename of the file is
>>   taken as the name of the package
>>
>> - the .cat file for the package is in the same directory and has the
>>   same basename as the .inf
>>
>> - all the files contained in that directory are associated with the
>>   driver and go together with it no matter if they are listed in the
>>   .inf or in the .cat or not.
>>
>> The virtio-win driver packages I could get my hands on all matched the
>> above assumptions.
>>
>> [ There's no integration with the rest of the system yet as I'd like to
>> sort out some issues first which may affect the logic (in a followup
>> mail). ]
> 
> Now to the issues I'd like to discuss before moving on.
> 
> The current make-*.py scripts can probably be simplified dramatically
> with this new logic.  However they contain a fair amount of consistency
> checks which I'd like to maintain.  Besides, I'd like to figure out
> what's on input and what's the desired output of the process.
> 
> Here's the way I thought of using the submitted scripts (in bash for
> simplicity of explanation):
> 
> ====
> set -e
> 
> wrkdir=$(mktemp -d windrvXXXXXX)
> dstdir=$wrkdir/virtio-win
> 
> # fetch the drivers (in real life will come from a windows build machine
> # directly)
> curl https://fedorapeople.org/groups/virt/virtio-win/repo/srpms/virtio-win-0.1.112-1.src.rpm |
>   rpm2cpio |
>   cpio -i --to-stdout virtio-win-\*-bin-for-rpm.tar.gz |
>   tar -xzf - -C $wrkdir
> 
> srcdir=$(echo $wrkdir/*)
> 
> rm -fr $srcdir/{*.vfd,vfddrivers}
> 
> # get rid of duplicates (already done for the package in the above srpm
> # but will be needed in general)
> hardlink $srcdir
> 
> # lay out the drivers hardlinking them to the source
> util/cpdrivers.py -m link $srcdir $dstdir/drivers
> 
> # indentify files left behind
> find $srcdir -type f -links +1 -exec rm \{\} \;
> echo "unpackaged files:"
> find $srcdir -type f -printf '%P\n'
> # do something if any is found
> : ...
> 
> # add license, qga, etc. to $dstdir
> : ...
> 
> # create iso image with everything
> mkisofs -o $dstdir/virtio-win.iso -J $dstdir/{drivers,qga}
> 
> # create per-arch/os floppies with basic drivers
> for archdir in $dstdir/drivers/*; do
>     arch=${archdir##*/}
>     for osdir in $archdir/*; do
>         os=${osdir##*/}
> 
> 	img=$dstdir/${arch}_{os}.vfd
> 	truncate -s 2880k $img
> 	mkdosfs $img
> 	mcopy -i $img $osdir/{netkvm,vioscsi,viostor}/*.{inf,cat,sys} ::
>         # locate and copy txtsetup.oem (dunno if necessary)
>         : ...
>     done
> done
> 
> # $dstdir is to be found as /usr/share/virtio-win in the resulting rpm
> ======
> 
> The discussion items:
> 
> 1) is it a sensible thing to do in general, with these inputs and
>    outputs?
> 

Yes the above sounds reasonable.

> 2) the search for unpackaged files yields some.  E.g. the srpm used
>    above gives
> 
>    viostor/xp/x86/viostor.sys
>    viostor/xp/x86/viostor.inf
>    viostor/xp/x86/viostor.pdb
>    viostor/xp/x86/viostor.cat
> 
>    meaning that there's another viostor driver in the tree which claims
>    xp-x86 support.  Indeed, 2k3-x86 driver, being different from xp-x86,
>    claims compatibility with both xp and 2k3, and happens to take over.
> 
>    There are even more leftovers in the latest RHEL package, that is,
>    there are more drivers intersecting in the supported OS lists.
> 

Can you list the RHEL conflicts?

>    And I'm afraid this may be a legitimate situation.  Assume a driver
>    is signed for, say, 2k8 and 2k8R2, and then a newer version is built
>    and signed for 2k8R2 and 2k12.  The script will make arbitrary choice
>    of the driver for 2k8R2.  Any suggestion on what to do with this?
> 

Hmm. This is a bit weird. Probably some combination of:

1) plain old packaging error. some wires got crossed and we never updated the
xp driver to share with 2k3 or something similar

2) qe/supportability concerns. maybe the newer 2k3 build was done to fix a 2k3
specific driver, so we only updated 2k3 in the tree to avoid having to re-QE
the xp driver as well. or something in that ballpark.

Maybe vadim knows more, CCd

If #2 is involved I'd rather we work around that some other way: either re-QE
the driver, or only WHQL it for the windows version we care about (not sure if
that's possible). Having to track this statically is a pain

As for figuring it out in your script, does the .cat file have a date in it?
For the WHQL bits maybe we can just choose the latest WHQL'd driver.

For the non-WHQL bits, do the driver files end up interchangable? Or is the xp
driver 'xp only' but the 2k3 driver is '2k3 + xp' ?

- Cole




More information about the virt-tools-list mailing list