1

Доброго времени суток. У меня такой вопрос. Например, я ввожу команду

urpmi zip

На что получаю ответ

Консоль

Пакет zip-3.0-4.mga1.x86_64 уже установлен
zip помечается как установленный вручную; он не будет учитываться при определении пакетов-сирот
writing /var/lib/rpm/installed-through-deps.list

А если ввести

urpmi gzip

то получаю ответ

Консоль

Пакет gzip-1.4-3.mga2.x86_64 уже установлен

Почему в система так по-разному реагирует на одну и ту же команду?

2 (2013-01-17 12:29:07 отредактировано XliN)

urpme --auto-orphans

Удалит осиротевшие пакеты.

neket89⇓ пишет:

Почему в система так по-разному реагирует на одну и ту же команду?

А реагирует так, скорее всего из-за того, что zip был подтянут по зависимосятям с другим пакетом. Который был потом удален.

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================
Спасибо сказали: neket891

3

Спасибо, буду знать

4

neket89⇓ пишет:

Спасибо, буду знать

Еще надо знать, что вслепую удалять сироты опасно, они за собой могут пол системы на удаление утащить.
Так что удалять надо только в тех случаях, когда на 200% понимаешь что именно делаешь.

Fedora & GNOME

5 (2017-08-17 22:58:03 отредактировано algri14)

xxblx⇓ пишет:

Еще надо знать, что вслепую удалять сироты опасно, они за собой могут пол системы на удаление утащить.

Поднимаю старую тему неспроста, её опять затронули на соседнем ресурсе, я лишь продолжил её Linux Forum → Очистить систему от ненужных пакетов (или Linux Forum → Очистить систему от ненужных пакетов ) и выяснил, что не так страшен чёрт как его малюют.
Во-первых, надо точно узнать какие пакеты сироты есть в системе и дать от root в консоли команду:

Консоль
[algri@localhost ~]$ su
Пароль:
[root@localhost algri]# urpme --auto-orphans

Далее скопировать/сохранить их названия в текстовый файл.
В ~/.bashrc (домашняя директория, скрытый файл) внести изменения(добавьте простым копированием):

urpmreq ()
{
for i in $(urpmq --whatrequires $1); do rpm -q $i; done  | grep -v "не установлен"
}

После этого из списка осиротевших пакетов даёте команду от пользователя(от root не получится, ибо изменения давались в каталоге пользователя) в консоли:

Консоль
[algri@localhost ~]$ urpmreq имя_пакета

проверяете зависимости пакета и только после того как убедитесь, что пакет-сирота ничего не тянет за собой - можете его удалять.
Добавлю, есть графическая утилита qt4urpm(запускается от root в консоли), но она показывает пакеты сироты в общем списке, а не конкретные зависимости пакета.
Второй вариант, без измений в файле ~/.bashrc , команда более длинная:
Консоль
[algri@localhost ~]$ for i in $(urpmq --whatrequires имя_пакета); do rpm -q $i; done  | grep -v "не установлен"

или
Консоль
[algri@localhost ~]$ for i in $(urpmq --whatrequires имя_пакета); do rpm -q $i --qf "%{NAME}\n"; done  | grep -v "не установлен"

Особая благодарность пользователю diablopc, ибо это он откликнулся на мой вопрос и написал команды для консоли(в которой я ни в зуб ногой, хотя и перестал её бояться big_smile )

BoDun⇓ пишет:

было бы не плохо именно гуёво в том же самом drakrpm очищать сирот, к примеру когда что-то удалил и список ничем и никак не навредит, можно и очистить.

К сказанному добавить нечего, но разрабы далеко, а кому требуется решение, то пока только так.

6 (2017-07-25 23:32:54 отредактировано algri14)

По ходу дискуссии добавился ещё один вариант от diablopc.
В ~/.bashrc (домашняя директория, скрытый файл) внести изменения(добавьте простым копированием):

Spoiler
urpmreq()
    {
        SHOW_HELP()
                {
                echo "Вызов: urpmreq [ins|all] [name|full] package_name"
                }
        CLEANUP()
                {
                 if [ -e $TEMP ]; then
                 rm -f $TEMP
                 fi
                }
    trap 'CLEANUP; return 1' EXIT INT
    ARGS=3
    E_BADARGS=65
    TEMP=/tmp/urpmreq
        if [ $# -ne "$ARGS" ]; then
            SHOW_HELP
            return $E_BADARGS
        fi

        if [ "$1" == "ins" ]; then
            QUERY='-qa'
        elif [ "$1" == "all" ]; then
            QUERY='-q'
        else
            SHOW_HELP
            return $E_BADARGS
        fi

        if [ "$2" == "name" ]; then
            QF='--qf %{NAME}\n'
        elif [ "$2" == "full" ]; then
            QF=''
        else
            SHOW_HELP
            return $E_BADARGS
        fi
    CLEANUP
    for i in $(urpmq --whatrequires $3)
        do
            rpm $QUERY $i $QF >> $TEMP
        done
    uniq $TEMP; CLEANUP
    }

Далее вызов: urpmreq [ins|all] [name|full] package_name

diablopc пишет:

1)  [ins|all] - выводит установленные зависимости (ins) или все (all)
2) [name|full] - выводит имена пакетов (name) или расширеную инфу (full)
3) Имя_пакета

Обратите внимание, что команда urpmreq даётся обязательно со всеми тремя пунктами, т.е — [ins|all] [name|full] package_name (иначе не сработает), например вот так:

Консоль
[algri@localhost ~]$ urpmreq ins full gtkspell3
gtkspell3-3.0.4-2.mga4
libgtkspell3_0-3.0.4-2.mga4

7 (2017-02-02 01:38:38 отредактировано diablopc)

algri14⇓ пишет:

Обратите внимание, что команда даётся обязательно со всеми тремя пунктами(иначе не сработает)

Блин, хоть ман пиши на функцию в пару строчек big_smile hmm

[[SUSE Leaр 42.3 x64@RealHW]] + [[Mageia 6 i586@RealHW]] + [[Manjaro 17.0.5 i586@RealHW]] + [[LinuxMint 17.1 x64@VM]]

Сын спрашивает отца-линуксоида:- Пап, а вирусы под линукс есть? 
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.
Спасибо сказали: algri141

8 (2017-02-02 01:46:45 отредактировано algri14)

diablopc, я сам не особо силён во всей этой грамматике, поэтому специально для полных чайников писал и разжёвывал до мелочей
зы: три года назад полдня в гугле искал что такое знак ~ тильда, обозначение хомяка-домашней_директории big_smile

9 (2017-02-11 00:43:35 отредактировано algri14)

Есть ещё один нюанс, вывод команды urpme --auto-orphans может давать и ошибки, возможно зависимость ставилась к одному пакету(который удалили), а потом потребовалась другому.
проверяется командой urpmq --requires

Консоль
[root@localhost algri]# urpme --auto-orphans
Для удовлетворения зависимостей будут удалены следующие 16 пакетов (148МБ):
......................................................
liborcus0.6_0-0.5.1-9.mga4.i586
......................................................

Проверим, требуется ли liborcus0.6_0 какому-либо пакету с помощью аргумента ins(т.е. установленного в системе):
Консоль
[algri@localhost ~]$ urpmreq ins full liborcus0.6_0     (можно и полностью liborcus0.6_0-0.5.1-9.mga4.i586)
liborcus0.6_0-0.5.1-9.mga4
libreoffice-calc-4.3.7.2-1.mga4

Да, требуется, для libreoffice-calc-4.3.7.2-1.mga4 , проверим ещё раз стандартной командой:
Консоль
[algri@localhost ~]$ urpmq --requires libreoffice-calc
libreoffice-calc: liborcus-0.6.so.0
..................................................ps: вывод будет длинноват

Да, он стоит в зависимостях у libreoffice-calc-4.3.7.2-1.mga4 , значит команда urpme --auto-orphans ошиблась и пакет НЕ является сиротой.
Команда => urpmq --requires имя_пакета — покажет перечень RPM, которые требуются для пакета(стандартная)
Команда => urpmreq ins full имя_пакета — обратная, покажет список RPM, которым нужен этот пакет(требуется добавление в файл ~/.bashrc )
зы: команда => urpmreq ins full имя_пакета хороша тем, что даёт вывод на пакеты установленные именно в системе и выхлоп будет покороче чем от
urpmq --requires имя_пакета
зы: команды urpmq --requires имя_пакета и urpmreq ins full имя_пакета не покажут результат для рекомендованных к установке пакетов(бывают и такие), их покажет команда urpmq --requires-recursive имя_пакета -зависимости зависимостей (список может быть довольно длинным), например:

screenfetch-3.6.5-1.mga5.noarch у него зависимости:
- libgiblib1-1.2.4-13.mga5.i586
- libimlib2_1-1.4.8-1.1.mga5.i586
- libimlib2_1-filters-1.4.8-1.1.mga5.i586
- libimlib2_1-loaders-1.4.8-1.1.mga5.i586
- scrot-0.8-8.mga5.i586

так вот пакет scrot-0.8-8.mga5.i586 рекомендованный и соответственно команда ответит, что он никому не требуется:

Консоль
[algri@localhost ~]$ urpmreq ins full scrot
scrot-0.8-8.mga5

10

algri14⇓ пишет:

Да, он стоит в зависимостях у libreoffice-calc-4.3.7.2-1.mga4 , значит команда urpme --auto-orphans ошиблась и пакет НЕ является сиротой.

что вы к осиротевшим привязались? реализация удаления сирот изначально провальная идея была - считайте ее вечной попыткой приблизиться к идеалу без возможности достижения.

ROSA Desktop Fresh R11.1 EE 2016.1 Desktop 64-бит

11 (2017-02-04 20:35:50 отредактировано diablopc)

TopE, Идея - да, провальная, еще со времен мандривы.... Вообще не понимаю смысла этого: экономия дискового пространства??? 300-400 метров на нынешний день смешно! А больше оно ни на чем не отражается... А, ну да, разве что на выборке из базы при запросах типО rpm -q, но да, 20-30 милисекунд мы видим невооруженным глазом и они раздражают lol lol lol lol

[[SUSE Leaр 42.3 x64@RealHW]] + [[Mageia 6 i586@RealHW]] + [[Manjaro 17.0.5 i586@RealHW]] + [[LinuxMint 17.1 x64@VM]]

Сын спрашивает отца-линуксоида:- Пап, а вирусы под линукс есть? 
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.

12 (2017-02-04 21:17:45 отредактировано algri14)

TopE⇓ пишет:

что вы к осиротевшим привязались?

TopE, для меня это никогда не было проблемой, тему подняли на соседнем форуме и я попросил помощь в её реализации. Оказалось что вопрос(а не проблема) вполне себе решаем даже для новичка, с помощью diablopc, поиск зависимостей упростился до минимума.
Идеальным решением будет удаление сирот силами системы(в том числе и в графике), но разрабам не до того, чтобы заниматься этой мелочёвкой, хотя на слабых машинах и плохим инетом это заметно сильнее(кто-то здесь говорил об этом).
Так что теперь любой новичок может исправить ситуацию.

BoDun⇓ пишет:

Конечно есть qt4urpm, ..............
..... благодаря ей, я узнал, как помечать пакеты, чтоб они не было осиротевшими (до этого не знал)

В графической утилите qt4urpm , запускаемой в консоли, после проверки на зависимости, если пакет не сирота, то кнопкой Not Orphaned(Не сирота) легко помечаете его и больше он не будет всплывать в сообщениях о пакетах-сиротах.
И вообще, всплывающее сообщение о пакетах-сиротах заключается в своей надоедливости глазу и незнанием как решить этот пустяк.

13 (2017-02-05 15:45:08 отредактировано TopE)

algri14⇓ пишет:

всплывающее сообщение о пакетах-сиротах заключается в своей надоедливости глазу и незнанием как решить этот пустяк.

логично тогда убрать эту надоедливую инфу, чем пытаться решить ее причину абы как)) опционально посмотреть перфекционисты могут и решить сами для себя, кого убивать, а кого оставлять. Никому из них (новичков) не приходит же в голову прибивать модули ядра, которые болтаются на всякий случай?)))

ROSA Desktop Fresh R11.1 EE 2016.1 Desktop 64-бит

14 (2017-02-05 22:19:21 отредактировано diablopc)

algri14⇓ пишет:

графической утилите qt4urpm

Ну вот, опять мышетыкательство по приблудам

Пакеты весьма хорошо помечаются как "не сироты" обычным urpmi

Консоль: root
[root@localhost ~]# urpmi kernel-desktop-4.4.39-1.mga5-1-1.mga5.x86_64\
Package kernel-desktop-4.4.39-1.mga5-1-1.mga5.x86_64 is already installed
Marking kernel-desktop-4.4.39-1.mga5 as manually installed, it won't be auto-orphaned
writing /var/lib/rpm/installed-through-deps.list

[[SUSE Leaр 42.3 x64@RealHW]] + [[Mageia 6 i586@RealHW]] + [[Manjaro 17.0.5 i586@RealHW]] + [[LinuxMint 17.1 x64@VM]]

Сын спрашивает отца-линуксоида:- Пап, а вирусы под линукс есть? 
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.

15 (2017-02-05 23:31:30 отредактировано diablopc)

Кста, чтобы отметить все пакеты как установленные вручную, а не по зависимостям, достаточно выполнить

Консоль: root
[root@localhost ~]# echo ' ' > /var/lib/rpm/installed-through-deps.list


TopE⇓ пишет:

логично тогда убрать эту надоедливую инфу, чем пытаться решить ее причину абы как))

Чтобы и в дальнейшем пакеты не помечались как установленые по зависимостям, можно сделать так:

Консоль: root
[root@localhost ~]# rm -f /var/lib/rpm/installed-through-deps.list

Консоль: root
[root@localhost ~]# ln -s /dev/null /var/lib/rpm/installed-through-deps.list

[[SUSE Leaр 42.3 x64@RealHW]] + [[Mageia 6 i586@RealHW]] + [[Manjaro 17.0.5 i586@RealHW]] + [[LinuxMint 17.1 x64@VM]]

Сын спрашивает отца-линуксоида:- Пап, а вирусы под линукс есть? 
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.

16 (2017-02-06 00:34:17 отредактировано algri14)

diablopc⇓ пишет:

Ну вот, опять мышетыкательство по приблудам

Для новичка графика понятнее, за консольные команды конечно спасибо, но новички консоль опасаются, а то и вовсе боятся.

TopE⇓ пишет:

логично тогда убрать эту надоедливую инфу, чем пытаться решить ее причину абы как))

Не согласен, всё что написано выше вполне понятно и решаемо, но никак не на авось и абы.
Вызывает удивление, что за 3 года что тут нахожусь, никто не разобрал тему ранее, по сути вопрос решается очень легко.

diablopc⇓ пишет:

Кста, чтобы отметить все пакеты как установленные вручную, а не по зависимостям, достаточно выполнить......

Чтобы и в дальнейшем пакеты не помечались как установленые по зависимостям, можно сделать так:.....

А вот это можно подробнее, что даёт метка "установка вручную"? как себя будет вести программа2 если удалится программа1 с зависимостью нужной для них обеих - удалится вместе с программой1 или останется для программы2

17

algri14⇓ пишет:

А вот это можно подробнее,

Сиротами называются пакеты, которые остались после удаления пакета, с которым они были установлены по зависимостям.
Т.е.
ставим
[ПАКЕТ1],
он за собой тащит [ЗАВИСИМОСТЬ1] и [ЗАВИСИМОСТЬ2]

т.е.  [ЗАВИСИМОСТЬ1] и [ЗАВИСИМОСТЬ2] cтавятся по зависимостям к  [ПАКЕТ1].
Далее мы ставим [ПАКЕТ5], которому нужен [ЗАВИСИМОСТЬ2], но так как [ЗАВИСИМОСТЬ2] уже был установлен, то инфа о нем не обновляется.

Следующим действием снесем [ПАКЕТ1], соответственно [ЗАВИСИМОСТЬ1] и [ЗАВИСИМОСТЬ2], так как они ставились вместе с ним, отметятся как ненужные (сироты), невзирая на то что у нас остается установлен [ПАКЕТ5].

В результате мы имеем два осиротевших пакета:
[ЗАВИСИМОСТЬ1] который действительно остался никчему
[ЗАВИСИМОСТЬ2] который, хоть и отмечен сиротой, нужен для [ПАКЕТ5].

Метка "Установлен в ручную" означает что пакет был установлен пользователем, а не подтягивался как  [ЗАВИСИМОСТЬ1] и [ЗАВИСИМОСТЬ2], соответственно он никаким образом не будет приниматься в расчет при определении т.н. сирот.

Собственно qt4urpm эту метку и ставит.

Ну а те варианты что я описал выше позволяют ткнуть носом urpm в то что ВСЕ пакеты в системе установлены вручную, соответственно такое понятие как сироты просто исчезнет.

[[SUSE Leaр 42.3 x64@RealHW]] + [[Mageia 6 i586@RealHW]] + [[Manjaro 17.0.5 i586@RealHW]] + [[LinuxMint 17.1 x64@VM]]

Сын спрашивает отца-линуксоида:- Пап, а вирусы под линукс есть? 
- Есть, но всего 5, и их сначала нужно откомпилировать под свою систему, дать права на запуск и запустить.
Спасибо сказали: algri141

18

diablopc⇓ пишет:

Чтобы и в дальнейшем пакеты не помечались как установленые по зависимостям, можно сделать так:

А вот тут я не соглашусь, пусть всё таки будет по дефолту и мне видно - какие пакеты стали сиротами, при надобности удалю их или отмечу <не сироты>, за команду всё равно спасибо.