Существует ли упрощенный способ экспорта параметров с существующего сервера CentOS 5.10 для локальной подготовки Vagrant? (Кукольный, повар, ракушка или иное)

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

Достигнув утомительного процесса, пытаясь заставить мою виртуальную машину выглядеть как мой онлайн-сервер внутри... мне кажется, что в Vagrant отсутствует часть. Процесс сейчас кажется более или менее похожим на ручную пробу и ошибку. Не идеально для быстрой настройки с первого раза или для простой синхронизации данных с вышестоящего сервера.

По общему признанию, я не могу точно знать, что я ищу... отсюда вопрос.

Существует ли упрощенный способ экспорта параметров с существующего сервера CentOS 5.10 для локальной подготовки Vagrant? (Кукольный, повар, ракушка или иное)

Что-то вроде этого я и представлял...

(Подключение к онлайн-серверу...)

  1. Обнаружьте различия репо и включите, отключите, добавьте на локальном по мере необходимости.
  2. Обнаружение пакетов и синхронизация локальных для соответствия. (установить или удалить из локального)
  3. Получите httpd.conf, настройте локально (при необходимости) и синхронизируйте.
  4. Получить php.ini, настроить локальный (при необходимости) и синхронизировать.
  5. Получить настройки MySQL, настроить локальный (при необходимости) и синхронизировать.
  6. Получить часовой пояс и синхронизировать.
  7. [Ваши предложения для дополнительных вещей, которые должны быть синхронизированы, добро пожаловать сюда...]

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

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

Предостережение

В моих личных обстоятельствах я нахожусь на сервере CentOS 5.10 с cPanel. Кажется, cPanel делает много вещей на стороне сервера, что не всегда очевидно. Одним из примеров является то, что многие имена пакетов начинаются с cPanel и кажутся проприетарными, но в то же время связаны с вещами, которые я мог бы захотеть синхронизировать. (например, cpanel-php53) Насколько я могу судить, они не могут быть легко синхронизированы... поэтому необходимо обойти обходные пути. Другим примером могут быть пути, отличные от ожидаемых, но я не совсем уверен, поскольку я недостаточно знаком с установками по умолчанию как CentOS, так и cPanel, чтобы быть уверенным в каких-либо идиосинкразиях.

Что я сделал до сих пор...

Я кое-что сделал, прежде чем решил спросить, есть ли лучший способ, который больше работает рука об руку с Вагрантом. Это не ужасно, но на самом деле не "обтекаемый" или всеобъемлющий. Вот подробности...

  1. Я научился бегать yum repolist all на обеих машинах и как посмотреть репозитории в файловой системе, используя cd /etc/yum.repos.d; ll;, но не как использовать эту информацию для автоматической синхронизации репо.

  2. Я написал сценарий оболочки, чтобы локальные пакеты были очень близки к удаленным. Однако, несмотря на то, что он справляется со своей задачей, он не идеален, и мне интересно, есть ли лучший выход. Вопросы...

    • Я не уверен в разрешении удаления пакетов, уникальных для локальных. (также выкидывает несколько ошибок)
    • Я не разобрался, как компенсировать пакеты, предварительно добавленные с помощью "cpanel", которые кажутся заменой того, что я действительно хочу (PHP, MySQL и т. Д.), Кроме полного удаления каждого из списка установки.
    • Его нельзя запускать как поставщик Vagrant, поскольку он требует ввода данных пользователем по своей природе. На этой же ноте запуск этого и удаление пакетов, "уникальных для локальных", уничтожит ням установки, ранее запущенные во время подготовки.

#!/usr/bin/env bash

# This script is a helper for syncing local packages to match a remote server.
# It is geared toward a remote CentOS server with cPanel thrown in the mix
# and a local "server" managed by Vagrant. Regardless, the concepts are the
# same for many kinds of set-ups and it's fairly tweakable.

# To run this script from the command line...
# Be root or become root by running 'sudo -i',
# then run 'source /vagrant/.vagrant/sync-packages.sh'

remote_host=1.1.1.1
destination=/vagrant/.vagrant/

echo -e '\nGetting packages from remote server...'
ssh root@${remote_host} "rpm -qa --queryformat='%{NAME}\n' | sort" > ${destination}packages-remote.txt

echo 'Getting packages from local server...'
rpm -qa --queryformat='%{NAME}\n' | sort > ${destination}packages-local.txt

echo 'Compiling package sets for comparison...'

comm -23 ${destination}packages-remote.txt ${destination}packages-local.txt                         > ${destination}packages-remote-only.txt
comm -23 ${destination}packages-local.txt ${destination}packages-remote.txt                         > ${destination}packages-local-only.txt
sed -r '/^(cpanel|newrelic)/!d' ${destination}packages-remote-only.txt                              > ${destination}packages-remote-only-proprietary.txt
comm -23 ${destination}packages-remote-only.txt ${destination}packages-remote-only-proprietary.txt  > ${destination}packages-remote-only-non-proprietary.txt

echo "Packages total  on local  $(cat ${destination}packages-local.txt | wc -l)"
echo "Packages unique to local  $(cat ${destination}packages-local-only.txt | wc -l)"
echo "Packages total  on remote $(cat ${destination}packages-remote.txt | wc -l)"
echo "Packages unique to remote $(cat ${destination}packages-remote-only.txt | wc -l)"
echo "Packages unique to remote *proprietary* $(cat ${destination}packages-remote-only-proprietary.txt | wc -l)"
echo "Packages unique to remote *non-proprietary* $(cat ${destination}packages-remote-only-non-proprietary.txt | wc -l)"

# If there are packages that are unique to local, prompt for removal

if [[ -s ${destination}packages-local-only.txt ]]; then
    read -p 'Do you want to remove the packages that are unique to local? (y/n) ' -n 1 -r; echo

    if [[ $REPLY =~ ^[Yy]$ ]]; then
        echo 'Removing packages (this runs in quiet mode and may take some time)...'
        yum -y -q remove $(cat ${destination}packages-local-only.txt)
    fi
fi

# If there are *non-proprietary* packages that are unique to remote, prompt for install

if [[ -s ${destination}packages-remote-only-non-proprietary.txt ]]; then
    read -p 'Do you want to install the *non-proprietary* packages that are unique to remote? (y/n) ' -n 1 -r; echo

    if [[ $REPLY =~ ^[Yy]$ ]]; then
        echo 'Installing packages (this runs in quiet mode and may take some time)...'
        yum -y -q install $(cat ${destination}packages-remote-only-non-proprietary.txt)
    fi
fi

# Wrap up

echo 'Ensuring all packages are up to date (this runs in quiet mode and may take some time)...'

yum -y -q update

echo -e "\nWe're all done here. If you need to see a log of changes, please run 'nano /var/log/yum.log'\n"


3. до 7. Я написал сценарий оболочки, чтобы получить некоторые файлы удаленной конфигурации и локально переместить их на место. На поверхности это работает довольно хорошо, но я еще не проверил результаты. Я бегал date чтобы убедиться, что часовой пояс был синхронизирован по желанию, и проверил некоторое содержимое файла, чтобы убедиться в его успешности.

Снова, это не может быть выполнено как поставщик Vagrant, потому что это требует пользовательского ввода по своей природе. Кроме того, не было сделано никаких настроек для файлов, чтобы гарантировать, что они будут работать локально без проблем. (например, http.conf, чтобы гарантировать, что Apache не наткнется на что-то, или указывать MySQL на правильный каталог данных) Наконец, я уверен, что это не единственные файлы, на которые я должен портировать... это были только самые очевидные.

#!/usr/bin/env bash

# This script is a helper for syncing local settings to match a remote server.
# It is geared toward a remote CentOS server with cPanel thrown in the mix
# and a local "server" managed by Vagrant. Regardless, the concepts are the
# same for many kinds of set-ups and it's fairly tweakable.

# To run this script from the command line...
# Be root or become root by running 'sudo -i',
# then run 'source /vagrant/.vagrant/sync-settings.sh'

remote_host=1.1.1.1
destination=/vagrant/.vagrant/

echo 'Getting config files from remote server...'

scp root@${remote_host}:"\
/usr/local/apache/conf/httpd.conf \
/usr/local/lib/php.ini \
/etc/my.cnf \
/root/.my.cnf \
/etc/localtime \
" ${destination}

echo 'Syncing files...'

mv -f ${destination}httpd.conf  /usr/local/apache/conf/httpd.conf
mv -f ${destination}php.ini     /usr/local/lib/php.ini
mv -f ${destination}my.cnf      /etc/my.cnf
mv -f ${destination}.my.cnf     /root/.my.cnf
mv -f ${destination}localtime   /etc/localtime

echo 'All done!'

1 ответ

Решение

Вы можете просто использовать Blueprint.

Создание кукольных модулей и поваренных книг шеф-повара

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

Другие вопросы по тегам