[devel] Re: apache2, apache1, /var/www, web packaging policy

Michael Shigorin =?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Пн Май 24 12:50:50 MSD 2004


PreScriptum: хочется попросить yurix@, ab@ и других
заинтересованных в том, чтобы подумать над:

- действительно ли нам нужны два апача, которые одновременно 
  - устанавливаемы (затрудняет завязку по пакетным завивимостям);
  - запускаемы (переносит множество проверок в стартап-тайм);
- "как это сделано у других" (если вообще где-то сделано).

Пока у меня зреет ощущение, что то, на что замахиваемся, у меня в
голове не укладывается в достаточной мере (вместе с
последствиями).  По каковой причине, собственно, и не пытался
сделать то же самое раньше, хотя "счастья всем даром",
разумеется, хотелось давно.

PreS2: положительные ответы на "действительно ли" принимаются
_исключительно_ с прикладными соображениями на тему реализации.

On Fri, May 21, 2004 at 05:23:43PM +0400, Yury Konovalov wrote:
> > > > %apache_datadir         %_var/www
> > > > %apache_htdocsdir       %apache_datadir/html
> > > > %apache_cgibindir       %apache_datadir/cgi-bin
> > > > %apache_webmaster       webmaster
> > > На мой взгляд это уже специфичные вещи.
> > Нет, ну переименовать их в httpd_* или еще как более
> > нейтрально, понятное дело.
> Я имел ввиду не имена, а сам принцип.

А я -- то, что именно эти четыре макроса, вообще говоря,
кроссапачевые как минимум :-) (при условии, что для действительно
специфических пакетов отдельно предоставляем %apache[12]_* etc)

> > > Я исхожу из того, что разные ветки апачей не должны иметь
> > > один и тот-же htdocsdir (какой апач наполнит его, если у
> > > каждого свой контент для этого?) и cgibindir также имеет
> > > пару cgi, предоставляемых самим апачем.
> > Насколько понимаю, "свой" (неразделяемый) контент, по-хорошему --
> > исключение из правила.
> Да, но именно на "свой" контент должен глядеть docroot
> по-умолчанию. Это по-моему правильно. Иначе что показывать
> по-умолчанию?

Generic page, которую все равно давно пора переписывать (та, что
в apache-1.3.x, все равно давно не соответствует
действительности), может быть и более generic, чтобы не
заморачиваться даже не с альтернативами, а с runtime switching в
инитскриптах.

> > Опять же может иметь смысл держать его тоже в /usr/share -- это
> > нечто неизменяемое, в конце концов.
> Тут не спорю -- можно сдвинуть docroot в
> /usr/share/apache{favour}. Однако здесь есть один момент (не
> связанный с /usr/share - просто вспомнил) -- некоторые сайты
> вообще не используют виртхосты. Для таких случаев нужно
> предусмотреть хорошие комментарии в конфигах, чтобы можно было
> просто раскоментировав строчку перебросить docroot в другое
> место (/var/www/htdoc?), чтобы увести личных контент из
> обновляемой пакетом области.

Возможно, это как раз и стоит написать на пресловутой generic
page?

> > > Это, например, может выглядеть так:
> > > /var/www/
> > > 	-apache1/
> > > 		-html/
> > > 		-cgi-bin/
> > > 		-manual/
> > > 		-addon1/
> > > 		-addon2/
> > Что здесь? (ну manual понятно, хотя и он у нас обычно жил
> > симлинком под html)
> -html - дефолтная страница с красивой картинкой alt и
>         ссылками на доки

Угу.  Причем если ее получится обобщить -- как раз в разделяемый
контент (здесь же случай, если не получится).

> -cgi-bin - cgi, поставляемые с апачем.
> -addonX - контент, поставляемый с модулями, работающими только
> с данной версией apache
> для manual - думаю, лучше все-же alias.
> Ещё нужно наверное добавить:
> -addons-manual/
> 	-addon1/
> 	-addon2/
> > > 	-apache2/
> > И чем отличается то, что здесь?
> Всем -- чаще всего, видимо, вообще не будут пересекаться.

Гм.  Другой вопрос -- а нам нужны те cgi, которые "штатно идут с
апачем", с учетом того, что /var/www/cgi-bin по умолчанию не
ограничен Allow from localhost и Deny остальным?

> > Бишь если я собираю webalizer -- куда он кладет свой контент?
> > (собирать два webalizer просто так -- не буду :)
> В /var/www/shared-cgis/webalizer + конфиг в 
> оба /etc/httpd{favour}/conf/addon.d

Вот это "в оба" мне и не нравится с учетом того, что он как бы
простой как два полена и переносимый.  Можно играться в симлинки,
можно думать еще что-то -- но не хотелось бы нарваться по статье
"на каждого мудреца довольно простоты".

Все-таки есть предложение _оставить_ дефолтные назначения
(/var/www/{html,cgi-bin} таковыми именно как _разделяемый_
ресурс, а выносить -- специфичные вещи, потому как там в принципе
надо изменять идентификацию в любом случае.

Извиняюсь за путаность, просто каждый раз восстанавливать
контекст мучительно долго приходится.

> Ну или если применить /usr/share, то в
> /usr/share/apache-shared/webalizer/

У этого специфика в том, что статический контент все-таки
генерируемый, т.е. /usr/share отпадает.

Собственно, это не cgi -- запускается из-под cron, но при этом
кладет контент в указанное место.

> > > 	-shared-cgis/
> > > 		-mailman
> > > 		-one_more_apache_favour_ignoring_project
> > А не большинство ли их такое?  И нет ли смысла тогда здвать
> > это просто cgi-bin/ ? :)
> Можно конечно -- ведь это уже вопрос вкуса. Человек может
> просто запутаться если будет cgi-bin у каждого favour +
> cgi-bin, для разделяемых cgi.

Вот именно.  А какие бития головой об монитор будут при схемах с
раскидыванием per flavour идентичных копий -- "я его правлю,
сношу, а ему все равно!!!" -- уже сейчас можно представить.

Кстати.  А никто не смотрел, вообще где-то эту проблему решали
или нет?

> Может пусть в самом названии каталога отражается его суть.

Но при этом не стоит менять привычек, если они не являются
необоснованными: сохранение опыта при его разумности лучше, чем
изменения к даже более "говорящим", но yet another именам.

> Кроме этого, большинство проектов могут предоставлять
> sсriptalias в своём конфиге, и добавлять централизованный алиас
> нет смысла.

Угу.  А при подключении $project к $virthost достаточно будет
перетащить (скопировать) именно ScriptAlias.

> > Опять же, разделяемый html -- это то, на что (сейчас) заряжен
> > default vhost.  Было бы разумно вообще исключить запись туда
> > вебмастером (права+README) и тут же "удобнизировать" создание
> > нормального виртхоста -- в т.ч. дефолтного, но не здесь, в
> > пакетной местности.
> Под default vhost я понял просто docroot  и его дефолтное
> содержимое. Тут я опять-же за разные docroot для каждого favour
> апача. С остальным согласен.

А я -- за один в общем случае. :)  Собственно, вокруг чего и вся
беготня.

> > > > А у нас есть настолько специфичные cgi, или речь о том,
> > > > чтобы обеспечить эту возможность?  Просто получается
> > > > множество
> > > За то, что уже есть в сизифе не скажу (там просто не откуда
> > > взяться apache2-specific пакетам:), но я знаю такие пакеты,
> > > которые будут предоставлять cgi, зависящие от модулей,
> > > имеющихся только во втором апаче (WebAuth/WebKDC как
> > > пример).
> > С другой стороны -- и что плохого, если они окажутся в
> > разделяемом cgi-bin?  Максимум взорвется не под тем (и то уже
> > дав намек требованием "того").
> Эти "намёки" вряд ли будут содержательными, по крайней мере не
> укажут напрямую на необходимость сменить версию апача.

Именно поэтому я и противился требованиям обеспечить не то что
устанавливаемость, а функционирование двух версий apache
одновременно.

Слишком много логики надо вбивать и неочевидностей вылазит.

Кто тут это требовал -- Саша Боковой?  Саш, давай-ка помогай
разруливать. :-)

> А намёк в виде каталога внутри apache{favour} должен
> восприниматься однозначно ;)

См. выше насчет frustration.  Просто не раз видел, как наши
неочевидности доводили до походов на стенку и бывалых людей.

> > > 2) из первого вытекает, что большинство хостеров будут
> > > использовать A2 в проксируемом посредством A1 режиме (что
> > > по умолчанию действует в моем пакете почти также как и в
> > > apache-mod_perl)
> > А, вот как.  Не учел.  Т.е. именно одновременная работа...
> В том числе -- это просто трюк в инитскрипте и пара if в
> конфиге на случай, если A1 уже поднят. В остальном --
> совершенно полноценная сборка A2

Ну, это можно подсмотреть в init.d/apache* как они есть сейчас --
там сучковатые, но обычно работающие костыли для предотвращения
неочевидности в виде запущенного при лежавшем httpd httpd-perl и
ломания всего подряд от неожиданности.

А, вот как раз после довешивания хоть какой-то диагностики в эти
инитскрипты я и боюсь этой динамической маршрутизации грабель.

> > > 3) В свою очередь, из второго вытекает, что A2 будет
> > > действовать лишь для малой части виртхостов (или даже части
> > > контента виртхоста), а центральный cgi-bin дотачивается
> > > по-месту. Т.е мы здесь все-равно не угадаем.
> > Ммм.... хорошо.  А наблюдались несовместимые снизу вверх CGI?
> На моем веку нет -- разве что расчёт на mod_charset не
> состоятелен.

Ну, он у нас по умолчанию отключен => все равно надо
разбираться/смотреть, чтоб включить, и если это будет делать
чайник -- он все равно огребет по независящим от нас
обстоятельствам, а для профи пары пометок хватит, if any.

Я про дефолты в первую очередь.

> > > > > Вообщем все то, что попадет туда само-сабой, если изменить
> > > > > apache_home.
> > > > Э, не.  Тогда туда и разделяемого много упадет.
> > > Можно сказать, что это даже хорошо -- пусть сначала пакет
> > > осознает свой контент разделяемым. Так постепенно все
> > > образуется и не будет резких изменений.
[...]
> > Т.е. 1) дело не в макросах :-) и 2) незачем априори полагать,
> > что софт является apache1-specific.  В последнем могу быть
> Макросы сильно помогут :)

Угу, но их надо _внедрять_, менять пока просто нет смысла. :)
Т.е. есть, но _пока_ это практически ни на что не влияет.

> Да, но сейчас все, что есть в сизифе выглядит как
> apache1-specific по форме, а не по факту.

Почему?

> Пусть мантейнеры решают как сделать пакет толерантным к версии
> апача. Тут всего два варианта:
> 1) Пакет идёт в shared-cgis (mailman для примера)

...или так и остается в /var/www/cgi-bin. :)

> 2) Пакет рождает отдельную сборку для A2 (mod_php как пример)

...в /var/www/apache2/cgi-bin или /usr/lib/cgi-bin/apache2/
(мне больше импонирует последнее)

> > > Здесь только хотелось сказать, что на данный момент, если
> > > отказаться от идеи одного docroot'а, следует определить тот
> > > список макросов, достаточный для сборки модулей, и
> > > использовать одинаковые имена, при взаимно вытесняющих
> > > -devel.
> > А что тогда делать с webalizer? ;-)
> Это решать мантейнеру :)
> На мой взгляд -- хороший пример для shared-cgis. Ему при сборке
> конечно нужно будет проsedить как apache.conf, так и
> apache2.conf. Причем, это даже слишком хороший пример - ему
> ведь по сути нужно знать где логи обоих апачей... Значит
> собираться ему без apache-макросов.

А он может не только апачьи логи, а обобщенные CLF, combined и
xferlog.

Т.е. *если* конкретно по apache[12] у нас штатный формат логов не
варьируется *и* избежать ситуации, когда оба процесса могут быть
запущены и пытаться писать в одни файлы -- их можно даже дружно
писать в /var/log/httpd.

[кстати: а нет ли смысла переезжать с CLF на Combined как более
информативный по умолчанию, или "народу не нужны..."?]

> > Просто когда народ очень так интересовался, почему mod_perl
> > так экстравагантно заведен -- я подумал-подумал, чего может
> > стоить его вытаскивание из-под этой схемы (даже если течь не
> > будет и вообще все замечательно теперь), и объявил, что
> > делать этого в 1.3.x -- не собираюсь.
> > Соответственно если apache2 будет этаким довеском, то когда
> > ему придет времябыть _платформой_ -- изначальная завязка на
> > "неполноценность" и обособленность может сыграть злую шутку.
> Он более чем полноценен! Правда! :)

О чем и спич.  Посмотрите /etc/init.d/httpd* от первого, и что с
ними будет, если у нас будет смесюка httpd + httpd-perl + apache2
с такой колбасой проксей.  (можно поставить конфликт apache2 с
apache1-mod_perl, но кому-то непременно понадобится именно это)

> > Хочется по возможности избежать в его будущем нетривиальных
> > скриптов по обеспечению миграции и продумывания ночами
> > %triggerpostun...
> Для этого и обсуждаем.

Угу.

> > > > Если забегать в раздел мыслей по web packaging policy, то мне
> > > > очень нравится размещение скриптов под /usr/share и
> > > Да - это конечно мечта, но пока у меня нет чёткого
> > > представления. Похоже, на данном этапе это скорее
> > > усложнение.
> > А посмотрите дебиановские пакеты.  Там есть и, например,
> > возможность сказать, в какую именно БД ходить создавать
> > штатные базы, и это очень симпатичная автоматизация нудной и
> > тупой "деятельности".
> Нужно будет посмотреть.

И, кстати, про "куда класть и как включать" (при условии
доступности дюжины веб-серверов) тоже надо будет освежить, я
как-то разглядывал только в контексте "а, у нас все равно один
apache сейчас".

> > Так что будем ориентироваться на mature web software.
> > Пилимое (плохое) -- в конце концов, руками по старинке
> > разложить можно, раз все равно пилить.
> Мы на это не ориентируемся -- просто пока не ясно, как сделать
> лучше.

Я к тому, что при создании субполитики упаковки веб-софта имеет
смысл ориентироваться на тот софт, который в принципе имеет смысл
пакетить, а не тот, который практически неизбежно пилится (что
лишает смысла пакет в любом случае).

-- 
 ---- WBR, Michael Shigorin <mike на altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/



Подробная информация о списке рассылки Devel