LinuxForum.Fans
Тема

Управление пакетами в Yast

Автор: NioriX 54 сообщений 15160 просмотров
#12876

id- это то нечто осмысленное и понятное юзеру. Желательно запросить у него самого, в чем смысл операции с пакетами, которую он сделал, и уже это записать в лог вместе с выодом diff`а.

еще его можно назначать автоматически, но это уже усложнит скрипт, и пока я не придумал, как это сделать.

а еще можно парсить лог установки пакетов zypper`а, но я за это не возьмусь :/

#12886
NioriX написал:
Один способ есть, перед установкой экспортировать список установленных пакетов, а после установке импортировать его, тем самым удалив все пакеты которые устанавливались после экспорта, но это несколько геморно...

В принципе то же самое что и

hiBeid написал:
Перед каждой установкой генериться список
rpm -qa > tempfile1
и после тоже
rpm -qa > tempfile2

после импорта файла удаляются все пакеты которые установились с момента экспорта! Никаких проблем с зависимостями тут не будет. И при этом все делается мышкой что тоже немного удобней чем набивать команды руками :-)
Предложенное tmp13 примерно то что нужно, но со своими минусами
Смысл не совсем в том: "лишние" пакеты могут появиться уже на стдии установки системы. Допустим решили не ставить какой пакет который предлагается по умолчанию, поставили на нем минус, а пакеты от которых он зависит(возможно только этот пакет и никакой больше) установятся! pm -qa тут уже не поможет, /var/log/zypp/history тоже. Придется запоминать каки
е пакеты убрали, а потом с каждым из них работать как предложил tmp13. Но для того что бы выполнить команду rpm -qR надо что бы пакет был установлен! То есть почистить систему на стадии установки уже не получится...
И в догонку rpm -q --whatrequires *|grep -v gcc-4.4-4.2.i586 и rpm -qR *|grep -v rpm - в чем разница не понял... Если можно расшифруйте!
И еще при установки gcc он помимо gcc44 и cpp тянет еще и glibc-devel и linux-kernel-headers! rpm -qR об этом молчит!!!
И еще раз еще :-) rpm -qR amarok|grep -v rpm попробуйте, он помимо пакетов еще выводит кучу библиотек хотя |grep -v rpm должен их отсечь? К тому же среди списка я не увидил пакетов типа libqt4, неужели они не нужны амароку?

#12918
NioriX написал:
И при этом все делается мышкой что тоже немного удобней чем набивать команды руками

Lol))

#13011

id- это то нечто осмысленное и понятное юзеру. Желательно запросить у него самого, в чем смысл операции с пакетами, которую он сделал, и уже это записать в лог вместе с выодом diff`а

не совсем понял))
1. он что-то поставил
2. он что-то удалил
3. ни чего не сделал
всё.

rpm -q --whatrequires *|grep -v gcc-4.4-4.2.i586 и rpm -qR *|grep -v rpm - в чем разница не понял... Если можно расшифруйте!

-R, --requires
List capabilities on which this package depends.
--whatrequires CAPABILITY
Query all packages that require CAPABILITY for proper functioning.

т.е
rpm -qR gcc - выведет список пакетов(библиотек) которые необходимы для gcc
rpm -q --whatrequires gcc - выведет список пакетов которым необходим gcc
это я так понимаю)))))
далее

И еще при установки gcc он помимо gcc44 и cpp тянет еще и glibc-devel и linux-kernel-headers! rpm -qR об этом молчит!!!

мб это не gcc тянет а кто-то другой который нужен gcc?

rpm -qR amarok|grep -v rpm попробуйте, он помимо пакетов еще выводит кучу библиотек хотя |grep -v rpm должен их отсечь?

не должен
он должен отсечь что то вида:

text
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsLzma) <= 4.4.6-1

поэтому мб правильнее будет grep -v rpmlib

далее

а еще можно парсить лог установки пакетов zypper`а, но я за это не возьмусь

ну я бы мог помучать это дело... ради интереса...
но не очень понятно что из этого лога мы хотим получить...

#13031

to hiBeid, tmp13 как я понимаю с помощью вашего скрипта возможно будет удаление только предыдущей установки так ли нет?

#13039

поидее нет)

#13052

а помоему все таки да, или я не так понимаю вашу идею ).

1 установка (устнавливется новое по с библиотеками) -запоминаем
2 установка (устанавливается новое по с библиотеками + используется библиотеки 1 установки)-запоминаем

теперь мы решили удалить 1 установку при этом снесем все библиотеки? если да то как будет работать ПО со 2 установки, если нет то не грозит ли это точно таким же разрастанием ненужных пакетов?

#13085

rpm -qR gcc - выведет список пакетов(библиотек) которые необходимы для gcc
rpm -q --whatrequires gcc - выведет список пакетов которым необходим gcc
это я так понимаю)))))

Посмотрел на свежую голову - однако верно говорите :-)

теперь мы решили удалить 1 установку при этом снесем все библиотеки?

Тут как скрипт напишешь так и будет. Возьмем пример с gcc:

text
~> rpm -qR gcc|grep -v rpm
cpp
gcc44

То есть надо удалить cpp и gcc44 далее

text
~> rpm -q --whatrequires cpp|grep -v gcc
xorg-x11-7.4-35.3.x86_64

cpp требуется для других пакетов => НЕ УДАЛЯЕМ

text
~> rpm -q --whatrequires gcc44|grep -v gcc

Вывод пустой=> для других пакетов не требуется =>УДАЛЯЕМ
но перед этим рекурсией вызываем

text
rpm -qR gcc44|grep -v rpm

со всеми вытекающими последствиями(то есть удаляем пакеты которые потянул gcc44 если они никому больше не нужны, как это проверить мы уже знаем).

Извините за этот позор, в программировании не силен тем более с++ и sh но будет что то вроде

text
void delete(name)
{
  String [] pack = pm -qR name|grep -v rpm;
  rpm -e name;
  for (int i=0;i<pack.length;i++){
   if( !(rpm -q --whatrequires pack[i]|grep -v name))
      delete(pack[i]);
  }
}
#13110

с apt как-то веселее )))

#13116
komcumir написал:
с apt как-то веселее )))

Возможно, но openSUSE заточен под zypper! И на сколько я понимаю apt прикрутить к суслику еще надо постараться!

#13121

NioriX
а мне нравиться. реализация изящнее, чем мое предложение.
написать теперь скрипт (если алгоритм не содержит ошибок конечно)- плевое дело!
Я может быть заморочусь, если будет настроение ;)

komcumir написал:
с apt как-то веселее

может быть, не знаю, не пробовал.

#13145

Как минимум одну проблему видно щас

text
rpm -qR gcc44|grep -v rpm
binutils
glibc-devel
cpp44 = 4.4.1_20090817-2.3.4
libgcc1 >= 4.4.1_20090817-2.3.4
libgomp1 >= 4.4.1_20090817-2.3.4
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.7)(64bit)

Нужны только первые две строки вывода если проверять остальные, напимер libc.so.6()(64bit), то

text
rpm -qR libc.so.6()(64bit)|grep -v rpm
bash: syntax error near unexpected token `('

Наверно надо использовать egrep...

#13149

ну зипер так зипер, а вы уверены что он не умеет того что вы сейчас придумываете?

#13151

zypper --help а далее zypper help rm ничего похожего не дает. Можете и сами посмотреть... Может я что то пропустил
http://ru.opensuse.org/Zypper/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D0.B8_.D0.BE_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B5


http://en.opensuse.org/Zypper/Usage/11.2

#13154

да я уже смотрел )

#13155

ах, да- никакой egrep вам не поможет: libc.so.6()(64bit)- это НЕ пакет!
Так что вам следует копать опции rpm дальше, либо накрутить еще какую-то проверку...
кажется, стоит уже рисовать блок-схему :)

#13156
hiBeid написал:
ах, да- никакой egrep вам не поможет: libc.so.6()(64bit)- это НЕ пакет!
Так что вам следует копать опции rpm дальше...

А какая разница? Grep работает не с пакетами а с выводом, то есть просто со строками! например все либы можно убрать

text
~> rpm -qR gcc44|grep -v .so
binutils
glibc-devel
cpp44 = 4.4.1_20090817-2.3.4
libgcc1 >= 4.4.1_20090817-2.3.4
libgomp1 >= 4.4.1_20090817-2.3.4
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsLzma) <= 4.4.6-1

а в идеале написать что то типа greep -v rpm .so = > <
просто по моему лучше рег выражение делать тогда уж...

#13157

может awk -F '[)(>=]' '{print $1}' или кактатаг?

#13158

Нет, awk преобразует строку а надо ее вообще не выводить, но

text
rpm -qR gcc44|grep -v '[)(>=]'

Работает как надо!!!!
Но лучше '[)(]' потому как

text
~> rpm -qR amarok|grep -v '[)(>]'
qt4-qtscript
amarok-lang[b] = 2.1.1[/b]
/sbin/ldconfig
/sbin/ldconfig

а еще лучше

text
rpm -qR amarok|grep -v '[)(>]' | awk -F '[)(>=]' '{print $1}'
qt4-qtscript
amarok-lang
/sbin/ldconfig
/sbin/ldconfig

осталось убрать /sbin...

#13295
text
rpm -qR amarok|grep -v rpmlib
.......
libxml2.so.2
libz.so.1
text
rpm -q --whatprovides libz.so.1
zlib-1.2.3-140.2.i586

и аналогично со всеми библиотеками..

text
rpm -q --whatprovides /sbin/ldconfig
glibc-2.10.1-10.4.i686

так что awk -F '[)(>=]' '{print $1}' более верный путь)

Войдите или зарегистрируйтесь, чтобы ответить.