Comments 30
за что я люблю адекватные дистрибутивы:
cat /etc/apache2/vhosts.d/vhost.template | sed -e 's/example.org/myvhost/' > /etc/apache2/vhosts.d/myvhost.conf
cat /etc/apache2/vhosts.d/vhost.template | sed -e 's/example.org/myvhost/' > /etc/apache2/vhosts.d/myvhost.conf
А IP?
ну да, тогда
sed -e «s/example.org/myvhost/;s/\*:80/$(dig +short myvhost):80/;»
vhost используется аж три раза, такчто придётся запихивть в скрипт с параметром :)
sed -e «s/example.org/myvhost/;s/\*:80/$(dig +short myvhost):80/;»
vhost используется аж три раза, такчто придётся запихивть в скрипт с параметром :)
А теперь представим ситуацию, когда /etc/apache2/vhosts.d/vhost.template пропадает. Следовательно в скрипте еще должна быть проверка на присутсвие самого шаблона.
Неплохо. Мог бы — поставил + в карму :)
Отвечаю — правда.
Первые две строки — это «защита от дурака», которая требует чтоб ввели два аргумента — имя хоста (домен) и его IP
хотя на самом деле их надо не «ввести» а указать аргументами скрипта
Следующие четыре строки — это переменные, в которых указываем где лежит директория подключаемых конфигов, базовое размещение домашней директории и имя пользователя. Обратите внимание — на четвертой строке переменная VHOST генерируется на основе предыдущих переменных и первого аргумента
я бы также обратил внимание на то, что переменная VHOST обозначает вовсе не virtual host а каталог для document root этого хоста.
при этом для названия хоста именованные переменные не назначаются, и всегда нужно помнить, что там идёт первым аргументом а что вторым.
если скрипт будет длиннее экрана, для этого нужно будет проматывать в начало.
Две строки создают директорию для содержимого и назначают права владельца
а также группу владельца, в предположении что она существует и совпадает по имени с владельцем,
что справедливо далеко не для всех дистрибутивов
А вот дальше хитро. Команда cat будет читать все пока не встретит комбинацию EOF и записывать все получившиеся в файл. Так как чтение происходит собственно из тела скрипта, то мы просто пишем прямо в нем шаблон конфига, а при обработки все переменные заменяются значениями и записывают в виде готового конфига.
кроме переменной $i которая не определена
Последняя строка — заставляет апач перечитать конфиги.
в дистрибутибах, где скрипт запуска апача называется «httpd»,
и котрые используют system V init-срипты, что не верно для FreeBSD и для некоторых дистрибов линукса.
Это только пример а не универсальный решатель проблем для всех дистрибутивов. На счет $i верно, поменял на $1
в посте упомянуты даже разные системы.
ну и всё моё седояйцевое ворчание исключительно к тому, что это не очень «хороший» пример.
для подражания, например.
ну и всё моё седояйцевое ворчание исключительно к тому, что это не очень «хороший» пример.
для подражания, например.
Как обычно, скрипт начинается с #!/bin/sh
#! — это magic number, который говорит каким интерпретатором обрабатывать скрипт. В этом случае это стандартный sh, а не bash.
Для стандартных ситуаций удобнее всего mod_vhost для лайти. Виртуальный хост определяется просто созданием соответствующей папки в document root:
mkdir /var/www/xxx.yyy.su
Привыкнув к этому, трудно было на апач переходить.
mkdir /var/www/xxx.yyy.su
Привыкнув к этому, трудно было на апач переходить.
В апаче тоже есть такой мод, а еще это rewrite можно сделать, но речь не об этом
То есть виртуальный хост будет доступен и по адресу основной_хост/xxx.yyy.su/ как обычная папка? По-моему одного этого достаточно, чтобы не пользоваться такими фишками.
В нормальных условиях — не будет. Хотя если есть желание выстрелить себе в ногу, добиться этого можно. Но это уже проблема администратора, а не модуля. Какой нормальный человек будет селить виртуалки в /var/www/* и делать этот же /var/www корнем ещё одного сайта?
Нормальные условия — это по дефолту после установки?
Довольно много встречал таких «нормальных человеков», администрирующих (или настраивающих) shared хостинги, по крайней мере, если юзер ручками не пропишет новый хост в папке, не входящей в корень его основного сайта, то по умолчанию поместится именно туда корень нового хоста.
Довольно много встречал таких «нормальных человеков», администрирующих (или настраивающих) shared хостинги, по крайней мере, если юзер ручками не пропишет новый хост в папке, не входящей в корень его основного сайта, то по умолчанию поместится именно туда корень нового хоста.
Нет, нормальные условия — это единообразная настройка. Если сайты лежат в /var/www/подпапка, то они только там лежат и нигде больше — ни в /var/www, ни в /usr/local/..., ни ещё где-либо.
В том же лайти по умолчанию вхосты создаются не в /var/www/подпапка, поэтому волноваться не о чем. Где именно они находятся — дело вкуса, мне нравится /var/www. Если есть какие-то опасения, ничто не мешает поселить их в любое другое место.
В том же лайти по умолчанию вхосты создаются не в /var/www/подпапка, поэтому волноваться не о чем. Где именно они находятся — дело вкуса, мне нравится /var/www. Если есть какие-то опасения, ничто не мешает поселить их в любое другое место.
service httpd reload
не всегда переносимо.
не всегда переносимо.
>Вот и все. Правда шелл скриптинг изящен и красив?
Скорее мощен и суров :(
Строки типа "[ -z $1 ] && (echo «Enter hostname»; exit 1)" язык у меня не поворачивается назвать изящными и красивыми. Было бы что-нибудь более привычное, хотя бы типа (empty $1) && (echo «Enter hostname»; exit 1)" тогда бы сам, вероятно, писал подобные скрипты, а так остается только коллекционировать, а для своих задач юзать mc+nano :)
Спасибо, кстати, за еще один полезный экземпляр в коллекцию. Чуть-чуть допилю под свои реалии и буду юзать, с меня плюсик.
Скорее мощен и суров :(
Строки типа "[ -z $1 ] && (echo «Enter hostname»; exit 1)" язык у меня не поворачивается назвать изящными и красивыми. Было бы что-нибудь более привычное, хотя бы типа (empty $1) && (echo «Enter hostname»; exit 1)" тогда бы сам, вероятно, писал подобные скрипты, а так остается только коллекционировать, а для своих задач юзать mc+nano :)
Спасибо, кстати, за еще один полезный экземпляр в коллекцию. Чуть-чуть допилю под свои реалии и буду юзать, с меня плюсик.
«Вот за что я люблю Linux и FreeBSD, так это за возможность быстро и красиво автоматизировать рутинные действия. Например, типичная задача любого сисадмина — прописать конифиг виртхоста для Апача. Автоматизировать это действие поможет вот такой скрипт:»
Каждый админ получается должен изобретать заново свой велосипед по добавлению конфигов. 2010 год скоро на носу, пора бы апач сообществу, по такого рода вещам наваять тулзу, можно консольную, тут не против, но что бы сама парсила и писала конфиги, лишь параметры подавай.
Каждый админ получается должен изобретать заново свой велосипед по добавлению конфигов. 2010 год скоро на носу, пора бы апач сообществу, по такого рода вещам наваять тулзу, можно консольную, тут не против, но что бы сама парсила и писала конфиги, лишь параметры подавай.
Это скриптинг не на bash, а на sh. А за заметку спасибо.
Sign up to leave a comment.
Скриптинг на bash — это просто