Я пытаюсь написать сценарий, который будет собирать Nginx из источников с настраиваемыми модулями ... Я хотел бы сделать это чистым способом, который не требует обновления номеров версий после нового выпуска.
То, что у меня есть, выглядит так:
sudo mkdir -p /opt && cd /opt
# Fetch Module(s)
sudo git clone https://github.com/AirisX/nginx_cookie_flag_module.git
# Update Apt Repositories
sudo add-apt-repository -y ppa:nginx/stable
sudo sed -i "s/# deb-src/deb-src/" /etc/apt/sources.list.d/nginx-ubuntu-stable-xenial.list
sudo apt-get update
# Fetch Nginx Sources/Dependencies
sudo mkdir -p /opt/rebuildnginx && cd /opt/rebuildnginx
sudo apt-get dpkg-dev
sudo apt-get source -y nginx
sudo apt-get build-dep -y nginx
# Add Module(s) To Nginx Rules
sudo perl -p0i -e 's/^(full_configure_flags(?:.*?\\\n)+.*)/$1 \\\n --add-dynamic-module=\/opt\/nginx_cookie_flag_module\n/m' /opt/rebuildnginx/nginx-1.12.1/debian/rules
В настоящее время у меня есть две проблемы с этим, обе относятся к последней строке.
Чтобы избавиться от sudo
в каждой строке учтите просит рут.
Ваш /opt/rebuildnginx
Каталог используется в 3-х разных местах. Это должна быть переменная. Я бы использовал BUILDBASE
для имени переменной или чего-то подобного.
Я думал, ты сможешь найти это в apt-cache
но эти версии выглядят иначе, чем ваша. Если вы раньше не запускали этот скрипт для предыдущих версий nginx, это должно сработать:
VERSION=`ls -d nginx*`
RULES="/opt/rebuildnginx/$VERSION/debian/rules"
Вот пример этого:
$ VERSION=`ls -d nginx*`
$ echo $VERSION
nginx-1.12.1
$ RULES="/opt/rebuildnginx/$VERSION/debian/rules"
$ echo $RULES
/opt/rebuildnginx/nginx-1.12.1/debian/rules
Чтобы сделать это надежным, вы можете rm -rf /opt/rebuildnginx
каждый раз. Возможно, вам также необходимо проверить наличие git clone
d до клонирования, чтобы ваш скрипт можно было повторно запустить.
Есть несколько вещей, которые мы можем сделать для вашей последней строчки. Для начала разделим его на несколько строк:
sudo perl -p0i \
-e 's/^(full_configure_flags(?:.*?\\\n)+.*)/$1 \\\n --add-dynamic-module=\/opt\/nginx_cookie_flag_module\n/m' \
/opt/rebuildnginx/nginx-1.12.1/debian/rules
Затем мы можем использовать переменную имени файла из предыдущего раздела:
sudo perl -p0i \
-e 's/^(full_configure_flags(?:.*?\\\n)+.*)/$1 \\\n --add-dynamic-module=\/opt\/nginx_cookie_flag_module\n/m' \
"$RULES"
Вы также можете превратить выражение Perl в строку с двойными кавычками и построить ее с помощью переменных, но я думаю, что это будет сложнее отлаживать. Придерживаться строки в одинарных кавычках для этого - хорошая ставка, и, по крайней мере, теперь имя файла не скрывается за краем вашего экрана.
Я сомневаюсь, что вам понадобятся все эти пробелы раньше --add-dynamic-module
. В противном случае необходимо избавиться от нескольких пробелов. Или, может быть, использовать \t\t\t\t
вместо длинных пробелов, если табуляция допустима.