Май 24 2010

пересборка части мира

Published by

собственно вот нехитрый скрипт, который пересоберёт часть мира с новыми XFLAGS — пригодится если вы поменяли флаги и пересобрав часть софта убедились, что они сделали этот софт быстрее/стабильней и хотите остальные пакеты пересобрать с ними,а весь мир перебирать некогда/лень, или наоборот накосячили и хотите откатиться.

#!/bin/bash

DIR="/var/db/pkg"
FILE="environment.bz2"
IGNORE_DIRS="/etc/portage/env.d /etc/portage/env"
IGNOR_CATEGORY="virtual/ sys-kernel/ media-fonts/"
IGNOR_FLAGS="pipe Wall Wno-all"
BINPKG="-bin-"
IGNOR_PKG="grub cpio"
TYPE="CFLAGS"

IGNOR_DIRS_PKG=$(for i in "$(find ${IGNORE_DIRS} -type f)";do grep -l "^$TYPE=" $i | rev | cut -d"/" -f1,2 | rev;done)

echo -e "\n\033[0;0;1;33mPackages with unique flags:\033[0m"
echo -e "\033[0;0;1;32m$IGNOR_DIRS_PKG\033[0m" | tr " " "\n"

echo -e "\n\033[0;0;1;33mIgnore categories:\033[0m"
echo -e "\033[0;0;1;32m$IGNOR_CATEGORY\033[0m" | tr " " "\n"

echo -e "\n\033[0;0;1;33mIgnore packages:\033[0m"
echo -e "\033[0;0;1;32m$IGNOR_PKG\033[0m" | tr " " "\n"

echo -e "\nPlease wait...\n"

CONF=$(emerge --info | grep $TYPE | cut -d'"' -f2)

for x in "$(find $DIR -name $FILE -type f -print 2>/dev/null)"; do
    export PKG=$(echo "$x" | cut -d '/' -f5,6);
done

for i in $PKG;do
  TEST1="$(bzgrep "declare -x $TYPE=" $DIR/$i/$FILE | cut -d'"' -f2 | tr " " "\n" |sort | grep -v "$(echo $IGNOR_FLAGS| tr " " "\n")" | sort)"
  TEST2="
$(echo "$CONF" | tr " " "\n" | sort| grep -v "$(echo $IGNOR_FLAGS| tr " " "\n")" | sort)"
  if [ "
$TEST1" != "$TEST2" ];then
  export xREBUILD="
$xREBUILD $i"
  fi
done

export zREBUILD=$(echo ${xREBUILD} | tr " " "\n" | grep -v "$(echo $IGNOR_CATEGORY $IGNOR_DIRS_PKG $BINPKG $IGNOR_PKG | tr " " "\n")"
)

for z in $zREBUILD;do
  TEST3="$(bzgrep "declare -x $TYPE=" $DIR/$z/$FILE | cut -d'"' -f2 | tr " " "\n" |sort | grep -v "$(echo $IGNOR_FLAGS| tr " " "\n")" | sort)"
  TEST4="
$(bzgrep "declare -- $TYPE_BASE=" $DIR/$z/$FILE | cut -d'"' -f2 | tr " " "\n" |sort | grep -v "$(echo $IGNOR_FLAGS| tr " " "\n")" | sort)"
  if [ "
$TEST3" != "$TEST4" ];then
    for flag_o_matic in $z;do
      TEST5="
$(bzgrep "flag-o-matic" $DIR/$flag_o_matic/$FILE)"
      if [ -z "
$TEST5" ];then
      export REBUILD="
$REBUILD =$flag_o_matic"
      fi
    done
  fi
done

if [ "
$REBUILD" == "" ];then
  echo -e "
\n\033[0;0;1;32m[done] clean :)\033[0m\n"
  else
  emerge -1av $REBUILD  
fi

IGNORE_DIRS=CFLAGS для отдельного пакета

IGNORE_PKG=  пакеты которые не хотите по тем или иным причинам пересобирать, например они собираются со своими флагами указанными не в ебилде, а в сорсах — пишутся через пробел
IGNOR_FLAGS= флаги, которые влияют только на процесс сборки, но не на собираемый софт
IGNOR_CATEGORY= категории пакетов, которые нет смысла пересобирать при смене флагов — виртуалы, шрифты…
TYPE= определяет какие флаги проверять

No responses yet

Trackback URI | Comments RSS

Leave a Reply


*

Powered by WordPress