Обновление

  • Gamer11 26.03.2012
    Можно ли сделать так,чтобы определенные пакеты не обновлялись командой emerge --update world?
  • VolandVoland 26.03.2012
    Можно замаскировать текущую версию. Представим, что нам нужно замаскировать пакет app-xxx/proga. У нас стоит версия app-xxx/proga-2.3.1, а все, что новее - на фиг нам не нужно. Создаем (если не создан) в папке /etc/portage файл package.mask
    touch /etc/portage/package.mask

    Далее делаем
    echo ">app-xxx/proga-2.3.1" >> /etc/portage/package.mask
    (ну, можно все это и не через консоль, это я так, привык просто).
    Записав в этот файл строку >app-xxx/proga-2.3.1 мы блокируем все, что выше этой версии. Теперь важное: знаки перед именем пакета и формат написания имени пакета.

    Во всех файлах для управления компиляции следует явно указывать имя пакета, то есть, с категорией. Например, не
    firefox
    а
    www-client/firefox

    Просто в portage могут встретиться одинаковые имена пакетов в разных категориях, а если взять за привычку такой формат, то можно избежать этих проблем. Так, теперь об этих значках.
    > - все, что новее указанной версии;
    >= - все, что новее или равно указанной версии;
    < - все, что старее указанной версии;
    <= - все, что старее или равно указанной версии;<br />= - все, что равно указанной версии;

    Мы могли просто вписать:
    echo "app-xxx/proga" >> /etc/portage/package.mask
    Но таким образом мы бы замаскировали все версии пакета app-xxx/proga

    А вот так мы сказали, что имеем в виду все, что новее указанной версии:
    echo ">app-xxx/proga-2.3.1" >> /etc/portage/package.mask

    В общем, если мы в имени пакета указываем версию, то нужен какой-то определяющий знак в начале.
    Вот так бы мы замаскировали конкретную версию пакета, а именно 2.3.1:
    echo "=app-xxx/proga-2.3.1" >> /etc/portage/package.mask

    Кстати, то же применимо и к USE флагам. Просто берем и создаем файл:
    touch /etc/portage/package.use

    Тут можно прописать USE флаги для каждого конкретного пакета. Например для версии 2.3.1:
    echo "=app-xxx/proga-2.3.1 doc gnome ffmpeg -kde -qt" >> /etc/portage/package.use

    Или для всех версий этого пакета:
    echo "app-xxx/proga doc gnome ffmpeg -kde -qt" >> /etc/portage/package.use
  • VolandVoland 26.03.2012
    Но есть тут подводные камни. Если мы замаскируем новые версии пакета app-xxx/proga, то при обновлении мира некие другие пакеты могут запросить эту самую замаскированную версию app-xxx/proga. Тогда придется либо смириться с обновлением, либо маскировать зависимости, либо лезть и ковырять ebuild'ы. Я обновляю мир так:
    emerge -pv --update world

    Это выводит на экран все, что должно обновиться, но ничего не качает, не устанавливает. А после я делаю так:
    emerge тут список устанавливаемых пакетов через пробел

    То есть, в начале смотрю, что portage хочет обновить, а потом сам решаю, что обновлять.