epcim
10/20/2015 - 11:38 AM

gentoo_portage_solvemp.howto.md

#!/bin/bash

This script will unmask any package masked by specified keyword

# It is using flagedit to remove keyword
# Usage: solve_mp ghc-bin 
#
# Author: epcim[at]apelalive.net

TMPF=/tmp/.my_solveMaskedPackages

for round_no in `seq 1 1000`; do
  echo ---------------------------------------- 
  echo - ROUND: $round_no
  rm $TMPF
  ## emerge -pDN
  emerge -p$1 $2 > $TMPF
  if  cat $TMPF | grep '!!! All ebuilds'; then
         #select latest ebuild 
         line=`cat $TMPF | grep '^- ' | head -n1`; 
         #if masked by keyword - parse name
         n=`echo $line | sed -e "s/- \(.*\) (masked by.*/\\1/"`;
         #if masked by package mask - parse name
         n1=`echo $line | grep 'masked by' | grep 'package.mask' | sed -e "s/^- \(.*\) (masked by.*/\\1/"`;

         #echo - ROUND: $round_no
         echo - N: $n,N1: $n1

         #HARD MASKED
         #parse pattern for searching in /etc/portage/package.unmask (pkg name for first '.' )
         n2=`echo $n1 | sed -e "s/\(.*\)\.\(.*\)/\\1/"`;
         if [ $n2 ] ; then
            #echo - ROUND: $round_no
            echo - hard masked
            if grep $n2 /etc/portage/package.unmask; then
              echo "Already unmasked by package.mask"
            else
              if cat $TMPF | grep 'masked by' | grep 'package.mask'; then
                echo '!! package.mask resolved - unmask manualy... !!';
                echo "echo '=$n1' >> /etc/portage/package.unmask";
                break;
              fi
            fi;
         fi;

         #MASKED BY KEYWORD
         if cat $TMPF | grep 'masked by' | grep '~x86 keyword'; then
           #echo - ROUND: $round_no
           echo - masked by keyword
           echo - flagedit "=$n" -- "~x86";
           sudo flagedit "=$n" -- "~x86";
         fi;

   else
      echo "All ebuilds sucesfully solved!"
      break;
   fi;
done