Using Gentoo for servers and chroots it might happen to deal with old and not regularly updated Gentoo environment, which in some cases is completely non-updatable using the regular process with emerge command. And no emerge means no installs from the Gentoo packaging system. Or you maybe have a broken portage after failed update with missing emerge command or missing or broken portage modules
In general, this article is for those, who cannot update their “sys-apps/portage” or even the emerge command exits with errors and is of no use.
In cases such as:
- Missing portage files (broken portage)
- Broken emerge command (broken portage)
- no update of new portage is possible – very very old portage, which does not support EAPI of all current “sys-apps/portage” (now is EAPI=5) and you do not have old portage ebuild files
- Easy update the portage to the newest in an old Gentoo system.
A real world errors are included at the bottom for each case above.
You need just a working python 2.7.x and git to clone “https://anongit.gentoo.org/git/proj/portage.git” or at least some tool to download the portage package.
Unpack to a globally accessible directory, DO NOT USE “/root“, because emerge changes user to non-privileges and needs execute permission for other for the all the path to the directory of emerge. Look below for more details.
Our example is to repair a completely broken portage with error:
srv ~ # emerge -va portage Traceback (most recent call last): File "/usr/lib/python-exec/python2.7/emerge", line 42, in <module> import portage ImportError: No module named portage
STEP 1) Clone the portage package from the git or download the portage tarball.
If you do not have a git client you can always check the URL in the sys-app/portage ebuild and download the URL. Still, if you cannot find the tarball’s URL, you can just simply get a mirror such as https://mirror.leaseweb.com/gentoo/distfiles, wait for the loading of the page (12Mbytes, it’s huge, all Gentoo tarball files’ names are here) and grep in it by the name “portage”. Or you can check here https://dev.gentoo.org/~zmedico/portage/archives/. Download the latest tarball and unpack it in the /opt directory.
Using git is the easiest method, but it is the same with downloading and unpacking the tarball in the “/opt”.
srv opt # git clone https://anongit.gentoo.org/git/proj/portage.git Cloning into 'portage'... remote: Enumerating objects: 151654, done. remote: Counting objects: 100% (151654/151654), done. remote: Compressing objects: 100% (39915/39915), done. remote: Total 151654 (delta 112542), reused 149864 (delta 111349) Receiving objects: 100% (151654/151654), 22.38 MiB | 550.00 KiB/s, done. Resolving deltas: 100% (112542/112542), done. srv opt # cd portage/ srv portage # ls -al total 232 drwxr-xr-x. 11 root root 4096 Oct 6 04:52 . drwx------. 4 root root 4096 Oct 6 04:51 .. drwxr-xr-x. 6 root root 4096 Oct 6 04:52 bin drwxr-xr-x. 5 root root 4096 Oct 6 04:52 cnf -rw-r--r--. 1 root root 1840 Oct 6 04:52 COPYING -rw-r--r--. 1 root root 6646 Oct 6 04:52 DEVELOPING drwxr-xr-x. 5 root root 4096 Oct 6 04:52 doc -rw-r--r--. 1 root root 200 Oct 6 04:52 .editorconfig drwxr-xr-x. 7 root root 4096 Oct 6 04:52 .git -rw-r--r--. 1 root root 80 Oct 6 04:52 .gitignore drwxr-xr-x. 4 root root 4096 Oct 6 04:52 lib -rw-r--r--. 1 root root 18092 Oct 6 04:52 LICENSE -rwxr-xr-x. 1 root root 1272 Oct 6 04:52 make.conf.example-repatch.sh drwxr-xr-x. 3 root root 4096 Oct 6 04:52 man -rw-r--r--. 1 root root 290 Oct 6 04:52 MANIFEST.in drwxr-xr-x. 2 root root 4096 Oct 6 04:52 misc -rw-r--r--. 1 root root 17845 Oct 6 04:52 NEWS -rw-r--r--. 1 root root 0 Oct 6 04:52 .portage_not_installed -rw-r--r--. 1 root root 2246 Oct 6 04:52 README -rw-r--r--. 1 root root 68122 Oct 6 04:52 RELEASE-NOTES drwxr-xr-x. 6 root root 4096 Oct 6 04:52 repoman -rwxr-xr-x. 1 root root 4889 Oct 6 04:52 runtests -rwxr-xr-x. 1 root root 19743 Oct 6 04:52 setup.py drwxr-xr-x. 2 root root 4096 Oct 6 04:52 src -rwxr-xr-x. 1 root root 81 Oct 6 04:52 tabcheck.py -rw-r--r--. 1 root root 1864 Oct 6 04:52 TEST-NOTES -rw-r--r--. 1 root root 571 Oct 6 04:52 testpath -rw-r--r--. 1 root root 348 Oct 6 04:52 tox.ini -rw-r--r--. 1 root root 584 Oct 6 04:52 .travis.yml
This is the latest portage with working emerge command in the bin sub-directory.
Keep on reading!