Pull to refresh

Comments 30

за что я люблю адекватные дистрибутивы:

cat /etc/apache2/vhosts.d/vhost.template | sed -e 's/example.org/myvhost/' > /etc/apache2/vhosts.d/myvhost.conf
ну да, тогда
sed -e «s/example.org/myvhost/;s/\*:80/$(dig +short myvhost):80/;»
vhost используется аж три раза, такчто придётся запихивть в скрипт с параметром :)
А теперь представим ситуацию, когда /etc/apache2/vhosts.d/vhost.template пропадает. Следовательно в скрипте еще должна быть проверка на присутсвие самого шаблона.
vhost.template обычно входит в дистриб, на что я собсно и намекал,
и если в системе пропадает что-то важное, то руки админа настолько кривы, что силами скриптов с этим не справится в любом случае.
Сбой по питанию и поломка FS от рук админа не зависят
да. это зависит скорее от головы админа :)
Первые две строки — это «защита от дурака», которая требует чтоб ввели два аргумента — имя хоста (домен) и его IP

хотя на самом деле их надо не «ввести» а указать аргументами скрипта

Следующие четыре строки — это переменные, в которых указываем где лежит директория подключаемых конфигов, базовое размещение домашней директории и имя пользователя. Обратите внимание — на четвертой строке переменная VHOST генерируется на основе предыдущих переменных и первого аргумента

я бы также обратил внимание на то, что переменная VHOST обозначает вовсе не virtual host а каталог для document root этого хоста.
при этом для названия хоста именованные переменные не назначаются, и всегда нужно помнить, что там идёт первым аргументом а что вторым.
если скрипт будет длиннее экрана, для этого нужно будет проматывать в начало.

Две строки создают директорию для содержимого и назначают права владельца

а также группу владельца, в предположении что она существует и совпадает по имени с владельцем,
что справедливо далеко не для всех дистрибутивов

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

кроме переменной $i которая не определена

Последняя строка — заставляет апач перечитать конфиги.

в дистрибутибах, где скрипт запуска апача называется «httpd»,
и котрые используют system V init-срипты, что не верно для FreeBSD и для некоторых дистрибов линукса.
Это только пример а не универсальный решатель проблем для всех дистрибутивов. На счет $i верно, поменял на $1
в посте упомянуты даже разные системы.

ну и всё моё седояйцевое ворчание исключительно к тому, что это не очень «хороший» пример.
для подражания, например.
Это нюансы, которыми можно пренебречь. Ведь для того чтоб апач перечитал свой конфиг на самом деле надо просто послать HUP его главному процессу, а зная теорию, поправить скрипт под свой дистрибутив небудет проблемой.
я сомневаюсь, что знающие теорию нуждаются в таких примерах скриптинга :)
а пренебрегать ньюансами это всёж таки плохой стиль
Как обычно, скрипт начинается с #!/bin/sh


#! — это magic number, который говорит каким интерпретатором обрабатывать скрипт. В этом случае это стандартный sh, а не bash.
Для стандартных ситуаций удобнее всего mod_vhost для лайти. Виртуальный хост определяется просто созданием соответствующей папки в document root:
mkdir /var/www/xxx.yyy.su
Привыкнув к этому, трудно было на апач переходить.
В апаче тоже есть такой мод, а еще это rewrite можно сделать, но речь не об этом
Полезность скриптинга никто и не отрицает. Просто для _стандартных_ ситуаций есть более простые решения. Радует, что в апаче они тоже есть, спасибо за сведения.
То есть виртуальный хост будет доступен и по адресу основной_хост/xxx.yyy.su/ как обычная папка? По-моему одного этого достаточно, чтобы не пользоваться такими фишками.
В нормальных условиях — не будет. Хотя если есть желание выстрелить себе в ногу, добиться этого можно. Но это уже проблема администратора, а не модуля. Какой нормальный человек будет селить виртуалки в /var/www/* и делать этот же /var/www корнем ещё одного сайта?
Нормальные условия — это по дефолту после установки?

Довольно много встречал таких «нормальных человеков», администрирующих (или настраивающих) shared хостинги, по крайней мере, если юзер ручками не пропишет новый хост в папке, не входящей в корень его основного сайта, то по умолчанию поместится именно туда корень нового хоста.
Нет, нормальные условия — это единообразная настройка. Если сайты лежат в /var/www/подпапка, то они только там лежат и нигде больше — ни в /var/www, ни в /usr/local/..., ни ещё где-либо.
В том же лайти по умолчанию вхосты создаются не в /var/www/подпапка, поэтому волноваться не о чем. Где именно они находятся — дело вкуса, мне нравится /var/www. Если есть какие-то опасения, ничто не мешает поселить их в любое другое место.
Ваши бы слова да в уши «нормальных человеков», нет же, плодят сущности…

>Вот и все. Правда шелл скриптинг изящен и красив?

Скорее мощен и суров :(

Строки типа "[ -z $1 ] && (echo «Enter hostname»; exit 1)" язык у меня не поворачивается назвать изящными и красивыми. Было бы что-нибудь более привычное, хотя бы типа (empty $1) && (echo «Enter hostname»; exit 1)" тогда бы сам, вероятно, писал подобные скрипты, а так остается только коллекционировать, а для своих задач юзать mc+nano :)

Спасибо, кстати, за еще один полезный экземпляр в коллекцию. Чуть-чуть допилю под свои реалии и буду юзать, с меня плюсик.
«Вот за что я люблю Linux и FreeBSD, так это за возможность быстро и красиво автоматизировать рутинные действия. Например, типичная задача любого сисадмина — прописать конифиг виртхоста для Апача. Автоматизировать это действие поможет вот такой скрипт:»

Каждый админ получается должен изобретать заново свой велосипед по добавлению конфигов. 2010 год скоро на носу, пора бы апач сообществу, по такого рода вещам наваять тулзу, можно консольную, тут не против, но что бы сама парсила и писала конфиги, лишь параметры подавай.
Вы не понимаете суть *никсов. Каждая команда делает свое дело. Монструозные комбайны ненужны.
Это будет всего лишь ещё один продукт для ещё одной задачи
Это скриптинг не на bash, а на sh. А за заметку спасибо.
Sign up to leave a comment.

Articles