Updating Portage Tree on Gentoo 2017 Image

As the portage tree on the Gentoo 2017 image hasn't been updated in a while running emerge --sync fails due to the portage package being out of date. To update it, it is required to download old snapshots and use them to slowly upgrade portage to a more recent version.

You may be able to find different combinations of snapshots but the following snapshot downloads worked for me:-

wget http://dev.gentoo.org/~swift/snapshots/portage-20170920.tar.bz2
wget http://dev.gentoo.org/~swift/snapshots/portage-20180120.tar.bz2
wget http://dev.gentoo.org/~swift/snapshots/portage-20180520.tar.bz2
wget http://dev.gentoo.org/~swift/snapshots/portage-20180720.tar.bz2

These contain the portage snapshot from the dates in the filenames. We will need to extract these to the /usr/portage directory sequentially and then update the portage package using that snapshot.

First start by backing up the existing /usr/portage directory:-

mv /usr/portage/ /usr/portage.latest

and then extract the oldest portage snapshot to /usr/portage

tar xjpf portage-20170920.tar.bz2 -C /usr

We will then need to update the portage package

emerge -auv portage

then complete the steps for each of the other snapshots

mv /usr/portage /usr/portage.20170920.old
tar xjpf portage-20180120.tar.bz2 -C /usr
emerge -auv portage
mv /usr/portage /usr/portage.20180120.old
tar xjpf portage-20180520.tar.bz2 -C /usr
emerge -auv portage
mv /usr/portage /usr/portage.20180520.old
tar xjpf portage-20180720.tar.bz2 -C /usr
emerge -avu portage
mv /usr/portage /usr/portage.20180721.old

This will leave your system in a position to restore the latest snapshot and emerge the latest portage package

mv /usr/portage.latest /usr/portage
emerge -auv portage

To tidy up, update the etc files that have been updated.

etc-update

and confirm your portage tree is up to date

emerge --sync

Your should then be able to update your system

emerge -av system

Note if you are running Gentoo on a memory constrained system it would be a good idea to create a swap file and mount it automatically on boot. Otherwise compiling gcc will probably fail.

dd if=/dev/zero of=/mnt/2G.swap bs=1G seek=2 count=0
mkswap /mnt/2G.swap    

Configure /etc/fstab so that it mounts automatically on boot

sudo nano /etc/fstab

add the following line

/mnt/2G.swap    none    swap    sw,loop   0 0

and then confirm that it is able to find the fstab entry and mount the swap file

swapon -a