Re: mergerepo weird behavior

Jon Wallace <[email protected]> Wed, 10 Aug 2011 17:39:00 -0400
Newsgroups gmane.linux.rpm.metadata
Message-ID <[email protected]>
On 08/09/2011 11:23 AM, seth vidal wrote:
> On Tue, 2011-08-09 at 10:56 -0400, Jon Wallace wrote:
>    
>> Hello,
>>
>> I'm seeing some weird mergerepo behavior I can't make sense of.  I have
>> three repositories, PRODA, PRODB, PRODC, and each has a single package
>> within it.  I'm trying to merge various combinations of these together.
>> The example below tries to merge PRODB and PRODC into PROD-BC.
>>
>>
>> #mergerepo --repo=file:///<path-to-repo>/PRODB
>> --repo=file:///<path-to-repo>/PRODC -o PROD-BC
>> Loaded plugins: refresh-packagekit
>> Not using downloaded repomd.xml because it is older than what we have:
>>     Current   : Tue Aug  9 09:36:40 2011
>>     Downloaded: Mon Aug  8 17:50:36 2011
>> 3/3 - hp-PRODC-1.0-1.x86_64
>> Saving Primary metadata
>> Saving file lists metadata
>> Saving other metadata
>>
>> The "current" timestamp of Aug 9 9:36 corresponds to PRODA.
>> The "downloaded" timestamp of Aug 8 17:50 corresponds to PRODB.
>> Though not listed, PRODC repomd.xml has a timestamp of Aug 8 17:54.
>>
>> The result is that I end up with a merge of PRODA and PRODC even though
>> I asked for PRODB and PRODC.
>>
>> Here is the merged group file.
>> #cat groups.xml
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
>> <comps>
>>
>> <group>
>> <id>PRODA</id>
>> <default>true</default>
>> <uservisible>true</uservisible>
>> <display_order>1024</display_order>
>> <name>PROD-A Test Group</name>
>> <description>This is PROD-A #1111.</description>
>> <packagelist>
>> <packagereq type="default">PRODA</packagereq>
>> </packagelist>
>> </group>
>> <group>
>> <id>PRODC</id>
>> <default>true</default>
>> <uservisible>true</uservisible>
>> <display_order>1024</display_order>
>> <name>PROD-C Test Group</name>
>> <description>This is PROD-C #1111.</description>
>> <packagelist>
>> <packagereq type="default">PRODC</packagereq>
>> </packagelist>
>> </group>
>> <category>
>> <id>producta</id>
>> <display_order>10</display_order>
>> <name>Product-A Test Software</name>
>> <description>Product-A Test Software - Hello</description>
>> <grouplist>
>> <groupid>PRODA</groupid>
>> </grouplist>
>> </category>
>>
>> <category>
>> <id>productc</id>
>> <display_order>10</display_order>
>> <name>Product-C Test Software</name>
>> <description>Product-C Test Software - Hello</description>
>> <grouplist>
>> <groupid>PRODC</groupid>
>> </grouplist>
>> </category>
>>
>> </comps>
>>
>>
>> What am I doing wrong, or what have I set up wrong with my repositories?
>> Jon
>>
>>      
>
> what ver of createrepo/mergerepo is this?
>
> Can you go into /var/tmp/ and look for a tmpdir with your username in it
> and clear it out? maybe something like  /var/tmp/yum-$username-blah
>
> -sv
>
>    


Sorry for the delay and length of this email, I had to rebuild my test 
environment but at least I've been able to duplicate the problem again.  
Also trying to provide as much info as possible.

OS = Fedora Core 11
createrepo = 0.9.7-7

I cleared /var/tmp/yum-<myname>-blah and confirmed that solves the 
problem, but only if I clear it prior to each time I run mergerepo.  I 
suppose I can do that but it seems a bit of a pain and should probably 
be documented if that's the fix.  Here's a synopsis of the problem 
again, and I've included the contents of some files.

REPOSITORY CONTENTS
./PRODA
./PRODA/repodata
./PRODA/repodata/repomd.xml
./PRODA/repodata/groups.xml.gz
./PRODA/repodata/other.xml.gz
./PRODA/repodata/groups.xml
./PRODA/repodata/primary.xml.gz
./PRODA/repodata/filelists.xml.gz
./PRODA/PRODA-1.0-1.x86_64.rpm
./PRODA/groups.xml
./PRODB
./PRODB/repodata
./PRODB/repodata/repomd.xml
./PRODB/repodata/groups.xml.gz
./PRODB/repodata/other.xml.gz
./PRODB/repodata/groups.xml
./PRODB/repodata/primary.xml.gz
./PRODB/repodata/filelists.xml.gz
./PRODB/PRODB-1.0-1.x86_64.rpm
./PRODB/groups.xml
./PRODC
./PRODC/repodata
./PRODC/repodata/repomd.xml
./PRODC/repodata/groups.xml.gz
./PRODC/repodata/other.xml.gz
./PRODC/repodata/groups.xml
./PRODC/repodata/primary.xml.gz
./PRODC/repodata/filelists.xml.gz
./PRODC/PRODC-1.0-1.x86_64.rpm
./PRODC/groups.xml

Note that each package contains only a single file trying to make the 
contents of the repository as simple as possible.

$ cat PRODA/groups.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>

<group>
<id>PRODA</id>
<default>true</default>
<uservisible>true</uservisible>
<display_order>1024</display_order>
<name>PROD-A Test Group</name>
<description>This is PROD-A #1111.</description>
<packagelist>
<packagereq type="default">hp-PRODA</packagereq>
</packagelist>
</group>

<category>
<id>producta</id>
<display_order>10</display_order>
<name>Product-A Test Software</name>
<description>Product-A Test Software Prototype Evaluation</description>
<grouplist>
<groupid>PRODA</groupid>
</grouplist>
</category>

</comps>


$ cat PRODB/groups.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>

<group>
<id>PRODB</id>
<default>true</default>
<uservisible>true</uservisible>
<display_order>1024</display_order>
<name>PROD-B Test Group</name>
<description>This is PROD-B #1111.</description>
<packagelist>
<packagereq type="default">hp-PRODB</packagereq>
</packagelist>
</group>

<category>
<id>productb</id>
<display_order>10</display_order>
<name>Product-B Test Software</name>
<description>Product-B Test Software Prototype Evaluation</description>
<grouplist>
<groupid>PRODB</groupid>
</grouplist>
</category>

</comps>


$ cat PRODC/groups.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>

<group>
<id>PRODC</id>
<default>true</default>
<uservisible>true</uservisible>
<display_order>1024</display_order>
<name>PROD-C Test Group</name>
<description>This is PROD-C #1111.</description>
<packagelist>
<packagereq type="default">hp-PRODC</packagereq>
</packagelist>
</group>

<category>
<id>productc</id>
<display_order>10</display_order>
<name>Product-C Test Software</name>
<description>Product-C Test Software Prototype Evaluation</description>
<grouplist>
<groupid>PRODC</groupid>
</grouplist>
</category>

</comps>




1) Start with a clean /var/tmp/yum-<myname>, then merge PRODA, PRODB, 
PRODC into PROD-ABC.  This completes as expected with no errors.

2) DO NOT clear /var/tmp/yum-<myname>, then merge PRODB and PRODC into 
PROD-BC, and I get the following results.

$ mergerepo --repo=file:///<absoute-path>/PRODB 
--repo=file:///<absolute-path>/PRODC -o PROD-BC
Loaded plugins: refresh-packagekit
Not using downloaded repomd.xml because it is older than what we have:
   Current   : Wed Aug 10 16:34:51 2011
   Downloaded: Wed Aug 10 16:14:11 2011
2/2 - hp-PRODC-1.0-1.x86_64
Saving Primary metadata
Saving file lists metadata
Saving other metadata

$ ls PROD-BC
total 4
drwxr-xr-x. 2 jon jon 4096 2011-08-10 16:41 repodata

$ ls PROD-BC/repodata
total 28
-rw-r--r--. 1 jon jon  374 2011-08-10 16:41 filelists.xml.gz
-rw-r--r--. 1 jon jon 1328 2011-08-10 16:41 groups.xml
-rw-r--r--. 1 jon jon  457 2011-08-10 16:41 groups.xml.gz
-rw-r--r--. 1 jon jon  344 2011-08-10 16:41 other.xml.gz
-rw-r--r--. 1 jon jon  824 2011-08-10 16:41 primary.xml.gz
-rw-r--r--. 1 jon jon 2091 2011-08-10 16:41 repomd.xml
-rw-r--r--. 1 jon jon  116 2011-08-10 16:41 updateinfo.xml.gz


HERE IS THE MERGED GROUPS FILE.
Note that even though I merged PRODB and PRODC, the groups file has an 
entry for PRODA in both the group and category tags.

$ cat groups.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>

<group>
<id>PRODA</id>
<default>true</default>
<uservisible>true</uservisible>
<display_order>1024</display_order>
<name>PROD-A Test Group</name>
<description>This is PROD-A #1111.</description>
<packagelist>
<packagereq type="default">hp-PRODA</packagereq>
</packagelist>
</group>
<group>
<id>PRODC</id>
<default>true</default>
<uservisible>true</uservisible>
<display_order>1024</display_order>
<name>PROD-C Test Group</name>
<description>This is PROD-C #1111.</description>
<packagelist>
<packagereq type="default">hp-PRODC</packagereq>
</packagelist>
</group>
<category>
<id>producta</id>
<display_order>10</display_order>
<name>Product-A Test Software</name>
<description>Product-A Test Software Prototype Evaluation</description>
<grouplist>
<groupid>PRODA</groupid>
</grouplist>
</category>

<category>
<id>productc</id>
<display_order>10</display_order>
<name>Product-C Test Software</name>
<description>Product-C Test Software Prototype Evaluation</description>
<grouplist>
<groupid>PRODC</groupid>
</grouplist>
</category>

</comps>



HERE IS THE MERGED filelists.xml FILE.
Note it contains the PRODA package even though I merged PRODB and PRODC.

$ cat filelists.xml.gz | gunzip
<?xml version="1.0" encoding="UTF-8"?>
<filelists xmlns="http://linux.duke.edu/metadata/filelists" packages="2">
<package 
pkgid="85fca2cee6628eea8f6aa67001606e3585380b1ff6ba8dce2dfef57e38d1d6d1" 
name="hp-PRODA" arch="x86_64">
<version epoch="0" ver="1.0" rel="1"/>
<file>/opt/HP/test1/fileA-1</file>
</package>

<package 
pkgid="b681e126c401780913c2878c253f8e513520f23194117e77c82bb5d4ecbeaa3c" 
name="hp-PRODC" arch="x86_64">
<version epoch="0" ver="1.0" rel="1"/>
<file>/opt/HP/test1/fileC-1</file>
</package>



HERE IS THE MERGED primary.xml FILE.
Note that the <location> tag has a reference to the PRODB repository but 
lists the package as PRODA.  The only thing I have changed here is the 
path to the repositories with <absolute-path> to protect the 
innocent...(me).

$ cat primary.xml.gz | gunzip
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://linux.duke.edu/metadata/common" 
xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="2">
<package type="rpm">
<name>hp-PRODA</name>
<arch>x86_64</arch>
<version epoch="0" ver="1.0" rel="1"/>
<checksum type="sha256" 
pkgid="YES">85fca2cee6628eea8f6aa67001606e3585380b1ff6ba8dce2dfef57e38d1d6d1</checksum>
<summary>HP PROD-A Test RPM x86_64</summary>
<description>This is PROD-A test RPM ID# 1296569852</description>
<packager></packager>
<url></url>
<time file="1313007190" build="1313006939"/>
<size package="2023" installed="2023" archive="316"/>
<location xml:base="file:///<absolute-path>/PRODB" 
href="hp-PRODA-1.0-1.x86_64.rpm"/>
<format>
<rpm:license>GPLv2+</rpm:license>
<rpm:vendor/>
<rpm:group>HPTEST</rpm:group>
<rpm:buildhost>FC11</rpm:buildhost>
<rpm:sourcerpm>hp-PRODA-1.0-1.src.rpm</rpm:sourcerpm>
<rpm:header-range start="280" end="1856"/>
<rpm:provides>
<rpm:entry name="hp-PRODA(x86-64)" flags="EQ" epoch="0" ver="1.0" rel="1"/>
<rpm:entry name="hp-PRODA" flags="EQ" epoch="0" ver="1.0" rel="1"/>
</rpm:provides>
<rpm:requires>
<rpm:entry name="/bin/sh" pre="0"/>
</rpm:requires>
</format>
</package>
<package type="rpm">
<name>hp-PRODC</name>
<arch>x86_64</arch>
<version epoch="0" ver="1.0" rel="1"/>
<checksum type="sha256" 
pkgid="YES">b681e126c401780913c2878c253f8e513520f23194117e77c82bb5d4ecbeaa3c</checksum>
<summary>HP PROD-C Test RPM x86_64</summary>
<description>This is PROD-C test RPM ID# 1296569852</description>
<packager></packager>
<url></url>
<time file="1313007214" build="1313006978"/>
<size package="2020" installed="2020" archive="316"/>
<location xml:base="file:///<absolute-path>/PRODC" 
href="hp-PRODC-1.0-1.x86_64.rpm"/>
<format>
<rpm:license>GPLv2+</rpm:license>
<rpm:vendor/>
<rpm:group>HPTEST</rpm:group>
<rpm:buildhost>FC11</rpm:buildhost>
<rpm:sourcerpm>hp-PRODC-1.0-1.src.rpm</rpm:sourcerpm>
<rpm:header-range start="280" end="1856"/>
<rpm:provides>
<rpm:entry name="hp-PRODC(x86-64)" flags="EQ" epoch="0" ver="1.0" rel="1"/>
<rpm:entry name="hp-PRODC" flags="EQ" epoch="0" ver="1.0" rel="1"/>
</rpm:provides>
<rpm:requires>
<rpm:entry name="/bin/sh" pre="0"/>
</rpm:requires>
</format>
</package>
</metadata>