ALT Linux Team development discussions
 help / color / mirror / Atom feed
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 --]

  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