运行完脚本后,环境就搭建完成,将服务器从PXE启动:
脚本代码:
- #! /bin/bash
- #
- # FILE: pxe_kickstart_install.sh
- #
- # USAGE: ./pxe_kickstart_install.sh
- #
- # DESCRIPTION: quickly install pxe+tftp+nginx+kickstart, auto install centos 5
- #
- # AUTHOR: http://waydee.blog.51cto.com/#
- # CREATED: 2012-4-24
- # VERSION: 1.0
-
-
-
- #################### VARIABLES ####################
-
- ISO_MNT="/mnt/iso" #ISO_MNT is CentOS DVD mount dir
- G_LEFT="\e[0;32m\033[1m" #G_LEFT and G_RIGHT to echo green strings
- G_RIGHT="\e[m" #G_LEFT and G_RIGHT to echo green strings
- R_LEFT="\e[0;31m\033[1m" #R_LEFT and R_RIGHT to echo red strings
- R_RIGHT="\e[m" #R_LEFT and R_RIGHT to echo red strings
- HTML_DIR="/usr/share/nginx/html" #HTML_DIR is nginx / dir,and copy centos dvd to this dir
- NAME_SERVER="192.168.2.101" #NAME_SERVER is for dhcpd.conf domain-name-servers
- SUBNET="192.168.2.0" #SUBNET is for dhcpd.conf subnet
- NETMASK="255.255.255.0" #NETMASK is for dhcpd.conf netmask
- RANG_START="192.168.2.220" #RANG_START is for dhcpd.conf range start
- RANG_END="192.168.2.225" #RANG_END is for dhcpd.conf rang end
- NEXT_SERVER="192.168.2.101" #NEXT_SERVER is for dhcpd.conf next_server
- TFTPBOOT_DIR="/var/lib/tftpboot" #tftp boot dir ,default is /var/lib/tftpboot
- PXELINUX_DIR="${TFTPBOOT_DIR}/pxelinux.cfg" #pxelinux.cfg dir
- BOOT_SIZE="100" #set /boot size
- SWAP_SIZE="4096" #set swap size
- ROOT_SIZE="40960" #set / size , the rest set to /opt
-
-
- #################### FUNCTIONS ####################
-
- #check_mnt_dir use to check if ISO_MNT dir exits
- check_mnt_dir()
- {
- if [ -e ${ISO_MNT} ]
- then
- echo -e "INFO: ${ISO_MNT} dir has ${G_LEFT}exits${G_RIGHT}."
- else
- mkdir -p ${ISO_MNT}
- echo -e "INFO: Create dir ${ISO_MNT} ${G_LEFT}done${G_RIGHT}."
- fi
- }
-
-
-
-
- #################### MAIN ####################
-
- #install EPEL
- if [ ! -e /etc/yum.repos.d/epel.repo ]
- then
- rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm 1>/dev/null
- echo -e "Install EPEL source ${G_LEFT}done${G_RIGHT}."
- fi
-
- #install tftp-server system-config-kickstart dhcp syslinux nginx
- yum -y install tftp-server system-config-kickstart dhcp syslinux nginx 1>/dev/null
- echo -e "INFO: Install RPMS ${G_LEFT}done${G_RIGHT}."
-
- #create mnt dir
- check_mnt_dir
-
- #mount DVD p_w_picpath to ISO_MNT
- mount -t iso9660 /dev/cdrom ${ISO_MNT} 1>/dev/null
- echo -e "INFO: Mount cdrom to ${ISO_MNT} ${G_LEFT}done${G_RIGHT}."
-
- #copy file to html dir
- echo -e "INFO: Start to copy CentOS p_w_picpath, this may take severl minitus ..."
- cp -a ${ISO_MNT}/* ${HTML_DIR} 1>/dev/null
- echo -e "INFO: Copy Centos DVD ${G_LEFT}done${G_RIGHT}."
-
- #config dhcp server
- cat>/etc/dhcp/dhcpd.conf<<EOF
- option domain-name-servers ${NAME_SERVER};
- max-lease-time 7200;
- authoritative;
-
- subnet ${SUBNET} netmask ${NETMASK} {
- range ${RANG_START} ${RANG_END};
- next-server ${NEXT_SERVER};
- filename "pxelinux.0";
- }
- EOF
-
- echo -e "INFO: Config DHCP ${G_LEFT}done${G_RIGHT}."
-
- #start dhcp server
- service dhcpd restart 1>/dev/null
- sleep 2
-
- #check if dhcpd is started
- ps aux|grep dhcpd|grep -v grep 1>/dev/null
- DHCP_STATUS=$?
- if [[ ${DHCP_STATUS} == 1 ]]
- then
- echo -e "ERROR: DHCPD start ${R_LEFT}Failed${R_RIGHT}."
- exit 1
- else
- echo -e "INFO: DHCPD start ${G_LEFT}OK${G_RIGHT}."
- fi
-
- #turn on tftp
- sed -i 's/disable.*$/disable =no/' /etc/xinetd.d/tftp
- echo -e "INFO: TFTP turn on ${G_LEFT}OK${G_RIGHT}."
-
- #restart xinetd service
- service xinetd restart 1>/dev/null
- echo -e "INFO: Xinetd restart ${G_LEFT}OK${G_RIGHT}.."
-
- #create pxelinux.cfg dir
- if [ -e ${PXELINUX_DIR} ]
- then
- echo -e "INFO: ${PXELINUX_DIR} dir has ${G_LEFT}exits${G_RIGHT}."
- else
- mkdir -p ${PXELINUX_DIR}
- echo -e "INFO: Create dir ${PXELINUX_DIR} ${G_LEFT}done${G_RIGHT}."
- fi
-
- #copy initrd.img vmlinuz pxelinux.0
- cp -a ${ISO_MNT}/p_w_picpaths/pxeboot/initrd.img ${TFTPBOOT_DIR}
- echo -e "INFO: Copy initrd.img to ${TFTPBOOT_DIR} ${G_LEFT}done${G_RIGHT}."
-
- cp -a ${ISO_MNT}/p_w_picpaths/pxeboot/vmlinuz ${TFTPBOOT_DIR}
- echo -e "INFO: Copy vmlinuz to ${TFTPBOOT_DIR} ${G_LEFT}done${G_RIGHT}."
-
- cp -a /usr/share/syslinux/pxelinux.0 ${TFTPBOOT_DIR}
- echo -e "INFO: Copy pxelinux.0 to ${TFTPBOOT_DIR} ${G_LEFT}done${G_RIGHT}."
-
-
- #config pxelinux.cfg file default
- cat>${PXELINUX_DIR}/default<<EOF
- default ks
- prompt 1
- timeout 600
- display boot.msg
- F1 boot.msg
- F2 options.msg
- F3 general.msg
- F4 param.msg
- F5 rescue.msg
- label linux
- kernel vmlinuz
- append initrd=initrd.img
- label text
- kernel vmlinuz
- append initrd=initrd.img text
- label ks
- menu default
- kernel vmlinuz
- append initrd=initrd.img ksdevice=eth0 ks=http://${NAME_SERVER}/ks.cfg
- label local
- localboot 1
- label memtest86
- kernel memtest
- append -
- EOF
- echo -e "INFO: pxelinux.cfg/default ${TFTPBOOT_DIR} ${G_LEFT}done${G_RIGHT}."
-
- #config ks.cf file
- cat>${HTML_DIR}/ks.cfg<<EOF
- #platform=x86, AMD64, or Intel EM64T
- #version=DEVEL
- # Firewall configuration
- firewall --enabled --http --ssh
- # Install OS instead of upgrade
- install
- # Use hard drive installation media
- #harddrive --dir=/ --partition=/dev/sdb1
- url --url=http://${NAME_SERVER}/
- # Root password
- rootpw --iscrypted $1$kBe14BGG$GEWFllYBwDpMn055nK7Jk0
- # System authorization information
- auth --useshadow --passalgo=sha512
- # Use text mode install
- text
- # System keyboard
- keyboard us
- # System language
- lang en_US
- # SELinux configuration
- selinux --disabled
- # Do not configure the X Window System
- skipx
- # Installation logging level
- logging --level=info
- # Reboot after installation
- reboot
- # System timezone
- timezone Asia/Shanghai
- # Network information
- network --bootproto=dhcp --device=eth0 --onboot=on
- # System bootloader configuration
- bootloader --location=mbr
- # Partition clearing information
- clearpart --all
- # Disk partitioning information
- part /boot --asprimary --fstype="ext3" --size=${BOOT_SIZE}
- part swap --fstype="swap" --size=${SWAP_SIZE}
- part / --fstype="ext3" --size=${ROOT_SIZE}
- part /opt --fstype="ext3" --grow --size=1
-
- %packages
- @base
- @core
- imake
- keyutils
- trousers
- fipscheck
- device-mapper-multipath
- @development-libs
- @admin-tools
- @system-tools
- @chinese-support
- @text-internet
- EOF
- echo -e "INFO: ks.cfg config ${TFTPBOOT_DIR} ${G_LEFT}done${G_RIGHT}."
-
- #restart nginx
- service nginx restart 2>&1 >/dev/null
- sleep 2
-
- ps aux|grep nginx|grep -v grep 1>/dev/null
- NGINX_STATUS=$?
- if [[ ${NGINX_STATUS} == 1 ]]
- then
- echo -e "ERROR: nginx start ${R_LEFT}Failed${R_RIGHT}."
- exit 1
- else
- echo -e "INFO: nginx start ${G_LEFT}OK${G_RIGHT}."
- fi
-
- #pxe_kickstart_install done
- echo -e "INFO: PXE+TFTP+NGINX+Kickstart has been installed ${G_LEFT}SUCCESS${G_RIGHT}."
Kickstart创建LVM命令
- # Disk partitioning information
-
- part /boot --fstype="ext3" --size=100
-
- part pv.01 --size=1 --grow
-
- volgroup vg_root pv.01
-
- logvol / --vgname=vg_root --size=30720 --name=lv_root
-
- logvol swap --vgname=vg_root --size=32768 --name=lv_swap
-
- logvol /opt --vgname=vg_root --size=1 --grow --name=lv_opt
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search