My biggest complaint with Sabayon after using the 14.08 release for more than three months was the lack of a way to get software that is not available in the Sabayon repositories for management by the Entropy binary package management system. There didn't appear to be an easy way to build binary packages from source or from a third party tarball as there is for RPM based distributions through the rpmbuild tool. As it turns out, although Entropy can't do this, Sabayon has several alternatives for getting software that is not available in its binary repositories for for installation and management using Entropy by employing some of the functions available in Portage -- the Gentoo source package management system -- to first build the packages. This article describes one such relatively simple and safe method.
As we are not actually using Portage to install a package, but merely using it to build a binary package, it is probably not absolutely necessary to prepare the system for hybrid source/binary package management, but it is probably best to do so, and I followed my own advice. That procedure is described here; the relevant part of that procedure for the method described in this article is the section on "System-Wide Procedure".
The procedure described in this article, to briefly summarize:
Begin the process of building a package by viewing the information on the Gentoo Packages page to determine what dependencies if any exist for the desired package. Build-time dependencies that are available in Sabayon should be installed first using Entropy. Build-time dependencies that are not available through Entropy should be built recursively using the process described in this article. Run-time dependencies that are available in Entropy will be resolved and installed during the final package installation by Entropy. Run-time dependencies that are not available in Entropy should also be built in advance using the procedure described here. It should be noted that the Sabayon developers warn that core system packages should not be built in this way.
All of the following commands are entered as root.
equo search dependencypackagename
emerge --sync
USE
flags.
emerge -av -B packagename
the Gentoo package will be saved to /usr/portage/packages/package-category/package-x.x.x.tbz2
equo pkg inflate --savedir /converted/package/directory /usr/portage/packages/package-category/package-x.x.x.tbz2
cp /converted/package/directory/package-category/package-category:package-x.x.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx~9999.tbz2 /var/lib/entropy/client/packages/packages/amd64/5
equo -i /var/lib/entropy/client/package/amd64/5/package-category/package-category:packagename-x.x.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx~9999.tbz2
Note that the option -i in the above is short for the subcomand install.
Having been introduced to the glancess process monitoring tool by Voyager, I have installed it on every other Linux I have used since trying Voyager. Unfortunately, it is not available through Entropy, Sabayon's binary package management system. But the method introduced above of using Portage to build the binary package can be used for installation and management by Entropy.
The first step is to look at the package details on Gentoo's package page for glances which shows the use flags chart
, hddtemp
, snmp
, and web
. Clicking on each of these opens another page with the description of the flag and other packages that are related to the flag, giving clues on whatever dependencies exist for the desired package. Clicking on chart
, there is an indication that it depends on matplotlib
a subsequent search for which in Entropy (equo search matplotlib) shows that it is available through Entropy, meaning its own dependencies are also available through Entropy. CLicking on the hddtemp
, snmp
, and web
indicates that these USE
flags are actually referring to the packages app-admin/hddtemp
, net-analyzer/net-snmp
, and dev-python/bottle
. A subsequent search for these shows that they are available in the Entropy system.
It is also necessary to follow the link to the Git repository browser from the Gentoo packages glances page in order to see the ebuild for the version to be installed as that provides more information on dependencies. In the case of glances, the following excerpt from glances-2.4.2.ebuild is relevant.
RDEPEND="${DEPEND}
>=dev-python/psutil-2.0.0[${PYTHON_USEDEP}]
hddtemp? ( app-admin/hddtemp )
snmp? ( dev-python/pysnmp[${PYTHON_USEDEP}] )
web? ( dev-python/bottle[${PYTHON_USEDEP}] )
chart? ( dev-python/matplotlib[${PYTHON_USEDEP}] )"
From my heuristic experience, I have found that these lines indicate that dev-python/psutil is an explicit dependency and app-admin/hddtemp, dev-python/pysnmp, dev-python/bottle, and dev-python/matplotlib are optional dependencies that will only be installed if the corresponding USE
flags are specified.
Because all of these dependencies are available in Entropy, we can just proceed with the rest of the process without using this process to recursively build the dependency packages. Also, initially we won't worry about specifying the USE
flags in /etc/portage/package.use/00-sabayon.package.use.
Next
update the Portage Tree with
emerge --sync
build the Gentoo binary package with
emerge -av -B sys-process/glances
The package will be saved to /usr/portage/packages/sys-process/glances-2.4.2.tbz2. Since the version of the package was not specified in the above command, Portage will take the best version, not necessarily the latest, which in this case happens to be the latest version, 2.4.2 (as of 23 Oct 2015). The following code block shows the initial response to the command and the prompt for confirmation.
V570-SABAYON packages # emerge -av -B sys-process/glances
These are the packages that would be built, in order:
Calculating dependencies... done!
[ebuild N ] sys-process/glances-2.4.2::gentoo USE="-chart -doc -hddtemp -snmp -web" PYTHON_TARGETS="python2_7 python3_4 -python3_3" 5,370 KiB
Total: 1 package (1 new), Size of downloads: 5,370 KiB
Would you like to merge these packages? [Yes/No] y
create a directory for saving the converted package, which will be used in the next step, if desired, otherwise it will be saved to some default directory by equo. I created a directory in my home directory called sabpac with my standard user.
convert the package to the Sabayon binary package format and save it to the previously created directory with
equo pkg inflate --savedir /home/brook/sabpac /usr/portage/packages/glances/glances/glances-2.4.2.tbz2
This will create /home/brook/sabpac/sys-process/sys-process:glances-2.4.2.acb8874294b3ae2f1207ab1d3c89f1c2e06a381a~9999.tbz2. The string between the version number and the ~ appears to be some sort of hash that is used by the delta download feature during updates by Entropy. I kept the name as is but, alternatively, it can be renamed removing this string.copy the converted package to the default location for packages downloaded by Entropy with
cp ~/sabpac/sys-process/sys-process:glances-2.4.2.acb8874294b3ae2f1207ab1d3c89f1c2e06a381a~9999.tbz2 /var/lib/entropy/client/packages/packages/amd64/5
install glances with
equo -i /var/lib/entropy/client/packages/packages/amd64/5/sys-process:glances-2.4.2.acb8874294b3ae2f1207ab1d3c89f1c2e06a381a~9999.tbz2
Had I specified the use flags indicated in the Gentoo packages page for sys-process/glances in /etc/portage/package.use/00-sabayon.package.use by inserting the line
sys-process/glances chart hddtemp snmp web doc
when running emerge -av -B sys-process/glances, the response would have been:EB8540w-SABAYON glances # emerge -av -B sys-process/glances
* IMPORTANT: 19 news items need reading for repository 'gentoo'.
* Use eselect news read to view new items.
These are the packages that would be built, in order:
Calculating dependencies... done!
[ebuild N ] sys-process/glances-2.4.2::gentoo USE="chart doc hddtemp snmp web" PYTHON_TARGETS="python2_7 python3_4 -python3_3" 0 KiB
Total: 1 package (1 new), Size of downloads: 0 KiB
Would you like to merge these packages? [Yes/No] Yes
The message regarding Gentoo news appears in the second output, because it was a different computer on which I hadn't bothered to read the news. In any case, note the difference in the output with the addition of the USE
flags from the previously presented response of the emerge
command; in the previous output there were -
prepended to the USE flags whereas, now there are not. When installing the final package with equo, the dependencies referred to by the use flags are resolved and installed along with glances, as shown in the following screenshot. Without the use flags only required are installed as specified in the ebuild, as previously mentioned.
In this case this is the dev-python/psutil package.
Compare the screenshot with the previous one displaying the output of the equo i command where the initial Gentoo package was built without including the USE
flags.
For potential Sabayon users with needs similar to mine, who want software that may not be available in the regular Sabayon binary repositories can use this relatively simple function of Gentoo's portage to obtain software from Gentoo's repositories and build the binary package for installation and management by Entropy. This method, where Portage is only used to build a binary package for subsequent conversion to a Sabayon binary package and installation by Entropy, is safer than converting Sabayon to a hybrid source/binary system. The safety of this method stems from the fact that Portage doesn't actually install the package.
I find this bit of knowledge of Sabayon's Gentoo foundation greatly improves Sabayon's viability as a useful day to day distribution. It also shows that Sabayon is a uniquely flexible system suited more to those who are willing to learn more about its foundation.
Thanks to albfneto on the Sabyon forums for pointing out the method described in this article.