Re: Re: apt-rpm & 64-bit Fedora Core 4

"Panu Matilainen" <[email protected]> Thu, 24 Nov 2005 08:46:19 +0200 (EET)
Newsgroups gmane.linux.conectiva.apt-rpm
Message-ID <60942.192.100.124.218.1132814779.squirrel@webmail.laiskiainen.org>
------=_20051124084619_58434
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Axel Thimm said:
> On Mon, Nov 14, 2005 at 02:38:47PM -0500, Jim Faulkner wrote:
>> I take it that apt-rpm does not work with 64-bit Fedora?  It works fin=
e
>> with 64-bit Suse, but that is probably because Suse intelligently name=
s
>> their packages based on their architecture.
>
>> If not, is 64-bit Fedora going to be supported in a future version
>> of apt-rpm?
>
> Only if you are willing to give up multilib:
>

...or desperate enough to use this hideous kludge of a patch :)

This isn't real multilib support for apt by any means, but it'll allow
using apt-rpm in presence of multilib packages. It works by renaming
multilib packages internally so that all packages listed in
RPM::Allow-MultiArch:: become
pkgname -> pkgname.x86_64
pkgname -> pkgname.i386
..and "pkgname" provide is added to the renamed variants. It's pretty muc=
h
like how Allow-Duplicated works. To make user experience a bit nicer
you'll probably want a little help from Lua, attached as well.

Attached is the patch + example configuration for RHEL 3'ish system + Lua
helper script. For FC you'll need to add a pile of more stuff into
multilib.conf I think.

Oh and mind you, there *are* issues with this, if a allow-multiarch
package is obsoleted .. things can get, um, interesting ;) Oh and you
don't probably want apply this on i386 systems, I *think* it won't mess u=
p
anything if RPM::Allow-MultiArch is empty but I haven't tested it.

    - Panu -
------=_20051124084619_58434
Content-Type: text/x-patch; name="apt-0.5.15cnc6-multilib-static-2.patch"
Content-Disposition: attachment;
	filename="apt-0.5.15cnc6-multilib-static-2.patch"
Content-Transfer-Encoding: quoted-printable

--- apt-0.5.15cnc6/apt-pkg/rpm/rpmlistparser.cc.multi	2004-03-22 21:58:52=
.000000000 +0200
+++ apt-0.5.15cnc6/apt-pkg/rpm/rpmlistparser.cc	2004-09-14 12:17:16.00000=
0000 +0300
@@ -113,7 +113,18 @@
    }=20
=20
    bool IsDup =3D false;
+   bool IsMulti =3D false;
    string Name =3D str;
+
+   if (RpmData->IsMultiArchPackage(Name) =3D=3D true)
+   {
+      Name +=3D "." + Architecture();	=20
+      CurrentName =3D Name;
+      Multilib =3D true;
+      IsMulti =3D true;
+      return Name;
+   }
+
   =20
    // If this package can have multiple versions installed at
    // the same time, then we make it so that the name of the
--- apt-0.5.15cnc6/apt-pkg/rpm/rpmlistparser.h.multi	2003-03-03 08:35:05.=
000000000 +0200
+++ apt-0.5.15cnc6/apt-pkg/rpm/rpmlistparser.h	2004-09-14 12:17:27.000000=
000 +0300
@@ -44,6 +44,7 @@
    SeenPackagesType *SeenPackages;
   =20
    bool Duplicated;
+   bool Multilib;
   =20
    unsigned long UniqFindTagWrite(int Tag);
    bool ParseStatus(pkgCache::PkgIterator Pkg,pkgCache::VerIterator Ver)=
;
--- apt-0.5.15cnc6/apt-pkg/rpm/rpmpackagedata.cc.multi	2004-03-08 18:44:0=
8.000000000 +0200
+++ apt-0.5.15cnc6/apt-pkg/rpm/rpmpackagedata.cc	2004-09-14 11:48:46.0000=
00000 +0300
@@ -112,6 +112,21 @@
 	  DuplicatedPatterns.push_back(ptrn);
    }
=20
+   // Populate MultiArch packages.
+   Top =3D _config->Tree("RPM::Allow-MultiArch");
+   for (Top =3D (Top =3D=3D 0?0:Top->Child); Top !=3D 0; Top =3D Top->Ne=
xt)
+   {
+      regex_t *ptrn =3D new regex_t;
+      if (regcomp(ptrn,Top->Value.c_str(),REG_EXTENDED|REG_ICASE|REG_NOS=
UB) !=3D 0)
+      {
+	 _error->Warning(_("Bad regular expression '%s' in option RPM::Allow-Mu=
ltiArch."),
+			 Top->Value.c_str());
+	 delete ptrn;
+      }
+      else
+	  MultiArchPatterns.push_back(ptrn);
+   }
+
    // Populate fake provides
    Top =3D _config->Tree("RPM::Fake-Provides");
    for (Top =3D (Top =3D=3D 0?0:Top->Child); Top !=3D 0; Top =3D Top->Ne=
xt)
@@ -291,6 +306,20 @@
    return false;
 }
=20
+bool RPMPackageData::IsMultiArchPackage(const string &Name)
+{
+   if (MultiArchPackages.find(Name) !=3D MultiArchPackages.end())
+      return true;
+   const char *name =3D Name.c_str();
+   for (vector<regex_t*>::iterator I =3D MultiArchPatterns.begin();
+	I !=3D MultiArchPatterns.end(); I++) {
+      if (regexec(*I,name,0,0,0) =3D=3D 0) {
+	 SetMultiArchPackage(Name);
+	 return true;
+      }
+   }
+   return false;
+}
 RPMPackageData *RPMPackageData::Singleton()
 {
    static RPMPackageData *data =3D NULL;
--- apt-0.5.15cnc6/apt-pkg/rpm/rpmpackagedata.h.multi	2004-03-08 18:44:08=
.000000000 +0200
+++ apt-0.5.15cnc6/apt-pkg/rpm/rpmpackagedata.h	2004-09-14 11:48:46.00000=
0000 +0300
@@ -27,6 +27,7 @@
    hash_map<string,vector<string>*,hash_string> FakeProvides;
    hash_map<string,int,hash_string> IgnorePackages;
    hash_map<string,int,hash_string> DuplicatedPackages;
+   hash_map<string,int,hash_string> MultiArchPackages;
    typedef map<string,pkgCache::VerIterator> VerMapValueType;
    typedef hash_map<unsigned long,VerMapValueType> VerMapType;
    typedef hash_map<const char*,int,
@@ -37,6 +38,7 @@
    map<string,vector<string>*> FakeProvides;
    map<string,int> IgnorePackages;
    map<string,int> DuplicatedPackages;
+   map<string,int> MultiArchPackages;
    typedef map<string,pkgCache::VerIterator> VerMapValueType;
    typedef map<unsigned long,VerMapValueType> VerMapType;
    typedef map<const char*,int,cstr_lt_pred> ArchScoresType;
@@ -44,6 +46,7 @@
=20
    vector<regex_t*> HoldPackages;  =20
    vector<regex_t*> DuplicatedPatterns;
+   vector<regex_t*> MultiArchPatterns;
=20
    struct Translate {
 	   regex_t Pattern;
@@ -110,6 +113,9 @@
    void SetDupPackage(const string &Name)
    	{DuplicatedPackages[Name] =3D 1;};
    bool IsDupPackage(const string &Name);
+   void SetMultiArchPackage(const string &Name)
+        {MultiArchPackages[Name] =3D 1;};
+   bool IsMultiArchPackage(const string &Name);
=20
    static RPMPackageData *Singleton();
=20
--- apt-0.5.15cnc6/apt-pkg/rpm/rpmsystem.cc.multi	2004-09-14 11:48:46.000=
000000 +0300
+++ apt-0.5.15cnc6/apt-pkg/rpm/rpmsystem.cc	2004-09-14 11:48:46.000000000=
 +0300
@@ -537,6 +537,7 @@
    unsigned long Hash =3D 0;
    HashOption(Hash, "RPM::Architecture");
    HashOptionTree(Hash, "RPM::Allow-Duplicated");
+   HashOptionTree(Hash, "RPM::Allow-MultiArch");
    HashOptionTree(Hash, "RPM::Ignore");
    HashOptionFile(Hash, "Dir::Etc::rpmpriorities");
    HashEnv(Hash, "LANG");
------=_20051124084619_58434
Content-Type: application/octet-stream; name="multilib.conf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="multilib.conf"

U2NyaXB0czo6QXB0R2V0OjpJbnN0YWxsOjpTZWxlY3RQYWNrYWdlOjogIm11bHRpbGliLmx1YSI7
Ci8vU2NyaXB0czo6QXB0R2V0OjpVcGdyYWRlOjogIm11bHRpbGliLmx1YSI7Ci8vU2NyaXB0czo6
QXB0R2V0OjpEaXN0VXBncmFkZTo6ICJtdWx0aWxpYi5sdWEiOwoKUlBNOjpBbGxvdy1NdWx0aUFy
Y2ggeyJjeXJ1cy1zYXNsLW1kNSI7ICJ0Y2x4IjsgImdkIjsgImdkYm0iOyAibGlicG5nMTAiOyB9
OwpSUE06OkFsbG93LU11bHRpQXJjaCB7Im1pa21vZCI7ICJ0ayI7ICJydWJ5LWxpYnMiOyAiYnpp
cDItbGlicyI7ICJsaWJhcnRfbGdwbCI7IH07ClJQTTo6QWxsb3ctTXVsdGlBcmNoIHsiZ3RrMiI7
ICJndGsrIjsgIm9wZW5oMzIzIjsgImdob3N0c2NyaXB0IjsgInpsaWIiOyB9OwpSUE06OkFsbG93
LU11bHRpQXJjaCB7ImJpbmQtbGlicyI7ICJzbGFuZyI7ICJsaWJ4c2x0IjsgIlhGcmVlODYtbGli
cyI7ICJlbGZ1dGlscyI7IH07ClJQTTo6QWxsb3ctTXVsdGlBcmNoIHsibGliZ25vbWVwcmludHVp
MjIiOyAidXRlbXB0ZXIiOyAibmN1cnNlcy1kZXZlbCI7ICJ1bml4T0RCQy1rZGUiOyAiYWxjaGVt
aXN0IjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJYRnJlZTg2LU1lc2EtbGliR0xVIjsgIlhG
cmVlODYtZGV2ZWwiOyAic2Nyb2xsa2VlcGVyIjsgImxpYklETCI7ICJyZWRoYXQtbHNiIjsgfTsK
UlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJsaWJzdGRjKystZGV2ZWwiOyAic3RhcnR1cC1ub3RpZmlj
YXRpb24iOyAibGliZ25vbWVwcmludDIyIjsgIlZGbGliMiI7ICJpbWxpYiI7IH07ClJQTTo6QWxs
b3ctTXVsdGlBcmNoIHsib3BlbnNzbCI7ICJnbm9tZS12ZnMyIjsgImdsaWJjLWRldmVsIjsgImJv
Z2wiOyAibGliYm9ub2JvIjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJndGstZW5naW5lcyI7
ICJmYW0iOyAiSW1hZ2VNYWdpY2stYysrIjsgInBzcGVsbCI7ICJvcGVubW90aWYiOyB9OwpSUE06
OkFsbG93LU11bHRpQXJjaCB7ImxpYmV4aWYiOyAibGliZjJjIjsgImxpYmdub21lY3VwcyI7ICJs
aWJ3dnN0cmVhbXMiOyAibGliYW8iOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7ImxpYnVzZXIi
OyAibnNzX2RiIjsgImdkay1waXhidWYiOyAidGNwX3dyYXBwZXJzIjsgInBhbmdvIjsgfTsKUlBN
OjpBbGxvdy1NdWx0aUFyY2ggeyJsaWJkYmkiOyAibGlianBlZyI7ICJuZXQtc25tcC1saWJzIjsg
InpsaWItZGV2ZWwiOyAibGliZ2NjIjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJsaWJnY2oi
OyAiWEZyZWU4Ni1NZXNhLWxpYkdMIjsgImxpYnRhYmUiOyAib3BlbmphZGUiOyAib3BlbnNzbDA5
NmIiOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7InJlZGhhdC1hcnR3b3JrIjsgImF0ayI7ICJj
b21wYXQtZGIiOyAiSW1hZ2VNYWdpY2siOyAicGFtX3NtYiI7IH07ClJQTTo6QWxsb3ctTXVsdGlB
cmNoIHsiZ3BtIjsgImxpYnVzYiI7ICJsaWJjYXAtZGV2ZWwiOyAiYmVlY3J5cHQiOyAiZ3VpbGUi
OyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7ImxpYnRlcm1jYXAiOyAiZ2xpYiI7ICJPUkJpdCI7
ICJ2dGUiOyAiZ3RraHRtbDIiOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7ImNvbXBhdC1wd2Ri
IjsgImxpYmNhcCI7ICJnaW1wLXByaW50IjsgImtkZWxpYnMiOyAiZ2FpbCI7IH07ClJQTTo6QWxs
b3ctTXVsdGlBcmNoIHsicG9wdCI7ICJTREwiOyAiZm9udGNvbmZpZyI7ICJmcmVldHlwZSI7ICJk
YjQiOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7InF0IjsgImtyYjUtbGlicyI7ICJsaWJ2b3Ji
aXMiOyAibGF1cy1saWJzIjsgIm5zc19sZGFwIjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJs
aWJhaW8iOyAiT1JCaXQyIjsgImxpYmdub21lIjsgImtyYmFmcyI7ICJsaWJwbmciOyB9OwpSUE06
OkFsbG93LU11bHRpQXJjaCB7Imxlc3N0aWYiOyAiZ3Bob3RvMiI7ICJjeXJ1cy1zYXNsIjsgImxp
YmF0dHIiOyAibGliZ2xhZGUyIjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJhcnRzIjsgImxp
YmFjbCI7ICJuZXd0IjsgImVzb3VuZCI7ICJuY3Vyc2VzIjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFy
Y2ggeyJ0Y2wiOyAiZ21wIjsgIm5ldHBibSI7ICJwYW1fa3JiNSI7ICJjZHBhcmFub2lhLWxpYnMi
OyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7ImxpYnhtbDIiOyAiYmxhcyI7ICJleHBhdCI7ICJs
aWJ4bWwiOyAiY3lydXMtc2FzbC1nc3NhcGkiOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7Imxp
YnNvdXAiOyAicGFtIjsgImxvY2tkZXYiOyAidW5peE9EQkMiOyAib3BlbmxkYXAiOyB9OwpSUE06
OkFsbG93LU11bHRpQXJjaCB7ImdzbCI7ICJycG0tbGlicyI7ICJnZGIiOyAibXlzcWwiOyAic2Ft
YmEiOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7ImxpYnBjYXAiOyAibGFwYWNrIjsgInczYy1s
aWJ3d3ciOyAiWGF3M2QiOyAia2RlYmFzZSI7IH07ClJQTTo6QWxsb3ctTXVsdGlBcmNoIHsiYXNw
ZWxsIjsgImxpYnJhdzEzOTQiOyAiYm9ub2JvLWFjdGl2YXRpb24iOyAicmgtcG9zdGdyZXNxbC1s
aWJzIjsgImd0a2dsYXJlYSI7IH07ClJQTTo6QWxsb3ctTXVsdGlBcmNoIHsiZ2xpYmMiOyAiQ2Fu
bmEtbGlicyI7ICJsaWJnbmF0IjsgImxpYm9nZyI7ICJnbGliMiI7IH07ClJQTTo6QWxsb3ctTXVs
dGlBcmNoIHsibGlidG9vbC1saWJzIjsgImhlc2lvZCI7ICJwd2xpYiI7ICJsaWJ0aWZmIjsgImxp
YnN0ZGMrKyI7IH07ClJQTTo6QWxsb3ctTXVsdGlBcmNoIHsibGlibW5nIjsgImxpYnVuZ2lmIjsg
InBlcmwiOyAicmVhZGxpbmUiOyAicGNyZSI7IH07ClJQTTo6QWxsb3ctTXVsdGlBcmNoIHsic2Fu
ZS1iYWNrZW5kcyI7ICJsaWJvYmpjIjsgImN5cnVzLXNhc2wtcGxhaW4iOyAibGluYyI7ICJnc3Ry
ZWFtZXIiOyB9OwpSUE06OkFsbG93LU11bHRpQXJjaCB7ImxpYmdodHRwIjsgInBpbG90LWxpbmsi
OyAiY3JhY2tsaWIiOyAicGFtLWRldmVsIjsgInNhbWJhLWNvbW1vbiI7IH07ClJQTTo6QWxsb3ct
TXVsdGlBcmNoIHsiY3VybCI7ICJrZGVtdWx0aW1lZGlhIjsgImVsZnV0aWxzLWxpYmVsZiI7ICJH
Q29uZjIiOyAiY3Vwcy1saWJzIjsgfTsKUlBNOjpBbGxvdy1NdWx0aUFyY2ggeyJlMmZzcHJvZ3Mi
OyAibGliZ25vbWVjYW52YXMiOyAiRnJlZVdubi1saWJzIjsgImxpYmd0b3AyIjsgImF1ZGlvZmls
ZSI7IH07Cg==
------=_20051124084619_58434
Content-Type: application/octet-stream; name="multilib.lua"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="multilib.lua"

LS0gRmF2b3IgbmF0aXZlIHBhY2thZ2VzIHVubGVzcyBuZXdlciBub24tbmF0aXZlIGV4aXN0cyAo
b24geDg2XzY0KQppZiBzY3JpcHRfc2xvdCA9PSAiU2NyaXB0czo6QXB0R2V0OjpJbnN0YWxsOjpT
ZWxlY3RQYWNrYWdlIiB0aGVuCgliYXNlYXJjaCA9IGNvbmZnZXQoIkFQVDo6QXJjaGl0ZWN0dXJl
IikKCXNlYXJjaG5hbWUgPSB2aXJ0dWFsbmFtZS4uIi4iLi5iYXNlYXJjaAoKCW5hdGl2ZSA9IHBr
Z2ZpbmQoc2VhcmNobmFtZSkKCWlmIG5hdGl2ZSB0aGVuCgkJY2FuZGlkYXRlID0gbmF0aXZlCgkJ
bGF0ZXN0ID0gcGtndmVyY2FuZChuYXRpdmUpCgllbHNlCgkJbGF0ZXN0ID0gcGtndmVyY2FuZChw
YWNrYWdlc1sxXSkKCQljYW5kaWRhdGUgPSBwYWNrYWdlc1sxXQoJZW5kCgkKCWZvciBpLCBwa2cg
aW4gaXBhaXJzKHBhY2thZ2VzKSBkbwoJCXZlciA9IHBrZ3ZlcmNhbmQocGtnKQoJCWlmIHBrZ3Zl
cmN1cihwa2cpIHRoZW4KCQkJbGF0ZXN0ID0gcGtndmVyY3VyKHBrZykKCQkJY2FuZGlkYXRlID0g
cGtnCgkJZW5kCgkJaWYgdmVyIGFuZCB2ZXJzdHJjbXAodmVyc3RyKHZlciksIHZlcnN0cihsYXRl
c3QpKSA+IDAgdGhlbgoJCQlsYXRlc3QgPSB2ZXIKCQkJY2FuZGlkYXRlID0gcGtnCgkJZW5kCgll
bmQKCglzZWxlY3RlZCA9IGNhbmRpZGF0ZQplbmQKCi0tIHZpbTp0cz00OnN0cz00Cg==
------=_20051124084619_58434
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
apt-rpm mailing list
[email protected]
http://distro2.conectiva.com.br/mailman/listinfo/apt-rpm

------=_20051124084619_58434--