Ubuntu桌面版搭建单机版CloudFoundry

一、简介

想来想去还是写个简介吧…

1.1 CloudFoundry

Cloud Foundry是VMware公司推出的一个开源PaaS云平台,似乎号称业界第一个。它支持多种框架、语言、运行时环境、云平台及应用服务,可以用于应用程序的部署和扩展。

它本身是基于Ruby on Rails编写的,有多个相对独立的子系统。系统之间通过消息机制(nats)通信,使平台在各层级都可水平扩展,既能在大型数据中心里运行,也能运行在一台桌面电脑中,二者使用相同的代码库。

1.2 PaaS

PaaS是Platform-as-a-Service的缩写,意思是平台即服务。区别语于传统IT架构和IaaS。盗一张图来区别他们,应该很好理解他们的区别了:

二、安装

说起来,其实安装很简单,只需要执行一条命令就可以:


bash < <(curl -s -k -B https://raw.githubusercontent.com/yudai/cf_nise_installer/${INSTALLER_BRANCH:-master}/scripts/bootstrap.sh)

但是别高兴的太早,这只是你苦逼路程的开始。好了,咱们从头说。

2.1 系统

我们使用的cf_nise_installer脚本进行安装,该脚本只支持Ubuntu10.04 and 12.04 64bit server。综合大部分资料,目前推荐的系统是Ubuntu 10.04 Server,但是我用的Ubuntu12.04桌面版也安装成功了,并可以正常运行,所有系统方面大家随意。

本文默认使用系统:Ubuntu12.04桌面版

2.2 cf_nise_installer

本文的安装使用的是cf_nise_installer的脚本进行安装,正常情况下,该脚本是全自动与运行的。CloudFoundry所安装过程中涉及的所有安装及环境需要的包他都会下载安装并配置好。

参考:https://github.com/yudai/cf_nise_installer

一定要科学上网,一定要科学上网,一定要科学上网,重要的事情要说三遍,然而并没有卵用......

整个过程中只需要执行两句命令:

sudo apt-get install curl
bash <<(curl -s -k -B https://raw.githubusercontent.com/yudai/cf_nise_installer/${INSTALLER_BRANCH:-master}/scripts/bootstrap.sh)

过程中会各种断,尤其是下载buildpack包的时候,每个包都好几百兆,断了只能从头下载,尤其是buildpack_ruby接近1G的大小,下载过程中自求多福吧,个中辛苦谁下谁知道。

既然说到了cf_nise_installer,就简单分析一下他的脚本,跟句命令来看,我们执行的是工程下scripts文件夹下的bootstrap.sh脚本,其中的内容是:


#!/bin/bash -ex

if [ ! -f /etc/lsb-release ] || \

[ `uname -m` != "x86_64" ]; then

echo "This installer supports only Ubuntu 10.04 and 12.04 64bit server"

exit 1;

fi

# Git bootstrap

if ! (which git); then

sudo apt-get update

sudo apt-get install -y git-core

fi

INSTALLER_URL=${INSTALLER_URL:-https://github.com/yudai/cf_nise_installer.git}

INSTALLER_BRANCH=${INSTALLER_BRANCH:-master}

if [ ! -d cf_nise_installer ]; then

git clone ${INSTALLER_URL} cf_nise_installer

fi

(

cd cf_nise_installer

git checkout ${INSTALLER_BRANCH}

./scripts/install.sh

)

脚本中可以看出,cf_nise_installer只支持Ubuntu10.04 and 12.04 64bit server,所以使用过程中请注意。接下来下载了cf_nise_installer工程之后调用了install.sh脚本,继续查看install.sh脚本:


#!/bin/bash -ex

# Detect RVM

if (rvm >/dev/null 2>&1); then

echo "Found RVM is installed! RVM is not supported by this installer. Remove it and rerun this script."

exit 1

fi

sudo apt-get update

./scripts/install_ruby.sh

source ~/.profile

./scripts/clone_nise_bosh.sh

./scripts/clone_cf_release.sh

./scripts/install_environemnt.sh

./scripts/install_cf_release.sh

set +x

echo "Done!"

echo "You can launch Cloud Foundry with ‘./scripts/start.sh‘"

echo "Restart your server before starting processes if you are using Ubuntu 10.04"

看到这脚本估计你会很高兴,因为主要你看到了一下几行字就代表你安装完成了:


set +x

echo "Done!"

echo "You can launch Cloud Foundry with ‘./scripts/start.sh‘"

echo "Restart your server before starting processes if you are using Ubuntu 10.04"

然而别高兴的太早,你的安装过程一定对的起苦逼二字的。

言归正传,继续看脚本,脚本先对RVM进行了判断,cf_nise_installer使用的是rbenv这个ruby安装工具,没有选择使用rvm。这个脚本照样没做啥正事,判断了一下rvm,然后又是调用了一堆脚本:


./scripts/install_ruby.sh

source ~/.profile

./scripts/clone_nise_bosh.sh

./scripts/clone_cf_release.sh

./scripts/install_environemnt.sh

./scripts/install_cf_release.sh

别着急,一个一个的看,./scripts/install_ruby.sh:


#!/bin/bash -ex

if [ ! -d ~/.rbenv ]; then

sudo apt-get -y install build-essential libreadline-dev libssl-dev zlib1g-dev git-core

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

echo ‘export PATH="$HOME/.rbenv/bin:$PATH"‘ >> ~/.profile

echo ‘eval "$(rbenv init -)"‘ >> ~/.profile

fi

source ~/.profile

if ! (rbenv versions | grep -q 1.9.3-p484); then

rbenv install 1.9.3-p484

fi

rbenv local 1.9.3-p484

gem install bundler --no-rdoc --no-ri

rbenv rehash

很简单,这个脚本就是在装ruby及相关的包,继续看clone_nise_bosh.sh


#!/bin/bash -ex

if [ ! "$(ls -A nise_bosh)" ]; then

git submodule update --init --recursive nise_bosh

(

cd nise_bosh

if [ "" != "$NISE_BOSH_REV" ]; then

git checkout $NISE_BOSH_REV

fi

echo "Using Nise BOSH revision: `git rev-list --max-count=1 HEAD`"

)

else

echo "‘nise_bosh‘ directory is not empty. Skipping cloning..."

fi

就像名字所说,下载nise_bosh项目。其实cf_nise_installer本来就是基于nise_bosh的一个脚本,真正执行安装的就是nise_bosh这个项目。nise_bosh本身是一个基于bosh的项目,把bosh关于IaaS层的内容去除,保留了虚拟机上组建安装的内容。所以使用nisebosh无需IaaS层的API支持,只需要虚拟机即可安装。继续看下边的脚本,clone_cf_release.sh:


#!/bin/bash -ex

CF_RELEASE_USE_HEAD=${CF_RELEASE_USE_HEAD:-no}

ruby_version=`rbenv version | cut -f1 -d" "` # to overwrite .ruby-version

if [ ! "$(ls -A cf-release)" ]; then

if [ -z "${CF_RELEASE_URL}" ]; then

git submodule update --init cf-release

else

rmdir cf-release

git clone ${CF_RELEASE_URL} cf-release

fi

(

cd cf-release

if [ -n "${CF_RELEASE_BRANCH}" ]; then

git checkout -f ${CF_RELEASE_BRANCH}

fi

if [ $CF_RELEASE_USE_HEAD != "no" ]; then

# required to compile a gem native extension of CCNG

sudo apt-get -y install git-core libmysqlclient-dev libpq-dev libsqlite3-dev libxml2-dev libxslt-dev

gem install rake -v 0.9.2.2 --no-rdoc --no-ri # hack for collector

git submodule update --init --recursive

RBENV_VERSION=$ruby_version bundle install

RBENV_VERSION=$ruby_version bundle exec bosh -n create release --force

fi

)

else

echo "‘cf-release‘ directory is not empty. Skipping cloning..."

fi

下载cf_release,如果存在则升级。cf_release是cf源码经过编译后的内容。源码下载下来之后,执行git submodule update --init --recursive把子模块submodule下载下来,再执行boshcreate release命令,就可以得到一个完整的cf_release。。在内网可以下载肉备好了,下边就开始调作料了,install_environemnt.sh:


#!/bin/bash -ex

(

cd nise_bosh

sudo ./bin/init

sudo apt-get install -y libmysqlclient-dev libpq-dev

)

这个脚本里又调用了一个新的脚本,nise_bosh/bin里的init脚本:


#!/bin/bash -ex

bosh_app_dir=/var/vcap

bosh_dir=${bosh_app_dir}/bosh

apt-get update

# emulating stemcell_builder/stages/image_install_grub/apply.sh

if [ `lsb_release -cs` ==  "trusty" ]; then

if (sed -i -e ‘s/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"/‘ /etc/default/grub); then

update-grub

else

echo Your /etc/default/grub is modified from the default

exit 1

fi

fi

# stemcell_builder/stages/base_apt/apply.sh

DEBIAN_FRONTEND=noninteractive apt-get install -o Dpkg::Options::="--force-confnew" -f -y \

--force-yes --no-install-recommends \

build-essential libssl-dev lsof \

strace bind9-host dnsutils tcpdump iputils-arping \

curl wget libcurl3 libcurl3-dev bison libreadline6-dev \

libxml2 libxml2-dev libxslt1.1 libxslt1-dev zip unzip \

nfs-common flex psmisc apparmor-utils iptables sysstat \

rsync openssh-server traceroute libncurses5-dev quota \

libaio1 gdb tripwire libcap2-bin libyaml-dev

# stemcell_builder/stages/bosh_monit/apply.sh

DEBIAN_FRONTEND=noninteractive apt-get install -o Dpkg::Options::="--force-confnew" -f -y \

--force-yes --no-install-recommends runit

# installed somewhere else

DEBIAN_FRONTEND=noninteractive apt-get install -o Dpkg::Options::="--force-confnew" -f -y \

--force-yes --no-install-recommends gettext

# bosh_agent/lib/bosh_agent/platform/ubuntu/templates/logrotate.erb

cat <<EOF > /etc/logrotate.d/nise_bosh

/var/vcap/sys/log/*.log /var/vcap/sys/log/*/*.log /var/vcap/sys/log/*/*/*.log {

missingok

rotate 7

compress

delaycompress

copytruncate

size=100M

}

EOF

# stemcell_builder/stages/bosh_users/apply.sh

if [ `cat /etc/passwd | cut -f1 -d ":" | grep "^vcap$" -c` -eq 0 ]; then

addgroup --system admin

adduser --disabled-password --gecos Ubuntu vcap

for grp in admin adm audio cdrom dialout floppy video plugdev dip

do

adduser vcap $grp

done

else

echo "User vcap exists already, skippking adduser..."

fi

# stemcell_builder/stages/system_kernel/apply.sh

if [ -d /boot/grub ]; then

if [ `lsb_release -cs` ==  "lucid" ]; then

variant="lts-backport-oneiric"

# Headers are needed for open-vm-tools

DEBIAN_FRONTEND=noninteractive apt-get install -o Dpkg::Options::="--force-confnew" -y -f \

linux-image-virtual-${variant} linux-headers-virtual-${variant}

else

DEBIAN_FRONTEND=noninteractive apt-get install -o Dpkg::Options::="--force-confnew" -y -f \

linux-image-virtual linux-image-extra-virtual

fi

fi

# stemcell_builder/stages/bosh_monit/apply.sh

monit_basename=monit-5.2.4

(

cd /tmp

wget "http://mmonit.com/monit/dist/${monit_basename}.tar.gz" -O ${monit_basename}.tar.gz

tar xvzf ${monit_basename}.tar.gz

cd ${monit_basename}

./configure --prefix=$bosh_dir --without-ssl

make -j4 && make install

)

mkdir -p $bosh_dir/etc

cat <<EOF > /$bosh_dir/etc/monitrc

set daemon 10

set logfile /var/vcap/monit/monit.log

set httpd port 2822 and use address 127.0.0.1

allow cleartext /var/vcap/monit/monit.user

include /var/vcap/monit/*.monitrc

include /var/vcap/monit/job/*.monitrc

EOF

chmod 0700 $bosh_dir/etc/monitrc

mkdir -p $bosh_app_dir/monit

touch $bosh_app_dir/monit/empty.monitrc

echo Done.

if [ ! -d /sys/fs/cgroup ]; then

echo "Restart may be required"

fi

下载了茫茫多的东西…作料撒上了,接着开始炖了install_cf_release.sh:


#!/bin/bash -ex

NISE_IP_ADDRESS=${NISE_IP_ADDRESS:-`ip addr | grep ‘inet .*global‘ | cut -f 6 -d ‘ ‘ | cut -f1 -d ‘/‘ | head -n 1`}

./scripts/generate_deploy_manifest.sh

(

cd nise_bosh

bundle install

# Old spec format

sudo env PATH=$PATH bundle exec ./bin/nise-bosh -y ../cf-release ../manifests/deploy.yml micro -n ${NISE_IP_ADDRESS}

# New spec format, keeping the  monit files installed in the previous run

sudo env PATH=$PATH bundle exec ./bin/nise-bosh --keep-monit-files -y ../cf-release ../manifests/deploy.yml micro_ng -n ${NISE_IP_ADDRESS}

)

这里边又出现了一个脚本generate_deploy_manifest.sh:


#!/bin/bash -ex

NISE_IP_ADDRESS=${NISE_IP_ADDRESS:-`ip addr | grep ‘inet .*global‘ | cut -f 6 -d ‘ ‘ | cut -f1 -d ‘/‘ | head -n 1`}

sed "s/192.168.10.10/${NISE_IP_ADDRESS}/g" manifests/template.yml > manifests/deploy.yml

if [ "${NISE_DOMAIN}" != "" ]; then

if (! sed --version 1>/dev/null 2>&1); then

# not a GNU sed

sed -i ‘‘ "s/${NISE_IP_ADDRESS}.xip.io/${NISE_DOMAIN}/g" manifests/deploy.yml

else

sed -i "s/${NISE_IP_ADDRESS}.xip.io/${NISE_DOMAIN}/g" manifests/deploy.yml

fi

fi

if [ "${NISE_PASSWORD}" != "" ]; then

if (! sed --version 1>/dev/null 2>&1); then

# not a GNU sed

sed -i ‘‘ "s/c1oudc0w/${NISE_PASSWORD}/g" manifests/deploy.yml

else

sed -i "s/c1oudc0w/${NISE_PASSWORD}/g" manifests/deploy.yml

fi

fi

这个脚本的主要作用就是新建一个deploy.yml并修改ip等一些东西。

所有脚本执行完毕,安装也完毕了,重启机器。后,执行~/cf_nise_installer/script/start即可启动服务。

2.3启动

重启后,在~/cf_nise_installer/script下执行./start.sh,程序会自动启动。


#!/bin/bash -ex

path=`dirname $0`

cd "$path"/../

sudo /var/vcap/bosh/bin/monit

sleep 5

for process in \

postgres \

nats

do

sudo /var/vcap/bosh/bin/monit start $process

sleep 30

done;

sudo /var/vcap/bosh/bin/monit start all

echo "Waiting for all processes to start"

for ((i=0; i < 120; i++)); do

if ! (sudo /var/vcap/bosh/bin/monit summary | tail -n +3 | grep -v -E "running$"); then

break

fi

sleep 10

done

if (sudo /var/vcap/bosh/bin/monit summary | tail -n +3 | grep -v -E "running$"); then

echo "Found process failed to start"

exit 1

fi

set +x

echo "All processes have been started!"

api_url=`grep srv_api_uri: ./manifests/deploy.yml | awk ‘{ print $2 }‘`

password=`grep ‘ - admin‘ ./manifests/deploy.yml | cut -f 2 -d ‘|‘  `

echo "Login : ‘cf login -a ${api_url} -u admin -p ${password} --skip-ssl-validation‘"

echo "Download CF CLI from https://github.com/cloudfoundry/cli"

其实就是使用/var/vcap/bosh/bin/monit进行启动,手动执行效果也是一样的。

可能会出现warden无法启动的情况,如果无法启动,执行下边三天命令:


$umount /home/yourname/.gvfs

$find . -inum 554009 -exec rm{} \;

$rm -rf .gvfs

删除后执行sudo /var/vcap/bosh/bin/monitrestart warden 重启warden服务。同时也可以使用sudo /var/vcap/bosh/bin/monit summary来监控服务状态。全部启动如下图:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 04:37:19

Ubuntu桌面版搭建单机版CloudFoundry的相关文章

ubuntu桌面版系统安装后切换到root用户并且设置root密码

方案一. ubuntu桌面版系统安装后切换到root用户方法: :~$ sudo -s -H 使用上述命令切换到root用户 在root用户下使用如下命令: :/# passwd 设置root用户的密码 通过上述方法修改ubuntu系统的root密码修改后可以通过如下命令: :~$ su root 接着输入root的密码切换用户到root用户 方案二. 此方法在网上很多网友都是用的这种方法比较简单 在安装完ubuntu系统以后进入安装时建立的用户使用如下命令: :~$ sudo passwd r

Ubuntu桌面版与服务器版有什么不同?

提到安装Linux,Ubuntu可谓是最受欢迎的.为了满足每个人的需求,出现了不少版本或风格的Ubuntu;其中两项便是桌面版与服务器版.只要发布版本号一致,这两者从核心来说也就是相同的,唯一的差别在于它们的预期用途.桌面版面向个人电脑使用者,可以进行文字处理.网页浏览.多媒体播放和玩游戏.本质上说,这是一个为普通用户所定制的多用途操作系统.另一方面,服务器版旨在充当web服务器,可用来托管文件.网页及相似内容. 个人电脑上必备的组成部分是GUI(图形用户界面).Ubuntu的桌面版默认带有Gn

Ubuntu桌面版安装小记

之前一直是用Ubuntu的桌面版装docker,桌面版本身用起来比较方便,但开销较大,如果建立多个虚拟机就比较费劲了.今天试了一下server版的Ubuntu,发现还是比较方便的,相比桌面版,有如下好处: 占用空间小,只占用3G左右 占用内存小,甚至512MB内存也能较好的启动 这里记录下安装过程: 1. 下载 目前Ubuntu最小的版本是19.1,server版的下载地址是:点击下载.安装包非常小,只有800m,直接用迅雷下载也就一两分钟的事情 2. 安装 安装的时候一个需要注意的地方是,Ub

安装ubuntu桌面版小记

ubuntu设置IP,DNS sudo vi /etc/network/interfaces auto eth0 iface eth0 inet static address netmask gateway :wq! sudo vi /etc/resolvconf/resolv.conf.d/base nameserver nameserver :wq! sudo resolvconf -u 解决Ubuntu下DNS重启后需重设的问题 参考:http://yubosun.akhtm.com/te

Ubuntu桌面版安装非snap商店的软件添加快捷方式及添加到收藏夹

近日,已完全从Windows移植到Linux(Ubuntu).然而仍然有许多Windows的软件无法用其他软件代替,如QQ,WeChat,sinpaste等,尽管4月9号腾讯推出了Linux版的qq,但功能和界面可以称得上是老古董了.当然这些并非本文的重点,重点是在Ubuntu软件商店(snap)仍有许多Application没有收录,或者本身是有的只是因为更换了源等其他Options导致无法搜索到,而不得不从官网下载Packages.但仍有些问题,解压后需要Application的完整路径,以

ubuntu桌面版打开终端Terminal的几种方法

1. Ctrl + Alt + T 快捷键直接打开2. 在Ubuntu左上角选择File/Open in Terminal 3. 快捷键alt+F2调出Run a Command,输入gnome-terminal 4. 添加右键支持 ==>在终端,输入install nautilus-open-terminal,安装右键支持,这样在桌面或文件夹中空白处点击鼠标右键则出来进入终端的快捷方式 5. 通过dash home这个按钮,输入te,就可以看到Terminal终端的选项了,如下图: http:

linux -- ubuntu桌面版安装xampp

首先,请从www.xampp.org下载最新版XAMPP. 安装 如果是xampp压缩文件 将xampp压缩文件复制到/opt下并解压.如果你计算机没有/opt目录,用 “sudo mkdir/opt” 命令来创建目录. 如果计算机没有sudo命令请用su命令并输入超级用户密码来切换到超级用户. 使用以下命令将文件复制到/opt:$sudo cp /doc/xampp-linux-x.x.tar.gz /opt    // “/doc/” 表示当前xampp文件的路径 使用以下命令进入opt/目

ubuntu桌面版最新版本安装

Ubuntu 桌面设置之网络环境的设置2

Ubuntu桌面版网络设置 分类: Linux2014-09-01 22:52 1112人阅读 评论(0) 收藏 举报 先来说下我的经验吧,我觉得Ubuntu桌面版中网络配置最好的方法是用Network-Manager这个带界面的软件,因为桌面版中这个软件是自动启动的.理由如下: 1. 如果要把这个软件设置为开机时不启动,得执行:chkconfig network-manager off这个命令,但是默认情况下chkconfig这个命令是未安装的,而且用apt-get来安装的前提是你能上外网,且