From: Michael Shigorin <mike@osdn.org.ua> To: ALT Devel discussion list <devel@altlinux.ru> Subject: [devel] Re: Q: Текущее состояние web policy (идеи для bugzilla) Date: Thu, 1 Sep 2005 17:12:34 +0300 Message-ID: <20050901141234.GE21359@osdn.org.ua> (raw) In-Reply-To: <4316EDD8.50800@solin.spb.ru> [-- Attachment #1.1: Type: text/plain, Size: 2536 bytes --] 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/ [-- Attachment #1.2: farmer --] [-- Type: text/plain, Size: 3783 bytes --] #!/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"; } [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2005-09-01 14:12 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2005-09-01 12:02 [devel] " Aleksey Avdeev 2005-09-01 12:42 ` Ivan Fedorov 2005-09-01 13:49 ` Aleksey Avdeev 2005-09-01 14:12 ` Michael Shigorin [this message] 2005-09-01 15:18 ` [devel] " Vladimir Lettiev 2005-09-01 15:46 ` Michael Shigorin 2005-09-02 10:29 ` Aleksey Avdeev 2005-09-02 12:09 ` Michael Shigorin 2005-09-02 12:47 ` Aleksey Avdeev 2005-09-02 14:43 ` Michael Shigorin 2005-09-02 22:18 ` Денис Смирнов 2005-09-03 9:25 ` Michael Shigorin 2005-09-07 12:27 ` Igor Zubkov 2005-09-12 14:53 ` [devel] [JT] " Michael Shigorin 2005-09-02 13:35 ` [devel] " Денис Смирнов 2005-09-02 14:35 ` Michael Shigorin 2005-09-01 19:30 ` [devel] " Alexey Borovskoy
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20050901141234.GE21359@osdn.org.ua \ --to=mike@osdn.org.ua \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git