Я пытаюсь написать сценарий, который будет собирать 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
в каждой строке, подумайте о , запрашивающем root .
Your Каталог / opt / rebuildnginx
используется в трех разных местах. Это должна быть переменная. Я бы использовал 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- модуль
. Если нет, то необходимо избавиться от нескольких пробелов. Или, может быть, используйте \ t \ t \ t \ t
вместо длинного набора пробелов, если табуляция допустима.