Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Aleksey Kotov                        2:5020/1042.32 16 Dec 2004  23:54:00
 To : Alexander Burylov
 Subject : Как генерируют список пакаджей?
 -------------------------------------------------------------------------------- 
 
 
  AB> Собственно интересует как генерируют список пакаджей входящих в
  AB> стандартный (двухдисковый) дистрибутив?
 
  AB> Задача впринципе такая: необходимо скачать фрю со всеми необходимыми
  AB> мне (и не только) пакаджами, т.е сначала надо этот список пакаджей
  AB> сгенерировать, а потом скормить wget-у.
 
  AB> Пока поступаю так:
  AB> допустим мне нужны Х-ы:
  AB> cd /usr/ports/x11/xorg
  AB> make pretty-print-run-depends-list
  AB> ещё windowmaker:
  AB> cd /usr/ports/x11-wm/windowmaker
  AB> make pretty-print-run-depends-list
  AB> и тд.
 
  AB> Вывод make обрабатываю скриптом и скармливаю wget-у.
 
  AB> Может есть более рационалные (правильные) варианты?
 
 Можно почитать тут вот:
 http://www.freebsd.org.ua/doc/ru_RU.KOI8-R/articles/releng-packages/article.html
 
 Я использую для нарезки таких дисков собственный скрипт.
 ======CD_Packages.pl===============================================
 #
 #
 # CD_Packages.pl (c) Jet (Aleksey Kotov) jet<shabaka>list.ru
 # Language this text: Russian KOI8-R
 #
 # Скрипт под Виндовс (хотя и под нативную вероятно пойдет. А фигли ему не пойти 
 то,
 # все стандартное...) который создает локальную копию паккаджей для записи на CD
 # ( то что раньше шло на 3-4 диске Фри...)
 #
 # ENG: Make CD distributions packages for FreeBSD
 #
 # Выкачивается все wget-ом (используется пассивный режим. при желании можно
 добавить
 # опции в переменную $wget) с нативного сайта, перед этим проверяется есть ли
 такой
 # пакет на диске в каталоге $dirforlocalbasepackages, и если есть - выкачивания 
 не
 # происходит. Пакет копируется из этого каталога в выходной каталог определенный
 # переменной $dirforcdpackages
 #
 # Если на диске отсутствуют определенные дирректории - они будут созданы
 автоматически.
 #
 # Переменная $list - файл, в котором одна строка - один пакет.
 # Если строка в этом файле начинается с решетки или с точказапятая ";" - это
 комменты.
 # Все пакеты должны начинатся с начала строки и не содержать никаких лишних
 символов
 # кроме конца строки. Конец строки должен быть.
 #
 # По этому списку и по содержимому файла INDEX скрипт строит список
 взаимосвязанных
 # пакетов для выкачивания и скачивает их, после чего создает в выходном каталоге
 # файл INDEX для этих пакетов.
 #
 # Подготовительная работа при использовании скрипта:
 # найти сервер который отдает пакеты с хорошей скоростью (по умолчанию в скрипте
 # используется ftp.FreeBSD.org). Прописать полный путь в переменной $url.
 # Вытащить с этого сайта файл  INDEX, положить локально.
 # Еще можно вытащить из него файл с чексумами и тоже положить локально.
 # (Файл с чексумами потом нужно будет вручную полочить на отведенное для него
 место).
 # Определится с путями к имеющимся на диске ранее выкачанным packages и
 дирректорией
 # в которой будет сформирован набор пакетов для записи на CD.
 #
 #
 # !!!Предосторежения:
 #
 # Скрипт не проверяет размер того что скачивается и влезет ли оно на жесткий
 диск.
 # Предполагается что влезет...
 #
 # Скрипт не проверяет размер всего того что накачалось и влезет ли оно на
 CD-диск.
 # Предполагается что влезет...
 #
 # Скрипт не проверяет корректность того что скачивается.
 # Предполагается что сайт с которого скачивается - нативный, урл - корректный, и
 ошибки
 # скачивания корректируются самим wget-ом.
 #
 # Скрипт сам не собирает никаких packages из портов. Писался то исключительно
 что-бы
 # можно было записать сидюк с пакетами из под Винды....
 #
 # Скрипт не создает файл cdrom.inf
 # Обычно этот файл лежит в корне CD диска с пакетами, его содержимое -
 # одна строка с именем версии дистрибуции. Hапример:
 # CD_VERSION = 5.3-RELEASE
 #
 # Скрипт не проводит разьяснительной работы среди населения.
 # Предполагается что Вы знаете что такое пакеты (packages), зачем они нужны,
 # умеете ставить их с CD и понимаете их отличие от портов (ports)
 #
 #
 #
 # Скрипт проверен на дистрибутиве FreeBSD-i386-5.3-release, Perl 5.6.1,
 WindowsXP-SP2
 #
 # Если этот скрипт чем-то Вас не устроил - Вы можете прочитать руководство
 "Подготовка
 # релизов FreeBSD в части программных пакетов сторонних разработчиков"
 # http://www.freebsd.org.ua/doc/ru_RU.KOI8-R/articles/releng-packages/article.ht
 ml
 # и сделать все самостоятельно.
 #
 # версия 0.1 (просто работает) (c) Jet (Aleksey Kotov) 2004 8 декабря
 
 ################################################################################
 #
             # Юсе стрикт. Hе редактируйте это строку.
 use strict; #ENG: DO NOT EDIT THIS STRING
 
 # Переменные в которых задются основные параметры необходимые для работы
 скрипта.
 #ENG: THIS VARIABLE  EDITABLE
 
 my $url='ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5.3-release/All/'
 ; # откуда льем пакеты.
                                                                               
 #ENG: full url to package directory
 my $dirforlocalbasepackages='./localbase/'; # тут лежат локальные копии пакетов,
 которые
                                          # были уже скачаны когда-то, кем-то...
                                          #ENG: local path for distrib packages
 
 my $dirforcdpackages='./local/'; # отсюда будем строить дерево портов для
 пакетов
                               #ENG: path for create CD distributions packages
 
 my $list='./list.txt'; # список пакетов для скачки
                     #ENG:  list packages for download
 
 my $index='./index'; # исходный INDEX файл. Обычно лежит в /packages/
                   # или packages-_HОМЕРВЕРСИИ_-release/
                   #ENG:  native INDEX file
 ################################################################################
 #
 # Эти переменные редактировать в общем случае не нужно... :)
 #ENG: DO NOT EDIT THIS VARIABLE IF YOU LACKY DUMMIES
 my $localoutdir=$dirforcdpackages.'packages/'; # отсюда будем строить дерево
 портов для пакетов
 my $localoutdirall=$localoutdir.'All/'; # сюда положим все пакеты что выкачаем
 my $outindex=$localoutdir.'INDEX'; # новый файл INDEX с выкачаными пакетами
 my $wget="wget --passive-ftp -P $dirforlocalbasepackages"; # команда для
 скачивания
 my $extpackages='.tbz'; # "расширение" скачиваемых packages
 ################################################################################
 #
 # С переменными разобрались. Дальше - тело скрипта только.
 
 if (!(-d $dirforlocalbasepackages)) {mkdir ($dirforlocalbasepackages) or die
 "not create $dirforlocalbasepackages $!"};
 if (!(-d $dirforcdpackages)) {mkdir ($dirforcdpackages) or die "not create
 $dirforcdpackages $!"};
 if (!(-d $localoutdir)) {mkdir ($localoutdir) or die "not create $localoutdir
 $!"};
 if (!(-d $localoutdirall)) {mkdir ($localoutdirall) or die "not create
 $localoutdirall $!"};
 use File::Copy;
 
 my %mylistpackages=();
 my %listpackages=();
 
 my @outindex=();
 #читаем файл-список
 
 open (INPUTLIST,"<$list") or die "not read $list $!";
 while (my $r=<INPUTLIST>){
 chomp($r);
 $r=~s/[\s*| +]//g;
 $r=~s/\s*[#|;].*//;
 if ($r eq ''){next};
 $mylistpackages{$r}=1;
 
 };
 
 close (INPUTLIST);
 #читаем файл-INDEX и извлекаем из него нужные строки
 
 open (INPUTLIST,"<$index")or die "not read $index $!";
 while (my $r=<INPUTLIST>){
 chomp($r);
 $r=~s/[\s*| +]//g;
 $r=~s/\s*[#|;].*//;
 if ($r eq ''){next};
 
 my ($package,$path,$path2,$name,$path3,$email,$kategogiya,$zavisimosti,$origurl,
 $hz1,$hz2 );
 
 ($package,$path,$path2,$name,$path3,$email,$kategogiya,$zavisimosti,$origurl,$hz
 1,$hz2)=s plit(/\|/,$r);
 $listpackages{$package}=$zavisimosti;
 
 };
 l:
 my $countpass=0;
 foreach my $package (keys %mylistpackages){
 if ($package=~/^HASH/){next};
 foreach my $r(split (/ /,$listpackages{$package})){
 
         if
 (exists($mylistpackages{$r})){next;}else{$mylistpackages{$r}=1;$countpass++;};
 
                                                    }
                                            }
 
 if ($countpass>0){goto l;};
 # тут составление списка закончилось. в $mylistpackages содержится список
 # всепх пакетов для исходного списка
 # выкачиваем их в локальную дирректорию.
 
 foreach my $package (keys %mylistpackages){
 if ($package=~/^HASH/){next};
 if (!( -f $dirforlocalbasepackages.$package.$extpackages)){  #print
 "\nexist=$package\n";
 
          my $r=`$wget $url$package$extpackages`;
          print "download=$package\n";
 };
 
 if (!( -f $localoutdirall.$package.$extpackages)){
 print "copy=$package\n";
 copy ($dirforlocalbasepackages.$package.$extpackages,
 $localoutdirall.$package.$extpackages)or die "nemogu skopirovat $package $!";
 };
 };
 # теперь по списку сохраненных пакетов создаем индекс файл, и структуру
 каталогов портов
 #
 
 open (INPUTLIST,"<$index")or die "not read $index $!";
 open (OUTLIST,">$outindex")or die "not write $outindex $!";;
 
 while (my $r=<INPUTLIST>){
 chomp($r);
 $r=~s/[\s*| +]//g;
 $r=~s/\s*[#|;].*//;
 if ($r eq ''){next};
 
 my ($package,$path,$path2,$name,$path3,$email,$kategogiya,$zavisimosti,$origurl,
 $hz1,$hz2 );
 ($package,$path,$path2,$name,$path3,$email,$kategogiya,$zavisimosti,$origurl,$hz
 1,$hz2)=s plit(/\|/,$r);
  if (exists($mylistpackages{$package})){ print OUTLIST $r;
 
 #создаем структуру портов
 
 $path=~s/\/usr\/ports\///;
 my $dirs=$localoutdir;
 
 #print "$dirs";
 foreach my $s (split(/\//,$path)){
 
            $dirs=$dirs.$s.'/';
            if (-d $dirs) {next;};
            mkdir($dirs) or die"fuck dirs!";
                                };
 if (-f $dirs.$package.$extpackages) {next;};
 
 open (ST,">$dirs$package$extpackages")or die"fuck2!"; close (ST);
 print "file done $dirs$package$extpackages\n";
                                        };
                       };
 ========================================================================
 
 =============list.txt===================================================
 # если строка начинается с решетки или с точказапятая - это коменты
 ; все пакеты должны начинатся с начала строки и не содержать никаких лишних
 символов
 # кроме конца строки. в конце списка - конец строки
 squid-2.5.6_12
 apache-1.3.33
 apache+mod_ssl-1.3.31+2.8.19
 mc-4.6.0_13
 bind9-9.3.0
 mpd-3.18_2
 racoon-20040818a
 rdesktop-1.3.1_1
 samba-3.0.7,1
 bash-3.0_5
 lynx-ssl-2.8.5
 putty-0.55
 tinyca-0.6.6
 
 ========================================================================
 
 --- -=*=-_______________________________________________Aleksey Kotov
  * Origin:  (2:5020/1042.32)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Как генерируют список пакаджей?   Alexander Burylov   16 Dec 2004 13:34:21 
 Re: Как генерируют список пакаджей?   Eugeny Chernetcki   16 Dec 2004 17:01:03 
 Как генерируют список пакаджей?   Aleksey Kotov   16 Dec 2004 23:54:00 
 Как генерируют список пакаджей?   Aleksey Kotov   17 Dec 2004 00:25:04 
 Как генерируют список пакаджей?   Aleksey Kotov   17 Dec 2004 00:51:26 
Архивное /ru.unix.bsd/1775541c1e833.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional