[devel] Re: Q: Текущее состояние web policy (идеи для bugzilla)
Michael Shigorin
=?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Чт Сен 1 18:12:34 MSD 2005
On Thu, Sep 01, 2005 at 04:02:32PM +0400, Aleksey Avdeev wrote:
> интересует текущее состояние web policy (и скриптов поддержки).
Так и не добрался посмотреть на farmer, но с тех пор подсунули
ещё кой-чего интересного и наведшего на мысли.
> 2. Иметь скрипты для установки (обновления) приложения
> непосредственно на сайт его администратором.
> Помню разговор (в контексте web policy) о создании скриптов
> перемещения web приложений на нужное место через копирование
> файлов и/или выставление симлинков по списку. Немогу найти, чем
> он закончился. (Помню что-то про пакет их содержащий... Но
> немогу его найти.)
farmer? (так и не появился ни в Daedalus, ни в Sisyphus AFAICS)
http://lists.altlinux.ru/pipermail/devel/2005-March/018792.html
http://lists.altlinux.ru/pipermail/devel/2005-March/018785.html
http://lists.altlinux.ru/pipermail/devel/2005-March/018673.html
Мне тут местные гентуводы показывали на той неделе, как сделано
у них -- нарисован helper по имени webapp-config, который умеет
различать помеченное как "конфиг" ("индивидуальное") и копировать
(не симлинковать или ещё как, а именно тупо копировать) всё
остальное по виртхостам при обновлении.
http://www.gentoo.org/cgi-bin/viewcvs.cgi/net-www/webapp-config/
В дебиане (спасибо подсказавшим) тоже сдвинулось с мёртвой точки
где-то двухлетней давности:
http://alioth.debian.org/projects/webapps-common/
http://alioth.debian.org/projects/webapppolicy/
http://lists.alioth.debian.org/mailman/listinfo/webapps-common-discuss
http://lists.debian.org/debian-devel/2005/05/msg00075.html
Видимо, заинтересованным (или хотя бы одному из нас) имеет смысл
сходить в гости и натырить идей, коль скоро там они проросли
быстрее.
С другой стороны, у нас есть update_chrooted, который можно
попробовать приспособить для этой задачи.
> 3. Обеспечение работы приложения под обоими apache.
[...]
> 640 <админ>:apache <файл>
> Но у нас есть apache и apache2 и нет группы содержащей их
> обоих... Как быть в таком случаи (без создания общей для веб
> серверов группы) -- я незнаю.
Создать группу, в которую входят оба апача (видимо, пригласить
apache2 в apache соответствующим FR).
> 4. Обеспечить работоспособность под mod_perl. (В перспективе:
> пока mod_perl для меня -- тёмный лес.)
Буду признателен за помощь, см. тж. README.ALT -- там ссылки
на баги, их обсуждение и краткое описание выводов.
--
---- WBR, Michael Shigorin <mike на altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
----------- следующая часть -----------
#!/usr/bin/perl
use strict;
my %config = (
"confFiles"=> ["config/*php.dist","config/conf.xml"]
);
my $debug = 1;
unless($#ARGV == 1) {
DEBUG(1,"usage: $0 sourceDir destinationDir");
exit;
}
unless (-e $ARGV[0] && -e $ARGV[1]) {
DEBUG(0,"sourceDir $ARGV[0] or destinationDir $ARGV[1] not exist");
exit(1);
}
unless (&farmer($ARGV[0],$ARGV[1])) {
DEBUG(0,"Cloning failed");
}
sub farmer {
my $from = shift;
my $to = shift;
my %FROM = ();
unless ( -d $from ) {
&DEBUG($from." not exist or not directory");
return undef;
}
if (! -e $to ) {
unless ($config{"confFiles"}) {
symlink $from,$to;
return "true";
} else {
mkdir $to,0755;
}
} elsif (! -d $to) {
DEBUG(0,"$to exist but not directory");
return undef;
}
foreach my $conf (@{$config{confFiles}}) {
$conf =~ s/\*/[^\/]*/g;
$conf =~ s/(\.|\?)/\\$1/g;
$conf =~ s/^\///;
$conf =~ s/\/$//;
}
my $dir = "";
my %cdir = ();
my @dirs = ();
do {
unless ( opendir(DIR,$from."/".$dir) ){
DEBUG(0, "Can not open dir $from.$dir: $!");
return undef;
}
foreach ( grep {! /\.{1,2}$/ } readdir(DIR)) {
if ( -f $from."/".$dir."/".$_ ){
$FROM{$dir."/".$_} = "f". &checkCf($dir."/".$_,\%cdir);
} elsif ( -d $from."/".$dir."/".$_ ) {
$FROM{$dir."/".$_} = "d". &checkCf($dir."/".$_,\%cdir);
push @dirs,$dir."/".$_;
} else {
DEBUG(1, "$_ not file or directory. Skip it.");
}
}
close(DIR);
$dir = shift @dirs;
} while ($dir);
my @list = sort keys %FROM;
foreach my $file (@list) {
if (exists $cdir{$file} || $FROM{$file} eq "dc"){
if ( -e $to.$file ) {
if ( -l $to.$file ) {
unlink $to.$file;
} elsif (! -d $to.$file) {
DEBUG(1,"$file is not a dir. Something wrong. Try to backUp");
unless (&backUp($to.$file)) {
return undef;
};
}
}
my ($mode,$uid,$gid) = (stat($from.$file))[2,4,5];
mkdir $to.$file, $mode;
chown $uid,$gid,$to.$file;
} elsif ($FROM{$file} eq "fc") {
if ( -l $to.$file ) {
unlink $to.$file;
} elsif ( -e $to.$file ) {
next;
}
system("cp","-p",$from.$file,$to.$file);
} elsif ($FROM{$file} eq "d") {
if ( -l $to.$file ) {
unlink $to.$file;
} elsif ( -d $to.$file ) {
DEBUG(1, "$file is a dir. Can not link it. Try to backUp");
next unless (&backUp($to.$file));
} elsif (-e $to.$file ) {
DEBUG(1,"$file not dir. Try to backUp");
unless (&backUp($to.$file)) {
return undef;
}
}
symlink($from.$file,$to.$file);
foreach my $empty ( grep { /^$file\/.+/ } @list ){
$FROM{$empty} = "empty";
}
} elsif ($FROM{$file} eq "f") {
if (-l $to.$file) {
unlink($from.$to);
} elsif ( -e $to.$file) {
next unless (&backUp($to.$file));
}
symlink($from.$file,$to.$file);
}
}
return "ok";
}
sub checkCf {
my $file = shift;
my $dir = shift;
my $ret = undef;
my @tmp = ();
foreach my $cnf (@{$config{confFiles}}) {
next unless ($file =~ /^\/$cnf$/ || $file =~ /^\/$cnf\/.+$/ );
$ret = "c";
@tmp = split(/\//, $file);
shift @tmp; pop @tmp;
foreach (@tmp) {
next if (exists ${$dir}{"/".$_});
${$dir}{"/".$_} = "c";
}
}
return $ret;
}
sub DEBUG {
my $level = shift;
my $message = shift;
if ($level == 0) {
print STDERR $message."\n";
} elsif ($level <= $debug) {
print $message."\n";
}
}
sub backUp {
my $file = shift;
my $backup = $file.".farmer-save";
if (-d $backup) {
system("rm","-rf",$backup);
} elsif ( -f $backup || -l $backup) {
unlink $backup;
} elsif ( -e $backup) {
return undef;
}
system("mv",$file,$backup);
return "ok";
}
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20050901/458e6052/attachment-0001.bin>
Подробная информация о списке рассылки Devel