I will probably stop maintaining this post after this update.
Steps 1, 2, and 4 through 6 are mostly obsolete now. Kept mostly just for historical reference.
For the transition, the list of packages that need abi_x86 in step 3 (using limited wildcards) may still be a useful compromise between enabling it globally, and needing to set it individually on something like 200 packages (as the "eselect news" release suggests).
Also, until Qt 4.8.6 is stabilized, you might prefer to unmask emul-linux-x86-qtlibs (in /etc/package.unmask) if you want to install some out-of-tree or unstable package (like skype) that depends on 32 bit Qt. See also the "Qt Exception" note in step 1.
OLD: Problem/Background
It is now very practical to remove emul-linux libraries in favor of directly enabling 32 bit builds of source packages instead, even on a "stable" system. There are currently only three issues blocking official stabilization in [bug]525254[/bug], none of which I currently need myself.
My solution, detailed further below, involves uninstalling emul-linux-x86-* packages and using natively compiled 32-bit packages instead.
OLD: Other Possible 32-bit Solutions: (which I haven't tested)
Although the native 32-bit builds is the way of the future (hopefully any day now...), in the short term it isn't officially supported, and so here are some alternative short-term strategies:
A 32-bit chroot gives you the maximum flexibility in configuring what you want, but requires extra effort to setup, use, and maintain. See https://www.gentoo.org/proj/en/base/amd ... chroot.xml
As of 2014-05-12, the official way to get a fully-functional, mostly stable system working is still to leave ABI_X86=-32 masked/disabled for most packages (except actual applications like wine), and do a world update to pick up the latest versions of the emul-linux packages. Although be aware that this will probably be a relatively short-term solution only: it could be masked any week [or day?] now.
Another alternative I haven't tried is to switch to a mostly unstable ~amd64 install with ABI_X86=32 globally enabled. This might still install emul-linux libraries, but only for the parts that can't be supplied by individual package ebuilds. I think this may be where most developers focus their efforts. Since development occurs here, it may break random things (including 64-bit stuff) moderately often, but any one break will likely be fixed quickly. See https://wiki.gentoo.org/wiki/Multilib_S ... x_Packages for detailed instructions.
Or see comment 28 of [bug]499952[/bug] to try a (probably fully obsolete) hybrid/combined native (where possible) and emul-linux (to fill in the gaps) solution that installs more unstable packages than my solution, but fewer than the full-on ~amd64 install. But I expect its list of ~amd64 packages is probably out of date. There are similar lists elsewhere, but they are probably also out of date.
OLD: Some related links:
http://unix.stackexchange.com/questions ... -in-gentoo
The best explanation of the ABI_X86 stuff I've found.
http://wiki.gentoo.org/wiki/Project:Multilib
Relatively new project page for the multilib conversion effort. Roadmap, how to adapt ebuilds, etc.
https://wiki.gentoo.org/wiki/Multilib_S ... x_Packages
How to eliminate emul-linux when running an unstable (~amd64) system. Lists abi_x86_32 packages individually (no wildcards), which has pluses and minuses. May eventually replace this page, once abi_x86_32 is unmasked for stable.
http://wiki.gentoo.org/wiki/Multilib/gx86-multilib
Very brief description of how to enable abi_x86_32. Should probably be merged with above.
https://wiki.gentoo.org/wiki/Multilib_porting_status
During the main portion of the multilib conversion effort, this was the main status page. But these days it is mostly obsolete.
--------
My Solution
The following steps should allow you to install wine without emul-linux packages. If you don't care about wine, it can still be used as a proxy for "can build most 32-bit software, with or without portage".
One line summary: My solution is to completely uninstall emul-linux-x86-* packages, enable ABI_X86=32 fairly widely but selectively, and (main gotcha:) disable anything that still has missing dependencies in this configuration.
---
Step 1: Find and disable anything that still requires emul-linux-x86*:
The number of unstable packages that need unmasked ~amd64 explodes (below) if you allow anything to pull in emul-linux-x86-baselibs with abi_x86_32 enabled.
Main gotcha: If you need something that still requires emul-linux*, then you obviously can't remove them, and this solution is not for you. But see some of the "optional"s below, or other solutions above. Qt exception: emul-linux-x86-qtlibs-20140508-r1 (only) can now be installed without the rest of the emul-linux packages, if you enable abi_x86_32 and ~amd64 in appropriate native dependencies, and stop using a wildcard in step 5 below. This should be an acceptable alternative solution until qt multilib is stabilized ([bug]530238[/bug]). I don't think any other emul-linux packages have dependencies setup to allow this.
Make sure the emul-linux-* packages aren't in /var/lib/portage/world. Use "emerge --deselect emul-linux-WHATEVER".
Use "equery d emul-linux-WHATEVER" to see what else may depend on them. The dependencies it prints are relatively useless; go look at the original ebuild (as well as other versions) to see if they can be satisfied with multilib packages instead. Then either uninstall such packages, or disable use flags for individual packages (if the dependency is conditional on use flags).
Recently I only need to disable a couple of use flags on my machine:
Code: Select all
app-emulation/wine -gstreamer
www-plugins/adobe-flash -abi_x86_32
## If you do NOT need "wine gstreamer", then disabling the below
## also allows you to avoid installing various other abi_x86_32 packages.
## But if you want "wine gstreamer", leave this line out
## so that abi_x86_32 will be enabled by the wildcards in step 3.
## (This take precedence over wildcards in step 3.)
virtual/ffmpeg -abi_x86_32
Optional 2: adobe-flash looks like it supports native 32-bit dependencies now (untested), but it is only useful if you want to run it in a 32-bit browser for some reason.
---
OLD: Step 2: Unmask abi_x86_32
Code: Select all
-abi_x86_32
Step 3: Enable abi_x86_32
Either add ABI_X86="32" to make.conf, or try to be more selective about it. For example:
Code: Select all
dev-libs/* abi_x86_32
media-libs/* abi_x86_32
media-sound/* abi_x86_32
net-libs/* abi_x86_32
sys-devel/* abi_x86_32
sys-libs/* abi_x86_32
virtual/* abi_x86_32
x11-libs/* abi_x86_32
x11-proto/* abi_x86_32
app-accessibility/at-spi2-core abi_x86_32
app-accessibility/at-spi2-atk abi_x86_32
app-admin/gamin abi_x86_32
app-arch/bzip2 abi_x86_32
app-i18n/enca abi_x86_32
dev-lang/orc abi_x86_32
dev-util/pkgconfig abi_x86_32
sys-apps/attr abi_x86_32
sys-apps/dbus abi_x86_32
sys-fs/udev abi_x86_32
dev-db/unixODBC abi_x86_32
dev-db/sqlite abi_x86_32
sys-apps/util-linux abi_x86_32
net-nds/openldap abi_x86_32
net-print/cups abi_x86_32
media-gfx/sane-backends abi_x86_32
media-gfx/graphite2 abi_x86_32
app-emulation/wine abi_x86_32
## OPTIONAL: To enable wine gstreamer, you
## need these, as well re-enabling virtual/ffmpeg abi_x86_32
## from step 1:
#media-plugins/libvisual-plugins abi_x86_32
#media-plugins/gst-plugins*:0.10 abi_x86_32
#media-video/mjpegtools abi_x86_32
#media-video/ffmpeg abi_x86_32
## END OPTIONAL: "wine gstreamer"
## OPTIONAL: Some 64-bit video players (like totem) may
## indirectly depend on quvi and lua stuff. I'm not sure
## about the best long-term strategy here; I suspect that
## more stuff may eventually depend on these. (Perhaps
## video could use more research and have instructions
## that are split off from the rest of the "base" multilib instructions?)
## ALTERNATIVE 1: Just disable abi_x86_32 for stuff
## that is usually only needed for 64 bit players:
#media-libs/libquvi-scripts -abi_x86_32
#media-libs/libquvi -abi_x86_32
## ALTERNATIVE 2: Enable abi_x86_32 for stuff that
## isn't actually used in 32 bit code (yet?):
#net-misc/curl abi_x86_32
#dev-lang/lua abi_x86_32
#dev-lua/* abi_x86_32
## END OPTIONAL: totem / quvi / lua stuff
It would be nice if there were an easy way to only build 32 bit libs that you actually need to meet other dependencies, but I don't know a good way of automating that.
---
OLD: Step 4: Unmask ~amd64 in several packages to support abi_x86_32:
I currently don't need to unmask any unstable packages.
A year ago the package.keyword list was fairly long. Before it finally shrunk to zero, it most recently had one required ("=net-libs/gnutls-3.3.10-r2 ~amd64") and two optional [for "wine gstreamer"]: ("=media-libs/libbluray-0.5.0-r1 ~amd64" and "=media-video/mjpegtools-2.1.0-r2 ~amd64"). But it is empty now.
---
OLD: Step 5: Mask emul-linux-x86-*:
Code: Select all
app-emulation/emul-linux-x86-*
Step 6: Update
Run "emerge -uDNva world", and/or fix any remaining problems. Might need to revisit step 1, make a few more USE flag tweaks, and/or adjust some more package keywords.
--------
History of Edits
- 2014-03-07: "wine nls" supported (with "gettext abi_x86_32"). Remove "libiconv ~amd64" and "llvm ~amd64".
- 2014-03-16: Remove "bzip2 ~amd64". New version of "freetype ~amd64" (old ebuild gone).
- 2014-03-28: Remove 8 more ~amd64 lines from step 4. Clarify purpose of and extend description of step 1. Remove "Priorities" section.
- 2014-04-06: Remove "*/libffi ~amd64".
- 2014-04-20: Remove "libvorbis ~amd64" and "flac ~amd64". Add optional "wine xml" instructions. Rewrite problem/background section, including references to alternatives.
- 2014-05-05: Describe alternative that the new emul-linux (20140406) is finally stabilized. (And then further updated to mention [bug]509556[/bug] a few minutes later.)
- 2014-05-12: Update [bug]509556[/bug] information.
- 2014-05-20: Remove "mpg123 ~amd64" and "xml2 ~amd64". Minor rewording some parts.
- 2014-05-27: Remove "ncurses ~amd64". Mention that there are now ways to enable all the USE flags except for "wine gstreamer", although some flags still require hardmasked packages.
- 2014-05-28: Added "attr abi_x86_32" with note.
- 2014-06-07: Remove "libvdpau ~amd64". Numerous edits and additions to step 3 (abi_x86_32). Added several more optional sections to step 4 (~amd64).
- 2014-06-15: Remove optional "libtasn1 ~amd64". Mention that "wine gstreamer" is now possible, but still requires many unstable packages.
- 2014-06-30: Remove "wine-1.6.2 ~amd64". Mention that the latest emul-linux-x86-qtlibs can be used without the rest of emul-linux.
- 2014-07-07: Remove "*/pkgconfig ~amd64" and "readline ~amd64". Add two links to multilib project pages. Reword and shorten some paragraphs, including the one describing the current-stable ABI_X86=-32 option.
- 2014-07-18: Add "gamin abi_x86_32". Remove libtool, util-linux, and freetype ~amd64.
- 2014-07-22: Remove several stabilized ~amd64 packages from step 4. Add several entries to steps 1, 3, and 4 to fix several errors/conflicts caused by newly stabilized packages (flagged with comments).
- 2014-08-03: Add "sqlite abi_x86_32". Remove "fribidi ~amd64". Integrate/remove some of the 07-22 flag comments. Link to new wiki page about eliminating emul-linux on ~amd64 systems.
- 2014-10-10: Remove "gpg-error ~amd64". Adjust versions for now-removed ~amd64 versions of optional libgcrypt and gnutls. Add real instructions for optionally enabling "wine gstreamer". Tweak wording of various other text.
- 2014-10-25: Remove optional "libgcrypt ~amd64" and"libsdl ~amd64". Remove "xslt -abi_x86_32" special case; "wine xml" no longer requires other unstable packages. Grub:0 patch is in -r14. Reference comment about stabilization hoped for in late November. Reference 32-bit chroot instructions.
- 2014-11-05: Remove "lcms ~amd64" and optional "sane-backends ~amd64".
- 2014-11-11: Fix several references to non-sensical "AMD_X86" to "ABI_X86" instead, although none of the errors were in the block-quoted text. (Thanks thumper.)
- 2014-12-06: Remove libSM -uuid. Remove optional libSM ~amd64, nettle ~amd64, and unixODBC ~amd64. Tweak paragraph about Qt.
- 2014-12-26: Remove optional a52dec ~amd64.
- 2015-01-18: Remove "grub:0 -ncurses". Remove mention of wine-1.7.19-r1; stable handles all USE flags now. Only two wine USE flags need optional unstable packages. Remove some nearly year old notes about libpng header/lib version mismatch problems ([bug]499952[/bug] and [bug]506900[/bug]). Remove 6 month old note about troubleshooting a temporary problem with bad 32-bit headers ([bug]509556[/bug]). A few other wording tweaks.
- 2015-01-31: Remove "cairo ~amd64" (would have been last required ~amd64, but:). Add required gnutls ~amd64 with associated simplifications (instead of avoiding several packages and use flags that require multilib gnutls). Remove "wine -ssl". Remove "libsoup -abi_x86_32" and "glib-networking -abi_x86_32".
- 2015-02-02: Fix missing "4" in "gnutls ~amd64". Oops.
- 2015-02-21: Step 4 (package.keywords) is now unnecessary. Add some notes and options about totem / quvi / lua to step 3.
- 2015-03-29: Finally stabilized! Add a new pre-intro section focused on the what is relevant now that it is stable. Add two accessibility packages needed by the a recent gtk update to step 3.




