是否有简化的方法从现有的CentOS 5.10服务器导出设置以进行本地Vagrant配置? (木偶,厨师,贝壳或其他)

前端之家收集整理的这篇文章主要介绍了是否有简化的方法从现有的CentOS 5.10服务器导出设置以进行本地Vagrant配置? (木偶,厨师,贝壳或其他)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近开始学习如何使用Vagrant来启动本地开发环境. (在对各种WAMP堆栈选项感到沮丧之后)到目前为止,Vagrant很棒……轻微(ha)学习曲线,但长期看起来很有希望.

在尝试使我的VM看起来像我的在线服务器内部的繁琐过程中……在我看来,Vagrant有一个缺失的部分.现在这个过程似乎或多或少像手动试验和错误.第一次快速设置或者很容易从上游服务器保持同步是不理想的.

不可否认,我可能不知道我正在寻找什么…因此问题.

是否有简化的方法从现有的CentOS 5.10服务器导出设置以进行本地Vagrant配置? (木偶,厨师,贝壳或其他)

像这样的东西是我想象的……

(连接到在线服务器……)

>根据需要检测repo差异并启用,禁用,添加本地.
>检测包,并同步本地匹配. (从本地安装或删除)
>获取httpd.conf,调整本地(如果需要)和同步.
>获取PHP.ini,调整本地(如果需要)和同步.
>获取MySQL设置,调整本地(如果需要)和同步.
>获取时区和同步.
> [您对其他应该同步的事情的建议在这里欢迎…]

理想情况下,这将在配置期间运行,并且基本上使本地版本与在线版本保持同步.这样就无需手动调整本地设置以保持同步.如果在线(主机或内部)更改了某些内容……它会自动向下传播. (当然,理想情况下,您可以标记设置以根据需要调整行为)

或者,我想如果我可以打包在线服务器而不打包各种用户特定数据,那也可以.然而,从我能说的话来看,这似乎是不可能的……而且它肯定不会非常有效.

警告

在我个人的情况下,我在带有cPanel的CentOS 5.10服务器上. cPanel似乎做了很多服务器端的东西,不一定立即显而易见.一个例子是许多软件包名称以cPanel开头并且看起来是专有的,但同时与我可能想要同步的内容有关. (例如cpanel-PHP53)据我所知,到目前为止,这些都无法轻易同步……因此需要进行解决.另一个例子可能是不同于预期的路径,但我不太确定,因为我对CentOS和cPanel默认安装都不熟悉,以确保任何特性.

到目前为止我做了什么……

在我决定询问是否有更好的方式与Vagrant携手合作之前,我做了一些事情.它并不可怕,但并非真正“精简”或全面.这是细节……

>我学习了如何在两台机器上运行yum repolist以及如何使用cd /etc/yum.repos.d在文件系统中查看repos. ll;,但不是如何使用此信息自动同步回购.
>我编写了一个shell脚本,以使本地的软件包与远程软件包非常接近.然而,虽然它做得很好,但它并不完美,我想知道是否有更好的方法.问题…

>我不确定是否允许删除本地特有的包. (也,
抛出一些错误)
>我还没有解决如何补偿预装了“cpanel”的软件包,它似乎是我真正想要的替代品(PHP,MysqL等),而不是完全从安装列表中删除每个软件包.
>这不能作为Vagrant配置程序运行,因为它需要用户输入的性质.在同一个注意事项中,运行此命令并删除“本地唯一”软件包将删除之前在规定期间运行的yum安装.

#!/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.我写了一个shell脚本来获取一些远程配置文件并将它们移动到本地.它在表面上运作得相当好,但我还没有对结果进行深入测试.我确实运行了日期,看到时区已根据需要同步,并检查了一些文件内容以验证是否成功.

同样,这不能作为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,# 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!'
您可能只想使用 Blueprint.

Generating Puppet modules and Chef cookbooks

在尝试将其部署到另一台服务器之前,您将能够编辑生成的包.

猜你在找的CentOS相关文章