基本元素

文章类型——最基本的内容

    \documentclass{article}
    \begin{document}
    Hello, world!
    \end{document}

作者、标题、日期——制作标题页

    \title{hello,world!}
    \author{frank weapon}
    \date{\today}
    \begin{document}
    \maketitle
    hello,world!
    \end{document}

章节、段落——组织文章内容

    \begin{document}
    \maketitle
    \section{hello programming language}
    \subsection{hello java}
    \paragraph{java} is a OO language
    \paragraph{java} is a powerful language
    \subsubsection{hello spring}
    \subsubsection{hello struts}
    \subsection{hello ruby}
    \end{document}

目录——整理章节标题

    \begin{document}
    \maketitle
    \tableofcontents
    ...
    \end{document}

版面设置

页边距——利用好页面

    \documentclass{article}
    \usepackage{geometry}
    \geometry{papersize={20cm,15cm}}
    \geometry{left=1cm,right=2cm,top=3cm,bottom=4cm}
    \begin{document}
    Hello, world!
    \end{document}

页眉、页脚——有地方显示页标、作者、日期

    \documentclass{article}
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    \lhead{head left}
    \chead{head center}
    \rhead{head right}
    \lfoot{}
    \cfoot{\thepage}
    \rfoot{}
    \begin{document}
    Hello, world!
    \end{document}

间距——合理调整页面

    %paragraph indentation
    \setlength{\parindent}{4em}
    %paragraph spacing
    \setlength{\parskip}{1em}
    %Line spacing
    \renewcommand{\baselinestretch}{1.5}

插入内容

插入图片——自动编号你的图例

    \begin{figure}[h]
      \centering
      \includegraphics[width=0.8\textwidth]{figure/fig1}
      \caption{demo figure}
      \label{figure demo}
    \end{figure}

插入表格——用代码画出表格

    \begin{table}[h]
    \begin{center}
    \caption{demo table}
    \label{table demo}
    \begin{tabular}{| l | l | l |}
    \hline
    00 & 01 & 02\\
    \hline
    10 & 11 & 12\\
    \hline
    20 & 21 & 22\\
    \hline
    \end{tabular}
    \end{center}
    \end{table}

插入列表——格式化你的内容

    \begin{itemize}
    \item one demo item
    \item another demo item
    \end{itemize}

插入公式——编辑复杂的数学内容

    \documentclass{article}
    \usepackage{amsmath}
    \begin{document}
    Hello, Math !
    $...$ % inline
    \[ .. \] % between two lines
    \begin{equation} % numbered equation between lines\end{equation}
    \end{document}

Why Spacemacs

Compare to Emacs?

Spacemacs作为Emacs的一个扩展,Spacemacs相对于其他的Emacs配置来说,文档的详细程度绝对完胜其他配置。从头开始折腾Emacs是不太明智的行为,而采用各路大神的配置又会有些摸不清头脑不知道如何入手。 这时候,Spacemacs详细的文档和清晰的分层可以作为想转向Emacs的人入门非常好的版本。

Compare to Vim?

Spacemacs最突出的特点就是与Vim极高的相似性,以空格键作为leader键,甚至文档中专门为有兴趣转入Emacs的Vim党提供了专门的内容。安装过程中选择Vim布局,可以完全采用Vim的编辑方式享受Emacs的各种优势。

Compaire to other IDE?

如果写Java,目前可能没有工具能超过Intellij Idea,但是做轻量级一些的编码工作,一个庞大的IDE可能有些太过重量级。而且Emacs高度的可扩展性给了Geek们无限的空间,其写文档、Latex的能力也是其他IDE不能相比的。

Spacemacs introduction

官网

Spacemacs.org

项目结构

Spacemacs 以layer来进行功能的分割,通过.spacemacs文件来进行配置管理,具体内容在仍然在.emacs.d目录下。某个layer的具体配置可以到layer目录下查看文档。

目录结构

  • assets: 图标等内容,不需要关注。
  • core: Spacemacs 配置的核心内容,最好不要修改其内容。
  • doc: Spacemacs 的各类相关文档。
  • layers: 其他开发者贡献的代码,用于扩展Spacemacs
  • private: 本地个人目录,用于存放自己写的一些EL和keybinding等
  • tests: 测试目录,不需要关注。

Using spacemacs

安装(Mac OS X)

  • 安装Emacs24.4以上的版本

    brew tap railwaycat/homebrew-emacsmacport
    brew install emacs-mac --with-spacemacs-icon
    brew linkapps
    
  • 下载配置文件

    git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
    
  • 以非安全模式启动emacs以保证成功下载插件

    emacs --insecure
    
  • 选择编辑模式、待安装完成后重启

配置.spacemacs

  • 打开 ~.spacemacs
  • 在layers中打开需要用的注释掉的layer,并添加osx以使emacs能正常使用Max OS x的快捷键。
  • 最下面 (defun dotspacemacs/user-config () 中添加自己的配置。(若配置有明显分类,应参考官方文档创建自己的layer并进行引用管理)
  • SPC f e R 刷新配置

开始使用

  • 与Emacs不同,采用SPC作为Leader键可以减少很多组合型快捷键的使用,在Normal Mode(Vim基本常识)中按下空格键会有大量功能键提示,多看文档多尝试。

    b buffer
    f file
    w window
    m mode
    s search
    h help
    c comment/compile
    p project
    l layout
  • 通过查看layout的文档、根据个人需求定制自己的Emacs

controller

注意事项

  • 安装好组件后使用API执行命令可能会报错Server Internal Error 500。 这多数是由于数据库服务配置不正确导致的。 请检查上一节中提到的数据库安装
  • 控制节点的Endpoint可能会由于不正当操作导致异常, 这时其他节点相关服务的日志中会有关于地址解析的日志记录。 可以直接进入数据库相关服务查看endpoints表,若发现其中有localhost.localdomain相关内容可试着改为controller。

Identity Service

  • 依照官方提供的安装过程并未出现问题
  • 请注意安装过程中的几个概念
    1. Project:一个Project中有自己的quotas(配额,包括该项目中有多少资源权限,可以创建多少虚拟机等)
    2. User:可以属于一个或多个Project,包含用户名密码,作为个人登录的凭证。
    3. Role:定义了一组操作的权限集合,可赋予User。

Image Service

  • 执行镜像创建语句

    glance image-create --name "cirros-0.3.4-x86_64" --file /tmp/images/ cirros-0.3.4-x86_64-disk.img   --disk-format qcow2 --container-format bare --visibility public --progress
    

    可能出现Bad Argument错误,搜索相关问题可能会找到关于Endpoint API版本的问题,而实际上问题可能不在这里。 我曾遇到这个问题始终找不到原因所在, 而重装后问题消失。 所以这个问题八成是配置文件的错误引起的,请仔细检查或重装该节点。

  • 这里的镜像是不带GUI的,测试环境足够了。关于创建带有GUI的镜像在以后的章节中介绍。

Compute Service

  • 控制节点上安装完Compute节点是没有验证的,在配置完计算节点后进行验证操作。

    nova service-list
    

    结果应至少包含以下几个:

    Binary Host Zone Status State
    nova-conductor controller internal enabled up
    nova-cert controller internal enabled up
    nova-scheduler controller internal enabled up
    nova-consoleauth controller internal enabled up
    nova-compute compute1 nova enabled up

    可能包含其他项(应该是不启动状态),但这几项一定要正常。若有问题请检查控制、计算节点的NTP服务和消息队列日志。

  • 执行Endpoint验证操作

    nova endpoints
    

    结果可能包含Warning,不影响使用。

Network Service

  • 控制节点上的网络组件比较简单,保证验证结果包含文档中给出的内容即可。

DashBoard

  • Dashboard需要用到Apache,请确保其正确性。
  • 安装后可能出现404,400错误。这种错误一般是由于配置不正确导致的,找不出错误的话重新安装。
  • 登陆session超时之后就没法再登陆了(至少在FireFox上如此),没有详细错误信息,只提示请联系管理员。 这时候需要清理保存的session和cookie,重新打开主页即可。
  • 安装完Dashboard之后很多操作就可以不用命令去执行了,要熟悉其功能。

network

除基础环境外,网络节点只配置了Network Service

组件介绍

  • Modular Layer 2 (ML2) plug-in 为实例提供虚拟网络的建立
  • Layer-3 (L3) agent 为实例提供路由服务
  • DHCP agent 在虚拟网络使用动态地址分配
  • metadata agent 为实例提供配置信息,比如身份验证等

Network Service

  • 4个组件有四个配置文件,同时还要将ml2的相关内容添加到neutron.conf中。 要确保这5个文件的正确性,分别查看日志排除错误信息。
  • 这里需要一个网桥,ex-br与enp2s12(之前没设置IP地址的网卡)绑定,在创建网络之后所有的虚拟机都将由这条通路出去。

创建网络

  • 需要一些基本的网络概念,IP地址、子网掩码、子网划分。
  • 内部图解 网络节点内部
  • External network
    1. 外部网络设置时的IP浮动范围,子网掩码等取决于enp2s12网卡的网络环境。
    2. 范围内的地址可作为租户网络的网关,绑定给租户路由,为实例提供网络访问。
    3. 范围内的地址可申请并绑定给某实例,这时该实例可以由ssh或windows远程桌面访问到。其可见性与enp2s12网段相同, 即若外部网络浮动范围内的IP地址为公网地址,则所有人都可以访问;若为内网地址则内网同一网段的人可以访问。
  • Tenant network
    1. 租户网络不唯一,可将虚拟机分配到不同的网络下方便管理。
    2. 每一个租户网络要对应一个租户路由,该路由器要绑定一个外部网络的IP地址作为网关,使该租户网络可获得网络连接。
    3. 分配给租户网络的虚拟机将由DHCP agent分配到一个该租户网络下的IP地址。

compute

计算节点配置基础环境后只需要安装计算和网络组件

Compute Service

  • 在配置完后访问

    http://controller:6080/vnc_auto.html

    可能会报错could not connect to server (1006)。 这里可以先不解决,在*网络节点配置完成后,访问实例*仍然报错的话,在确保网络通畅的情况下清除iptables表项即可。

    1. 在控制节点上执行

      tcpdump -nni eno1 port 5900
      
    2. 使用浏览器访问,应该在能看到相关输出,若没有请检查网络。
    3. 在计算节点上执行

      iptables -F
      
    4. 这时应该正常了
    5. 参考内容 https://ask.openstack.org/en/question/46158/vnc-console-failed-to-connect-to-server-code-1006/
  • 计算节点要保证硬件支持虚拟化,在BIOS中CPU的BIOS CPU virtualization 要启用。

Network Service

  • 计算节点只安装了openvswitch服务(ML2),提供了实例的虚拟网络建立。