Последовательность шагов для поиска пакетов, которые давно не переустанавливались.
Захотелось обновить или переустановить пакеты, которые давно не обновлялись и не переустанавливались.
Для этого сделал следующие шаги:
1. Нашёл пакеты, которые устанавливались недавно в 2019 или в 2020 году
$ qlop -m | grep -E '^(2019|2020)' >> packages_after2019
2. Создал список с пакетами, которые установлены в системе
$ qlist -IC >> installed_packages
3. Из файла packages_after2019 убрал лишнее в текстовом редакторе, с помощью регулярных выражений:
\n[\d-T: >]+
4. Далее с помощью доп. функций текстового редактора отсортировал список в packages_after2019, чтобы удалить строки с одинаковыми названиями пакетов.
5. Чтобы удалить одинаковые строки использовал интерпретатор Haskell ghci. Для этого преобразовал содержимое packages_after2019 в Haskell-ный список, с помощью замены '\n' на '", "'.
6. Далее применил к списку Haskell-ное решение:
tail $ foldl (\acc x -> if last acc /= x then (acc ++ [x]) else acc) [""]
7. Преобразовал Haskell-ный список в прежний формат файла packages_after2019 - на каждой строке остаётся только категория и название пакета.
8. В конце концов, чтобы получить желаемый список пакетов, которые не обновлялись и не переустанавливались, нужно исключить из файла installed_packages название пакетов, которые есть в packages_after2019.
На просторах интернета, есть много решений, для последнего пункта, например:
comm -13 <(sort -u packages_after2019) <(sort -u installed_packages)
Просто не хочется думать. XD
Просто не хочется думать в одиночестве над оптимизацией этой последовательности шагов.
Новое решение(добавлено 22.12.2020):
Выводит пакеты, которые в последний раз переустанавливались в 201? году:
qlist -ICv | while read name; do qlop -mtv $name | tail -n1; done | grep -E '^201.' | sort
- Для комментирования войдите или зарегистрируйтесь
А точно с этой стороны держать паяльник удобнее ;)
qlist -ICv | while read name; do grep $name /var/log/emerge.log | grep completed |tail -n1; done | sort
Чем конечный список полезнее
Чем конечный список полезнее чем qlist -IC?
У меня во конечном списке, только opencl добавился - не знаю почему.
Но принцип понятен...
.
что есть конечный список?
Если про -v, то имя без номера приводило к захвату другого пакета. Жадный-нежадный поиск... не мой конек.
Ищем aaa/bcd, а захватываем aaa/bcdefg.
Ищем aaa/bcd-1.2.3 и не захватим aaa/bcdefg-1.2.3
А коммент был, что в обратную сторону решать проще.
Только всё это баловство. Просто старая добрая пересборка мира более осмысленная, чем вторая волна, недошедшая до конца. А если дойдет, то это и есть пересборка мира.
.
Старая? Ну, да. Добрая? Вот уж вряд ли... Если это не первая сборка, на порядки эффективнее qcheck -uv
Мы тоже не всего читали Шнитке!.. © В. Вишневский
.
Вопрос стоял пересобрать старые. Смысл пересобирать старые и не собирать по ним новые?
Не понял причем здесь лучше проверка целостности? Если пакет не цел, то это уже беда-беда. Вроде бы вопросы ортогональные.
Может у автора есть желание пересобрать старые пакеты с новыми флагами оптимизации и т.п. ?
.
Это не просто проверка, курите маны
приведённая команда как раз на такой случай, т.к. автоматически восстановит все повреждённые пакеты (а не это ли и есть цель пересборки старых?). Единственный оправданный случай пересборки мира - начальная сборка, остальное - от лукавого
Мы тоже не всего читали Шнитке!.. © В. Вишневский
.
qcheck - verify integrity of installed packages
-u, --update - Update missing files, chksum and mtimes for packages.
-v "Ну это знаю" (C)
Где здесь кроме проверки целостности? Может что-то не то покурил, кроме man qcheck?
Побил бы меня слепнога за зачитывание манов вслух.
Если пакет не цел, то беда в причине ее повредившей. А это вряд ли исправится пересборкой. (Именно этой мысли соответствовало "беда-беда")
Начальная сборка может происходить с очень длительной отсрочкой. Были прецеденты. Когда CFLAGS поменял, а мир собирать отложил.
Только я не экономил как автор топика на спичках, а пересобрал мир (когда время для меня было более подходящим).
.
...Update...
В Gentoo наиболее вероятной причиной является внешнее воздействие (в частности руки-крюки), и пересборка пакета с несовпавшим хэшем (тот самый апдейт по признакам missing files, chksum and mtimes) здесь в самый раз
Мы тоже не всего читали Шнитке!.. © В. Вишневский
Spoiler
vs восстановление с бэкапа. И то первой мыслью у меня было бы проверять память, а не восстанавливать. Система ничто - данные всё!
Про руки согласен.
Я вообще не понимаю смысла хотелки
Для пересборки с новыми флагами есть специальная опция и незачем огород городить!..
Я вообще не понимаю смысла хотелки по этому топику.
.
Я тоже не понимаю причин автора.
Повторяю, я просто исправил путь рассуждений.
И под флагами я имел ввиду не USE, а CFLAGS.
Хотя, может что-то пропустил ... может теперь можно emerge указать, когда рваться в бой после изменений, а когда не обращать внимания, что остальные пакеты собрались бы по другому.
Как минимум, нашёл таким
Как минимум, нашёл таким образом пакеты, которые в системе были не нужны. Обычным способом их было не видно, потому что от них зависели другие пакеты.
Например, был такой:
portage писал:
Я правильно понимаю - если нет ebuild-a - значит нужно обновлять пакеты, которые от него зависят и удалять сам пакет?
Не совсем... надо держать
В принципе почти так, но не совсем... лучше держать систему в синхронизации с главным репозиторием и вовремя удалять устаревшие пакеты:
Ну и всегда читать новости:
там есть много полезного и интересного!
Это не работает, потому
Это не работает, потому как:
1. В приличной системе отсутствие ротации
/var/log/emerge.log
в течение нескольких лет - признак плохого администрирования.2. Пакет
прог-123
мог обновиться и скомпилироваться какпрог-124
..
1. Ну, присутствие ротации это особенность частной системы, которую можно учесть хозяину.
Я потратил 1.5 минуты на написание. Проверил. Поправил. Автор тоже может повторить проверку.
Автор топика шел в обратном направлении. Я просто показал путь другом направлении.
2. Можно пример? когда пакет установился под одним номером, а в логе числится под другим.
Если пакет обновился, то есть две ситуации. Обе версии присутствуют в системе, или старая удалена. В первом случае в перечне пакетов будут присутствовать обе, во втором последняя версия и запись для старой версии в логе уже не имеет смысла.
(тавтология какая-то)
Короче, с этим пунктом не согласен.
А не проще
А не проще
emerge -e @world -q
?! :) Иличтобы только то, что нуждается в обновлении, со всеми зависимостями...
Если тебе уж очень хочется
Если тебе уж очень хочется принудительно пересобирать старые пакеты, то флаг тебе в руки:
здесь 666 - возраст пакетов (в днях), старше которого пересобирать.
А то накрутили там всякого... :D
про последовательность
последовательно полечить алко зависимость вам поможет клиника альфамед https://alpha-med.su/ . помогу решить данную проблему быстро и недорого. не проходите мимо если кто то из вашего окружения страдает от этой привычки.