Day 26 Vagrant 构建及配置虚拟环境

Vagrant

Vagrant是一款用于构建及配置虚拟开发环境的软体,基于Ruby,主要以命令行的方式运行。
主要使用Oracle的开源VirtualBox虚拟化系统,与Chef,Salt,Puppet等环境配置管理软体搭配使用, 可以实行快速虚拟开发环境的构建。

  • 用于构建及配置虚拟开发环境
  • 配置文件 Vagrant File
  • Boxs 库
  • 执行在Virtualbox

Mac 安装

# 安装 virtualbox
brew cask install virtualbox
# 安装 vagrant
brew cask install vagrant
# 安装 vagrant-manager
brew cask install vagrant-manager

Windows 安装

[32-bit][64-bit]
VirtualBox Extension Park

Box name

萤幕快照 2018-10-27 下午10.19.44.png

启动 Centos 7

# 创建资料夹
mkdir vagrant_centos_7
# 切换目录
cd vagrant_centos_7
# 初始化 Vargant 并指定作业系统为 centos7,会建立一个 Vagrantfile 
vagrant init centos/7

萤幕快照 2018-10-27 下午10.12.49.png

启动 vagrant

vagrant up

萤幕快照 2018-10-27 下午10.16.22.png

萤幕快照 2018-10-27 下午10.20.56.png

萤幕快照 2018-10-27 下午10.36.47.png

登入到虚拟机

vagrant ssh

萤幕快照 2018-10-27 下午10.22.29.png

Vagrant 指令说明

# 创建vagrant file
vagrant init 
# 启动虚拟机
vagrant up
# 登入虚拟机
vagrant ssh
# 关闭虚拟机
vagrant  halt
# 删除虚拟机
vagrant destroy
# 查看虚拟机状态
vagrant status

369921D2-0D6F-438A-AE7B-25E24C24AB36.png

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-7.1"
end

设定网路使用bridge

config.vm.network “public_network”

Vagrant SSH 功能

  1. 正统登入法:用 vagrant 帐号 + vagrant 密码来登入,并关闭 host key checking。
  2. 正统登入法:用 vagrant 帐号 + private key 来登入,并关闭 host key checking。
  3. 简便登入法:用 vagrant ssh 指令登入。
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null vagrant@127.0.0.1 -p 2222
    password:vagrant

Vagrant 初使化 Provision 安装 nginx and postgresql 9.4

Provision 时机:

  • 第一次 vagrant up
  • 执行 vagrant provision
  • 执行 vagrant reload –provision
config.vm.provision "shell", inline: <<-SHELL
     sudo yum update
     sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
     sudo yum -y install nginx18
     sudo yum -y install http://yum.postgresql.org/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-2.noarch.rpm
     sudo yum -y install postgresql95-server postgresql95-contrib postgresql95-devel
     sudo service postgresql-9.5 initdb
  SHELL
SCRIPTS = ["install-base.sh","project.sh"]
for scripts in SCRIPTS
  config.vm.provision "shell", path: scripts
end

Networking 网路

透过 port mapping/forwarding 机制

config.vm.network "forwarded_port", guest: 80, host: 8080

透过 private network 机制

config.vm.network "private_network", ip: “192.168.33.10"

文件系统:搞定存取权限

复制文件

config.vm.provision "file", source: "project.sh", destination: "/home/project/"

同步资料夹

config.vm.synced_folder "./app", "/var/www/html/app"

同步资料夹,并设定拥有者权限

config.vm.synced_folder "./app", "/var/www/html/app",
      owner: "www-data"

GUI 视窗系统

boxcutter/ubuntu1404-desktop

管理Virtualbox

VBoxManage list vms
VBoxManage unregister xxxx --delete

###实作

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  # 指定系统OS
  config.vm.box = "centos/7"
  # 设定快取yum
  config.cache.enable :yum
  # 设定VirtualBox网路,使用Bridge桥接网路
  config.vm.network "public_network"
  # 使用系统权限执行下面指令
  config.vm.provision "shell", inline: <<-SHELL
    # 安装必要Library和软体
    yum -y update
    yum -y install epel-release htop vim iptraf-ng.x86_64 net-tools gcc gcc-c++ make git patch openssl-devel zlib-devel readline-devel sqlite-devel bzip2-devel zip unzip
    yum -y install libjpeg zlib libtiff libfreetype littlecms libwebp tcl tk openjpeg libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel python-devel
    yum -y install curl-devel expat-devel gettext-devel perl-ExtUtils-MakeMaker wget postgresql-libs postgresql-devel libffi-devel open-vm-tools
    
    # 设定时区服务ntp
    yum -y install ntp
    timedatectl set-timezone Asia/Taipei
    rm /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime
    systemctl enable ntpd
    systemctl start ntpd

  SHELL

  # 系统基本配置
  SCRIPTS = ["base.sh"]
  for scripts in SCRIPTS
    config.vm.provision "shell", path: scripts
  end

  # 复制文件到VM内部,、Source Code、Project设定档
  config.vm.provision "file", source: "./", destination: "~/"

  # 复制过去后的处理过程
  config.vm.provision "shell", inline: <<-SHELL
    mkdir /home/project/.ssh
    cp /home/vagrant/id_rsa /home/project/.ssh/id_rsa
    ssh-keyscan -T 60 bitbucket.org > /home/project/.ssh/known_hosts
    chmod 600 /home/project/.ssh/id_rsa
    chmod 700 /home/project/.ssh
    chown -R project.project /home/project/.ssh
    chown -R project.project /home/project/.ssh/*

    # nginx
    cp /home/vagrant/nginx/nginx.conf /etc/nginx/nginx.conf
    cp -r /home/vagrant/nginx/conf.d/* /etc/nginx/conf.d/
    cp -r /home/vagrant/nginx/ssl /etc/nginx/ssl

    # systemd
    cp -r /home/vagrant/systemd/* /etc/systemd/system/

    # 使用者
    cp /home/vagrant/project.sh /home/project/project.sh
    
    # 复制 token 项目
    unzip /home/vagrant/source_code/ithome_pellok_2018.zip -d /home/project/
    mv /home/project/ithome_pellok_2018 /home/project/ithome_pellok_2018

    chown -R project.project /home/project/
    su - project -c "sh project.sh"
    chmod +x /home/project

    # 重新载入systemctl 设定档
    systemctl daemon-reload

    # 依顺序来启动服务
    systemctl start ithome_pellok_2018;sleep 5s
    
    # 设定开机自动启动服务
    systemctl enable ithome_pellok_2018

    # 开机后自动重新启动服务,依据服务顺序
    echo "systemctl restart ithome_pellok_2018;sleep 5s" >> /etc/rc.d/rc.local

  SHELL

end

结论

使用 Vagrant File 可以让系统环境转换成代码,并且加入版控,达到 Service As Code 的概念,有时候因应项目需求,需要把我们的软体部署在 VMware 上面的时候,会使用 Vagrant File 把项目搭包成 OVA 文件,客户只要在 VMware 上面汇入 OVA 在设定一下网路就可以直些使用,还蛮方便的.

参考

Vagrant

IT|软体|VirtualBox 虚拟空间动态调整与 Port Forwarding

介绍


VirtualBox 是免费好用的虚拟机器,不过偶而会遇到一种情况:刚开始装设的虚拟机器只是用来测试,所以一开始没有配给很大的虚拟硬碟,不过后来测试的东西越来越多导致原有硬碟容量不足,在以前的 VirtualBox 版本中虚拟硬碟 (VDI,Virtualbox Disk Image) 一旦决定了最大值是无法事后扩增的,因此只能建立一个新的。在 VirtualBox 4.x 以后的版本已经支援 VDI 容量扩增与压缩,不过官方并不建议这样做,故没有制作 GUI 的调整方式,仅提供指令来 扩充/压缩 硬碟映像档。

[动态空间调整]

放大硬碟空间(限定使用 vdi 格式)


https://ithelp.ithome.com.tw/upload/images/20171223/201076210IwdQorvKP.png

放大硬碟空间
VBoxManage modifyhdWin7-旗舰版.vdi --resize 512000

压缩虚胖的硬碟空间


VirtualBox同时支援自己的虚拟硬碟格式VDI和Vmware的VMDK格式,两种格式的压缩略有不同。

[磁碟重组]:第一步要做的是磁碟重组,打开虚拟机器,执行下面的命令:

Linux下

sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY

Windows下

Windows系统需要下载 Sysinternals Suite 解压缩后路径请放在:
C:\SysinternalsSuite

执行以下指令
sdelete –z

[压缩资料]

关闭虚拟机器,现在可以开始压缩虚拟硬碟了如果你的虚拟硬碟是 VirtualBox 自己的VDI格式,找到你的虚拟硬碟档,执行命令:MAC VirtualBox 应用程序安装路径:/Applications/VirtualBox.app/Contents
VBoxManage.exe modifyhd mydisk.vdi --compact

如果你的虚拟硬碟是Vmware的VMDK格式,那就要麻烦点,因为VirtualBox不支援直接压缩VMDK格式,但是可以变通下:先转换成VDI并压缩,再转回VMDK。执行命令:

VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifyhd cloned.vdi --compact
VBoxManage clonehd "cloned.vdi" "compressed.vmdk" --format vmdk

事实上,执行命令的过程中可以发现:在从 VMDK 转换到 VDI 的过程中似乎已经做了压缩,档大小已经减少了很多,第二条命令反而没见到档大小有什么变化,所以这里第二条命令应该可以省略了。

Port Forwarding


简单的 VirtualBox 内建功能 「Port Forwarding 」
https://ithelp.ithome.com.tw/upload/images/20171223/20107621YnupmGMRPk.png

新增加一个规则,Host Port 设成 6082,Guest Port 是 22,这样只要连本机的 6082 port,就会自动转向到 VM 的 22 port (SSH)
https://ithelp.ithome.com.tw/upload/images/20171223/20107621dZjh4kkRtb.png

使用下面 SSH 指令连线至 VM
ssh -p 6082 root@localhost

IT|作业系统|Linux|CentOS|CentOS 7 安装于 VirtualBox

安装 CentOS


首先需要下载 CentOS,请按以下连结下载即可。若有 Docker 安装需求,由于只支援 CentOS 6.5 或以上,最后安装 CentOS 7.x 以上的版本。

CentOS 下载:https://www.centos.org/download/
VirtualBox 虚拟化软体下载:https://www.virtualbox.org/wiki/Downloads

安装好 VirtualBox 后,执行左上方「[新增」选单
https://ithelp.ithome.com.tw/upload/images/20171218/20107621hCMD8eR0iN.png

配置 Guest OS 内存,建议配置不要少于 3GB,惟须考量 Host OS 实体内存大小。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621Z7pVffYVi7.png

按下「继续」,这步是要求大家设定虚拟硬碟的类型。为节省空间选择「立即建立虚拟硬碟」,再按「建立」。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621STzx5oEZBk.png

选择虚拟影像档格式,建议采用 VirtualBox 专属文件类型 VDI,便于日后空间不足时可动态扩充。
https://ithelp.ithome.com.tw/upload/images/20171218/201076215rAvL9dmO1.png

接着选「动态配置」便可。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621DO4ehZWJRo.png

然后是分派 Size,按自己实际需要进行设定即可,然后再按下「建立」便完成 VirtualBox Guest OS 的设定了。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621iTJCTBjcEE.png

此时会见到这画面。在这里请于左方刚建立的名称按下滑鼠右键,然后选「设定值」即可。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621kb2UOGKx42.png

请选上方的「存放装置」选单,然后选「空」再于右方的光碟图示按一下,并再选择「选择虚拟光碟文件」,然后选取刚下载回来的 CentOS ISO 文件后再按下方「完成」即可。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621jTPXcgw9gh.png

[进入 CentOS 安装]

然后请按上方的 「启动」按键,接着会弹出一个黑色画面,此时代表终于开始安装 Linux 了。
第一个画面请选「Test this media & Install CentOS 7」。以预设的安装设定完成安装,假如大家对 Linux 熟悉话,请自行以常用方法解决 Linux 安装部份。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621oODEmvAq0T.jpg

请等一会,此时会出现这画面,这里就是开始安装 CentOS 的画面,请先选择安装过程采用的语言后再按「Continue」。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621BESPjv3XFM.jpg

接着按「Installation Destination」,进行初步设定后按下「Begin Installation」。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621Z6w6WbLMDS.jpg

进入安装过程。此时大家应会见到类似画面,请按上方并设定好帐户以及密码。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621t52Gui98nZ.jpg

完成安装后,请按右下方的「Reboot」即可。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621chWoAHNOCx.jpg

一切顺利的话,大家便会来到 Linux 的登入画面,在这里输入刚刚所建立的帐户及密码。
https://ithelp.ithome.com.tw/upload/images/20171218/20107621YMfkUEIJKm.jpg

大功告成!

打造高效的工作环境(番外篇1): windows/linux钗黛双收

前两篇文章基本上都在对Windows进行各种吐槽,最近Win8消费者预览版的出现更是让我对我的吐槽充满了信心——微软已经堕落到需要靠五颜六色的砖块来吸引眼球的地步了。我虽然没有亲身体验过Metro UI,但是我依然坚持,Metro UI是个无比糟糕的设计,一个彻头彻尾的倒退。颠覆传统、回归本原?是回归到Windows 3.x时代吗?一眼望去,Metro UI似乎很绚烂,像焰火漫天的夜空,但是稍不留意,作为使用者的我们就很容易迷失在图标的海洋里面。在我的印象中,直角化的图案一直是设计里的禁忌之一,而为了弥补这个缺憾(或者说是对传统的颠覆),Metro采用了大量的颜色来填充一个又一个的砖块,使得这些砖块能够不至于“迷失自我”。

我认为一个良好的使用界面应该要有统一的风格,至少不能有太多的颜色,而不是像一个调色版一样令人眼花缭乱;圆角在舒适的用户体验中是不可缺少的,可惜苹果在前,*nix在后,微软在UI设计方面的创新已经没有太多可选的余地,只能走一个极端来玩一场赌博;前两年的Ribbon界面应该是Metro设计的一个铺垫,我认为Ribbon确实是个不错的创新,能够将大量的MS Office小白用户从繁杂的菜单中解放出来,但是Metro实在太过了;最苦的应该是Windows开发者,唉,三年一小改、五年一大改是微软的一贯风格。

不过这些对我都不重要,重要的是我相信,即便我对Windows吐槽了这么多,许多朋友还是小心翼翼,不敢投入Linux的怀抱。正常,因为Linux的门槛确实不低,加上一大堆的概念和思维的转变,再补上如百花从般绚烂多彩的发行版和如满天繁星般闪亮的各种大小bug瑕疵,足以令80%的初学者望而却步。而我又不想让我的文章太过小众(我在开篇中说过,这一系列的文章主要面对以Linux系统为工作环境的初级Coder,兼带高级电脑使用者)。因此,我总结了一些变通的方法,让你可以在你的Windows系统上无痛地尝尝Linux的鲜。

本文主要针对那些想要尝试下Linux但又怕损坏自己Windows的工作平台的同志。当然,本文的重点还是命令行环境的建立,因为熟练掌握命令行是高效使用Linux的必由之路。而至于图形界面,由于Windows Explorer的顽固存在,Windows下的GUI没什么可折腾的。除了虚拟机,似乎没有什么特别完美的办法能够在不切换系统的情况下体验Linux的图形界面。

本文主要介绍一些简单易行的方法手段,能够在Windows下建立一套相对完整的Linux命令行实验环境,为后面系列的文章奠定一个基础,并借此扩大下本系列文章的“打击面”。

1 Cygwin

  • What:通俗的讲,Cygwin是Windows上的一个模拟软件,最初是由Cygnus Solutions公司开发的。

    • Cygwin通过对Windows API的整合封装模拟出一套POSIX API。有了这套基础性的POSIX API(就是Linux C编程的什么fork/wait啊、signal啊、open/close啊这套东西),再加上一套合适的交叉编译器(就是大名鼎鼎的GCC了),就有了在Windows上模拟运行*nix软件的基础。
    • Cygwin本身也包含了很多常用的自由软件,包括核心的bash、coreutils、findutils等,配合Cygwin/X这个东西,甚至可以直接运行许多X Windows上的软件,包括Emacs,gvim等等。
  • How:1
  • Pros:傻瓜式安装;可以和host文件系统方便互通。
  • Cons:没有类似于apt-get这种杀手级的软件包管理工具,安装一些额外的软件颇费周折,而且官方软件库更新较慢。
  • 可用性:3星。

    • 很多以linux为推荐运行平台的软件也支持在Cygwin上开发测试,比如hadoop
  • 结论:如果只是看看Linux的命令行长什么样子,那么本文看到这里就可以了。

2 SUA

  • What:SUA是Windows的一个subsystem,提供一些基本的POSIX API,在此基础上提供一些简单的*nix程序,诸如vi、ksh、csh、ls、cat等。
  • How:@see 这里
  • Pros:SUA是微软自家的东西。
  • Cons:除了Pros之外都是缺点。

    • 软件稀少,版本低无法扩展是致命伤。我只用过一次就甩了。
  • 可用性:1星,玩具而已,未见日常使用
  • 结论:了解即可

3 虚拟机

  • What:虚拟机大概是最常用也最方便的方式了吧,虽然虚拟机本身的水非常深。我第一次接触虚拟机的概念还是在大一上,那个时候自己还在熟悉怎样更好更快地安装Windows操作系统,Virtual PC自然而然就成了我的好伙伴,而我也为能在Virtual PC下顺利安装一个MS DOS 7.1感到欣喜不已。后来接触到了VMware,它有两个显著的特性,一大特性是强,另一大特性就是卡。VirtualBox是我的最爱,轻量快速,乃居家旅行杀人越货必备良品。
  • How:准备10G硬盘空间就OK。

    • VirtualBox有一些非常给力的特性:

  • Pros:虚拟机能够给你100%原生的Linux观感和体验,而且使用过程中无毒无害,更不用担心将系统不小心搞挂,配合上VirtualBox的文件共享功能和全屏功能,再加上一个稍微给力点的电脑2,有时候能够达到以假乱真的效果
  • Cons:性能上还是有些损失的;除了VMware,其余虚拟机软件好像没有特别方便的方法支持bridge network,有时候很不方便。
  • 可用性:4星
  • 结论:VirtualBox乃居家旅行杀人越货必备良品。

4 Colinux

  • What:Cooperative Linux, abbreviated as coLinux, is software which allows Microsoft Windows and the Linux kernel to run simultaneously in parallel on the same machine. 简单而言,coLinux和VirtualBox这类虚拟软件最大的区别在于,coLinux运行的linux系统是何Windows宿主系统共享系统资源的3,因此其性能对比VirtualBox这类虚拟机软件要好很多。
  • How:coLinux本身的安装还是要非一番周折的。幸运的是,万能的社区提供了两个打包好的一键安装方案,那就是andLinuxTopologilinux。我只用过andLinux,推荐。

    • coLinux可以通过samba和windows系统共享文件。
    • 可以将coLinux做成随系统启动的一个服务,并且在coLinux里面开始sshd进行,之后用putty这类软件连接ssh,就可以全面享受linux命令行运指如飞的畅快了。
    • 如果你以前没有用过apt-get这个程序,这次不要错过,因为集中化的软件管理机制是linux(debian/ubuntu的apt-get)的杀手级特性,也是我的最爱。
  • Pros:除了Cons都是Pros。
  • Cons:None。
  • 可用性:5星。
  • 结论:这是我大三暑假在华数淘宝实习时跟一位高手偷师过来的,最爱,强烈推荐。

5 其余解决方案

除了以上谈到的,KDE for Windows是在Windows上体验KDE桌面环境的一种可行的方案,虽然其目前bug依然多多;如果你玩腻了以上所有,想装个真家伙,又怕手生一不小心误删重要文件,那么Ubuntu Wubi应该是一个不错的解决方案。如果你已经开始讨厌Ubuntu Wubi了,那么恭喜你,你已经成功地被我忽悠,进入*nix的精彩世界,just enjoy it。

Footnotes:

1 什么?你不会问我Cygwin要怎么安装吧?

2 不够2G内存的同志赶紧去花钱加内存吧,当然,有双屏更好。

3 coLinux运行的linux系统需要对内核进行特殊的修改。当然,关于这种修改本身和coLinux背后的原理已经远远超出了本文讨论的内容和本人的技术水平,还请高手不吝赐教。

Resize VirtualBox VDI file

在天朝做一个Linuxer是一件很辛苦的事情,众多所谓的programmer整天捧着万年不变的WinXP和IE6,嘴里念叨着ASP、.NET圣经,以为自己脑门里想的眼睛里看到的就是整个天空。

所以VirtualBox依旧Linuxer一件必备的武器,不时地拿出来应付一下所谓“老板的文档”、“学校的教务系统”啊,等等诸如此类。前两天收拾公司新配的thinkpad x220i的时候,本来打算装双系统,可是不知怎么的,XP莫名其妙的启动蓝屏。一怒之下格了整个系统,重装了ArchLinux。装的过程一波三折,主要是x220i的硬件驱动问题,非常头痛,日后开一篇文章再叙。

VirtualBox的虚拟XP最初设定硬盘大小为10G,最近已经占到了9G的使用率,急需扩容。网搜共找到两种方法,一种是利用GParted拷贝硬盘的方法,比较麻烦,但是更为通用;另一种是VirtualBox 4.x新加的一条命令,非常简单:

VBoxManage modifyhd winxp.vdi --resize 50000

但是这样调整后,VirtualBox已经可以识别出硬盘调整后的容量大小(50G),而虚拟的XP系统C盘依然显示调整之前的容量。无碍,再去下载一个Windows分区软件EASEUS Partition Master Home Edition V8.0.1,在里面会有调整C盘分区的操作,该操作会把剩余没有识别出来的40G的unallocated的空间合并到C盘里面。

剩下需要解决的是虚拟XP的网银问题,不过我对此不抱什么希望。试试看吧。顺便吐嘈一句,早晨等公交等了40分钟,晚上等到同一辆公交,可是公交开了一站就抛锚了,换车的过程中钱包丢了,点背到家了。

ubuntu virtualbox XP 使用adb受限问题

前提条件:

ubuntu 在vbox XP下使用adb shell

问题说明:

  C:\Documents and Settings\Administrator>adb devices
	List of devices attached
	MSM8225I370     device
	
	C:\Documents and Settings\Administrator>adb shell

error: protocol fault (status 72 6f 6f 74?!)

原因在于:

virtualbox XP 设置时,USB设备 启用USB2.0 EHCI控制器.如果启用了该选项就会导致adb shell无法启动,偶尔会导致 QTSP中无法烧写model侧img

Mac OS X遭遇记

3月1号回到玉泉,处理了许多杂事,找导师沟通了下毕业设计的问题。沟通的最终结果就是我又被发配到了手机客户端组,继续做GUI控件。事实上我最开始选的题目是《海量空间数据的高性能引擎研究》,我还是挺喜欢这个方向的,而且与我在Baidu的实习以及日后的工作都有很大的关联性。但是导师一句“题目较难,时间不够”就把我噎了回来,紧接着来一句“我还是希望你能够做一些连续性的工作”——就是去年四月份实验室做的<a href="http://cnlox.is-programmer.com/posts/17595.html" target="_blank">Windows Mobile控件开发</a>了。其实我是非常不喜欢这个项目的。对于一个崇尚自由、分享的Open Source Programmer来说,用着盗版的Windows+VS,盗用Open Source的成果来开发闭源软件,实实在在是一件不怎么惬意的事情——老实说我也算不上合格的Open Source Programmer,因为我至今也没有自己的Open Source软件。其次是我越来越讨厌关于Windows的一切,无论是作为一个User还是Programmer。我最近正计划着写一系列的Windows吐嘈文,构思良久,即将面世。


只不过这次不同,我所面对的不再是Windows Mobile,而是——iOS。


How?这是我脑子里最先冒出的想法——How to write an Win32-Styled GUI program under Windows(or maybe Linux) platform for iOS?我战战兢兢地问了下学长“实验室有苹果机吗?”,答曰“没有,用虚拟机”。


Oh,my god。在Windows平台上运行着虚拟机,在虚拟机里面运行着Mac OS X,在Mac OS X里面运行Xcode,在Xcode写Win32-Styled Program,然后将这个Win32-Styled的Program Load到虚拟机里面的Mac OS X里面的Xcode IDE里面的iOS模拟器上,调试!!!


What a Joke!


不过,吐槽归吐槽,活儿还是要干。鉴于前两次<a href="http://www.hackintosh.com/" target="_blank">Hacintosh</a>的惨痛经历,所以这才在也不敢在自己精心调制好的ThinkPad x201i上为所欲为,还是乖乖的虚拟机的好。幸好前两天买了根三星金条,武装到了4G内存,否则还真不敢想象在虚拟机里面玩Leopard。


高级的虚拟机咱不懂,所以诸如<a href="http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine" target="_blank">KVM</a>,<a href="http://www.xen.org/" target="_blank">Xen</a>就不在考虑之列了。剩下的,最开始接触电脑时玩的<a href="http://www.microsoft.com/windows/virtual-pc/" target="_blank">Microsoft Virtual PC</a>,不知道现在活的怎么样。VMware,大概是三年前用过,印象就是臃肿,慢。VirtualBox,我的最爱,开源、免费、跨平台、轻量快捷。所以VirtualBox是试验的首选环境。


不过Mac平台的封闭性带来一个众人皆知的事实,那就是Hacintosh的成功性与人品——也无关,我的意思是说,Hacintosh的成功与否完全是莫名其妙的事情,无论是虚拟机还是实体机,能否Hacintosh,要看上帝的心情。


Hacintosh的版本有很多,比如东皇、iATKOS、iDeneb、OSXPCBETA等等,boot loader也有若干种方案,比如变色龙、EFI Emulation等等,个中详细可以参考<a href="http://en.wikipedia.org/wiki/OSx86" target="_blank">OSx86</a>。而由这些基本“元件”排列组合出来的网上作为“PC变Mac”的方案更是五花八门,让人目不暇接。照理说,对各种硬件的良好支持是一个OS安身立命的最基本条件,至于Mac如何在违背这个基本原则下打拼出自己的逍遥天地,容我另外一篇文章再做分析。


好了,回到正题,继续我的Mac OS X遭遇记。我按照<a href="http://blog.zhaojie.me/2010/09/how-to-install-mac-os-x-snow-leopard-on-virtualbox.html" target="_blank">老赵点滴</a>上的指示在我的ArchLinux+VirtualBox 4.0上做实验,前面都是很顺利的,也出现了下面的Kernel panic情况:


<img alt="mac in virtualbox: kernel panic" src="/user_files/cnlox/Image/mac/mac_vbox5.png" style="width: 640px; height: 400px;">


按照教程,重启之后就可以进入期盼的Leopard,可是我却陷入了无限的灰色风火轮等待中。重整多番,调整了多组参数,均以失败告终。


于是转投<a href="http://www.vmware.com/" target="_blank">VMware</a>,我按照VMware的要求,下载了300+M的VMware7.1的bundle,按照<a href="https://wiki.archlinux.org/index.php/VMware" target="_blank">ArchWiki</a>上的步骤,成功装上了VMware,但是确始终启动不起来。无奈,转投Windows吧。之所以坚持Linux,是因为我需要LaTeX,我需要Emacs+Auctex+cdlatex+outline-mode来完成我的毕业论文啊。


好在Windows下的VMware还算正常,安装过程也算顺利,我就不在细说了。具体过程可以参考《<a href="http://blog.csdn.net/zhanglei5415/archive/2010/12/22/6091717.aspx" target="_blank">VMWare下安装MAC OS X Snow Leopard 10.6</a>》,需要注意的主要是:
  • 安装之前用securAble检测下CPU是否支持虚拟化;
  • 内存至少1G,最好主机配上4G内存,而VMware配上2G内存,否则慢起来很要命,如果搞开发,硬盘最好20G以上;
  • 注意修改VMware目录下的.vmx下的guestOS由guestOS = “freebsd-64″改为guestOS = “darwin10″;
  • 启动时始终需要darwin.iso来引导;
  • 成功安装系统后安装darwin.iso里面的vmtools,获得更好地使用体验;
放张图吧:


<img alt="vmware mac os x" src="/user_files/cnlox/Image/mac/vmware_mac.png" style="width: 640px; height: 400px;">


顺便感叹下,VMware的虚拟化技术还真是强大,2G虚拟内存跑Mac OS X,速度还真是不赖,界面效果也都能跑的出来。如果再弄个分屏软件,再插上一个LCD的液晶屏,就真是两个系统了。


至于Xcode和iOS SDK的安装就简单很多了,可能需要做一次系统升级。至于iOS上如何写Win32-Style的GUI程序,我现在也是丈二的和尚。至于额外的Macintosh吐槽文,还是等以后心情不错的时候再写吧。

Installing Virtualbox On Ubuntu Server 14.04

For some reasons, my computer just only installed Ubuntu Server 14.04 system.
But sometimes I need to use Windows system to test our project, so I think if I can install virtualbox on the Ubuntu Server,
and then manage the virtualbox by website.

How to do that?

Install Virtualbox

First we go to the website,
and download the latest verion(5.0.2) of Virtualbox:

wget http://download.virtualbox.org/virtualbox/5.0.2/virtualbox-5.0_5.0.2-102096~Ubuntu~trusty_amd64.deb
wget http://download.virtualbox.org/virtualbox/5.0.2/Oracle_VM_VirtualBox_Extension_Pack-5.0.2-102096.vbox-extpack

Install:

sudo dpkg -i virtualbox-5.0_5.0.2-102096\~Ubuntu\~trusty_amd64.deb
sudo apt-get install -f # install dependency
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.2-102096.vbox-extpack

Add vbox user

Because we want to use the web service that Virtualbox provide, we need to create a new user and set the password of the user:

sudo useradd -m -G vboxusers vbox
sudo passwd vbox

Install web server

Install apache, PHP and Other components:

sudo apt-get install apache2 php5 libapache2-mod-php5 php-soap

Install phpvirtualbox

Phpvirtualbox is an open source project that is a web-based front-end to VirtualBox written in PHP.
We use it to manage our Virtualbox, download the latest verion(5.0.2):

wget http://downloads.sourceforge.net/project/phpvirtualbox/phpvirtualbox-5.0-2.zip -O phpvirtualbox.zip

Unzip the package and move to the root dir:

unzip phpvirtualbox.zip
sudo mv phpvirtualbox-5.0-2 /var/www/html/vbox

Setup the config file, make $username and $password match the user we created earlier:

sudo mv /var/www/html/vbox/config.php-example /var/www/html/vbox/config.php
sudo vi /var/www/html/vbox/config.php

Config Virtualbox webservice

Add VBOXWEB_USER=vbox to file:

sudo vi /etc/default/virtualbox

Start the service:

sudo /etc/init.d/vboxweb-service start

Done

Now we can open bowser and go to http://server/vbox and login with username admin and password admin (you can change it when login into phpvirtualbox).

We can see the view is so familiar, that’s it.

在 VirtualBox 安装 Dynamics CRM 与必要的环境设定

Dynamics CRM 安装之前,必须要先满足环境需求,包括:

  1. 安装 Windows Server 2012R2
  2. 设定 AD
  3. 建立 Dynamics CRM 需要的 OU 与报表服务的 AD 使用者帐号
  4. 安装 SQL Server 2014,不支援 SQL Server Express
  5. 指定报表服务使用者帐号

另外,Mac OSX 上仅支援 Safari,FireFox 与 Chrome 都只会显示 Mobile 版本,我还没成功地试出一般版本网页。

详细说明:Install Microsoft Dynamics CRM on VirtualBox From Scratch