понедельник, 30 января 2012 г.

/etc/portage/

пока я использую генту, файлы в /etc/portage всё больше и больше становятся похожи на нечто нецензурное: пакеты и их опции никак не отсортированы
а package.use - это самый шик - пакет может быть записан несколько раз с разными флагами
т.к. я ленивый, меня напрягает править файл
обычно запись в этот файл заключается в
echo "пакет юз" >> /etc/portage/package.use
дабы отсортировать всё это безобразие, сделал пару скриптов:
1. для всех package.*
2. специально для package.use
вот, собственно, и они
#!/bin/bash

for i in `find /etc/portage/ -type f -name "package*"`;do
  sort -u ${i} --output=${i}
done
да, команда простая, но я же лентяй :3
#!/bin/bash

PACKAGES="$(awk '{print $1}' /etc/portage/package.use | uniq)"

for ATOM in ${PACKAGES};do
  for option in "$(grep "^${ATOM} " /etc/portage/package.use | sed -e "s|${ATOM} ||" | tr " " "\n" | uniq | tr "\n" " ")";do
 ATOM_OPTS+="${option}"
  done
  echo "${ATOM} ${ATOM_OPTS}" | sed 's/[ \t]*$//' >> /tmp/package.use
  unset ATOM_OPTS
done

mv /tmp/package.use /etc/portage/package.use
что делает этот скрипт:
1. находит пакеты и убирает дубли - чтобы пакет был записан один раз
2. находит все юзы данного пакета и убирает дубли, если таковые имеются
ну и потом, естественно, замещает /etc/portage/package.use результатом своей работы, в котором и даёт нам
"пакет юз1 юз2 юз3 юз4 юз5"
в одной строке
да, все ">", "=" и иже с ними остаются
т.е. если есть юз для отдельной версии - никуда он не денется
P.S. все package.* у меня - файлы, ибо всё в одном месте
P.P.S не велик ли я придумал? :3

9 комментариев :

  1. А если так?
    /etc/portage/package.use/packagename

    ОтветитьУдалить
  2. не, тогда дольше получится копаться, если есть зависимые пакеты, нуждающиеся в смене юзов
    в одно месте проще

    ОтветитьУдалить
  3. еще нужно добавить проверку существования /tmp/package.use на случай повторного выполнения скрипта

    [ -f /tmp/package.use ] && rm /tmp/package.use

    ОтветитьУдалить
    Ответы
    1. в нём всё-таки mv, а не cp

      Удалить
    2. и все-таки можно добавить, т.к. если выполнить от обычного юзера, то /tmp/package.use нормально сформируется, но не сможет переместиться. А так все нормально.

      Удалить
    3. ну...думаю, любой гентушник способен это сделать
      я, например, запихать это всё в т.н. einstall (не путать с портажным тезкой), который является обёрткой для emerge, монтирующий диру сборки в tmpfs перед запуском emerge и отмонтирующий её после завершения
      итого: каждый запуск einstall эта помойка приобретает человеческий вид без моего вмешательства
      короче - проверка эта зависит скорее от способа применения

      Удалить
  4. не вижу смысла
    скрипт отрабатывает как надо и после себя не оставляет следов

    ОтветитьУдалить
  5. я вот так еще сделал:
    echo "${ATOM} ${ATOM_OPTS}" |grep -v '^#'| sed 's/[ \t]*$//' >> /tmp/package.use

    а то всякие --autounmask-write=y или собственные эксперименты оставляют кучу мусора

    ОтветитьУдалить