Страница 1 из 2

Обновление/восстановление сбитых портов

Добавлено: 2009-06-23 8:45:31
ProFTP
была истуация, когда порты были разной версии, не соответсвовали друг другу, программы не запускались, ругались на библиотеки и не собирались, выводили странные ошибки при сборке

portupgrade -arR не хотел обновлять, писал что надо написать pkgdb -aF - эта штука спрашивала всякую херню по 300 раз и работала долго

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

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

Код: Выделить всё

#!/usr/bin/perl

    open (OPEN2, "portversion -o  |");

@all_all = <OPEN2>;

#print @all;

my @all;

foreach (@all_all) {
  my ($pname,$status) = split(/ /, $_, 2);
 # print $status;
 $pname = '/usr/ports/'.$pname;
        $pname =~ s/^\s+//;
        $pname =~ s/\s+$//;
 push @all, $pname;
}

#print "@all_all\n";
    my $port;

my @old;
my @no_old;
#    while ( my $p = <OPEN2>) {
    foreach my $p (@all_all) {   
    
    my ($pname,$status) = split(/ /,$p,2);
       #  print "$status\n";    
     if ($status =~ '>' || $status =~ '<') { 
      
       $pname = '/usr/ports/'.$pname;
        $pname =~ s/^\s+//;
        $pname =~ s/\s+$//;
       push @old, $pname;
     # print $pname;
     } else {
      $pname = '/usr/ports/'.$pname;
        $pname =~ s/^\s+//;
        $pname =~ s/\s+$//;
       push @no_old, $pname;
     }

}

#print "@old\n";

#$old[0];

#print '1111';

print $old[0];

print '1111';

@to_port = `cd $old[0] && make all-depends-list`;

#print "@to_port\n";


foreach (@to_port) {
      $_ =~ s/^\s+//;
      $_ =~ s/\s+$//;
}

       my %seen;
        @seen{@to_port} = ();
        delete @seen{@no_old};
         @dep2 = keys %seen;

print "@dep2\n";


Код: Выделить всё


#!/usr/bin/perl

open (OPERN, "portversion |");

@all=<OPERN>;

foreach (@all) {

 my ($pp,$st) = split (/ /, $_, 2);

if ($st =~ '<') {

 if ($pp =~ '^p5') {

 print "$pp\n";

system("portupgrade -f $pp");  # == 0 )

 }

 }
}


Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-23 11:09:20
hodok
cvsup?

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-23 23:36:02
ProFTP
подскажите, как знать все зависимости данного пакета?
hodok писал(а):cvsup?
причем тут это?

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-23 23:43:02
Alex Keda

Код: Выделить всё

man pkg_info

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-24 1:38:19
ProFTP
1) pkg_info покажет старые зависимости? или новые?

кстате. нашел более лушче make run-depends-list make all-depends-list

а можно ли как-то получить зависимости по иерархии? (может в виде дерева)

2) что-то не могу найти, как скомпилировать соответсвующий порт, но его не устанавливать? просто make не компилирует, то етсь нужно

Код: Выделить всё

make bla-bla-test && make install clean

PS может написать скрипт паралельной сборки при обновлении? (только нужно чтобы кто-то помог протестировать)

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-24 9:47:48
schizoid
как это make не компилирует? а что он по вашему делает?
может он у вас уже собран, тогда в начале make clean , а потом уже make

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-24 12:01:15
ProFTP

Код: Выделить всё

make clean && make > bla.txt

Код: Выделить всё

===>  Vulnerability check disabled, database not found
===>  Found saved configuration for xfce-4.6.1
===>  Extracting for xfce-4.6.1
===>  Patching for xfce-4.6.1
===>  Configuring for xfce-4.6.1
я заметил make по-моиму разархивирует архив, и может запустить configure

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

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-24 14:11:32
schizoid

Код: Выделить всё

[root@admin /]# cd /usr/ports/mail/exim
[root@admin /usr/ports/mail/exim]# make > 123
exim-4.69.tar.bz2                             100% of 1620 kB 6285 kBps
^C
[root@admin /usr/ports/mail/exim]# cat 123
=> exim-4.69.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/exim.
=> Attempting to fetch from ftp://gate.brain.lan/private/distfiles/.
===>  Extracting for exim-4.69_3
=> MD5 Checksum OK for exim/exim-4.69.tar.bz2.
=> SHA256 Checksum OK for exim/exim-4.69.tar.bz2.
===>   exim-4.69_3 depends on file: /usr/local/bin/perl5.8.9 - found
===>  Patching for exim-4.69_3
===>   exim-4.69_3 depends on file: /usr/local/bin/perl5.8.9 - found
===>  Applying FreeBSD patches for exim-4.69_3
===>   exim-4.69_3 depends on file: /usr/local/bin/perl5.8.9 - found
===>   exim-4.69_3 depends on shared library: iconv.3 - found
===>  Configuring for exim-4.69_3

>>> Creating links to source files...
>>> New Makefile installed
>>> Use "make makefile" if you need to force rebuilding of the makefile

===>  Building for exim-4.69_3
`Makefile' is up to date.

/bin/sh ../scripts/Configure-os.h
/bin/sh ../scripts/Configure-os.c
cc buildconfig.c
/bin/sh ../scripts/Configure-config.h "make"
`buildconfig' is up to date.
Building configuration file config.h
>>> config.h built

cc pcre_maketables.c
cc pcre_chartables.c
cc pcre_fullinfo.c
cc pcre_get.c
cc pcre_globals.c
cc pcre_compile.c
cc pcre_config.c
cc pcre_exec.c
cc pcre_newline.c
cc pcre_study.c
cc pcre_tables.c
cc pcre_try_flipped.c
cc pcre_version.c
rm -f libpcre.a
ar cq libpcre.a
ranlib libpcre.a
cc pcretest.c
cc -o ../pcretest pcretest.o libpcre.a

>>> exicyclog script built
>>> exinext script built
>>> exiwhat script built
>>> exigrep script built
>>> eximstats script built
>>> exipick script built
>>> exiqgrep script built
>>> exiqsumm script built
>>> transport-filter.pl script built
>>> convert4r3 script built
>>> convert4r4 script built
>>> exim_checkaccess script built

cc exim_dbmbuild.c
cc -o exim_dbmbuild
/usr/bin/strip exim_dbmbuild
>>> exim_dbmbuild utility built

cc -DEXIM_DUMPDB exim_dbutil.c
cc -DCOMPILE_UTILITY os.c
cc -DCOMPILE_UTILITY store.c
cc -o exim_dumpdb
/usr/bin/strip exim_dumpdb
>>> exim_dumpdb utility built

cc -DEXIM_FIXDB exim_dbutil.c
cc -o exim_fixdb
/usr/bin/strip exim_fixdb
...

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-30 2:42:59
Гость
при обновлении 2 десктопа и 2 сервера, заметил такую фигню

если очень много пакетов, установленных программ, то при обновлении базы данных пакетов - это процедура занимает минут 5-10...

portupgrade в тупую эту базу обновляет перед удалением порта и после установки... это занимет кучу времени!!! я фигую

может это извращение, садо-мазо настроящее использовать shell c BerkleyDB?

вот в Gentoo порты написаны на Python там такой херни не было что база пакетов пол чаза обновляется (и там можно SQlite использовать)... правда я давно не использовал

кто Gentoo юзает там тоже база установленных пакетов длительнео время обновляется?

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-30 2:45:31
Гость
это жопа, а не система пакетов :-D

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-06-30 11:38:01
Gegemon
ProFTP писал(а):....
portupgrade -arR не хотел обновлять, писал что надо написать pkgdb -aF - эта штука спрашивала всякую херню по 300 раз и работала долго

сделал такой скрипт, вроде бы работает, только на 100% не тестировал - ситуация может разная быть...
может что-то подправить надо...?
Зачем велосипед изобретать?
man portaudit
man portmaster
man portmanager
man portupgrade
man pkgdb

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 14:01:24
ProFTP
написал таки статью http://www.lissyara.su/?id=1957
придумал вариант обновлять раз в ниделючерез крон и отправлять отчет на почту

орфографические ошибки не справлял еше

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 17:09:46
_Andy
Комканное, сбивчивое изложение, будто автор сам сомневается
за каким хуем все это вообще надо.
ProFTP: сядь, набросай план статьи -

Код: Выделить всё

1. вводная
2. что хотел добиться
3. что сделал
4. что вышло
Тогда получится связанно и хорошо. И можно будет
к списку добавить два пункта

Код: Выделить всё

????
6. PROFIT 
:)

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 20:50:17
ProFTP
fixed

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 21:06:53
f_andrey
ProFTP писал(а):fixed
Главная проблема осталась, "Нахрена все это?"
Расползается по ширине, видно знание предмета на троечку с плюсом, запустите наконец спеллчекер, почему не освещены альтернативные способы, обновление по крону, без присмотра человека примерно равно самоубийству.

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 21:20:48
ProFTP
как ты обновлял?

я написал:
если нужно обновить (и(или)восстановить) порты, может быть запутанная ситуация (например, если не обновлять год), portupgrade очень часто с певрого раза не исправляет ошибки
я обновлял сервер без иксов, там стояло много очего всего, модули для перла, portupgrade -arR выдвал кучу ошибок и вырубался под конец, это было 3 сутки, в консоле вверху не видно было, потомучто список был большой, логи он не ввел в файл, опции такой я не видел!!

еще раньше слетела база, пришлось почитать как ее восстановить, pkgdb долго выполнял часа 2-3

на другом давненько какого хера своп не примонтировался, портупгрейд начал обновлять и комп повис!

на декстопе еще хуже

если написать:

Код: Выделить всё

pkg_version -v | grep "need" | awk '{print $1}' | { while read pkg_name do portupgrade ${pkg_name} done }
и если пакетов штук 200 он никога нормально не обновит с перого раза, нужно загнать минимум по 3 раза, а с опцией -f в этом примере лучше пропустить те которые уже обновились, я реализовал во втором скрипте в статье

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:11:18
Alex Keda
почему у меня всегда всё корректно, на серверах до которых я добираюсь через год или два, и даже три после последнего обновления?
мне, в общем, не жалко. Расскажу.
1. я никогда не использовал PKG_FORCE_REGISTER или как оно там. (даже названия не знаю)
всегда и всё можно поставить штатно. если не ставиться - разбирайтесь почему, ибо должно.
2. не надо пытаться обновить всё сразу. обновляйте кусками.

Код: Выделить всё

portupgrade -R gettext-...
portupgrade -R gd
portupgrade -R ....
95% софта обновиться корректно - остальные 5% - это чтение /usr/ports/UPDATING, ну и гугл по ошибкам.
3. думалку включить. Хотя, этот пункт я бы поставил первым.

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:18:09
ProFTP
lissyara писал(а): 2. не надо пытаться обновить всё сразу. обновляйте кусками.

Код: Выделить всё

portupgrade -R gettext-...
portupgrade -R gd
portupgrade -R ....
это займет вревени знаешь сколько?
-R там точно не достаточно, скорее всего, еще -f, мне не помогло portupgrade -afrR (база была восстановленна pkgdb -aF)

Imagemagic и icu тянего из под себя и из подзависимостей пакетов штук 30-50, собираються сутками

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:24:24
Alex Keda
ты читать умеешь? прочитай моё сообщение ещё раз. целиком.
обновляешь штатно всё что можно. без всяких f - тока - (и обязательно!) - с R
дальше думаешь и читаешь.
пока небыло ни одного порта который не удалось бы обновить нормально.

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:29:54
ProFTP
это пробовал тоже

так как ты написал в гугле никто так не обновляет :) и даже в man portupgrade такого нету в примере чтобы только с этой опций...

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:31:38
Alex Keda
может быть.
в мане нету и инструкций чё делать если у всех собирается а у тебя нет =))
========
это инструкция из жизни была.
мир с ядром я тоже не по хандбуку собираю/инсталлю.
работает, однако.

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:34:38
ProFTP
почему ты это не написал в своей стаьтье? если portupgrade -R в слудующий раз отвалиться? скорее всего так и будет, потмоу что так и было...

тот скрипт который я второй прицепил тот работает

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:41:37
Alex Keda
прекрасно.
тогда делаешь так:

Код: Выделить всё

HP$ cd /var/db/pkg/
HP$ foreach i (*)
foreach? portupgrade -R $i
foreach? end
а про то что останется - смотри пункт три

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-05 22:43:59
Alex Keda
время не имеет значения.
либо ты планируешь и оцениваешь процесс обновления заранее, либо должен всегда быть готов сидеть до тех пор пока всё не заработает.
========
про себя могу сказать - что не всегда удаётся всё предусмотреть - поэтому часто и в пять утра сижу и фтыкаю в вывод компилятора, зная что в 6 уже на работу вставать =)

Re: Обновление/восстановление сбитых портов

Добавлено: 2009-07-06 10:34:29
_Andy
lissyara писал(а):мир с ядром я тоже не по хандбуку собираю/инсталлю.
работает, однако.
И я не по хендбуку. Дернул черт, как Makefile напейсали,
сделать

Код: Выделить всё

delete-old
После пересборки всего софта, xterm с кракозябрами, причем
локаль koi8-r. Я в растерянности.